Compare commits

...
Author SHA1 Message Date
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
70c4dfab73 Version Packages (#50)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-12 03:27:10 +02:00
Sasha SorokinandGitHub e1c501caad Improve alternate links generation (#49) 2023-07-12 03:25:31 +02:00
github-actions[bot] b883a37aeb Version Packages 2023-06-19 12:50:57 +00:00
Sasha Sorokin 951f36381f Add graceful fallback for unknown locales in storage 2023-06-19 14:47:00 +02:00
Sasha Sorokin ae71089e74 Use automatic locale if none returned by the storage 2023-06-19 13:58:25 +02:00
github-actions[bot]andSasha Sorokin e45e0fdde9 Version Packages 2023-06-14 12:23:31 +01:00
Sasha Sorokin db449d439a Fix missing options in the newer Nuxt versions 2023-06-14 13:15:51 +02:00
github-actions[bot]andSasha Sorokin 333d55741c Version Packages 2023-06-09 23:32:15 +01:00
Sasha Sorokin 2590b2f942 Downgrade and pin versions of FormatJS packages 2023-06-09 23:29:24 +01:00
15 changed files with 449 additions and 180 deletions
@@ -12,15 +12,16 @@ Represents the VIntl module options.
**Properties**
| Property | Default | Description |
| :---------------------- | :------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `defaultLocale` | | A string that represents the BCP 47 code of the locale to use by default. |
| `resolveDir` | `'.'` | An optional string that represents a directory where all the imports associated with the locales are being resolved. If it's relative, then it will be resolved against the Nuxt `srcDir` directory. If this property is not set, modules will be resolved from the Nuxt `srcDir`. |
| `locales` | | An array of [`LocaleDescriptor`] objects that represent all the configured locales. |
| `storage` | | An optional string that represents either a built-in storage name (`localStorage` / `cookie`), or a node import specifier that exports a custom storage adapter as the default export. |
| `broadcastLocaleChange` | `true` | An optional boolean value that determines whether to use [`BroadcastChannel`] (if available) to synchronize the locale changes between the tabs on the same origin. |
| `hostLanguageParam` | `'hl'` | An optional name of the query parameter used to override the user language (including automatically detected one). It is used to generate SEO meta tags. Using `null` will disable them. |
| `parserless` | `{ enabled: false }` | An optional [`ParserlessOptions`] object or [`ParserlessMode`] which configures the parserless mode. |
| Property | Default | Description |
| :---------------------- | :-----: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `defaultLocale` | | A string that represents the BCP 47 code of the locale to use by default. |
| `resolveDir` | `'.'` | An optional string that represents a directory where all the imports associated with the locales are being resolved. If it's relative, then it will be resolved against the Nuxt `srcDir` directory. If this property is not set, modules will be resolved from the Nuxt `srcDir`. |
| `locales` | | An array of [`LocaleDescriptor`] objects that represent all the configured locales. |
| `storage` | | An optional string that represents either a built-in storage name (`localStorage` / `cookie`), or a node import specifier that exports a custom storage adapter as the default export. |
| `broadcastLocaleChange` | `true` | An optional boolean value that determines whether to use [`BroadcastChannel`] (if available) to synchronize the locale changes between the tabs on the same origin. |
| `hostLanguageParam` | `'hl'` | **Deprecated.** An optional name of the query parameter used to override the user language (including automatically detected one). It is used to generate SEO meta tags. Using `null` will disable them. |
| `parserless` | `<...>` | An optional [`ParserlessOptions`] object or [`ParserlessMode`] which configures the parserless mode. |
| `seo` | `<...>` | An optional [`SEOOptions`] object which configures automatic head tags to improve discoverability of other languages by search engines. |
[`BroadcastChannel`]: https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel
[`ParserlessOptions`]: #parserlessoptions
@@ -131,9 +132,9 @@ Represents an import source for the messages file. It is similar to the [`Import
Represents options for the parserless mode.
| Property | Description |
| :-------- | :----------------------------------------------------------------------- |
| `enabled` | A `ParserlessMode` value representing the status of the parserless mode. |
| Property | Default | Description |
| :-------- | :-----: | :----------------------------------------------------------------------- |
| `enabled` | `false` | A `ParserlessMode` value representing the status of the parserless mode. |
## `ParserlessMode`
@@ -144,3 +145,17 @@ A string or boolean value representing the status of the parserless mode.
| `always` | `true` | Parserless mode is always enabled, regardless of the mode in which Nuxt is running. |
| `only-prod` | | Parserless mode is only enabled when building Nuxt app for production. |
| `never` | `false` | Parserless mode is never enabled, the parser is always present in the runtime. |
## `SEOOptions`
[`SEOOptions`]: #seooptions
Represents options for the automatic head tags.
By default VIntl will add `<link>` tags for every language to make search engines aware of other languages, you can disable this by setting `enabled` to `false`.
| Property | Default | Description |
| :----------------------- | :-----: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `enabled` | `true` | A boolean value representing whether VIntl should automatically add `<link>` tags to `<head>` of the site. These tags make search engines aware that your site is provided in different languages. |
| `hostLanguageParameter`: | `hl` | A string value representing the query parameter that VIntl would use to configure the language of the site. |
| `baseURL` | | **Recommended.** An optional string value representing the base URL of the site. If not set, VIntl will try to guess the URL based on inital request URL or the current `window.location`. |
+6
View File
@@ -8,6 +8,9 @@
"index.other-page": {
"message": "To the other page"
},
"index.use-automatic": {
"message": "Use automatic"
},
"language": {
"message": "Language"
},
@@ -17,6 +20,9 @@
"other-page.back": {
"message": "Go back"
},
"other-page.description": {
"message": "You must've clicked me a thousand times"
},
"other-page.title": {
"message": "Hello from the other page!"
}
+1 -1
View File
@@ -10,7 +10,7 @@
"generate": "nuxi generate",
"preview": "nuxi preview",
"lint": "eslint --cache .",
"intl:extract": "formatjs extract \"{,components,composables,layouts,middleware,modules,pages,plugins,utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" --ignore '**/*.d.ts' --ignore 'node_modules' --out-file locales/en-US.json --format simple",
"intl:extract": "formatjs extract \"{,components,composables,layouts,middleware,modules,pages,plugins,utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" --ignore '**/*.d.ts' --ignore 'node_modules' --out-file locales/en-US.json --format crowdin",
"start": "node .output/server/index.mjs"
},
"devDependencies": {
+56 -23
View File
@@ -23,47 +23,80 @@ const messages = defineMessages({
id: 'index.other-page',
defaultMessage: 'To the other page',
},
useAutomatic: {
id: 'index.use-automatic',
defaultMessage: 'Use automatic',
},
} as const)
const vintl = useVIntl()
const { formatMessage } = vintl
const changing = ref(false)
async function changeLocale(locale: string) {
if (changing.value) return
changing.value = true
try {
await vintl.changeLocale(locale)
} catch (err) {
console.error('Error changing locale', err)
} finally {
changing.value = false
}
}
const noop = () => {}
const currentLocale = computed({
get() {
return vintl.locale
},
set() {
// ignore
set(value) {
changeLocale(value).then(noop, noop)
},
})
async function onLocaleChange(e: Event) {
await vintl.changeLocale(
(e as Event & { target: HTMLSelectElement }).target.value,
)
}
const useAutomatic = computed({
get() {
return vintl.automatic
},
set(value) {
changeLocale(value ? 'auto' : vintl.locale).then(noop, noop)
},
})
</script>
<template>
<div>
<div>
<h3>{{ formatMessage(messages.options) }}</h3>
<label for="language-select">
{{ formatMessage(messages.language) }}
</label>
<select
id="language-select"
v-model="currentLocale"
@change="onLocaleChange"
>
<option
v-for="locale in [...$nuxt.$i18n.$locales.value.keys()]"
:key="locale.tag"
:value="locale.tag"
>
{{ locale.tag }}
</option>
</select>
<div>
<label>
<input v-model="useAutomatic" type="checkbox" />
{{ formatMessage(messages.useAutomatic) }}
</label>
</div>
<div>
<label>
{{ formatMessage(messages.language) }}
<select
id="language-select"
v-model="currentLocale"
:disabled="vintl.automatic"
@change="onLocaleChange"
>
<option
v-for="locale in [...$nuxt.$i18n.$locales.value.keys()]"
:key="locale.tag"
:value="locale.tag"
>
{{ locale.tag }}
</option>
</select>
</label>
</div>
</div>
<div>
+3 -1
View File
@@ -28,7 +28,9 @@
"no-useless-constructor": "off",
"@typescript-eslint/no-useless-constructor": "warn",
"brace-style": "off",
"vue/singleline-html-element-content-newline": "off"
"vue/singleline-html-element-content-newline": "off",
"vue/max-attributes-per-line": "off",
"vue/html-self-closing": "off"
},
"parserOptions": {
"extraFileExtensions": [".vue"]
+42
View File
@@ -1,5 +1,47 @@
# @vintl/nuxt
## 1.4.0
### Minor Changes
- e1c501c: Improve alternate links generation
Generation of `alternate` `hreflang` links has been improved to properly use absolute URLs.
Since there's no good way to know the URL of the site, there's now also `seo.baseURL` option which allows to set site's proper domain.
`hostLanguageParam` option has been deperecated in favour of `seo.hostLanguageParameter`, which functions almost the same way, except it does not accept `null`. If you want to disable generation of such tags or handle them yourself, you can set `seo.enabled` to `false`.
See [Configuration](https://vintl-nuxt.netlify.app/introduction/configuration#seooptions) documentation page for more details.
## 1.3.0
### Minor Changes
- 951f363: Add graceful fallback for unknown locales in storage
### Patch Changes
- ae71089: Use automatic locale if none returned by the storage
Fixed a bug where automatic locale would not be restored from the storage properly on the next page reload, despite it being saved properly.
## 1.2.3
### Patch Changes
- db449d4: Fix missing options in the newer Nuxt versions
## 1.2.2
### Patch Changes
- 2590b2f: Downgrade and pin versions of FormatJS packages
Newest versions of FormatJS packages contain exports map that result in illegal ESM as CJS imports. This downgrades them
For more details see the issue at https://github.com/formatjs/formatjs/issues/4126.
## 1.2.1
### Patch Changes
+10 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@vintl/nuxt",
"version": "1.2.1",
"version": "1.4.0",
"description": "Nuxt Module for VIntl integration",
"keywords": [
"i18n",
@@ -47,20 +47,23 @@
"@vintl-dev/eslint-config-peony": "workspace:^",
"hookable": "^5.5.3",
"prettier-plugin-jsdoc": "^0.4.2",
"typescript": "^5.1.3"
"typescript": "^5.1.3",
"vue-router": "^4.2.4"
},
"dependencies": {
"@formatjs/intl": "^2.8.0",
"@formatjs/intl": "2.7.2",
"@formatjs/intl-localematcher": "^0.4.0",
"@nuxt/kit": "^3.5.3",
"@vintl/unplugin": "^1.2.1",
"@vintl/vintl": "^4.2.0",
"@vintl/unplugin": "^1.2.4",
"@vintl/vintl": "^4.2.1",
"astring": "^1.8.6",
"consola": "^3.1.0",
"hash-sum": "^2.0.0",
"import-meta-resolve": "^3.0.0",
"pathe": "^1.1.1",
"picocolors": "^1.0.0",
"slash": "^5.1.0",
"zod": "^3.21.4",
"consola": "^3.1.0"
"ufo": "^1.1.2",
"zod": "^3.21.4"
}
}
+6 -6
View File
@@ -28,9 +28,9 @@ const optionsFilePath = 'i18n/options.mjs'
type _InputModuleOptions = typeof moduleOptionsSchema
export interface InputModuleOptions extends t.input<_InputModuleOptions> {}
export interface ModuleOptions extends t.input<_InputModuleOptions> {}
export default defineNuxtModule<InputModuleOptions>({
export default defineNuxtModule<ModuleOptions>({
meta: {
name: '@vintl/nuxt',
configKey: 'vintl',
@@ -157,12 +157,12 @@ export default defineNuxtModule<InputModuleOptions>({
if (Array.isArray(aliases)) {
aliases.push({
find: '@formatjs/icu-messageformat-parser',
replacement: '@formatjs/icu-messageformat-parser/no-parser',
replacement: '@formatjs/icu-messageformat-parser/lib/no-parser',
})
} else {
Object.assign(aliases, {
'@formatjs/icu-messageformat-parser':
'@formatjs/icu-messageformat-parser/no-parser',
'@formatjs/icu-messageformat-parser/lib/no-parser',
})
}
})
@@ -172,11 +172,11 @@ export default defineNuxtModule<InputModuleOptions>({
if (Array.isArray(aliases)) {
aliases.push({
name: '@formatjs/icu-messageformat-parser',
alias: '@formatjs/icu-messageformat-parser/no-parser',
alias: '@formatjs/icu-messageformat-parser/lib/no-parser',
})
} else {
aliases['@formatjs/icu-messageformat-parser'] =
'@formatjs/icu-messageformat-parser/no-parser'
'@formatjs/icu-messageformat-parser/lib/no-parser'
}
})
}
+2 -2
View File
@@ -1020,8 +1020,8 @@ export function generate(
new ExportNamedDeclaration().setDeclaration(
new VariableDeclaration('const', [
new VariableDeclarator(
new Identifier('hostLanguageParam'),
new Literal(opts.hostLanguageParam),
new Identifier('seo'),
new Literal(null).setRaw(JSON.stringify(opts.seo)),
),
]),
),
+30 -9
View File
@@ -1,11 +1,11 @@
import { useHead } from '#imports'
import type { IntlController } from '@vintl/vintl/controller'
import { computed } from 'vue'
import { useRouter } from 'nuxt/app'
import type { LocationQuery, useRouter as _useRouter$type } from 'vue-router'
import { useRouter as _useRouter, useRequestURL } from 'nuxt/app'
import { joinURL } from 'ufo'
type LocationQuery = ReturnType<
typeof useRouter
>['currentRoute']['value']['query']
const useRouter = _useRouter as typeof _useRouter$type
// I wish there was a better way to do this T_T
function getSeachParams(query: LocationQuery) {
@@ -35,11 +35,32 @@ type LangHrefLink = {
href: string
}
export function initHead(controller: IntlController<any>, hlParam: string) {
interface HeadOptions {
hostLanguageParameter: string
baseURL?: string
}
export function initHead(
controller: IntlController<any>,
options: HeadOptions,
) {
const router = useRouter()
const currentRoute = computed(() => router.currentRoute.value)
const requestURL = useRequestURL()
const normalizeURL = (url: string) => {
try {
return options.baseURL == null
? new URL(url, requestURL).toString()
: joinURL(options.baseURL, url)
} catch (err) {
console.error(`[vintl] cannot normalize url: ${String(err)}`)
return url
}
}
useHead({
htmlAttrs: {
lang: () => controller.$config.locale,
@@ -55,12 +76,12 @@ export function initHead(controller: IntlController<any>, hlParam: string) {
{
const sp = new URLSearchParams(query)
sp.delete(hlParam)
sp.delete(options.hostLanguageParameter)
defaultEntry = {
// key: `hreflang-default`,
rel: 'alternate',
hreflang: 'x-default',
href: withQueryParams(path, sp.toString()),
href: normalizeURL(withQueryParams(path, sp.toString())),
}
}
@@ -71,13 +92,13 @@ export function initHead(controller: IntlController<any>, hlParam: string) {
if (hrefLangs.has(hrefLang)) continue
const sp = new URLSearchParams(query)
sp.set(hlParam, locale.tag)
sp.set(options.hostLanguageParameter, locale.tag)
hrefLangs.set(hrefLang, {
// key: `hreflang-${locale.tag}`,
rel: 'alternate',
hreflang: hrefLang,
href: withQueryParams(path, sp.toString()),
href: normalizeURL(withQueryParams(path, sp.toString())),
})
}
+17 -5
View File
@@ -3,8 +3,8 @@ import {
localeDefinitions,
storageAdapterFactory,
broadcastLocaleChange,
hostLanguageParam,
parserless,
seo as seoOptions,
} from '@vintl/nuxt-runtime/options'
import type { LocaleDescriptor, MessageValueType } from '@vintl/vintl'
import type { IntlController } from '@vintl/vintl/controller'
@@ -21,6 +21,7 @@ import { useAcceptLanguageHeader } from '@vintl/vintl/sources/header'
import { defineNuxtPlugin } from 'nuxt/app'
import { syncCaller } from './utils/hookable.js'
import { initHead } from './head.js'
import { match as matchLocales } from '@formatjs/intl-localematcher'
export default defineNuxtPlugin(async (nuxtApp) => {
const locales: LocaleDescriptor[] = Object.entries(localeDefinitions).map(
@@ -41,8 +42,8 @@ export default defineNuxtPlugin(async (nuxtApp) => {
}
}
if (hostLanguageParam != null) {
let hlLocale = nuxtApp._route.query[hostLanguageParam]
if (seoOptions.enabled) {
let hlLocale = nuxtApp._route.query[seoOptions.hostLanguageParameter]
if (Array.isArray(hlLocale)) {
hlLocale = hlLocale[0]
@@ -53,12 +54,23 @@ export default defineNuxtPlugin(async (nuxtApp) => {
}
}
if (locale != null) {
const match = matchLocales(
[locale],
locales.map(({ tag }) => tag),
'en-x-placeholder',
)
locale = match == 'en-x-placeholder' ? undefined : match
}
const plugin = createPlugin<MessageValueType>({
injectInto: [nuxtApp],
controllerOpts: {
defaultLocale,
locales,
locale,
usePreferredLocale: locale == null,
listen: {
error(event) {
nuxtApp.hooks.callHookWith(syncCaller, 'i18n:error', {
@@ -139,8 +151,8 @@ export default defineNuxtPlugin(async (nuxtApp) => {
setupBroadcasting(controller)
}
if (hostLanguageParam != null) {
nuxtApp.hook('vue:setup', () => initHead(controller, hostLanguageParam!))
if (seoOptions.enabled) {
nuxtApp.hook('vue:setup', () => initHead(controller, seoOptions))
}
await nuxtApp.callHook('i18n:ready', controller)
@@ -2,6 +2,7 @@ import { z as t } from 'zod'
import { tSwitch } from '../utils/zod-utils.js'
import { languageTagSchema } from './language-tag.js'
import { localeDescriptorSchema } from './locales.js'
import { seoOptions } from './seo.js'
const parselessModeEnumSchema = t.enum(['always', 'only-prod', 'never'])
@@ -167,6 +168,7 @@ export const moduleOptionsSchema = t
* user language. `null` to disable. If this value is `null`, the SEO tags
* generation will be disabled.
*
* @deprecated Use `seo` options instead.
* @default 'hl' // For example, ?hl=en to use English locale (if defined).
*/
hostLanguageParam: t
@@ -174,8 +176,10 @@ export const moduleOptionsSchema = t
.describe(
'Name of the host language URL parameter, used to override the default or user language.',
)
.nullable()
.default('hl'),
.optional()
.nullable(),
seo: seoOptions.optional(),
/**
* Configuration options for the parserless mode, a mode in which the parser
@@ -197,6 +201,21 @@ export const moduleOptionsSchema = t
}
}).default('only-prod'),
})
.transform((from) => {
if (from.seo === undefined) {
let hostLanguageParam = from.hostLanguageParam
if (hostLanguageParam === undefined) {
hostLanguageParam = 'hl'
}
from.seo = seoOptions.parse({
enabled: hostLanguageParam != null,
hostLanguageParameter: hostLanguageParam ?? undefined,
})
}
return from as typeof from & { seo: t.output<typeof seoOptions> }
})
.refine((value) => {
return value.locales.some((locale) => locale.tag === value.defaultLocale)
}, 'Default locale must be defined')
+32
View File
@@ -0,0 +1,32 @@
import { z as t } from 'zod'
export const seoOptions = t.object({
/** Whether CEO features are enabled. */
enabled: t.boolean().default(true),
/**
* Name of the host language URL parameter, used to override the default or
* user language.
*
* @default 'hl' // For example, ?hl=en to use English locale (if defined).
*/
hostLanguageParameter: t
.string()
.describe(
'Name of the host language URL parameter, used to override the default or user language.',
)
.optional()
.default('hl'),
/**
* Base URL at which the site will be available. This is required to generate
* absolute hreflang links. Without this, VIntl will try to guess the URL
* based on the server request URL / current `window.location`.
*/
baseURL: t
.string()
.describe(
'Base URL at which the site will be available. This is required to generate absolute hreflang links. ',
)
.optional(),
})
+27
View File
@@ -64,4 +64,31 @@ declare module '@vintl/nuxt-runtime/options' {
* descriptor.
*/
export const parserless: boolean
export interface SEOOptions {
/**
* Whether SEO features are enabled.
*
* @default true
*/
enabled: boolean
/**
* Name of the host language URL parameter, used to override the default or
* user language.
*
* @default 'hl' // For example, ?hl=en to use English locale (if defined).
*/
hostLanguageParameter: string
/**
* Base URL at which the site will be available. This is required to generate
* absolute hreflang links. Without this, VIntl must try to guess the URL
* based on the server request URL / current `window.location`.
*/
baseURL?: string
}
/** SEO options. */
export const seo: SEOOptions
}
+169 -112
View File
@@ -101,17 +101,20 @@ importers:
packages/vintl-nuxt:
dependencies:
'@formatjs/intl':
specifier: ^2.8.0
version: 2.8.0(typescript@5.1.3)
specifier: 2.7.2
version: 2.7.2(typescript@5.1.3)
'@formatjs/intl-localematcher':
specifier: ^0.4.0
version: 0.4.0
'@nuxt/kit':
specifier: ^3.5.3
version: 3.5.3(rollup@3.23.0)
'@vintl/unplugin':
specifier: ^1.2.1
version: 1.2.1(rollup@3.23.0)(webpack@5.83.1)
specifier: ^1.2.4
version: 1.2.4(rollup@3.23.0)(webpack@5.83.1)
'@vintl/vintl':
specifier: ^4.2.0
version: 4.2.0(typescript@5.1.3)(vue@3.3.4)
specifier: ^4.2.1
version: 4.2.1(typescript@5.1.3)(vue@3.3.4)
astring:
specifier: ^1.8.6
version: 1.8.6
@@ -133,6 +136,9 @@ importers:
slash:
specifier: ^5.1.0
version: 5.1.0
ufo:
specifier: ^1.1.2
version: 1.1.2
zod:
specifier: ^3.21.4
version: 3.21.4
@@ -164,6 +170,9 @@ importers:
typescript:
specifier: ^5.1.3
version: 5.1.3
vue-router:
specifier: ^4.2.4
version: 4.2.4(vue@3.3.4)
packages:
@@ -180,6 +189,13 @@ packages:
dependencies:
'@babel/highlight': 7.18.6
/@babel/code-frame@7.22.5:
resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/highlight': 7.22.5
dev: true
/@babel/compat-data@7.21.9:
resolution: {integrity: sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==}
engines: {node: '>=6.9.0'}
@@ -353,6 +369,10 @@ packages:
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
engines: {node: '>=6.9.0'}
/@babel/helper-validator-identifier@7.22.5:
resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
engines: {node: '>=6.9.0'}
/@babel/helper-validator-option@7.21.0:
resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
engines: {node: '>=6.9.0'}
@@ -371,10 +391,19 @@ packages:
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': 7.19.1
'@babel/helper-validator-identifier': 7.22.5
chalk: 2.4.2
js-tokens: 4.0.0
/@babel/highlight@7.22.5:
resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': 7.22.5
chalk: 2.4.2
js-tokens: 4.0.0
dev: true
/@babel/parser@7.21.9:
resolution: {integrity: sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==}
engines: {node: '>=6.0.0'}
@@ -963,25 +992,12 @@ packages:
tslib: 2.5.2
dev: false
/@formatjs/ecma402-abstract@1.16.0:
resolution: {integrity: sha512-qIH2cmG/oHGrVdApbqDf6/YR+B2A4NdkBjKLeq369OMVkqMFsC5oPSP1xpiyL1cAn+PbNEZHxwOVMYD/C76c6g==}
dependencies:
'@formatjs/intl-localematcher': 0.3.0
tslib: 2.5.2
dev: false
/@formatjs/fast-memoize@2.0.1:
resolution: {integrity: sha512-M2GgV+qJn5WJQAYewz7q2Cdl6fobQa69S1AzSM2y0P68ZDbK5cWrJIcPCO395Of1ksftGZoOt4LYCO/j9BKBSA==}
dependencies:
tslib: 2.5.2
dev: false
/@formatjs/fast-memoize@2.1.0:
resolution: {integrity: sha512-w7IzF6Okx2tQXRVlT/cXI4dfS0bvKHhWE5Kn7ajqDVYH4nksUFOMU21Yd4zDENxZ8mFb7IBu7bOopnB2VxZQeA==}
dependencies:
tslib: 2.5.2
dev: false
/@formatjs/icu-messageformat-parser@2.4.0:
resolution: {integrity: sha512-6Dh5Z/gp4F/HovXXu/vmd0If5NbYLB5dZrmhWVNb+BOGOEU3wt7Z/83KY1dtd7IDhAnYHasbmKE1RbTE0J+3hw==}
dependencies:
@@ -990,14 +1006,6 @@ packages:
tslib: 2.5.2
dev: false
/@formatjs/icu-messageformat-parser@2.5.0:
resolution: {integrity: sha512-8AwKRkVIZzVlvZwio1TcLVvUbJw0up1joa8//JIxKVeflqKiZwfzCGAelZt/4hHCEQf9NECose//nODnmBEkNQ==}
dependencies:
'@formatjs/ecma402-abstract': 1.16.0
'@formatjs/icu-skeleton-parser': 1.5.0
tslib: 2.5.2
dev: false
/@formatjs/icu-skeleton-parser@1.4.0:
resolution: {integrity: sha512-Qq347VM616rVLkvN6QsKJELazRyNlbCiN47LdH0Mc5U7E2xV0vatiVhGqd3KFgbc055BvtnUXR7XX60dCGFuWg==}
dependencies:
@@ -1005,26 +1013,19 @@ packages:
tslib: 2.5.2
dev: false
/@formatjs/icu-skeleton-parser@1.5.0:
resolution: {integrity: sha512-R/wOg/hxh3JWNB4LHYfNtIe8PC39mkzplh6gtrqCY33EqYeUFEGOYTWJrkXNcoRXlZWQtfrH6REch5r57tAyMQ==}
/@formatjs/intl-displaynames@6.3.2:
resolution: {integrity: sha512-kBOh0O7QYKLUqaZujLSEF2+au017plPp63R6Hrokl+oDtLyTt9y9pEuCTbOKh/P8CC9THnDLKRKgeVWZw5Ek8A==}
dependencies:
'@formatjs/ecma402-abstract': 1.16.0
'@formatjs/ecma402-abstract': 1.15.0
'@formatjs/intl-localematcher': 0.2.32
tslib: 2.5.2
dev: false
/@formatjs/intl-displaynames@6.4.0:
resolution: {integrity: sha512-5M4ok7tY5UI/Qzq2jULVrl17PZqyOgcSRW/7VXfVXyD0FG76TlmhuIKENiIYkFn5z3FlB+XMiQczvwqK+9ORJw==}
/@formatjs/intl-listformat@7.2.2:
resolution: {integrity: sha512-YIruRGwUrmgVOXjWi6VbwPcRNBkEfgK2DFjyyqopCmpfJ+39vnl46oLpVchErnuXs6kkARy5GcGaGV7xRsH4lw==}
dependencies:
'@formatjs/ecma402-abstract': 1.16.0
'@formatjs/intl-localematcher': 0.3.0
tslib: 2.5.2
dev: false
/@formatjs/intl-listformat@7.3.0:
resolution: {integrity: sha512-HWSST1TBcKi5frneeDi9O6YYp9NWb7HNrDSbCgnBLmz/9rpGycdp9c5bTKJqYFN6apw3E/kIo+kZHjVeiFITRQ==}
dependencies:
'@formatjs/ecma402-abstract': 1.16.0
'@formatjs/intl-localematcher': 0.3.0
'@formatjs/ecma402-abstract': 1.15.0
'@formatjs/intl-localematcher': 0.2.32
tslib: 2.5.2
dev: false
@@ -1034,26 +1035,26 @@ packages:
tslib: 2.5.2
dev: false
/@formatjs/intl-localematcher@0.3.0:
resolution: {integrity: sha512-NFoxXX3dtZ6B53NlCErq181NxN/noMZOWKHfcEPQRNfV0a19THxyjxu2RTSNS3532wGm6fOdid5qsBQWg0Rhtw==}
/@formatjs/intl-localematcher@0.4.0:
resolution: {integrity: sha512-bRTd+rKomvfdS4QDlVJ6TA/Jx1F2h/TBVO5LjvhQ7QPPHp19oPNMIum7W2CMEReq/zPxpmCeB31F9+5gl/qtvw==}
dependencies:
tslib: 2.5.2
dev: false
/@formatjs/intl@2.8.0(typescript@5.1.3):
resolution: {integrity: sha512-RRp4BMG9v7vBegbX1UuDMfoBOQljDjcx1clY1XV8D5qn6m5w4gyJFCJ/iiG6eaBBRNAJrqGdszi0Ry6UNiWDsQ==}
/@formatjs/intl@2.7.2(typescript@5.1.3):
resolution: {integrity: sha512-ziiQfnXwY0/rXhtohSAmYMqDjRsihoMKdl8H2aA+FvxG9638E0XrvfBFCb+1HhimNiuqRz5fTY7F/bZtsJxsjA==}
peerDependencies:
typescript: ^4.7 || 5
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@formatjs/ecma402-abstract': 1.16.0
'@formatjs/fast-memoize': 2.1.0
'@formatjs/icu-messageformat-parser': 2.5.0
'@formatjs/intl-displaynames': 6.4.0
'@formatjs/intl-listformat': 7.3.0
intl-messageformat: 10.4.0
'@formatjs/ecma402-abstract': 1.15.0
'@formatjs/fast-memoize': 2.0.1
'@formatjs/icu-messageformat-parser': 2.4.0
'@formatjs/intl-displaynames': 6.3.2
'@formatjs/intl-listformat': 7.2.2
intl-messageformat: 10.3.5
tslib: 2.5.2
typescript: 5.1.3
dev: false
@@ -1109,6 +1110,18 @@ packages:
resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
dev: true
/@isaacs/cliui@8.0.2:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
dependencies:
string-width: 5.1.2
string-width-cjs: /string-width@4.2.3
strip-ansi: 7.1.0
strip-ansi-cjs: /strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: /wrap-ansi@7.0.0
dev: false
/@jridgewell/gen-mapping@0.3.3:
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
engines: {node: '>=6.0.0'}
@@ -1661,6 +1674,13 @@ packages:
- webpack-cli
dev: true
/@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
requiresBuild: true
dev: false
optional: true
/@rollup/plugin-alias@5.0.0(rollup@3.23.0):
resolution: {integrity: sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==}
engines: {node: '>=14.0.0'}
@@ -2258,8 +2278,8 @@ packages:
- supports-color
dev: true
/@vintl/unplugin@1.2.1(rollup@3.23.0)(webpack@5.83.1):
resolution: {integrity: sha512-waUgWmGQa1Wxob0LnG5irrO3fwisJGztVvF8K6xDZnezr3qciG9hAlOQcvq6Ef33VYQX5ulbN+vL1C3xio80rg==}
/@vintl/unplugin@1.2.4(rollup@3.23.0)(webpack@5.83.1):
resolution: {integrity: sha512-yGhUGcjqaREuGgm3ULokmovPuaij0hJf8lQoyFhbl1mLHW+GaP3y23WBzr87+t4/T341HHM2KaOTjf7my8JqAg==}
engines: {node: '>=16'}
peerDependencies:
rollup: ^3
@@ -2276,8 +2296,8 @@ packages:
'@formatjs/cli-lib': 6.1.1
'@formatjs/icu-messageformat-parser': 2.4.0
'@rollup/pluginutils': 5.0.2(rollup@3.23.0)
glob: 9.3.5
import-meta-resolve: 2.2.2
glob: 10.2.7
import-meta-resolve: 3.0.0
pathe: 1.1.1
rollup: 3.23.0
unplugin: 1.3.1
@@ -2288,14 +2308,14 @@ packages:
- ts-jest
dev: false
/@vintl/vintl@4.2.0(typescript@5.1.3)(vue@3.3.4):
resolution: {integrity: sha512-wE805LYsmlkfEzKTw+c+UZBxQe2D3boKa3M5mFKB2zVvOsRNH0xUJq9hFdOqreAvm7A2AIkFbFRqcdjaB58w/Q==}
/@vintl/vintl@4.2.1(typescript@5.1.3)(vue@3.3.4):
resolution: {integrity: sha512-ofHXpTafQrSLmW6J9O5iTo7p0juheWLc4vzTtm94q8TR1un894D88p0DFY7mwL1bcooauwBsQdMvCHUI2eTQIQ==}
peerDependencies:
vue: ^3.2.47
dependencies:
'@braw/async-computed': 5.0.2(vue@3.3.4)
'@formatjs/icu-messageformat-parser': 2.4.0
'@formatjs/intl': 2.8.0(typescript@5.1.3)
'@formatjs/intl': 2.7.2(typescript@5.1.3)
'@formatjs/intl-localematcher': 0.2.32
intl-messageformat: 10.3.5
vue: 3.3.4
@@ -2704,6 +2724,11 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
/ansi-regex@6.0.1:
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
engines: {node: '>=12'}
dev: false
/ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
@@ -2716,6 +2741,11 @@ packages:
dependencies:
color-convert: 2.0.1
/ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
dev: false
/anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
@@ -3672,6 +3702,10 @@ packages:
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
dev: true
/eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: false
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: true
@@ -3681,7 +3715,10 @@ packages:
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
/emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
dev: false
/emoticon@4.0.1:
resolution: {integrity: sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==}
@@ -4201,6 +4238,14 @@ packages:
is-callable: 1.2.7
dev: true
/foreground-child@3.1.1:
resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
engines: {node: '>=14'}
dependencies:
cross-spawn: 7.0.3
signal-exit: 4.0.2
dev: false
/formdata-polyfill@4.0.10:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
@@ -4391,6 +4436,18 @@ packages:
/glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
/glob@10.2.7:
resolution: {integrity: sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
dependencies:
foreground-child: 3.1.1
jackspeak: 2.2.1
minimatch: 9.0.1
minipass: 6.0.2
path-scurry: 1.9.2
dev: false
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
@@ -4412,16 +4469,6 @@ packages:
once: 1.4.0
dev: true
/glob@9.3.5:
resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
fs.realpath: 1.0.0
minimatch: 8.0.4
minipass: 4.2.8
path-scurry: 1.9.2
dev: false
/globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
@@ -4726,10 +4773,6 @@ packages:
parent-module: 1.0.1
resolve-from: 4.0.0
/import-meta-resolve@2.2.2:
resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==}
dev: false
/import-meta-resolve@3.0.0:
resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==}
dev: false
@@ -4795,15 +4838,6 @@ packages:
tslib: 2.5.2
dev: false
/intl-messageformat@10.4.0:
resolution: {integrity: sha512-WKmvL2ATvsTJ0CMkO1Hs6f87QlOYZ10opvOJtj0+I3RAQCBxrY8xA3QvVJPJHTS2ru0B7q/kCDyJE1oiiElgyA==}
dependencies:
'@formatjs/ecma402-abstract': 1.16.0
'@formatjs/fast-memoize': 2.1.0
'@formatjs/icu-messageformat-parser': 2.5.0
tslib: 2.5.2
dev: false
/ioredis@5.3.2:
resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==}
engines: {node: '>=12.22.0'}
@@ -4946,7 +4980,6 @@ packages:
/is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
dev: true
/is-generator-function@1.0.10:
resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
@@ -5123,6 +5156,15 @@ packages:
/isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
/jackspeak@2.2.1:
resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==}
engines: {node: '>=14'}
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
dev: false
/jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
@@ -5398,8 +5440,8 @@ packages:
dependencies:
yallist: 4.0.0
/lru-cache@9.1.1:
resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==}
/lru-cache@9.1.2:
resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==}
engines: {node: 14 || >=16.14}
/magic-string-ast@0.1.2:
@@ -5940,19 +5982,11 @@ packages:
brace-expansion: 2.0.1
dev: true
/minimatch@8.0.4:
resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
brace-expansion: 2.0.1
dev: false
/minimatch@9.0.1:
resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
brace-expansion: 2.0.1
dev: true
/minimist-options@4.1.0:
resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
@@ -5969,11 +6003,6 @@ packages:
dependencies:
yallist: 4.0.0
/minipass@4.2.8:
resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
engines: {node: '>=8'}
dev: false
/minipass@5.0.0:
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
engines: {node: '>=8'}
@@ -6378,12 +6407,12 @@ packages:
unenv: 1.5.1
unimport: 3.0.7(rollup@3.23.0)
unplugin: 1.3.1
unplugin-vue-router: 0.6.4(rollup@3.23.0)(vue-router@4.2.2)(vue@3.3.4)
unplugin-vue-router: 0.6.4(rollup@3.23.0)(vue-router@4.2.4)(vue@3.3.4)
untyped: 1.3.2
vue: 3.3.4
vue-bundle-renderer: 1.0.3
vue-devtools-stub: 0.1.0
vue-router: 4.2.2(vue@3.3.4)
vue-router: 4.2.4(vue@3.3.4)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -6639,7 +6668,7 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
dependencies:
'@babel/code-frame': 7.21.4
'@babel/code-frame': 7.22.5
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -6705,7 +6734,7 @@ packages:
resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
lru-cache: 9.1.1
lru-cache: 9.1.2
minipass: 6.0.2
dev: false
@@ -7541,7 +7570,7 @@ packages:
rollup: 3.23.0
typescript: 5.1.3
optionalDependencies:
'@babel/code-frame': 7.21.4
'@babel/code-frame': 7.22.5
dev: true
/rollup-plugin-visualizer@5.9.0(rollup@3.23.0):
@@ -7733,6 +7762,11 @@ packages:
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
/signal-exit@4.0.2:
resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==}
engines: {node: '>=14'}
dev: false
/sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
dev: true
@@ -7889,7 +7923,15 @@ packages:
emoji-regex: 8.0.0
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
dev: true
/string-width@5.1.2:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
strip-ansi: 7.1.0
dev: false
/string.prototype.trim@1.2.7:
resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
@@ -7940,6 +7982,13 @@ packages:
dependencies:
ansi-regex: 5.0.1
/strip-ansi@7.1.0:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
dependencies:
ansi-regex: 6.0.1
dev: false
/strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
@@ -8523,7 +8572,7 @@ packages:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
/unplugin-vue-router@0.6.4(rollup@3.23.0)(vue-router@4.2.2)(vue@3.3.4):
/unplugin-vue-router@0.6.4(rollup@3.23.0)(vue-router@4.2.4)(vue@3.3.4):
resolution: {integrity: sha512-9THVhhtbVFxbsIibjK59oPwMI1UCxRWRPX7azSkTUABsxovlOXJys5SJx0kd/0oKIqNJuYgkRfAgPuO77SqCOg==}
peerDependencies:
vue-router: ^4.1.0
@@ -8543,7 +8592,7 @@ packages:
pathe: 1.1.1
scule: 1.0.0
unplugin: 1.3.1
vue-router: 4.2.2(vue@3.3.4)
vue-router: 4.2.4(vue@3.3.4)
yaml: 2.3.0
transitivePeerDependencies:
- rollup
@@ -8596,7 +8645,7 @@ packages:
h3: 1.6.6
ioredis: 5.3.2
listhen: 1.0.4
lru-cache: 9.1.1
lru-cache: 9.1.2
mri: 1.2.0
node-fetch-native: 1.1.1
ofetch: 1.0.1
@@ -8905,8 +8954,8 @@ packages:
transitivePeerDependencies:
- supports-color
/vue-router@4.2.2(vue@3.3.4):
resolution: {integrity: sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==}
/vue-router@4.2.4(vue@3.3.4):
resolution: {integrity: sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==}
peerDependencies:
vue: ^3.2.0
dependencies:
@@ -9123,7 +9172,15 @@ packages:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
dev: true
/wrap-ansi@8.1.0:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
dependencies:
ansi-styles: 6.2.1
string-width: 5.1.2
strip-ansi: 7.1.0
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}