Merge branch 'main' into userquin/feat-remember-last-position

This commit is contained in:
userquin 2023-01-09 12:55:43 +01:00
commit 6d2f70b2ba
22 changed files with 417 additions and 201 deletions

View file

@ -132,7 +132,7 @@ You can run this code in your browser console to see how it works:
#### Custom Plural Number Formatting Entries
**Warning**:
Either **{0}**, **{v}** or **{followers}** should be used with the exception being custom plurals entries using the `{n}` placeholder.
Either **{0}** or **{v}** should be used with the exception being custom plurals entries using the `{n}` placeholder.
This is the full list of entries that will be available for number formatting in Elk:
- `action.boost_count` (no need to be included, we should use always `en-US` entry): `{0}` for formatted number and `{n}` for raw number - **{0} should be use**
@ -142,7 +142,7 @@ This is the full list of entries that will be available for number formatting in
- `account.following_count`: `{0}` for formatted number and `{n}` for raw number - **{0} should be use**
- `account.posts_count`: `{0}` for formatted number and `{n}` for raw number - **{0} should be use**
- `compose.drafts`: `{v}` for formatted number and `{n}` for raw number - **{v} should be use**
- `notification.followed_you_count`: `{followers}` for formatted number and `{n}` for raw number - **{followers} should be use**
- `notification.followed_you_count`: `{0}` for formatted number and `{n}` for raw number - **{0} should be use**
- `status.poll.count`: `{0}` for formatted number and `{n}` for raw number - **{0} should be use**
- `time_ago_options.*`: `{0}` for formatted number and `{n}` for raw number - **{0} should be use**: since numbers will be always small, we can also use `{n}`
- `timeline.show_new_items`: `{v}` for formatted number and `{n}` for raw number - **{v} should be use**

View file

