Fix linting issues

1930-first-upload-in-a-batch-always-fails
wvffle 2022-11-27 12:15:43 +00:00 zatwierdzone przez Kasper Seweryn
rodzic 14c784e06d
commit fea7493725
48 zmienionych plików z 101161 dodań i 101227 usunięć

13
.vscode/settings.json vendored
Wyświetl plik

@ -2,20 +2,13 @@
"python.defaultInterpreterPath": "/workspace/funkwhale/api/.venv/bin/python", "python.defaultInterpreterPath": "/workspace/funkwhale/api/.venv/bin/python",
"python.testing.cwd": "/workspace/funkwhale/api", "python.testing.cwd": "/workspace/funkwhale/api",
"python.envFile": "/workspace/funkwhale/.gitpod/.env", "python.envFile": "/workspace/funkwhale/.gitpod/.env",
"python.testing.pytestArgs": [ "python.testing.pytestArgs": ["--cov=funkwhale_api", "tests/"],
"--cov=funkwhale_api",
"tests/"
],
"python.testing.unittestEnabled": false, "python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true, "python.testing.pytestEnabled": true,
"vitest.enable": true, "vitest.enable": true,
"vitest.commandLine": "yarn vitest", "vitest.commandLine": "yarn vitest",
"i18n-ally.localesPaths": [ "i18n-ally.localesPaths": ["front/src/locales"],
"front/src/locales"
],
"i18n-ally.pathMatcher": "*.json", "i18n-ally.pathMatcher": "*.json",
"i18n-ally.enabledFrameworks": [ "i18n-ally.enabledFrameworks": ["vue"],
"vue"
],
"i18n-ally.keystyle": "nested" "i18n-ally.keystyle": "nested"
} }

Wyświetl plik

@ -1,3 +1,11 @@
<i18n>
{
"en": {
"00:00": "00:00"
}
}
</i18n>
<script setup lang="ts"> <script setup lang="ts">
import type { QueueItemSource } from '~/types' import type { QueueItemSource } from '~/types'
@ -56,7 +64,7 @@ const store = useStore()
const labels = computed(() => ({ const labels = computed(() => ({
queue: t('components.Queue.label.queue'), queue: t('components.Queue.label.queue'),
populating: t('components.Queue.queue.label.populatingRadio'), populating: t('components.Queue.label.populatingRadio'),
duration: t('components.Queue.label.duration'), duration: t('components.Queue.label.duration'),
addArtistContentFilter: t('components.Queue.label.addArtistContentFilter'), addArtistContentFilter: t('components.Queue.label.addArtistContentFilter'),
restart: t('components.Queue.label.restart'), restart: t('components.Queue.label.restart'),
@ -129,8 +137,7 @@ const queueItems = computed(() => queue.value.map((track, index) => ({
remove: t('components.Queue.label.remove'), remove: t('components.Queue.label.remove'),
selectTrack: t('components.Queue.label.selectTrack'), selectTrack: t('components.Queue.label.selectTrack'),
favorite: t('components.Queue.label.favorite') favorite: t('components.Queue.label.favorite')
}, }
duration: time.durationFormatted(track.uploads[0]?.duration ?? 0) ?? ''
}) as QueueItemSource)) }) as QueueItemSource))
const reorderTracks = async (from: number, to: number) => { const reorderTracks = async (from: number, to: number) => {
@ -261,7 +268,11 @@ const coverType = useStorage('queue:cover-type', CoverType.COVER_ART)
@click="loadRandomPreset()" @click="loadRandomPreset()"
> >
<h1>{{ currentTrack.title }}</h1> <h1>{{ currentTrack.title }}</h1>
<h2>{{ currentTrack.artistName }} &mdash; {{ currentTrack.albumTitle }}</h2> <h2>
{{ currentTrack.artistName }}
<span class="symbol hyphen middle" />
{{ currentTrack.albumTitle }}
</h2>
</div> </div>
</Transition> </Transition>
</div> </div>
@ -313,14 +324,10 @@ const coverType = useStorage('queue:cover-type', CoverType.COVER_ART)
class="ui small warning message" class="ui small warning message"
> >
<h3 class="header"> <h3 class="header">
<translate translate-context="Sidebar/Player/No sources"> {{ $t('components.Queue.header.noSources') }}
The track has no available sources
</translate>
</h3> </h3>
<p v-if="hasNext && isPlaying"> <p v-if="hasNext && isPlaying">
<translate translate-context="Sidebar/Player/Error message.Paragraph"> {{ $t('components.Queue.message.automaticPlay') }}
The next track will play automatically in a few seconds
</translate>
<i class="loading spinner icon" /> <i class="loading spinner icon" />
</p> </p>
</div> </div>
@ -388,8 +395,8 @@ const coverType = useStorage('queue:cover-type', CoverType.COVER_ART)
<span class="right floated timer total">{{ time.parse(Math.round(duration)) }}</span> <span class="right floated timer total">{{ time.parse(Math.round(duration)) }}</span>
</template> </template>
<template v-else> <template v-else>
<span class="left floated timer">{{ durationFormatted(0) }}</span> <span class="left floated timer">{{ $t('components.Queue.meta.startTime') }}</span>
<span class="right floated timer">{{ durationFormatted(0) }}</span> <span class="right floated timer">{{ $t('components.Queue.meta.startTime') }}</span>
</template> </template>
</div> </div>
</div> </div>
@ -470,7 +477,7 @@ const coverType = useStorage('queue:cover-type', CoverType.COVER_ART)
class="ui basic primary button" class="ui basic primary button"
@click="$store.dispatch('radios/stop')" @click="$store.dispatch('radios/stop')"
> >
{{ $t('components.Queue.stopRadio') }} {{ $t('components.Queue.button.stopRadio') }}
</button> </button>
</div> </div>
</div> </div>

Wyświetl plik

@ -104,7 +104,7 @@ const moderationNotifications = computed(() =>
const showLanguageModal = ref(false) const showLanguageModal = ref(false)
const locale = ref(i18nLocale.value) const locale = ref(i18nLocale.value)
watch(locale, (locale) => { watch(locale, (locale) => {
// setI18nLanguage(locale) setI18nLanguage(locale)
}) })
const isProduction = import.meta.env.PROD const isProduction = import.meta.env.PROD

Wyświetl plik

@ -44,7 +44,7 @@ const toggle = () => {
<span v-else-if="isPending"> <span v-else-if="isPending">
{{ $t('components.audio.LibraryFollowButton.button.cancel') }} {{ $t('components.audio.LibraryFollowButton.button.cancel') }}
</span> </span>
<spanv-else> <span v-else>
{{ $t('components.audio.LibraryFollowButton.button.follow') }} {{ $t('components.audio.LibraryFollowButton.button.follow') }}
</span> </span>
</button> </button>

Wyświetl plik

@ -103,10 +103,10 @@ initializeFirstTrack()
const loopingTitle = computed(() => { const loopingTitle = computed(() => {
const mode = looping.value const mode = looping.value
return mode === LoopingMode.None return mode === LoopingMode.None
? t('components.audio.Player.label.loopingDisabledLabel') ? t('components.audio.Player.label.loopingDisabled')
: mode === LoopingMode.LoopTrack : mode === LoopingMode.LoopTrack
? t('components.audio.Player.label.loopingSingleLabel') ? t('components.audio.Player.label.loopingSingle')
: t('components.audio.Player.label.loopingWholeQueueLabel') : t('components.audio.Player.label.loopingWholeQueue')
}) })
const hideArtist = () => { const hideArtist = () => {
@ -276,8 +276,14 @@ const hideArtist = () => {
v-if="looping !== LoopingMode.None" v-if="looping !== LoopingMode.None"
class="ui circular tiny vibrant label" class="ui circular tiny vibrant label"
> >
<template v-if="looping === LoopingMode.LoopTrack">1</template> <span
<span v-else-if="looping === LoopingMode.LoopQueue" class="infinity symbol" /> v-if="looping === LoopingMode.LoopTrack"
class="symbol single"
/>
<span
v-else-if="looping === LoopingMode.LoopQueue"
class="infinity symbol"
/>
</span> </span>
</i> </i>
</button> </button>

Wyświetl plik

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { useGettext } from 'vue3-gettext' import { useI18n } from 'vue-i18n'
import { computed } from 'vue' import { computed } from 'vue'
import { usePlayer } from '~/composables/audio/player' import { usePlayer } from '~/composables/audio/player'
@ -8,12 +8,12 @@ import { useQueue } from '~/composables/audio/queue'
const { hasPrevious, playPrevious, hasNext, playNext, currentTrack } = useQueue() const { hasPrevious, playPrevious, hasNext, playNext, currentTrack } = useQueue()
const { isPlaying } = usePlayer() const { isPlaying } = usePlayer()
const { $pgettext } = useGettext() const { t } = useI18n()
const labels = computed(() => ({ const labels = computed(() => ({
previous: $pgettext('Sidebar/Player/Icon.Tooltip', 'Previous track'), previous: t('components.audio.PlayerControls.labels.previous'),
play: $pgettext('Sidebar/Player/Icon.Tooltip/Verb', 'Play'), play: t('components.audio.PlayerControls.labels.play'),
pause: $pgettext('Sidebar/Player/Icon.Tooltip/Verb', 'Pause'), pause: t('components.audio.PlayerControls.labels.pause'),
next: $pgettext('Sidebar/Player/Icon.Tooltip', 'Next track') next: t('components.audio.PlayerControls.labels.next')
})) }))
</script> </script>

Wyświetl plik

@ -116,7 +116,7 @@ const actionsButtonLabel = computed(() => t('components.audio.podcast.MobileRow.
class="really discrete" class="really discrete"
:date="track.creation_date" :date="track.creation_date"
/> />
<span class="nospace middledot symbol" /> <span class="middledot symbol" />
<human-duration <human-duration
v-if="track.uploads[0] && track.uploads[0].duration" v-if="track.uploads[0] && track.uploads[0].duration"
:duration="track.uploads[0].duration" :duration="track.uploads[0].duration"
@ -127,7 +127,7 @@ const actionsButtonLabel = computed(() => t('components.audio.podcast.MobileRow.
class="track-meta mobile" class="track-meta mobile"
> >
{{ track.artist?.name }} {{ track.artist?.name }}
<span class="nospace middledot symbol" /> <span class="middledot symbol" />
<human-duration <human-duration
v-if="track.uploads[0] && track.uploads[0].duration" v-if="track.uploads[0] && track.uploads[0].duration"
:duration="track.uploads[0].duration" :duration="track.uploads[0].duration"

Wyświetl plik

@ -58,7 +58,7 @@ const created = (application: Application) => {
{{ $t('components.auth.ApplicationNew.link.settings') }} {{ $t('components.auth.ApplicationNew.link.settings') }}
</router-link> </router-link>
<h2 class="ui header"> <h2 class="ui header">
{{ title }} {{ labels.title }}
</h2> </h2>
<application-form <application-form
:defaults="defaults" :defaults="defaults"

Wyświetl plik

@ -725,7 +725,7 @@ fetchOwnedApps()
{{ $t('components.auth.Settings.description.changeEmail') }} {{ $t('components.auth.Settings.description.changeEmail') }}
</p> </p>
<p> <p>
{{ $t('components.auth.Settings.message.currentEmail', { email: email }) }} {{ $t('components.auth.Settings.message.currentEmail', { email: $store.state.auth.profile?.email }) }}
</p> </p>
<form <form
class="ui form" class="ui form"

Wyświetl plik

@ -2,10 +2,13 @@
import SemanticModal from '~/components/semantic/Modal.vue' import SemanticModal from '~/components/semantic/Modal.vue'
import useThemeList from '~/composables/useThemeList' import useThemeList from '~/composables/useThemeList'
import useTheme from '~/composables/useTheme' import useTheme from '~/composables/useTheme'
import { useVModel } from '@vueuse/core' import { useVModel } from '@vueuse/core'
import { computed } from 'vue' import { computed } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { SUPPORTED_LOCALES } from '~/init/locale'
interface Events { interface Events {
(e: 'update:show', value: boolean): void (e: 'update:show', value: boolean): void
(e: 'showLanguageModalEvent'): void (e: 'showLanguageModalEvent'): void
@ -94,7 +97,7 @@ const labels = computed(() => ({
<span class="left colon symbol" /> <span class="left colon symbol" />
</span> </span>
<div class="right floated"> <div class="right floated">
<span class="user-modal list-item">{{ $language.available[$language.current] }}</span> <span class="user-modal list-item">{{ SUPPORTED_LOCALES[$i18n.locale] }}</span>
<i class="action-hint chevron right icon" /> <i class="action-hint chevron right icon" />
</div> </div>
</div> </div>

Wyświetl plik

@ -306,7 +306,7 @@ useEventListener(window, 'beforeunload', (event) => {
class="ui warning label" class="ui warning label"
> >
{{ uploadedFilesCount + erroredFilesCount }} {{ uploadedFilesCount + erroredFilesCount }}
<span class="nospace slash symbol" /> <span class="slash symbol" />
{{ files.length }} {{ files.length }}
</div> </div>
<div <div
@ -314,7 +314,7 @@ useEventListener(window, 'beforeunload', (event) => {
:class="['ui', {'success': erroredFilesCount === 0}, {'danger': erroredFilesCount > 0}, 'label']" :class="['ui', {'success': erroredFilesCount === 0}, {'danger': erroredFilesCount > 0}, 'label']"
> >
{{ uploadedFilesCount + erroredFilesCount }} {{ uploadedFilesCount + erroredFilesCount }}
<span class="nospace slash symbol" /> <span class="slash symbol" />
{{ files.length }} {{ files.length }}
</div> </div>
</a> </a>
@ -335,7 +335,7 @@ useEventListener(window, 'beforeunload', (event) => {
class="ui warning label" class="ui warning label"
> >
{{ processedFilesCount }} {{ processedFilesCount }}
<span class="nospace slash symbol" /> <span class="slash symbol" />
{{ processableFiles }} {{ processableFiles }}
</div> </div>
<div <div
@ -343,7 +343,7 @@ useEventListener(window, 'beforeunload', (event) => {
:class="['ui', {'success': uploads.errored === 0}, {'danger': uploads.errored > 0}, 'label']" :class="['ui', {'success': uploads.errored === 0}, {'danger': uploads.errored > 0}, 'label']"
> >
{{ processedFilesCount }} {{ processedFilesCount }}
<span class="nospace slash symbol" /> <span class="slash symbol" />
{{ processableFiles }} {{ processableFiles }}
</div> </div>
</a> </a>

Wyświetl plik

@ -102,7 +102,7 @@ onMounted(() => $('.ui.dropdown').dropdown())
const { t } = useI18n() const { t } = useI18n()
const labels = computed(() => ({ const labels = computed(() => ({
searchPlaceholder: t('components.library.Radios.placeholder.search'), searchPlaceholder: t('components.library.Radios.placeholder.search'),
title: t('components.library.Podcasts.title') title: t('components.library.Radios.title')
})) }))
const paginateOptions = computed(() => sortedUniq([12, 25, 50, paginateBy.value].sort((a, b) => a - b))) const paginateOptions = computed(() => sortedUniq([12, 25, 50, paginateBy.value].sort((a, b) => a - b)))

Wyświetl plik

@ -165,7 +165,7 @@ const getCurrentState = (target?: StateTarget): ReviewState => {
<div class="ui inline form"> <div class="ui inline form">
<div class="fields"> <div class="fields">
<div class="ui field"> <div class="ui field">
<label for="search-edits">{{ $t('components.manage.library.EditsCardList.placeholder.search') }}</label> <label for="search-edits">{{ $t('components.manage.library.EditsCardList.label.search') }}</label>
<form @submit.prevent="query = search.value"> <form @submit.prevent="query = search.value">
<input <input
id="search-edits" id="search-edits"

Wyświetl plik

@ -97,7 +97,7 @@ const labels = computed(() => ({
href="#" href="#"
class="item disabled" class="item disabled"
> >
<span class="nospace ellipses symbol" /> <span class="ellipses symbol" />
</a> </a>
<a <a
v-else v-else

Wyświetl plik

@ -1,19 +1,18 @@
import type { Track, Upload } from '~/types' import type { Track, Upload } from '~/types'
import { createGlobalState, useNow, useStorage, useTimeAgo, whenever } from '@vueuse/core' import { createGlobalState, useNow, useStorage, useTimeAgo, whenever } from '@vueuse/core'
import { shuffle as shuffleArray, sum } from 'lodash-es'
import { computed, ref, shallowReactive, watchEffect } from 'vue' import { computed, ref, shallowReactive, watchEffect } from 'vue'
import { shuffle as shuffleArray, sum } from 'lodash-es'
import { useClamp } from '@vueuse/math' import { useClamp } from '@vueuse/math'
import { useI18n } from 'vue-i18n'
import { delMany, getMany, setMany } from '~/composables/data/indexedDB'
import { looping, LoopingMode, isPlaying } from '~/composables/audio/player'
import { useStore } from '~/store' import { useStore } from '~/store'
import { looping, LoopingMode, isPlaying } from '~/composables/audio/player'
import { delMany, getMany, setMany } from '~/composables/data/indexedDB'
import { setGain } from '~/composables/audio/audio-api'
import { useTracks } from '~/composables/audio/tracks' import { useTracks } from '~/composables/audio/tracks'
import { gettext } from '~/init/locale'
import axios from 'axios' import axios from 'axios'
import { setGain } from './audio-api'
export interface QueueTrackSource { export interface QueueTrackSource {
uuid: string uuid: string
@ -102,7 +101,7 @@ export const useQueue = createGlobalState(() => {
const { currentSound } = useTracks() const { currentSound } = useTracks()
const createQueueTrack = async (track: Track): Promise<QueueTrack> => { const createQueueTrack = async (track: Track): Promise<QueueTrack> => {
const { $pgettext } = gettext const { t } = useI18n()
const { default: store } = await import('~/store') const { default: store } = await import('~/store')
if (track.uploads.length === 0) { if (track.uploads.length === 0) {
@ -116,8 +115,8 @@ export const useQueue = createGlobalState(() => {
return { return {
id: track.id, id: track.id,
title: track.title, title: track.title,
artistName: track.artist?.name ?? $pgettext('*/*/*', 'Unknown artist'), artistName: track.artist?.name ?? t('composables.audio.queue.unknownArtist'),
albumTitle: track.album?.title ?? $pgettext('*/*/*', 'Unknown album'), albumTitle: track.album?.title ?? t('composables.audio.queue.unknownAlbum'),
position: track.position, position: track.position,
artistId: track.artist?.id ?? -1, artistId: track.artist?.id ?? -1,
albumId: track.album?.id ?? -1, albumId: track.album?.id ?? -1,

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,359 +1,359 @@
{ {
"components": { "components": {
"auth": { "auth": {
"Settings": { "Settings": {
"label": { "label": {
"currentPassword": "تغییر پسورد" "currentPassword": "تغییر پسورد"
},
"header": {
"passwordFailure": "پسورد شما قابل تغییر نیست"
}
},
"SignupForm": {
"label": {
"username": "نام کاربری"
}
},
"LoginForm": {
"label": {
"username": "نام کاربری یا ایمیل"
}
},
"ApplicationForm": {
"label": {
"scopes": {
"write": {
"label": "نوشتن"
}
}
}
},
"Logout": {
"button": {
"logout": "آره،می رم بیرون"
}
}
}, },
"audio": { "header": {
"ChannelForm": { "passwordFailure": "پسورد شما قابل تغییر نیست"
"label": { }
"email": "نام کاربری یا ایمیل", },
"owner": "نام کاربری" "SignupForm": {
} "label": {
}, "username": "نام کاربری"
}
},
"LoginForm": {
"label": {
"username": "نام کاربری یا ایمیل"
}
},
"ApplicationForm": {
"label": {
"scopes": {
"write": {
"label": "نوشتن"
}
}
}
},
"Logout": {
"button": {
"logout": "آره،می رم بیرون"
}
}
},
"audio": {
"ChannelForm": {
"label": {
"email": "نام کاربری یا ایمیل",
"owner": "نام کاربری"
}
},
"track": {
"Table": {
"table": {
"header": {
"title": "عنوان"
}
}
}
},
"ChannelCard": {
"title": "به روز شده در { date }"
}
},
"channels": {
"AlbumForm": {
"label": {
"albumTitle": "عنوان"
}
},
"UploadMetadataForm": {
"label": {
"title": "عنوان"
}
}
},
"manage": {
"library": {
"AlbumsTable": {
"table": {
"album": {
"header": {
"name": "عنوان"
}
}
}
},
"TracksTable": {
"table": {
"track": { "track": {
"Table": { "header": {
"table": { "title": "عنوان"
"header": { }
"title": "عنوان"
}
}
}
},
"ChannelCard": {
"title": "به روز شده در { date }"
} }
}, }
"channels": { }
"AlbumForm": { },
"label": { "users": {
"albumTitle": "عنوان" "UsersTable": {
} "table": {
}, "user": {
"UploadMetadataForm": { "header": {
"label": { "username": "نام کاربری"
"title": "عنوان" }
}
} }
}, }
"manage": { }
"library": { },
"AlbumsTable": { "moderation": {
"table": { "DomainsTable": {
"album": { "table": {
"header": { "domain": {
"name": "عنوان" "header": {
}
}
}
},
"TracksTable": {
"table": {
"track": {
"header": {
"title": "عنوان"
}
}
}
}
},
"users": {
"UsersTable": {
"table": {
"user": {
"header": {
"username": "نام کاربری"
}
}
}
}
},
"moderation": {
"DomainsTable": {
"table": {
"domain": {
"header": {
"users": "کاربرها"
},
"moderationRule": "بله"
}
},
"option": {
"yes": "بله"
}
},
"AccountsTable": {
"table": {
"account": {
"moderationRule": "بله"
}
}
}
}
},
"federation": {
"FetchButton": {
"table": {
"error": {
"value": {
"unknownError": "خطای ناشناخته"
}
}
}
}
},
"library": {
"ImportStatusModal": {
"error": {
"unknownError": {
"label": "خطای ناشناخته"
}
}
},
"AlbumDropdown": {
"link": {
"domain": "به روز شده در { date }"
}
},
"ArtistBase": {
"link": {
"domain": "به روز شده در { date }"
}
},
"TrackBase": {
"link": {
"domain": "به روز شده در { date }"
}
},
"TrackDetail": {
"table": {
"release": {
"year": "سال"
}
}
},
"EditForm": {
"header": {
"success": "تغییرات شما با موفقیت اعمال گردید"
}
}
},
"common": {
"AttachmentInput": {
"label": {
"upload": "أپلود عکس جدید"
}
},
"ContentForm": {
"button": {
"write": "نوشتن"
},
"placeholder": {
"input": "یه چند کلمه ای اینجا بنویس ..."
}
}
},
"Home": {
"header": {
"links": "لینک های مفید"
}
},
"Sidebar": {
"link": {
"users": "کاربرها" "users": "کاربرها"
},
"moderationRule": "بله"
} }
},
"option": {
"yes": "بله"
}
}, },
"admin": { "AccountsTable": {
"SignupFormBuilder": { "table": {
"table": { "account": {
"additionalFields": { "moderationRule": "بله"
"required": {
"true": "بله"
}
}
}
}
},
"favorites": {
"List": {
"title": "علاقه مندی های شما"
} }
}
} }
}
}, },
"composables": { "federation": {
"moderation": { "FetchButton": {
"useEditConfigs": { "table": {
"album": { "error": {
"title": "عنوان" "value": {
}, "unknownError": "خطای ناشناخته"
"track": {
"title": "عنوان"
}
},
"useReportConfigs": {
"album": {
"title": "عنوان"
},
"track": {
"title": "عنوان"
}
}
},
"locale": {
"useSharedLabels": {
"filters": {
"username": "نام کاربری",
"users": "کاربرها"
}
} }
}
} }
}
}, },
"views": { "library": {
"admin": { "ImportStatusModal": {
"library": { "error": {
"AlbumDetail": { "unknownError": {
"table": { "label": "خطای ناشناخته"
"album": { }
"title": "عنوان"
}
}
},
"TrackDetail": {
"table": {
"track": {
"title": "عنوان"
}
}
}
},
"moderation": {
"AccountsDetail": {
"table": {
"accountData": {
"username": "نام کاربری"
}
}
},
"DomainsDetail": {
"table": {
"instanceData": {
"inAllowList": {
"true": "بله"
}
}
}
}
},
"users": {
"Base": {
"link": {
"users": "کاربرها"
}
}
},
"CommonList": {
"title": {
"users": "کاربرها"
}
}
},
"content": {
"libraries": {
"FilesTable": {
"table": {
"file": {
"header": {
"title": "عنوان"
}
}
}
},
"Card": {
"button": {
"upload": "آپلود"
}
}
}
},
"auth": {
"PasswordResetConfirm": {
"button": {
"update": "تغییر پسورد"
},
"message": {
"success": "پسورد شما با موفقیت به روز گردید"
}
},
"ProfileBase": {
"link": {
"domainView": "به روز شده در { date }"
}
}
},
"library": {
"LibraryBase": {
"button": {
"upload": "آپلود"
},
"link": {
"domain": "به روز شده در { date }"
}
},
"Edit": {
"table": {
"action": {
"header": {
"user": "کاربر"
}
}
}
}
},
"channels": {
"DetailBase": {
"button": {
"upload": "آپلود"
},
"link": {
"domainView": "به روز شده در { date }"
}
}
},
"Notifications": {
"header": {
"messages": "پیام های شما",
"notifications": "اعلان های شما"
}
} }
},
"AlbumDropdown": {
"link": {
"domain": "به روز شده در { date }"
}
},
"ArtistBase": {
"link": {
"domain": "به روز شده در { date }"
}
},
"TrackBase": {
"link": {
"domain": "به روز شده در { date }"
}
},
"TrackDetail": {
"table": {
"release": {
"year": "سال"
}
}
},
"EditForm": {
"header": {
"success": "تغییرات شما با موفقیت اعمال گردید"
}
}
},
"common": {
"AttachmentInput": {
"label": {
"upload": "أپلود عکس جدید"
}
},
"ContentForm": {
"button": {
"write": "نوشتن"
},
"placeholder": {
"input": "یه چند کلمه ای اینجا بنویس ..."
}
}
},
"Home": {
"header": {
"links": "لینک های مفید"
}
},
"Sidebar": {
"link": {
"users": "کاربرها"
}
},
"admin": {
"SignupFormBuilder": {
"table": {
"additionalFields": {
"required": {
"true": "بله"
}
}
}
}
},
"favorites": {
"List": {
"title": "علاقه مندی های شما"
}
} }
},
"composables": {
"moderation": {
"useEditConfigs": {
"album": {
"title": "عنوان"
},
"track": {
"title": "عنوان"
}
},
"useReportConfigs": {
"album": {
"title": "عنوان"
},
"track": {
"title": "عنوان"
}
}
},
"locale": {
"useSharedLabels": {
"filters": {
"username": "نام کاربری",
"users": "کاربرها"
}
}
}
},
"views": {
"admin": {
"library": {
"AlbumDetail": {
"table": {
"album": {
"title": "عنوان"
}
}
},
"TrackDetail": {
"table": {
"track": {
"title": "عنوان"
}
}
}
},
"moderation": {
"AccountsDetail": {
"table": {
"accountData": {
"username": "نام کاربری"
}
}
},
"DomainsDetail": {
"table": {
"instanceData": {
"inAllowList": {
"true": "بله"
}
}
}
}
},
"users": {
"Base": {
"link": {
"users": "کاربرها"
}
}
},
"CommonList": {
"title": {
"users": "کاربرها"
}
}
},
"content": {
"libraries": {
"FilesTable": {
"table": {
"file": {
"header": {
"title": "عنوان"
}
}
}
},
"Card": {
"button": {
"upload": "آپلود"
}
}
}
},
"auth": {
"PasswordResetConfirm": {
"button": {
"update": "تغییر پسورد"
},
"message": {
"success": "پسورد شما با موفقیت به روز گردید"
}
},
"ProfileBase": {
"link": {
"domainView": "به روز شده در { date }"
}
}
},
"library": {
"LibraryBase": {
"button": {
"upload": "آپلود"
},
"link": {
"domain": "به روز شده در { date }"
}
},
"Edit": {
"table": {
"action": {
"header": {
"user": "کاربر"
}
}
}
}
},
"channels": {
"DetailBase": {
"button": {
"upload": "آپلود"
},
"link": {
"domainView": "به روز شده در { date }"
}
}
},
"Notifications": {
"header": {
"messages": "پیام های شما",
"notifications": "اعلان های شما"
}
}
}
} }

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,133 +1,133 @@
{ {
"components": { "components": {
"auth": { "auth": {
"Authorize": { "Authorize": {
"header": { "header": {
"access": "{ app } 이 Funkwhale 계정에 접근하려고 합니다" "access": "{ app } 이 Funkwhale 계정에 접근하려고 합니다"
}
}
},
"About": {
"stat": {
"activeUsers": "{ count } 활성 사용자"
}
},
"Home": {
"stat": {
"activeUsers": "{ count } 활성 사용자"
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } 에피소드"
}
},
"album": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } 즐겨찾기"
}
}
},
"channels": {
"AlbumSelect": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"playlists": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"AboutPod": {
"stat": {
"activeUsers": "{ count } 활성 사용자",
"listeningsCount": "{ count } 듣는중"
}
},
"RemoteSearchForm": {
"label": {
"rss": {
"fieldPlaceholder": "{'@'}channel{'@'}pod.example 또는 https://website.example/rss.xml"
}
}
} }
}
}, },
"views": { "About": {
"channels": { "stat": {
"DetailBase": { "activeUsers": "{ count } 활성 사용자"
"meta": { }
"episodes": "{ count } 에피소드", },
"listenings": "{ count } 듣는중", "Home": {
"subscribers": "{ count } 구독자", "stat": {
"tracks": "{ count } 트랙" "activeUsers": "{ count } 활성 사용자"
} }
} },
}, "audio": {
"content": { "artist": {
"libraries": { "Card": {
"Card": { "meta": {
"meta": { "episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙" "tracks": "{ count } 트랙"
} }
}
},
"remote": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
}
},
"library": {
"LibraryBase": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"auth": {
"Signup": {
"header": {
"createAccount": "{ app } 이 Funkwhale 계정에 접근하려고 합니다"
}
}
} }
},
"ChannelCard": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } 에피소드"
}
},
"album": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } 에피소드",
"tracks": "{ count } 트랙"
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } 즐겨찾기"
}
}
},
"channels": {
"AlbumSelect": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"playlists": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"AboutPod": {
"stat": {
"activeUsers": "{ count } 활성 사용자",
"listeningsCount": "{ count } 듣는중"
}
},
"RemoteSearchForm": {
"label": {
"rss": {
"fieldPlaceholder": "{'@'}channel{'@'}pod.example 또는 https://website.example/rss.xml"
}
}
} }
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"episodes": "{ count } 에피소드",
"listenings": "{ count } 듣는중",
"subscribers": "{ count } 구독자",
"tracks": "{ count } 트랙"
}
}
},
"content": {
"libraries": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"remote": {
"Card": {
"meta": {
"tracks": "{ count } 트랙"
}
}
}
},
"library": {
"LibraryBase": {
"meta": {
"tracks": "{ count } 트랙"
}
}
},
"auth": {
"Signup": {
"header": {
"createAccount": "{ app } 이 Funkwhale 계정에 접근하려고 합니다"
}
}
}
}
} }

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,131 +1,131 @@
{ {
"components": { "components": {
"auth": { "auth": {
"Authorize": { "Authorize": {
"header": { "header": {
"access": "{ app } Funkwhale hesabına erişmek istiyor" "access": "{ app } Funkwhale hesabına erişmek istiyor"
}
}
},
"About": {
"stat": {
"activeUsers": "{ count } aktif kullanıcı | { count } aktif kullanıcılar",
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"Home": {
"stat": {
"activeUsers": "{ count } aktif kullanıcı | { count } aktif kullanıcılar",
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler"
}
},
"album": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
},
"radios": {
"Builder": {
"header": {
"matches": "{ count } tane parça filtrelendi | { count } tane parça filtrelendi"
}
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } favori | { count } favoriler"
}
}
},
"channels": {
"UploadModal": {
"meta": {
"files": "{ count } dosya | { count } dosyalar"
}
},
"AlbumSelect": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
},
"AboutPod": {
"stat": {
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"playlists": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
} }
}
}, },
"views": { "About": {
"channels": { "stat": {
"DetailBase": { "activeUsers": "{ count } aktif kullanıcı | { count } aktif kullanıcılar",
"meta": { "hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
"episodes": "{ count } bölüm | { count } bölümler", }
"subscribers": "{ count } abone | { count } abone", },
"tracks": "{ count } parça | { count } parça" "Home": {
} "stat": {
} "activeUsers": "{ count } aktif kullanıcı | { count } aktif kullanıcılar",
}, "hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
"content": { }
"libraries": { },
"Card": { "audio": {
"meta": { "artist": {
"tracks": "{ count } parça | { count } parça" "Card": {
} "meta": {
} "episodes": "{ count } bölüm | { count } bölümler",
}, "tracks": "{ count } parça | { count } parça"
"remote": { }
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"library": {
"LibraryBase": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
} }
},
"ChannelCard": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler"
}
},
"album": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"tracks": "{ count } parça | { count } parça"
}
},
"radios": {
"Builder": {
"header": {
"matches": "{ count } tane parça filtrelendi | { count } tane parça filtrelendi"
}
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } favori | { count } favoriler"
}
}
},
"channels": {
"UploadModal": {
"meta": {
"files": "{ count } dosya | { count } dosyalar"
}
},
"AlbumSelect": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
},
"AboutPod": {
"stat": {
"hoursOfMusic": "{ count } müzik saati | { count } müzik saatleri"
}
},
"playlists": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
} }
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"episodes": "{ count } bölüm | { count } bölümler",
"subscribers": "{ count } abone | { count } abone",
"tracks": "{ count } parça | { count } parça"
}
}
},
"content": {
"libraries": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
},
"remote": {
"Card": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
},
"library": {
"LibraryBase": {
"meta": {
"tracks": "{ count } parça | { count } parça"
}
}
}
}
} }

Wyświetl plik

@ -1,167 +1,167 @@
{ {
"components": { "components": {
"auth": { "auth": {
"Authorize": { "Authorize": {
"header": { "header": {
"access": "{ app } 需要訪問您的funkwhale賬戶" "access": "{ app } 需要訪問您的funkwhale賬戶"
}
},
"Logout": {
"header": {
"confirm": "您确定要登出吗?"
}
}
},
"About": {
"stat": {
"activeUsers": "{ count } 活躍用戶",
"hoursOfMusic": "{ count } 小時"
},
"header": {
"aboutPod": "關於此媒體庫"
},
"description": {
"funkwhale": "此 pod 运行 Funkwhale这是一个社区驱动的项目允许您在分散的开放式网络中收听和共享音乐和音频。",
"signup": "立即注册,以跟踪您的收藏夹,创建播放列表,发现新内容等等!"
}
},
"Home": {
"stat": {
"activeUsers": "{ count } 活躍用戶",
"hoursOfMusic": "{ count } 小時"
},
"header": {
"aboutFunkwhale": "關於 Funkwhale",
"about": "關於此Funkwhale媒體池"
},
"link": {
"userGuides": {
"description": "發現您需要了解的有關Funkwhale及其功能的所有信息"
}
},
"description": {
"signup": "立即注册,以跟踪您的收藏夹,创建播放列表,发现新内容等等!",
"funkwhale": {
"paragraph1": "此 pod 运行 Funkwhale这是一个社区驱动的项目允许您在分散的开放式网络中收听和共享音乐和音频。"
}
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } 正在聽"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } 正在聽"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } 正在聽"
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } 正在聽"
}
},
"FileUpload": {
"tooltip": {
"network": "上傳這個文件時發生了網絡錯誤"
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } 喜愛"
}
}
},
"AboutPod": {
"stat": {
"hoursOfMusic": "{ count } 小時",
"activeUsers": "{ count } 活躍用戶",
"listeningsCount": "{ count } 正在聽"
},
"link": {
"about": "關於此媒體庫"
},
"header": {
"about": "關於此媒體庫"
}
},
"common": {
"ActionTable": {
"button": {
"selected": "{ count } 中 { total } 選中"
}
}
},
"channels": {
"LicenseSelect": {
"link": {
"license": "關於此許可"
}
}
},
"RemoteSearchForm": {
"label": {
"rss": {
"fieldPlaceholder": "{'@'}channel{'@'}pod.example 或 https://website.example/rss.xml"
}
}
} }
},
"Logout": {
"header": {
"confirm": "您确定要登出吗?"
}
}
}, },
"views": { "About": {
"channels": { "stat": {
"DetailBase": { "activeUsers": "{ count } 活躍用戶",
"meta": { "hoursOfMusic": "{ count } 小時"
"listenings": "{ count } 正在聽" },
} "header": {
} "aboutPod": "關於此媒體庫"
}, },
"library": { "description": {
"Edit": { "funkwhale": "此 pod 运行 Funkwhale这是一个社区驱动的项目允许您在分散的开放式网络中收听和共享音乐和音频。",
"button": { "signup": "立即注册,以跟踪您的收藏夹,创建播放列表,发现新内容等等!"
"accept": "確認" }
},
"table": {
"action": {
"status": {
"accepted": "已確認"
}
}
}
}
},
"auth": {
"PasswordReset": {
"link": {
"back": "返回登录"
}
},
"PasswordResetConfirm": {
"link": {
"back": "返回登录"
}
},
"Signup": {
"header": {
"createAccount": "{ app } 需要訪問您的funkwhale賬戶"
}
}
}
}, },
"init": { "Home": {
"serviceWorker": { "stat": {
"newAppVersion": "该应用程序有新版本可用。" "activeUsers": "{ count } 活躍用戶",
"hoursOfMusic": "{ count } 小時"
},
"header": {
"aboutFunkwhale": "關於 Funkwhale",
"about": "關於此Funkwhale媒體池"
},
"link": {
"userGuides": {
"description": "發現您需要了解的有關Funkwhale及其功能的所有信息"
} }
},
"description": {
"signup": "立即注册,以跟踪您的收藏夹,创建播放列表,发现新内容等等!",
"funkwhale": {
"paragraph1": "此 pod 运行 Funkwhale这是一个社区驱动的项目允许您在分散的开放式网络中收听和共享音乐和音频。"
}
}
},
"audio": {
"artist": {
"Card": {
"meta": {
"episodes": "{ count } 正在聽"
}
}
},
"ChannelCard": {
"meta": {
"episodes": "{ count } 正在聽"
}
},
"ChannelSerieCard": {
"meta": {
"episodes": "{ count } 正在聽"
}
}
},
"library": {
"AlbumBase": {
"meta": {
"episodes": "{ count } 正在聽"
}
},
"FileUpload": {
"tooltip": {
"network": "上傳這個文件時發生了網絡錯誤"
}
}
},
"favorites": {
"List": {
"header": {
"favorites": "{ count } 喜愛"
}
}
},
"AboutPod": {
"stat": {
"hoursOfMusic": "{ count } 小時",
"activeUsers": "{ count } 活躍用戶",
"listeningsCount": "{ count } 正在聽"
},
"link": {
"about": "關於此媒體庫"
},
"header": {
"about": "關於此媒體庫"
}
},
"common": {
"ActionTable": {
"button": {
"selected": "{ count } 中 { total } 選中"
}
}
},
"channels": {
"LicenseSelect": {
"link": {
"license": "關於此許可"
}
}
},
"RemoteSearchForm": {
"label": {
"rss": {
"fieldPlaceholder": "{'@'}channel{'@'}pod.example 或 https://website.example/rss.xml"
}
}
} }
},
"views": {
"channels": {
"DetailBase": {
"meta": {
"listenings": "{ count } 正在聽"
}
}
},
"library": {
"Edit": {
"button": {
"accept": "確認"
},
"table": {
"action": {
"status": {
"accepted": "已確認"
}
}
}
}
},
"auth": {
"PasswordReset": {
"link": {
"back": "返回登录"
}
},
"PasswordResetConfirm": {
"link": {
"back": "返回登录"
}
},
"Signup": {
"header": {
"createAccount": "{ app } 需要訪問您的funkwhale賬戶"
}
}
}
},
"init": {
"serviceWorker": {
"newAppVersion": "该应用程序有新版本可用。"
}
}
} }

Wyświetl plik

@ -127,68 +127,32 @@ span.diff.removed {
} }
.symbol { .symbol {
&.left::after {
padding-right: 0.25em;
}
&.right::after {
padding-left: 0.25em;
}
&.middle::after {
padding: 0 0.25em;
}
&.at::after { &.at::after {
content: "@"; content: "@";
} }
&.slash { &.slash::after {
&.left::after { content: "/";
padding-right: 0.25em;
content: "/";
}
&.right::after {
padding-left: 0.25em;
content: "/";
}
&.middle::after {
padding: 0.25em;
content: "/";
}
&.nospace::after {
content: "/";
}
} }
&.pipe { &.pipe::after {
&.left::after { content: "|";
padding-right: 0.25em;
content: "|";
}
&.right::after {
padding-left: 0.25em;
content: "|";
}
&.middle::after {
padding: 0.25em;
content: "|";
}
} }
&.middledot { &.middledot::after {
content: "·";
&.left::before {
padding-right: 0.25em;
content: "·";
}
&.right::after {
padding-left: 0.25em;
content: "·";
}
&.middle::after {
padding: 0.25em;
content: "·";
}
&.nospace::after {
content: "·";
}
} }
&.infinity::after { &.infinity::after {
@ -203,56 +167,20 @@ span.diff.removed {
content: "#"; content: "#";
} }
&.ellipses { &.ellipses::after {
content: "";
&.nospace::after {
content: "";
}
&.middle::after {
padding: 0.25em;
content: "";
}
} }
&.doubledot::after { &.doubledot::after {
content: ".."; content: "..";
} }
&.hyphen { &.hyphen::after {
content: "-";
&.left::before {
padding-right: 0.25em;
content: "-";
}
&.right {
padding-left: 0.25em;
content: "-";
}
&.middle::after {
padding: 0.25em;
content: "-";
}
} }
&.colon { &.colon::after {
content: ":";
&.left::before {
padding-right: 0.25em;
content: ":";
}
&.right::after {
padding-left: 0.25em;
content: ":";
}
&.middle::after {
padding: 0.25em;
content: ":";
}
} }
&.percent::after { &.percent::after {

Wyświetl plik

@ -93,7 +93,7 @@ const deletePlaylist = async () => {
<div class="content"> <div class="content">
{{ playlist.name }} {{ playlist.name }}
<div class="sub header"> <div class="sub header">
{{ $t('views.playlists.Detail.meta.tracks', {count: tracks_count, username: playlist.user.username}) }} {{ $t('views.playlists.Detail.meta.tracks', {count: playlist.tracks_count, username: playlist.user.username}) }}
<br> <br>
<duration :seconds="playlist.duration" /> <duration :seconds="playlist.duration" />
</div> </div>

Wyświetl plik

@ -3925,6 +3925,16 @@ json5@^2.1.3, json5@^2.2.0, json5@^2.2.1:
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
jsonc-eslint-parser@2.1.0, jsonc-eslint-parser@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2"
integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==
dependencies:
acorn "^8.5.0"
eslint-visitor-keys "^3.0.0"
espree "^9.0.0"
semver "^7.3.5"
jsonc-eslint-parser@^1.0.1: jsonc-eslint-parser@^1.0.1:
version "1.4.1" version "1.4.1"
resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz#8cbe99f6f5199acbc5a823c4c0b6135411027fa6" resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz#8cbe99f6f5199acbc5a823c4c0b6135411027fa6"
@ -3936,16 +3946,6 @@ jsonc-eslint-parser@^1.0.1:
espree "^6.0.0" espree "^6.0.0"
semver "^6.3.0" semver "^6.3.0"
jsonc-eslint-parser@^2.0.0, jsonc-eslint-parser@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2"
integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==
dependencies:
acorn "^8.5.0"
eslint-visitor-keys "^3.0.0"
espree "^9.0.0"
semver "^7.3.5"
jsonfile@^6.0.1: jsonfile@^6.0.1:
version "6.1.0" version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"