@ -1,17 +1,9 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
const props = defineProps<{
defineProps<{
account: mastodon.v1.Account
}>()
const { formatHumanReadableNumber, formatNumber, forSR } = useHumanReadableNumber()
const statusesCount = $computed(() => formatHumanReadableNumber(props.account.statusesCount))
const statusesCountSR = $computed(() => forSR(props.account.statusesCount))
const followingCount = $computed(() => formatHumanReadableNumber(props.account.followingCount))
const followingCountSR = $computed(() => forSR(props.account.followingCount))
const followersCount = $computed(() => formatHumanReadableNumber(props.account.followersCount))
const followersCountSR = $computed(() => forSR(props.account.followersCount))
</script>
<template>
@ -21,48 +13,42 @@ const followersCountSR = $computed(() => forSR(props.account.followersCount))
replace
text-secondary
exact-active-class="text-primary"
:class="statusesCountSR ? 'flex gap-x-1' : null"
>
<template #default="{ isExactActive }">
<i18n-t keypath="account.posts_count" :plural="account.statusesCount">
<CommonTooltip v-if="statusesCountSR" :content="formatNumber(account.statusesCount)" placement="bottom">
<span aria-hidden="true" font-bold :class="isExactActive ? 'text-primary' : 'text-base'">{{ statusesCount }}</span>
<span sr-only font-bold>{{ formatNumber(account.statusesCount) }}</span>
</CommonTooltip>
<span v-else font-bold :class="isExactActive ? 'text-primary' : 'text-base'">{{ statusesCount }}</span>
</i18n-t>
<CommonLocalizedNumber
keypath="account.posts_count"
:count="account.statusesCount"
font-bold
:class="isExactActive ? 'text-primary' : 'text-base'"
/>
</template>
</NuxtLink>
<NuxtLink
:to="getAccountFollowingRoute(account)"
replace
text-secondary exact-active-class="text-primary"
:class="followingCountSR ? 'flex gap-x-1' : null"
>
<template #default="{ isExactActive }">
<i18n-t keypath="account.following_count" :plural="account.followingCount">
<CommonTooltip v-if="followingCountSR" :content="formatNumber(account.followingCount)" placement="bottom">
<span aria-hidden="true" font-bold :class="isExactActive ? 'text-primary' : 'text-base'">{{ followingCount }}</span>
<span sr-only font-bold>{{ formatNumber(account.followingCount) }}</span>
</CommonTooltip>
<span v-else font-bold :class="isExactActive ? 'text-primary' : 'text-base'">{{ followingCount }}</span>
</i18n-t>
<CommonLocalizedNumber
keypath="account.following_count"
:count="account.followingCount"
font-bold
:class="isExactActive ? 'text-primary' : 'text-base'"
/>
</template>
</NuxtLink>
<NuxtLink
:to="getAccountFollowersRoute(account)"
replace
text-secondary exact-active-class="text-primary"
:class="followersCountSR ? 'flex gap-x-1' : null"
>
<template #default="{ isExactActive }">
<i18n-t keypath="account.followers_count" :plural="account.followersCount">
<CommonTooltip v-if="followersCountSR" :content="formatNumber(account.followersCount)" placement="bottom">
<span aria-hidden="true" font-bold :class="isExactActive ? 'text-primary' : 'text-base'">{{ followersCount }}</span>
<span sr-only font-bold>{{ formatNumber(account.followersCount) }}</span>
</CommonTooltip>
<span v-else font-bold :class="isExactActive ? 'text-primary' : 'text-base'">{{ followersCount }}</span>
</i18n-t>
<CommonLocalizedNumber
keypath="account.followers_count"
:count="account.followersCount"
font-bold
:class="isExactActive ? 'text-primary' : 'text-base'"
/>
</template>
</NuxtLink>
</div>

View file

@ -0,0 +1,26 @@
<script setup lang="ts">
const props = defineProps<{
count: number
keypath: string
}>()
defineOptions({
inheritAttrs: false,
})
const { formatHumanReadableNumber, formatNumber, forSR } = useHumanReadableNumber()
const useSR = $computed(() => forSR(props.count))
const rawNumber = $computed(() => formatNumber(props.count))
const humanReadableNumber = $computed(() => formatHumanReadableNumber(props.count))
</script>
<template>
<i18n-t :keypath="keypath" :plural="count" tag="span" class="flex gap-x-1">
<CommonTooltip v-if="useSR" :content="rawNumber" placement="bottom">
<span aria-hidden="true" v-bind="$attrs">{{ humanReadableNumber }}</span>
<span sr-only>{{ rawNumber }}</span>
</CommonTooltip>
<span v-else v-bind="$attrs">{{ humanReadableNumber }}</span>
</i18n-t>
</template>

View file

@ -5,10 +5,7 @@ const { items } = defineProps<{
items: GroupedNotifications
}>()
const { formatHumanReadableNumber, forSR } = useHumanReadableNumber()
const count = $computed(() => items.items.length)
const addSR = $computed(() => forSR(count))
const isExpanded = ref(false)
const lang = $computed(() => {
return count > 1 || count === 0 ? undefined : items.items[0].status?.language
@ -20,19 +17,10 @@ const lang = $computed(() => {
<div flex items-center top-0 left-2 pt-2 px-3>
<div i-ri:user-follow-fill me-3 color-primary aria-hidden="true" />
<template v-if="count > 1">
<template v-if="addSR">
<span
aria-hidden="true"
>
{{ $t('notification.followed_you_count', count, { named: { followers: formatHumanReadableNumber(count) } }) }}
</span>
<span sr-only>
{{ $t('notification.followed_you_count', count, { named: { followers: count } }) }}
</span>
</template>
<span v-else>
{{ $t('notification.followed_you_count', count, { named: { followers: count } }) }}
</span>
<CommonLocalizedNumber
keypath="notification.followed_you_count"
:count="count"
/>
</template>
<template v-else>
<AccountDisplayName

View file

@ -28,7 +28,7 @@ const emit = defineEmits<{
}>()
const { t } = useI18n()
// eslint-disable-next-line prefer-const
let { draft, isEmpty } = $(useDraft(draftKey, initial))
let isSending = $ref(false)

View file

@ -21,8 +21,6 @@ const {
toggleReblog,
} = $(useStatusActions(props))
const { formatHumanReadableNumber, formatNumber, forSR } = useHumanReadableNumber()
const reply = () => {
if (!checkLogin())
return
@ -45,13 +43,10 @@ const reply = () => {
@click="reply"
>
<template v-if="status.repliesCount" #text>
<i18n-t keypath="action.reply_count" :plural="status.repliesCount">
<CommonTooltip v-if="forSR(status.repliesCount)" :content="formatNumber(status.repliesCount)" placement="bottom">
<span aria-hidden="true">{{ formatHumanReadableNumber(status.repliesCount) }}</span>
<span sr-only>{{ formatNumber(status.repliesCount) }}</span>
</CommonTooltip>
<span v-else>{{ formatHumanReadableNumber(status.repliesCount) }}</span>
</i18n-t>
<CommonLocalizedNumber
keypath="action.reply_count"
:count="status.repliesCount"
/>
</template>
</StatusActionButton>
</div>
@ -69,13 +64,10 @@ const reply = () => {
@click="toggleReblog()"
>
<template v-if="status.reblogsCount" #text>
<i18n-t keypath="action.boost_count" :plural="status.reblogsCount">
<CommonTooltip v-if="forSR(status.reblogsCount)" :content="formatNumber(status.reblogsCount)" placement="bottom">
<span aria-hidden="true">{{ formatHumanReadableNumber(status.reblogsCount) }}</span>
<span sr-only>{{ formatNumber(status.reblogsCount) }}</span>
</CommonTooltip>
<span v-else>{{ formatHumanReadableNumber(status.reblogsCount) }}</span>
</i18n-t>
<CommonLocalizedNumber
keypath="action.boost_count"
:count="status.reblogsCount"
/>
</template>
</StatusActionButton>
</div>
@ -93,13 +85,10 @@ const reply = () => {
@click="toggleFavourite()"
>
<template v-if="status.favouritesCount" #text>
<i18n-t keypath="action.favourite_count" :plural="status.favouritesCount">
<CommonTooltip v-if="forSR(status.favouritesCount)" :content="formatNumber(status.favouritesCount)" placement="bottom">
<span aria-hidden="true">{{ formatHumanReadableNumber(status.favouritesCount) }}</span>
<span sr-only>{{ formatNumber(status.favouritesCount) }}</span>
</CommonTooltip>
<span v-else>{{ formatHumanReadableNumber(status.favouritesCount) }}</span>
</i18n-t>
<CommonLocalizedNumber
keypath="action.favourite_count"
:count="status.favouritesCount"
/>
</template>
</StatusActionButton>
</div>

View file

@ -13,7 +13,7 @@ function toPercentage(num: number) {
const timeAgoOptions = useTimeAgoOptions()
const expiredTimeAgo = useTimeAgo(poll.expiresAt!, timeAgoOptions)
const expiredTimeFormatted = useFormattedDateTime(poll.expiresAt!)
const { formatHumanReadableNumber, formatNumber, formatPercentage, forSR } = useHumanReadableNumber()
const { formatPercentage } = useHumanReadableNumber()
const masto = useMasto()
async function vote(e: Event) {
@ -34,9 +34,6 @@ async function vote(e: Event) {
}
const votersCount = $computed(() => poll.votersCount ?? 0)
const votersCountHR = $computed(() => formatHumanReadableNumber(votersCount))
const votersCountNumber = $computed(() => formatNumber(votersCount))
const votersCountSR = $computed(() => forSR(votersCount))
</script>
<template>
@ -65,13 +62,10 @@ const votersCountSR = $computed(() => forSR(votersCount))
</div>
</template>
<div text-sm flex="~ inline" gap-x-1>
<i18n-t keypath="status.poll.count" :plural="votersCount">
<CommonTooltip v-if="votersCountSR" :content="votersCountNumber" placement="bottom">
<span aria-hidden="true">{{ votersCountHR }}</span>
<span sr-only>{{ votersCountNumber }}</span>
</CommonTooltip>
<span v-else>{{ votersCountNumber }}</span>
</i18n-t>
<CommonLocalizedNumber
keypath="status.poll.count"
:count="poll.votesCount"
/>
&middot;
<CommonTooltip :content="expiredTimeFormatted" class="inline-block" placement="right">
<time :datetime="poll.expiresAt!">{{ $t(poll.expired ? 'status.poll.finished' : 'status.poll.ends', [expiredTimeAgo]) }}</time>

View file

@ -14,7 +14,7 @@ const { paginator, stream, account, buffer = 10 } = defineProps<{
}>()
const { formatNumber } = useHumanReadableNumber()
const virtualScroller = $(useFeatureFlag('experimentalVirtualScroll'))
const virtualScroller = $(useFeatureFlag('experimentalVirtualScroller'))
const showOriginSite = $computed(() =>
account && account.id !== currentUser.value?.account.id && getServerName(account) !== currentServer.value,

View file

@ -2,14 +2,14 @@ import type { Ref } from 'vue'
import { userSettings } from '.'
export interface FeatureFlags {
experimentalVirtualScroll: boolean
experimentalVirtualScroller: boolean
experimentalGitHubCards: boolean
experimentalUserPicker: boolean
}
export type FeatureFlagsMap = Record<string, FeatureFlags>
const DEFAULT_FEATURE_FLAGS: FeatureFlags = {
experimentalVirtualScroll: false,
experimentalVirtualScroller: true,
experimentalGitHubCards: true,
experimentalUserPicker: true,
}

View file

@ -256,16 +256,21 @@ export async function signout() {
await masto.loginTo(currentUser.value)
}
const notifications = reactive<Record<string, undefined | [Promise<WsEvents>, number]>>({})
const notifications = reactive<Record<string, undefined | [Promise<WsEvents>, string[]]>>({})
export const useNotifications = () => {
const id = currentUser.value?.account.id
const masto = useMasto()
const clearNotifications = () => {
async function clearNotifications() {
if (!id || !notifications[id])
return
notifications[id]![1] = 0
const lastReadId = notifications[id]![1][0]
notifications[id]![1] = []
// @ts-expect-error https://github.com/neet/masto.js/pull/793
await masto.v1.markers.create({
notifications: { lastReadId },
})
}
async function connect(): Promise<void> {
@ -273,11 +278,24 @@ export const useNotifications = () => {
return
const stream = masto.v1.stream.streamUser()
notifications[id] = [stream, 0]
;(await stream).on('notification', () => {
notifications[id] = [stream, []]
stream.then(s => s.on('notification', (n) => {
if (notifications[id])
notifications[id]![1]++
})
notifications[id]![1].unshift(n.id)
}))
const position = await masto.v1.markers.fetch({ timeline: ['notifications'] })
const paginator = masto.v1.notifications.list({ limit: 30 })
do {
const result = await paginator.next()
if (result.value?.length) {
for (const notification of result.value as mastodon.v1.Notification[]) {
if (notification.id === position.notifications.lastReadId)
return
notifications[id]![1].push(notification.id)
}
}
} while (true)
}
function disconnect(): void {
@ -288,10 +306,13 @@ export const useNotifications = () => {
}
watch(currentUser, disconnect)
connect()
if (isMastoInitialised.value)
connect()
else
watchOnce(isMastoInitialised, connect)
return {
notifications: computed(() => id ? notifications[id]?.[1] ?? 0 : 0),
notifications: computed(() => id ? notifications[id]?.[1].length ?? 0 : 0),
disconnect,
clearNotifications,
}

View file

@ -154,7 +154,7 @@
"notification": {
"favourited_post": "أُعجِب بمنشورك",
"followed_you": "بدأ في متابعتك",
"followed_you_count": "لم يتبعك أحد|تبعك شخص واحد|تبعك شخصان|تبعك {followers} أشخاص|تبعك {followers} شخص| تبعك {followers} شخص",
"followed_you_count": "لم يتبعك أحد|تبعك شخص واحد|تبعك شخصان|تبعك {0} أشخاص|تبعك {0} شخص| تبعك {0} شخص",
"missing_type": "MISSING notification.type:",
"reblogged_post": "اعاد نشر منشورك",
"request_to_follow": "طلب(ت) متابعتك",

View file

@ -162,7 +162,7 @@
"notification": {
"favourited_post": "favourited your post",
"followed_you": "followed you",
"followed_you_count": "{followers} people followed you|{followers} person followed you|{followers} people followed you",
"followed_you_count": "{0} people followed you|{0} person followed you|{0} people followed you",
"missing_type": "MISSING notification.type:",
"reblogged_post": "reblogged your post",
"request_to_follow": "requested to follow you",

View file

@ -187,7 +187,7 @@
"notification": {
"favourited_post": "favorited your post",
"followed_you": "followed you",
"followed_you_count": "{followers} people followed you|{followers} person followed you|{followers} people followed you",
"followed_you_count": "{0} people followed you|{0} person followed you|{0} people followed you",
"missing_type": "MISSING notification.type:",
"reblogged_post": "reblogged your post",
"request_to_follow": "requested to follow you",

View file

@ -187,7 +187,7 @@
"notification": {
"favourited_post": "marcó tu publicación como favorito",
"followed_you": "te ha seguido",
"followed_you_count": "{followers} personas te siguieron|{followers} persona te siguió|{followers} personas te siguieron",
"followed_you_count": "{0} personas te siguieron|{0} persona te siguió|{0} personas te siguieron",
"missing_type": "MISSING notification.type:",
"reblogged_post": "retooteó tu publicación",
"request_to_follow": "ha solicitado seguirte",

View file

@ -166,7 +166,7 @@
"notification": {
"favourited_post": "aime votre message",
"followed_you": "vous suit",
"followed_you_count": "{followers} personnes vous suivent|{followers} personne vous suit|{followers} personnes vous suivent",
"followed_you_count": "{0} personnes vous suivent|{0} personne vous suit|{0} personnes vous suivent",
"missing_type": "MISSING notification.type:",
"reblogged_post": "a relayé votre message",
"request_to_follow": "vous demande de le suivre",

View file

@ -166,7 +166,7 @@
"notification": {
"favourited_post": "vindt jou post favoriet",
"followed_you": "volgt jou",
"followed_you_count": "{followers} mensen hebben je gevolgd|{followers} persoon heeft je gevold|{followers} mensen hebben je gevolgd",
"followed_you_count": "{0} mensen hebben je gevolgd|{0} persoon heeft je gevold|{0} mensen hebben je gevolgd",
"missing_type": "MISSEND notificatie.type:",
"reblogged_post": "herblogd je post",
"request_to_follow": "vraagt om jou te volgen",

View file

@ -184,7 +184,7 @@
"notification": {
"favourited_post": "додали ваший допис до вибраного",
"followed_you": "підписались на вас",
"followed_you_count": "{followers} людей підписалися на вас|{followers} людина підписалися на вас|{followers} людини підписалися на вас|{followers} людей підписалися на вас",
"followed_you_count": "{0} людей підписалися на вас|{0} людина підписалися на вас|{0} людини підписалися на вас|{0} людей підписалися на вас",
"missing_type": "ВІДСУТНІЙ notification.type:",
"reblogged_post": "поширили ваш допис",
"request_to_follow": "попросили підписатися на вас",

View file

@ -22,12 +22,10 @@ export default defineNuxtModule({
nuxt.options.runtimeConfig.public.env = env
nuxt.options.runtimeConfig.public.buildInfo = buildInfo
nuxt.hook('nitro:config', (config) => {
config.publicAssets = config.publicAssets || []
if (env === 'dev')
config.publicAssets.unshift({ dir: resolve('../public-dev') })
else if (env === 'canary' || env === 'preview' || !isCI)
config.publicAssets.unshift({ dir: resolve('../public-staging') })
})
nuxt.options.nitro.publicAssets = nuxt.options.nitro.publicAssets || []
if (env === 'dev')
nuxt.options.nitro.publicAssets.unshift({ dir: resolve('../public-dev') })
else if (env === 'canary' || env === 'preview' || !isCI)
nuxt.options.nitro.publicAssets.unshift({ dir: resolve('../public-staging') })
},
})

View file

@ -67,7 +67,7 @@
"vue-virtual-scroller": "2.0.0-beta.7"
},
"devDependencies": {
"@antfu/eslint-config": "^0.34.0",
"@antfu/eslint-config": "^0.34.1",
"@antfu/ni": "^0.18.8",
"@emoji-mart/data": "^1.1.0",
"@iconify-json/carbon": "^1.1.11",
@ -115,7 +115,8 @@
},
"pnpm": {
"patchedDependencies": {
"mlly@1.0.0": "patches/mlly@1.0.0.patch"
"mlly@1.0.0": "patches/mlly@1.0.0.patch",
"nitropack@1.0.0": "patches/nitropack@1.0.0.patch"
}
},
"simple-git-hooks": {

View file

@ -18,8 +18,8 @@ useHeadFixed({
{{ $t('settings.feature_flags.title') }}
</h3>
<SettingsToggleItem
:checked="getFeatureFlag('experimentalVirtualScroll')"
@click="toggleFeatureFlag('experimentalVirtualScroll')"
:checked="getFeatureFlag('experimentalVirtualScroller')"
@click="toggleFeatureFlag('experimentalVirtualScroller')"
>
{{ $t('settings.feature_flags.virtual_scroll') }}
</SettingsToggleItem>

View file

@ -0,0 +1,13 @@
diff --git a/dist/shared/nitro.c8278d90.mjs b/dist/shared/nitro.c8278d90.mjs
index 9ba312fc248da3731720ee7e3b38ba2a85537657..3cd508f0720adb959d94e40c124382ec0110d92c 100644
--- a/dist/shared/nitro.c8278d90.mjs
+++ b/dist/shared/nitro.c8278d90.mjs
@@ -1298,7 +1298,7 @@ async function copyPublicAssets(nitro) {
}
for (const asset of nitro.options.publicAssets) {
if (await isDirectory(asset.dir)) {
- await fse.copy(asset.dir, join(nitro.options.output.publicDir, asset.baseURL));
+ await fse.copy(asset.dir, join(nitro.options.output.publicDir, asset.baseURL), { override: false });
}
}
if (nitro.options.compressPublicAssets) {

View file

@ -4,12 +4,15 @@ patchedDependencies:
mlly@1.0.0:
hash: afe7v34zn4lohdq7767l3tlrje
path: patches/mlly@1.0.0.patch
nitropack@1.0.0:
hash: 5rbw6wsrpkguwhgdzu2jwggidq
path: patches/nitropack@1.0.0.patch
importers:
.:
specifiers:
'@antfu/eslint-config': ^0.34.0
'@antfu/eslint-config': ^0.34.1
'@antfu/ni': ^0.18.8
'@emoji-mart/data': ^1.1.0
'@fnando/sparkline': ^0.3.10
@ -134,7 +137,7 @@ importers:
vue-advanced-cropper: 2.8.6
vue-virtual-scroller: 2.0.0-beta.7
devDependencies:
'@antfu/eslint-config': 0.34.0_lzzuuodtsqwxnvqeq4g4likcqa
'@antfu/eslint-config': 0.34.1_lzzuuodtsqwxnvqeq4g4likcqa
'@antfu/ni': 0.18.8
'@emoji-mart/data': 1.1.0
'@iconify-json/carbon': 1.1.11
@ -175,7 +178,7 @@ importers:
typescript: 4.9.4
unplugin-auto-import: 0.12.1_@vueuse+core@9.10.0
vite-plugin-inspect: 0.7.11
vite-plugin-pwa: 0.14.1
vite-plugin-pwa: 0.14.1_workbox-window@6.5.4
vitest: 0.26.2_jsdom@20.0.3
vue-tsc: 1.0.24_typescript@4.9.4
workbox-window: 6.5.4
@ -197,23 +200,23 @@ packages:
'@jridgewell/gen-mapping': 0.1.1
'@jridgewell/trace-mapping': 0.3.17
/@antfu/eslint-config-basic/0.34.0_ncmi6noazr3nzas7jxykisekym:
resolution: {integrity: sha512-anYa2ywjXFJ1rhpBlskiW0dj2PBOTSNWS+4FhX8mb5/cSiPY/noSbpEzRcpt37n19uLtolJ2CAyPLHbTtUdNvA==}
/@antfu/eslint-config-basic/0.34.1_ms6clkwmnrnf7qx5hae2o4lcfe:
resolution: {integrity: sha512-kMxVDjjBv3yDQJ2GdpPZDnV7iI+0mygxqLRrhydcppIf5RSfVHwtyFvWfWUJNpQI77Gg/ujeEYOZQE0BI+ndTg==}
peerDependencies:
eslint: '>=7.4.0'
dependencies:
eslint: 8.30.0
eslint-plugin-antfu: 0.34.0_lzzuuodtsqwxnvqeq4g4likcqa
eslint-plugin-antfu: 0.34.1_lzzuuodtsqwxnvqeq4g4likcqa
eslint-plugin-eslint-comments: 3.2.0_eslint@8.30.0
eslint-plugin-html: 7.1.0
eslint-plugin-import: 2.26.0_tqyj5ytb5g6r5ett7xxedhk6eq
eslint-plugin-jsonc: 2.5.0_eslint@8.30.0
eslint-plugin-import: 2.26.0_rm53qyp5yylvu6x7dh3rtqpfdq
eslint-plugin-jsonc: 2.6.0_eslint@8.30.0
eslint-plugin-markdown: 3.0.0_eslint@8.30.0
eslint-plugin-n: 15.6.0_eslint@8.30.0
eslint-plugin-no-only-tests: 3.1.0
eslint-plugin-promise: 6.1.1_eslint@8.30.0
eslint-plugin-unicorn: 45.0.2_eslint@8.30.0
eslint-plugin-yml: 1.3.0_eslint@8.30.0
eslint-plugin-yml: 1.4.0_eslint@8.30.0
jsonc-eslint-parser: 2.1.0
yaml-eslint-parser: 1.1.0
transitivePeerDependencies:
@ -224,30 +227,32 @@ packages:
- typescript
dev: true
/@antfu/eslint-config-ts/0.34.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-g3AQy8aF7r/QTuM11gRVUuaswUc4qL0bt+nwdkhlty+XXDgnrCaQCaRXKkjFM3AAqzesV793GnUOqxDrN2MRcg==}
/@antfu/eslint-config-ts/0.34.1_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-YpuB+FhHRFpUzNoJI7JWLRgXNegZuaq4ONQl4lVzYG7YjxvKfXox2EfKhtE98i28ozwbsD8kFjYysmCD8SupHQ==}
peerDependencies:
eslint: '>=7.4.0'
typescript: '>=3.9'
dependencies:
'@antfu/eslint-config-basic': 0.34.0_ncmi6noazr3nzas7jxykisekym
'@typescript-eslint/eslint-plugin': 5.47.0_ncmi6noazr3nzas7jxykisekym
'@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@antfu/eslint-config-basic': 0.34.1_ms6clkwmnrnf7qx5hae2o4lcfe
'@typescript-eslint/eslint-plugin': 5.48.0_ms6clkwmnrnf7qx5hae2o4lcfe
'@typescript-eslint/parser': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
eslint: 8.30.0
eslint-plugin-jest: 27.2.1_ky5e3hhkhrb73fmyzmnmsbw5qi
typescript: 4.9.4
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- jest
- supports-color
dev: true
/@antfu/eslint-config-vue/0.34.0_ncmi6noazr3nzas7jxykisekym:
resolution: {integrity: sha512-S1UX/x46ua0otS3tMn3F1IgH7qoSugsQhKc0Glt++42+rZibFvrZ7MEfxwNMyiqfnCHiGtA87lRuJnPdCHGeAQ==}
/@antfu/eslint-config-vue/0.34.1_ms6clkwmnrnf7qx5hae2o4lcfe:
resolution: {integrity: sha512-wrYaQCKSH35y/pMKZ9lDRn4n0xkY3DB22FwucmpAgGVQM8Sj7OD1EbaFR3vXyCR7hL2kBtFnFrfeRuzRz6Frrg==}
peerDependencies:
eslint: '>=7.4.0'
dependencies:
'@antfu/eslint-config-basic': 0.34.0_ncmi6noazr3nzas7jxykisekym
'@antfu/eslint-config-ts': 0.34.0_lzzuuodtsqwxnvqeq4g4likcqa
'@antfu/eslint-config-basic': 0.34.1_ms6clkwmnrnf7qx5hae2o4lcfe
'@antfu/eslint-config-ts': 0.34.1_lzzuuodtsqwxnvqeq4g4likcqa
eslint: 8.30.0
eslint-plugin-vue: 9.8.0_eslint@8.30.0
local-pkg: 0.4.2
@ -255,33 +260,35 @@ packages:
- '@typescript-eslint/parser'
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- jest
- supports-color
- typescript
dev: true
/@antfu/eslint-config/0.34.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-w7Ll+SClGFQihGQtCW1FYxFDj+IguVB/D+Pq/pGG1fF6SSbeATXJTB0T9eTCNXRBsWFEmWdKsU4wMRQFWlEt0w==}
/@antfu/eslint-config/0.34.1_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-Qz3s6n6Z2urePvOJCFxXpzDdaR7pcXX0jadbc0CI9mtzPAWaDDazXPH+AQ55tqJU7zTHYpccrgz0xWgsKqkYTw==}
peerDependencies:
eslint: '>=7.4.0'
dependencies:
'@antfu/eslint-config-vue': 0.34.0_ncmi6noazr3nzas7jxykisekym
'@typescript-eslint/eslint-plugin': 5.47.0_ncmi6noazr3nzas7jxykisekym
'@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@antfu/eslint-config-vue': 0.34.1_ms6clkwmnrnf7qx5hae2o4lcfe
'@typescript-eslint/eslint-plugin': 5.48.0_ms6clkwmnrnf7qx5hae2o4lcfe
'@typescript-eslint/parser': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
eslint: 8.30.0
eslint-plugin-eslint-comments: 3.2.0_eslint@8.30.0
eslint-plugin-html: 7.1.0
eslint-plugin-import: 2.26.0_tqyj5ytb5g6r5ett7xxedhk6eq
eslint-plugin-jsonc: 2.5.0_eslint@8.30.0
eslint-plugin-import: 2.26.0_rm53qyp5yylvu6x7dh3rtqpfdq
eslint-plugin-jsonc: 2.6.0_eslint@8.30.0
eslint-plugin-n: 15.6.0_eslint@8.30.0
eslint-plugin-promise: 6.1.1_eslint@8.30.0
eslint-plugin-unicorn: 45.0.2_eslint@8.30.0
eslint-plugin-vue: 9.8.0_eslint@8.30.0
eslint-plugin-yml: 1.3.0_eslint@8.30.0
eslint-plugin-yml: 1.4.0_eslint@8.30.0
jsonc-eslint-parser: 2.1.0
yaml-eslint-parser: 1.1.0
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- jest
- supports-color
- typescript
dev: true
@ -3047,8 +3054,8 @@ packages:
resolution: {integrity: sha512-UYK244awtmcUYQfs7FR8710MJcefL2WvkyHMjA8yJzxd1mo0Gfn88sRZ1Bls7hiUhA2w7ne1gpJ9T5g3G0wOyA==}
dev: true
/@typescript-eslint/eslint-plugin/5.47.0_ncmi6noazr3nzas7jxykisekym:
resolution: {integrity: sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ==}
/@typescript-eslint/eslint-plugin/5.48.0_ms6clkwmnrnf7qx5hae2o4lcfe:
resolution: {integrity: sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
@ -3058,13 +3065,13 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/scope-manager': 5.47.0
'@typescript-eslint/type-utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/parser': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/scope-manager': 5.48.0
'@typescript-eslint/type-utils': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/utils': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
debug: 4.3.4
eslint: 8.30.0
ignore: 5.2.1
ignore: 5.2.4
natural-compare-lite: 1.4.0
regexpp: 3.2.0
semver: 7.3.8
@ -3074,8 +3081,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw==}
/@typescript-eslint/parser/5.48.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@ -3084,9 +3091,9 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 5.47.0
'@typescript-eslint/types': 5.47.0
'@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4
'@typescript-eslint/scope-manager': 5.48.0
'@typescript-eslint/types': 5.48.0
'@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
debug: 4.3.4
eslint: 8.30.0
typescript: 4.9.4
@ -3094,16 +3101,16 @@ packages:
- supports-color
dev: true
/@typescript-eslint/scope-manager/5.47.0:
resolution: {integrity: sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw==}
/@typescript-eslint/scope-manager/5.48.0:
resolution: {integrity: sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
'@typescript-eslint/types': 5.47.0
'@typescript-eslint/visitor-keys': 5.47.0
'@typescript-eslint/types': 5.48.0
'@typescript-eslint/visitor-keys': 5.48.0
dev: true
/@typescript-eslint/type-utils/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg==}
/@typescript-eslint/type-utils/5.48.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@ -3112,8 +3119,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4
'@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
'@typescript-eslint/utils': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
debug: 4.3.4
eslint: 8.30.0
tsutils: 3.21.0_typescript@4.9.4
@ -3122,13 +3129,13 @@ packages:
- supports-color
dev: true
/@typescript-eslint/types/5.47.0:
resolution: {integrity: sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==}
/@typescript-eslint/types/5.48.0:
resolution: {integrity: sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/typescript-estree/5.47.0_typescript@4.9.4:
resolution: {integrity: sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==}
/@typescript-eslint/typescript-estree/5.48.0_typescript@4.9.4:
resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
typescript: '*'
@ -3136,8 +3143,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 5.47.0
'@typescript-eslint/visitor-keys': 5.47.0
'@typescript-eslint/types': 5.48.0
'@typescript-eslint/visitor-keys': 5.48.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@ -3148,17 +3155,17 @@ packages:
- supports-color
dev: true
/@typescript-eslint/utils/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw==}
/@typescript-eslint/utils/5.48.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@types/json-schema': 7.0.11
'@types/semver': 7.3.13
'@typescript-eslint/scope-manager': 5.47.0
'@typescript-eslint/types': 5.47.0
'@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4
'@typescript-eslint/scope-manager': 5.48.0
'@typescript-eslint/types': 5.48.0
'@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
eslint: 8.30.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.30.0
@ -3168,11 +3175,11 @@ packages:
- typescript
dev: true
/@typescript-eslint/visitor-keys/5.47.0:
resolution: {integrity: sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==}
/@typescript-eslint/visitor-keys/5.48.0:
resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
'@typescript-eslint/types': 5.47.0
'@typescript-eslint/types': 5.48.0
eslint-visitor-keys: 3.3.0
dev: true
@ -4268,7 +4275,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
es-abstract: 1.20.4
es-abstract: 1.21.0
get-intrinsic: 1.1.3
is-string: 1.0.7
dev: true
@ -4284,7 +4291,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
es-abstract: 1.20.4
es-abstract: 1.21.0
es-shim-unscopables: 1.0.0
dev: true
@ -4710,6 +4717,11 @@ packages:
engines: {node: '>=8'}
dev: true
/ci-info/3.7.1:
resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==}
engines: {node: '>=8'}
dev: true
/classnames/2.3.2:
resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==}
dev: false
@ -5459,6 +5471,53 @@ packages:
unbox-primitive: 1.0.2
dev: true
/es-abstract/1.21.0:
resolution: {integrity: sha512-GUGtW7eXQay0c+PRq0sGIKSdaBorfVqsCMhGHo4elP7YVqZu9nCZS4UkK4gv71gOWNMra/PaSKD3ao1oWExO0g==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
es-set-tostringtag: 2.0.1
es-to-primitive: 1.2.1
function-bind: 1.1.1
function.prototype.name: 1.1.5
get-intrinsic: 1.1.3
get-symbol-description: 1.0.0
globalthis: 1.0.3
gopd: 1.0.1
has: 1.0.3
has-property-descriptors: 1.0.0
has-proto: 1.0.1
has-symbols: 1.0.3
internal-slot: 1.0.4
is-array-buffer: 3.0.1
is-callable: 1.2.7
is-negative-zero: 2.0.2
is-regex: 1.1.4
is-shared-array-buffer: 1.0.2
is-string: 1.0.7
is-typed-array: 1.1.10
is-weakref: 1.0.2
object-inspect: 1.12.2
object-keys: 1.1.1
object.assign: 4.1.4
regexp.prototype.flags: 1.4.3
safe-regex-test: 1.0.0
string.prototype.trimend: 1.0.6
string.prototype.trimstart: 1.0.6
typed-array-length: 1.0.4
unbox-primitive: 1.0.2
which-typed-array: 1.1.9
dev: true
/es-set-tostringtag/2.0.1:
resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.1.3
has: 1.0.3
has-tostringtag: 1.0.0
dev: true
/es-shim-unscopables/1.0.0:
resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
dependencies:
@ -5731,7 +5790,7 @@ packages:
- supports-color
dev: true
/eslint-module-utils/2.7.4_5vuadmvmkyhbtm34phil3e6noa:
/eslint-module-utils/2.7.4_m7t5p6vbcnr4a7ybdjvbr423bm:
resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
engines: {node: '>=4'}
peerDependencies:
@ -5752,7 +5811,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/parser': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
debug: 3.2.7
eslint: 8.30.0
eslint-import-resolver-node: 0.3.6
@ -5760,10 +5819,10 @@ packages:
- supports-color
dev: true
/eslint-plugin-antfu/0.34.0_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-C5Hn3fVGPTjmrmaNby8QqdYlmt+MK0TG5dmgKXvgmOyvCkSMDRXcETczjmpMb4RbTakr3UX5tFxyMI5HfHMB2g==}
/eslint-plugin-antfu/0.34.1_lzzuuodtsqwxnvqeq4g4likcqa:
resolution: {integrity: sha512-UeS1aTUX9rZgknrBT/NyDCSG6dMd6UbiumHdciE62VwOw04dD8cy/p7m+OJZ6WMF3vz0CseJmzzk8q4pca4sEA==}
dependencies:
'@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/utils': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
transitivePeerDependencies:
- eslint
- supports-color
@ -5789,7 +5848,7 @@ packages:
dependencies:
escape-string-regexp: 1.0.5
eslint: 8.30.0
ignore: 5.2.1
ignore: 5.2.4
dev: true
/eslint-plugin-html/7.1.0:
@ -5798,7 +5857,7 @@ packages:
htmlparser2: 8.0.1
dev: true
/eslint-plugin-import/2.26.0_tqyj5ytb5g6r5ett7xxedhk6eq:
/eslint-plugin-import/2.26.0_rm53qyp5yylvu6x7dh3rtqpfdq:
resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
engines: {node: '>=4'}
peerDependencies:
@ -5808,14 +5867,14 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa
'@typescript-eslint/parser': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
array-includes: 3.1.6
array.prototype.flat: 1.3.1
debug: 2.6.9
doctrine: 2.1.0
eslint: 8.30.0
eslint-import-resolver-node: 0.3.6
eslint-module-utils: 2.7.4_5vuadmvmkyhbtm34phil3e6noa
eslint-module-utils: 2.7.4_m7t5p6vbcnr4a7ybdjvbr423bm
has: 1.0.3
is-core-module: 2.11.0
is-glob: 4.0.3
@ -5829,8 +5888,29 @@ packages:
- supports-color
dev: true
/eslint-plugin-jsonc/2.5.0_eslint@8.30.0:
resolution: {integrity: sha512-G257khwkrOQ5MJpSzz4yQh5K12W4xFZRcHmVlhVFWh2GCLDX+JwHnmkQoUoFDbOieSPBMsPFZDTJScwrXiWlIg==}
/eslint-plugin-jest/27.2.1_ky5e3hhkhrb73fmyzmnmsbw5qi:
resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/eslint-plugin': ^5.0.0
eslint: ^7.0.0 || ^8.0.0
jest: '*'
peerDependenciesMeta:
'@typescript-eslint/eslint-plugin':
optional: true
jest:
optional: true
dependencies:
'@typescript-eslint/eslint-plugin': 5.48.0_ms6clkwmnrnf7qx5hae2o4lcfe
'@typescript-eslint/utils': 5.48.0_lzzuuodtsqwxnvqeq4g4likcqa
eslint: 8.30.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/eslint-plugin-jsonc/2.6.0_eslint@8.30.0:
resolution: {integrity: sha512-4bA9YTx58QaWalua1Q1b82zt7eZMB7i+ed8q8cKkbKP75ofOA2SXbtFyCSok7RY6jIXeCqQnKjN9If8zCgv6PA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0'
@ -5863,7 +5943,7 @@ packages:
eslint: 8.30.0
eslint-plugin-es: 4.1.0_eslint@8.30.0
eslint-utils: 3.0.0_eslint@8.30.0
ignore: 5.2.1
ignore: 5.2.4
is-core-module: 2.11.0
minimatch: 3.1.2
resolve: 1.22.1
@ -5892,7 +5972,7 @@ packages:
dependencies:
'@babel/helper-validator-identifier': 7.19.1
'@eslint-community/eslint-utils': 4.1.2_eslint@8.30.0
ci-info: 3.7.0
ci-info: 3.7.1
clean-regexp: 1.0.0
eslint: 8.30.0
esquery: 1.4.0
@ -5927,8 +6007,8 @@ packages:
- supports-color
dev: true
/eslint-plugin-yml/1.3.0_eslint@8.30.0:
resolution: {integrity: sha512-TEkIaxutVPRZMRc0zOVptP/vmrf1td/9woUAiKII4kRLJLWWUCz1CYM98NsAfeOrVejFBFhHCSwOp+C1TqmtRg==}
/eslint-plugin-yml/1.4.0_eslint@8.30.0:
resolution: {integrity: sha512-vzggXNfPKa+arIaNUGoC3DPRZCxNty+xD/v9xOcE5D3Bj9SbgIrEobqVB35I8QxHd2YjL/dOS0xIIFmjAalwbw==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0'
@ -6571,6 +6651,13 @@ packages:
type-fest: 0.20.2
dev: true
/globalthis/1.0.3:
resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
engines: {node: '>= 0.4'}
dependencies:
define-properties: 1.1.4
dev: true
/globby/11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
@ -6578,7 +6665,7 @@ packages:
array-union: 2.1.0
dir-glob: 3.0.1
fast-glob: 3.2.12
ignore: 5.2.1
ignore: 5.2.4
merge2: 1.4.1
slash: 3.0.0
dev: true
@ -6648,6 +6735,11 @@ packages:
get-intrinsic: 1.1.3
dev: true
/has-proto/1.0.1:
resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
engines: {node: '>= 0.4'}
dev: true
/has-symbols/1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
@ -6902,6 +6994,11 @@ packages:
resolution: {integrity: sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==}
engines: {node: '>= 4'}
/ignore/5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'}
dev: true
/import-fresh/3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
@ -6968,6 +7065,15 @@ packages:
side-channel: 1.0.4
dev: true
/internal-slot/1.0.4:
resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.1.3
has: 1.0.3
side-channel: 1.0.4
dev: true
/ioredis/5.2.4:
resolution: {integrity: sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==}
engines: {node: '>=12.22.0'}
@ -7025,6 +7131,14 @@ packages:
has-tostringtag: 1.0.0
dev: true
/is-array-buffer/3.0.1:
resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==}
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.1.3
is-typed-array: 1.1.10
dev: true
/is-arrayish/0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
dev: true
@ -7420,8 +7534,8 @@ packages:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
dev: true
/json5/1.0.1:
resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==}
/json5/1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
dependencies:
minimist: 1.2.7
@ -8467,6 +8581,78 @@ packages:
- utf-8-validate
dev: true
/nitropack/1.0.0_5rbw6wsrpkguwhgdzu2jwggidq:
resolution: {integrity: sha512-788lHgNgC+NKqecwFgMkAQTuTXwuh2hEgOk2sLwV3qPVUogxrl6P3m5eKdt6Mtzx+mlXIw0G/P90B5TNWEqDSQ==}
engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0}
hasBin: true
dependencies:
'@cloudflare/kv-asset-handler': 0.2.0
'@netlify/functions': 1.3.0
'@rollup/plugin-alias': 4.0.2_rollup@2.79.1
'@rollup/plugin-commonjs': 23.0.3_rollup@2.79.1
'@rollup/plugin-inject': 5.0.2_rollup@2.79.1
'@rollup/plugin-json': 5.0.2_rollup@2.79.1
'@rollup/plugin-node-resolve': 15.0.1_rollup@2.79.1
'@rollup/plugin-replace': 5.0.1_rollup@2.79.1
'@rollup/plugin-wasm': 6.0.1_rollup@2.79.1
'@rollup/pluginutils': 5.0.2_rollup@2.79.1
'@vercel/nft': 0.22.1
archiver: 5.3.1
c12: 1.0.1
chalk: 5.1.2
chokidar: 3.5.3
consola: 2.15.3
cookie-es: 0.5.0
defu: 6.1.1
destr: 1.2.2
dot-prop: 7.2.0
esbuild: 0.15.18
escape-string-regexp: 5.0.0
etag: 1.8.1
fs-extra: 10.1.0
globby: 13.1.2
gzip-size: 7.0.0
h3: 1.0.1
hookable: 5.4.2
http-proxy: 1.18.1
is-primitive: 3.0.1
jiti: 1.16.1
klona: 2.0.5
knitwork: 1.0.0
listhen: 1.0.1
mime: 3.0.0
mlly: 1.0.0_afe7v34zn4lohdq7767l3tlrje
mri: 1.2.0
node-fetch-native: 1.0.1
ofetch: 1.0.0
ohash: 1.0.0
pathe: 1.0.0
perfect-debounce: 0.1.3
pkg-types: 1.0.1
pretty-bytes: 6.0.0
radix3: 1.0.0
rollup: 2.79.1
rollup-plugin-terser: 7.0.2_rollup@2.79.1
rollup-plugin-visualizer: 5.8.3_rollup@2.79.1
scule: 1.0.0
semver: 7.3.8
serve-placeholder: 2.0.1
serve-static: 1.15.0
source-map-support: 0.5.21
std-env: 3.3.1
ufo: 1.0.1
unenv: 1.0.0
unimport: 1.1.0_rollup@2.79.1
unstorage: 1.0.1
transitivePeerDependencies:
- bufferutil
- debug
- encoding
- supports-color
- utf-8-validate
dev: true
patched: true
/no-case/3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
dependencies:
@ -8725,7 +8911,7 @@ packages:
knitwork: 1.0.0
magic-string: 0.26.7
mlly: 1.0.0_afe7v34zn4lohdq7767l3tlrje
nitropack: 1.0.0
nitropack: 1.0.0_5rbw6wsrpkguwhgdzu2jwggidq
nuxi: 3.0.0
ofetch: 1.0.0
ohash: 1.0.0
@ -8806,7 +8992,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
es-abstract: 1.20.4
es-abstract: 1.21.0
dev: true
/ofetch/1.0.0:
@ -10841,7 +11027,7 @@ packages:
resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==}
dependencies:
'@types/json5': 0.0.29
json5: 1.0.1
json5: 1.0.2
minimist: 1.2.7
strip-bom: 3.0.0
dev: true
@ -10932,6 +11118,14 @@ packages:
engines: {node: '>=14.16'}
dev: true
/typed-array-length/1.0.4:
resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
dependencies:
call-bind: 1.0.2
for-each: 0.3.3
is-typed-array: 1.1.10
dev: true
/typesafe-path/0.2.2:
resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==}
dev: true
@ -11566,10 +11760,11 @@ packages:
- supports-color
dev: true
/vite-plugin-pwa/0.14.1:
/vite-plugin-pwa/0.14.1_workbox-window@6.5.4:
resolution: {integrity: sha512-5zx7yhQ8RTLwV71+GA9YsQQ63ALKG8XXIMqRJDdZkR8ZYftFcRgnzM7wOWmQZ/DATspyhPih5wCdcZnAIsM+mA==}
peerDependencies:
vite: ^3.1.0 || ^4.0.0
workbox-window: ^6.5.4
dependencies:
'@rollup/plugin-replace': 5.0.1_rollup@3.9.1
debug: 4.3.4
@ -12273,7 +12468,7 @@ packages:
dependencies:
eslint-visitor-keys: 3.3.0
lodash: 4.17.21
yaml: 2.1.3
yaml: 2.2.1
dev: true
/yaml/1.10.2:
@ -12286,6 +12481,11 @@ packages:
engines: {node: '>= 14'}
dev: true
/yaml/2.2.1:
resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==}
engines: {node: '>= 14'}
dev: true
/yargs-parser/21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}