refactor: updated i18n implementation in the admin dashboard (#3395)
* feat: introduced new unplugin i18n and removed the old vite i18n package * refactor: updated vite config to support the new plugin * refactor: removed irrelevant logic from the i18n module
This commit is contained in:
committed by
GitHub
parent
17d6ae15a5
commit
6c63a8dc28
@@ -19,6 +19,7 @@
|
||||
"@graphql-typed-document-node/core": "^3.1.1",
|
||||
"@hoppscotch/ui": "workspace:^",
|
||||
"@hoppscotch/vue-toasted": "^0.1.0",
|
||||
"@intlify/unplugin-vue-i18n": "^1.2.0",
|
||||
"@types/cors": "^2.8.13",
|
||||
"@types/express": "^4.17.15",
|
||||
"@urql/vue": "^1.0.4",
|
||||
@@ -53,7 +54,6 @@
|
||||
"@graphql-codegen/urql-introspection": "2.2.1",
|
||||
"@import-meta-env/cli": "^0.6.3",
|
||||
"@import-meta-env/unplugin": "^0.4.8",
|
||||
"@intlify/vite-plugin-vue-i18n": "^7.0.0",
|
||||
"@vitejs/plugin-vue": "^3.1.0",
|
||||
"@vue/compiler-sfc": "^3.2.6",
|
||||
"dotenv": "^16.0.3",
|
||||
|
||||
@@ -1,154 +1,16 @@
|
||||
import * as R from 'fp-ts/Record';
|
||||
import * as A from 'fp-ts/Array';
|
||||
import * as O from 'fp-ts/Option';
|
||||
import { pipe } from 'fp-ts/function';
|
||||
import { createI18n, I18n, I18nOptions } from 'vue-i18n';
|
||||
import { createI18n } from 'vue-i18n';
|
||||
import { HoppModule } from '.';
|
||||
|
||||
import languages from '../../languages.json';
|
||||
|
||||
import { throwError } from '../helpers/error';
|
||||
import { getLocalConfig, setLocalConfig } from '../helpers/localpersistence';
|
||||
|
||||
/*
|
||||
In context of this file, we have 2 main kinds of things.
|
||||
1. Locale -> A locale is termed as the i18n entries present in the /locales folder
|
||||
2. Language -> A language is an entry in the /languages.json folder
|
||||
|
||||
Each language entry should correspond to a locale entry.
|
||||
*/
|
||||
|
||||
/*
|
||||
* As we migrate out of Nuxt I18n into our own system for i18n management,
|
||||
* Some stuff has changed regarding how it works.
|
||||
*
|
||||
* The previous system works by using paths to represent locales to load.
|
||||
* Basically, /es/realtime will load the /realtime page but with 'es' language
|
||||
*
|
||||
* In the new system instead of relying on the lang code, we store the language
|
||||
* in the application local config store (localStorage). The URLs don't have
|
||||
* a locale path effect
|
||||
*/
|
||||
|
||||
// TODO: Syncing into settings ?
|
||||
|
||||
const LOCALES = import.meta.glob('../../locales/*.json');
|
||||
|
||||
setTimeout(() => {
|
||||
console.log(LOCALES);
|
||||
}, 1000);
|
||||
|
||||
type LanguagesDef = {
|
||||
code: string;
|
||||
file: string;
|
||||
iso: string;
|
||||
name: string;
|
||||
dir?: 'ltr' | 'rtl'; // Text Orientation (defaults to 'ltr')
|
||||
};
|
||||
|
||||
const FALLBACK_LANG_CODE = 'en';
|
||||
|
||||
// TypeScript cannot understand dir is restricted to "ltr" or "rtl" yet, hence assertion
|
||||
export const APP_LANGUAGES: LanguagesDef[] = languages as LanguagesDef[];
|
||||
|
||||
export const APP_LANG_CODES = languages.map(({ code }) => code);
|
||||
|
||||
export const FALLBACK_LANG = pipe(
|
||||
APP_LANGUAGES,
|
||||
A.findFirst((x) => x.code === FALLBACK_LANG_CODE),
|
||||
O.getOrElseW(() =>
|
||||
throwError(`Could not find the fallback language '${FALLBACK_LANG_CODE}'`)
|
||||
)
|
||||
);
|
||||
|
||||
// A reference to the i18n instance
|
||||
let i18nInstance: I18n<any, any, any> | null = null;
|
||||
|
||||
const resolveCurrentLocale = () =>
|
||||
pipe(
|
||||
// Resolve from locale and make sure it is in languages
|
||||
getLocalConfig('locale'),
|
||||
O.fromNullable,
|
||||
O.filter((locale) =>
|
||||
pipe(
|
||||
APP_LANGUAGES,
|
||||
A.some(({ code }) => code === locale)
|
||||
)
|
||||
),
|
||||
|
||||
// Else load from navigator.language
|
||||
O.alt(() =>
|
||||
pipe(
|
||||
APP_LANGUAGES,
|
||||
A.findFirst(({ code }) => navigator.language.startsWith(code)), // en-US should also match to en
|
||||
O.map(({ code }) => code)
|
||||
)
|
||||
),
|
||||
|
||||
// Else load fallback
|
||||
O.getOrElse(() => FALLBACK_LANG_CODE)
|
||||
);
|
||||
|
||||
/**
|
||||
* Changes the application language. This function returns a promise as
|
||||
* the locale files are lazy loaded on demand
|
||||
* @param locale The locale code of the language to load
|
||||
*/
|
||||
export const changeAppLanguage = async (locale: string) => {
|
||||
const localeData = (
|
||||
(await pipe(
|
||||
LOCALES,
|
||||
R.lookup(`../../locales/${locale}.json`),
|
||||
O.getOrElseW(() =>
|
||||
throwError(
|
||||
`Tried to change app language to non-existent locale '${locale}'`
|
||||
)
|
||||
)
|
||||
)()) as any
|
||||
).default;
|
||||
|
||||
if (!i18nInstance) {
|
||||
throw new Error('Tried to change language without active i18n instance');
|
||||
}
|
||||
|
||||
i18nInstance.global.setLocaleMessage(locale, localeData);
|
||||
|
||||
// TODO: Look into the type issues here
|
||||
i18nInstance.global.locale.value = locale;
|
||||
|
||||
setLocalConfig('locale', locale);
|
||||
};
|
||||
import messages from '@intlify/unplugin-vue-i18n/messages';
|
||||
|
||||
export default <HoppModule>{
|
||||
onVueAppInit(app) {
|
||||
const i18n = createI18n(<I18nOptions>{
|
||||
locale: 'en', // TODO: i18n system!
|
||||
const i18n = createI18n({
|
||||
locale: 'en',
|
||||
messages,
|
||||
fallbackLocale: 'en',
|
||||
legacy: false,
|
||||
allowComposition: true,
|
||||
});
|
||||
|
||||
app.use(i18n);
|
||||
|
||||
i18nInstance = i18n;
|
||||
|
||||
// TODO: Global loading state to hide the resolved lang loading
|
||||
const currentLocale = resolveCurrentLocale();
|
||||
changeAppLanguage(currentLocale);
|
||||
|
||||
setLocalConfig('locale', currentLocale);
|
||||
},
|
||||
onBeforeRouteChange(to, _, router) {
|
||||
// Convert old locale path format to new format
|
||||
const oldLocalePathLangCode = APP_LANG_CODES.find((langCode) =>
|
||||
to.path.startsWith(`/${langCode}/`)
|
||||
);
|
||||
|
||||
// Change language to the correct lang code
|
||||
if (oldLocalePathLangCode) {
|
||||
changeAppLanguage(oldLocalePathLangCode);
|
||||
|
||||
router.replace(to.path.substring(`/${oldLocalePathLangCode}`.length));
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
@@ -2,23 +2,20 @@ import { defineConfig } from 'vite';
|
||||
import vue from '@vitejs/plugin-vue';
|
||||
import { FileSystemIconLoader } from 'unplugin-icons/loaders';
|
||||
import Icons from 'unplugin-icons/vite';
|
||||
import Unfonts from "unplugin-fonts/vite";
|
||||
import Unfonts from 'unplugin-fonts/vite';
|
||||
import IconResolver from 'unplugin-icons/resolver';
|
||||
import Components from 'unplugin-vue-components/vite';
|
||||
import WindiCSS from 'vite-plugin-windicss';
|
||||
import Pages from 'vite-plugin-pages';
|
||||
import Layouts from 'vite-plugin-vue-layouts';
|
||||
import VueI18n from '@intlify/vite-plugin-vue-i18n';
|
||||
import path from 'path';
|
||||
import ImportMetaEnv from "@import-meta-env/unplugin"
|
||||
import ImportMetaEnv from '@import-meta-env/unplugin';
|
||||
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite';
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
envPrefix:
|
||||
process.env.HOPP_ALLOW_RUNTIME_ENV
|
||||
? "VITE_BUILDTIME_"
|
||||
: "VITE_",
|
||||
envDir: path.resolve(__dirname, "../.."),
|
||||
envPrefix: process.env.HOPP_ALLOW_RUNTIME_ENV ? 'VITE_BUILDTIME_' : 'VITE_',
|
||||
envDir: path.resolve(__dirname, '../..'),
|
||||
server: {
|
||||
port: 3100,
|
||||
},
|
||||
@@ -38,10 +35,10 @@ export default defineConfig({
|
||||
defaultLayout: 'default',
|
||||
layoutsDirs: 'src/layouts',
|
||||
}),
|
||||
VueI18n({
|
||||
VueI18nPlugin({
|
||||
runtimeOnly: false,
|
||||
compositionOnly: true,
|
||||
include: [path.resolve(__dirname, 'locales')],
|
||||
include: [path.resolve(__dirname, './locales/**')],
|
||||
}),
|
||||
WindiCSS({
|
||||
root: path.resolve(__dirname),
|
||||
@@ -78,24 +75,24 @@ export default defineConfig({
|
||||
fontsource: {
|
||||
families: [
|
||||
{
|
||||
name: "Inter Variable",
|
||||
variables: ["variable-full"],
|
||||
name: 'Inter Variable',
|
||||
variables: ['variable-full'],
|
||||
},
|
||||
{
|
||||
name: "Material Symbols Rounded Variable",
|
||||
variables: ["variable-full"],
|
||||
name: 'Material Symbols Rounded Variable',
|
||||
variables: ['variable-full'],
|
||||
},
|
||||
{
|
||||
name: "Roboto Mono Variable",
|
||||
variables: ["variable-full"],
|
||||
name: 'Roboto Mono Variable',
|
||||
variables: ['variable-full'],
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
}),
|
||||
process.env.HOPP_ALLOW_RUNTIME_ENV
|
||||
? ImportMetaEnv.vite({
|
||||
example: "../../.env.example",
|
||||
env: "../../.env",
|
||||
? ImportMetaEnv.vite({
|
||||
example: '../../.env.example',
|
||||
env: '../../.env',
|
||||
})
|
||||
: [],
|
||||
],
|
||||
|
||||
178
pnpm-lock.yaml
generated
178
pnpm-lock.yaml
generated
@@ -933,7 +933,7 @@ importers:
|
||||
version: 3.2.0(graphql@16.8.0)
|
||||
'@intlify/vite-plugin-vue-i18n':
|
||||
specifier: ^7.0.0
|
||||
version: 7.0.0(vite@3.2.4)(vue-i18n@9.2.2)
|
||||
version: 7.0.0(vite@4.4.9)(vue-i18n@9.2.2)
|
||||
'@rushstack/eslint-patch':
|
||||
specifier: ^1.3.3
|
||||
version: 1.3.3
|
||||
@@ -1039,6 +1039,9 @@ importers:
|
||||
'@hoppscotch/vue-toasted':
|
||||
specifier: ^0.1.0
|
||||
version: 0.1.0(vue@3.2.45)
|
||||
'@intlify/unplugin-vue-i18n':
|
||||
specifier: ^1.2.0
|
||||
version: 1.2.0(vue-i18n@9.2.2)
|
||||
'@types/cors':
|
||||
specifier: ^2.8.13
|
||||
version: 2.8.13
|
||||
@@ -1136,9 +1139,6 @@ importers:
|
||||
'@import-meta-env/unplugin':
|
||||
specifier: ^0.4.8
|
||||
version: 0.4.8(@import-meta-env/cli@0.6.3)(dotenv@16.3.1)
|
||||
'@intlify/vite-plugin-vue-i18n':
|
||||
specifier: ^7.0.0
|
||||
version: 7.0.0(vite@3.2.4)(vue-i18n@9.2.2)
|
||||
'@vitejs/plugin-vue':
|
||||
specifier: ^3.1.0
|
||||
version: 3.2.0(vite@3.2.4)(vue@3.2.45)
|
||||
@@ -1731,15 +1731,14 @@ packages:
|
||||
resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/highlight': 7.22.20
|
||||
'@babel/highlight': 7.18.6
|
||||
|
||||
/@babel/code-frame@7.22.10:
|
||||
resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/highlight': 7.22.20
|
||||
'@babel/highlight': 7.22.10
|
||||
chalk: 2.4.2
|
||||
dev: true
|
||||
|
||||
/@babel/code-frame@7.22.13:
|
||||
resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
|
||||
@@ -1963,6 +1962,10 @@ packages:
|
||||
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
/@babel/helper-validator-identifier@7.19.1:
|
||||
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
/@babel/helper-validator-identifier@7.22.20:
|
||||
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -1993,6 +1996,22 @@ packages:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
/@babel/highlight@7.18.6:
|
||||
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/helper-validator-identifier': 7.19.1
|
||||
chalk: 2.4.2
|
||||
js-tokens: 4.0.0
|
||||
|
||||
/@babel/highlight@7.22.10:
|
||||
resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/helper-validator-identifier': 7.22.5
|
||||
chalk: 2.4.2
|
||||
js-tokens: 4.0.0
|
||||
|
||||
/@babel/highlight@7.22.20:
|
||||
resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -2524,7 +2543,7 @@ packages:
|
||||
'@babel/helper-hoist-variables': 7.22.5
|
||||
'@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.10)
|
||||
'@babel/helper-plugin-utils': 7.22.5
|
||||
'@babel/helper-validator-identifier': 7.22.20
|
||||
'@babel/helper-validator-identifier': 7.22.5
|
||||
|
||||
/@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.10):
|
||||
resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==}
|
||||
@@ -2911,7 +2930,7 @@ packages:
|
||||
resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.22.13
|
||||
'@babel/code-frame': 7.22.10
|
||||
'@babel/parser': 7.22.10
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
@@ -2920,7 +2939,7 @@ packages:
|
||||
resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.22.13
|
||||
'@babel/code-frame': 7.22.10
|
||||
'@babel/parser': 7.22.10
|
||||
'@babel/types': 7.22.10
|
||||
|
||||
@@ -2946,7 +2965,7 @@ packages:
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/helper-string-parser': 7.19.4
|
||||
'@babel/helper-validator-identifier': 7.22.20
|
||||
'@babel/helper-validator-identifier': 7.19.1
|
||||
to-fast-properties: 2.0.0
|
||||
dev: true
|
||||
|
||||
@@ -6058,6 +6077,31 @@ packages:
|
||||
yaml-eslint-parser: 0.3.2
|
||||
dev: true
|
||||
|
||||
/@intlify/bundle-utils@7.3.0(vue-i18n@9.2.2):
|
||||
resolution: {integrity: sha512-lcnfsLA5Dyd3TbvfoLS0ejLr1vAJYyT6VRYtE4LGNexy1ZD/GEcbXrC33fI9oQp7t2hDlHbCn2o4BBVgXaJFqg==}
|
||||
engines: {node: '>= 14.16'}
|
||||
peerDependencies:
|
||||
petite-vue-i18n: '*'
|
||||
vue-i18n: '*'
|
||||
peerDependenciesMeta:
|
||||
petite-vue-i18n:
|
||||
optional: true
|
||||
vue-i18n:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@intlify/message-compiler': 9.4.1
|
||||
'@intlify/shared': 9.4.1
|
||||
acorn: 8.10.0
|
||||
escodegen: 2.1.0
|
||||
estree-walker: 2.0.2
|
||||
jsonc-eslint-parser: 2.3.0
|
||||
magic-string: 0.30.2
|
||||
mlly: 1.4.0
|
||||
source-map-js: 1.0.2
|
||||
vue-i18n: 9.2.2(vue@3.2.45)
|
||||
yaml-eslint-parser: 1.2.2
|
||||
dev: false
|
||||
|
||||
/@intlify/core-base@9.2.2:
|
||||
resolution: {integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==}
|
||||
engines: {node: '>= 14'}
|
||||
@@ -6094,7 +6138,6 @@ packages:
|
||||
dependencies:
|
||||
'@intlify/shared': 9.4.1
|
||||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/@intlify/shared@9.2.2:
|
||||
resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
|
||||
@@ -6108,7 +6151,39 @@ packages:
|
||||
/@intlify/shared@9.4.1:
|
||||
resolution: {integrity: sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng==}
|
||||
engines: {node: '>= 16'}
|
||||
dev: true
|
||||
|
||||
/@intlify/unplugin-vue-i18n@1.2.0(vue-i18n@9.2.2):
|
||||
resolution: {integrity: sha512-AzjlMZKj9DG10ICDR2VWjfJudHJ1XK2GNSHxw+VmOUYpUm4S0L/a7OAdvgnuY7S4plk1VnPdT4YilpZk+uQcqg==}
|
||||
engines: {node: '>= 14.16'}
|
||||
peerDependencies:
|
||||
petite-vue-i18n: '*'
|
||||
vue-i18n: '*'
|
||||
vue-i18n-bridge: '*'
|
||||
peerDependenciesMeta:
|
||||
petite-vue-i18n:
|
||||
optional: true
|
||||
vue-i18n:
|
||||
optional: true
|
||||
vue-i18n-bridge:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@intlify/bundle-utils': 7.3.0(vue-i18n@9.2.2)
|
||||
'@intlify/shared': 9.4.1
|
||||
'@rollup/pluginutils': 5.0.3(rollup@2.79.1)
|
||||
'@vue/compiler-sfc': 3.3.4
|
||||
debug: 4.3.4(supports-color@9.2.2)
|
||||
fast-glob: 3.3.1
|
||||
js-yaml: 4.1.0
|
||||
json5: 2.2.3
|
||||
pathe: 1.1.1
|
||||
picocolors: 1.0.0
|
||||
source-map-js: 1.0.2
|
||||
unplugin: 1.4.0
|
||||
vue-i18n: 9.2.2(vue@3.2.45)
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@intlify/vite-plugin-vue-i18n@6.0.1(vite@3.2.4):
|
||||
resolution: {integrity: sha512-FFVcxVU4bR9vdDLNbltM5mrhndnXMErO01i0RrpdyMegEt3Nu/YLoH0sFdjRun7/RY4vaEnhTnFvVf9uO0dQvg==}
|
||||
@@ -6136,34 +6211,6 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@intlify/vite-plugin-vue-i18n@7.0.0(vite@3.2.4)(vue-i18n@9.2.2):
|
||||
resolution: {integrity: sha512-2TbDOQ8XD+vkc0s5OFmr+IY/k4mYMC7pzvx0xGQn+cU/ev314+yi7Z7N7rWcBgiYk1WOUalbGSo3d4nJDxOOyw==}
|
||||
engines: {node: '>= 14.6'}
|
||||
deprecated: This plugin support until Vite 3. If you would like to use on Vite 4, please use @intlify/unplugin-vue-i18n
|
||||
peerDependencies:
|
||||
petite-vue-i18n: '*'
|
||||
vite: ^2.9.0 || ^3.0.0
|
||||
vue-i18n: '*'
|
||||
peerDependenciesMeta:
|
||||
petite-vue-i18n:
|
||||
optional: true
|
||||
vite:
|
||||
optional: true
|
||||
vue-i18n:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@intlify/bundle-utils': 3.4.0(vue-i18n@9.2.2)
|
||||
'@intlify/shared': 9.4.1
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
debug: 4.3.4(supports-color@9.2.2)
|
||||
fast-glob: 3.3.1
|
||||
source-map: 0.6.1
|
||||
vite: 3.2.4(@types/node@17.0.27)(sass@1.53.0)(terser@5.19.2)
|
||||
vue-i18n: 9.2.2(vue@3.2.45)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@intlify/vite-plugin-vue-i18n@7.0.0(vite@4.4.9)(vue-i18n@9.2.2):
|
||||
resolution: {integrity: sha512-2TbDOQ8XD+vkc0s5OFmr+IY/k4mYMC7pzvx0xGQn+cU/ev314+yi7Z7N7rWcBgiYk1WOUalbGSo3d4nJDxOOyw==}
|
||||
engines: {node: '>= 14.6'}
|
||||
@@ -7531,7 +7578,6 @@ packages:
|
||||
estree-walker: 2.0.2
|
||||
picomatch: 2.3.1
|
||||
rollup: 2.79.1
|
||||
dev: true
|
||||
|
||||
/@rollup/pluginutils@5.0.3(rollup@3.29.3):
|
||||
resolution: {integrity: sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g==}
|
||||
@@ -7978,7 +8024,7 @@ packages:
|
||||
resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==}
|
||||
dependencies:
|
||||
'@types/eslint': 8.4.10
|
||||
'@types/estree': 0.0.51
|
||||
'@types/estree': 1.0.1
|
||||
dev: true
|
||||
|
||||
/@types/eslint@8.4.10:
|
||||
@@ -7996,7 +8042,6 @@ packages:
|
||||
|
||||
/@types/estree@1.0.1:
|
||||
resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
|
||||
dev: true
|
||||
|
||||
/@types/express-serve-static-core@4.17.31:
|
||||
resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==}
|
||||
@@ -9218,7 +9263,7 @@ packages:
|
||||
/@vitest/snapshot@0.34.2:
|
||||
resolution: {integrity: sha512-qhQ+xy3u4mwwLxltS4Pd4SR+XHv4EajiTPNY3jkIBLUApE6/ce72neJPSUQZ7bL3EBuKI+NhvzhGj3n5baRQUQ==}
|
||||
dependencies:
|
||||
magic-string: 0.30.4
|
||||
magic-string: 0.30.2
|
||||
pathe: 1.1.1
|
||||
pretty-format: 29.5.0
|
||||
dev: true
|
||||
@@ -9526,7 +9571,7 @@ packages:
|
||||
'@vue/compiler-core': 3.3.4
|
||||
'@vue/shared': 3.3.4
|
||||
estree-walker: 2.0.2
|
||||
magic-string: 0.30.4
|
||||
magic-string: 0.30.2
|
||||
|
||||
/@vue/reactivity@3.2.45:
|
||||
resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==}
|
||||
@@ -10063,7 +10108,7 @@ packages:
|
||||
'@windicss/config': 1.9.1
|
||||
debug: 4.3.4(supports-color@9.2.2)
|
||||
fast-glob: 3.3.1
|
||||
magic-string: 0.30.4
|
||||
magic-string: 0.30.2
|
||||
micromatch: 4.0.5
|
||||
windicss: 3.5.6
|
||||
transitivePeerDependencies:
|
||||
@@ -12545,7 +12590,7 @@ packages:
|
||||
is-shared-array-buffer: 1.0.2
|
||||
is-string: 1.0.7
|
||||
is-weakref: 1.0.2
|
||||
object-inspect: 1.12.3
|
||||
object-inspect: 1.12.2
|
||||
object-keys: 1.1.1
|
||||
object.assign: 4.1.4
|
||||
regexp.prototype.flags: 1.5.0
|
||||
@@ -13151,7 +13196,6 @@ packages:
|
||||
esutils: 2.0.3
|
||||
optionalDependencies:
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
/eslint-config-prettier@8.5.0(eslint@8.29.0):
|
||||
resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
|
||||
@@ -17105,6 +17149,16 @@ packages:
|
||||
semver: 6.3.1
|
||||
dev: true
|
||||
|
||||
/jsonc-eslint-parser@2.3.0:
|
||||
resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
eslint-visitor-keys: 3.4.3
|
||||
espree: 9.6.1
|
||||
semver: 7.5.4
|
||||
dev: false
|
||||
|
||||
/jsonc-parser@2.3.1:
|
||||
resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==}
|
||||
dev: true
|
||||
@@ -17115,7 +17169,6 @@ packages:
|
||||
|
||||
/jsonc-parser@3.2.0:
|
||||
resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
|
||||
dev: true
|
||||
|
||||
/jsonfile@4.0.0:
|
||||
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
|
||||
@@ -17575,6 +17628,7 @@ packages:
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.4.15
|
||||
dev: true
|
||||
|
||||
/mailparser@3.6.4:
|
||||
resolution: {integrity: sha512-4bDgbLdlcBKX8jtVskfn/G93nZo3lf7pyuLbAQ031SHQLihEqxtRwHrb9SXMTqiTkEGlOdpDrZE5uH18O+2A+A==}
|
||||
@@ -18288,7 +18342,6 @@ packages:
|
||||
pathe: 1.1.1
|
||||
pkg-types: 1.0.3
|
||||
ufo: 1.2.0
|
||||
dev: true
|
||||
|
||||
/mocha@9.2.2:
|
||||
resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
|
||||
@@ -18580,6 +18633,10 @@ packages:
|
||||
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
/object-inspect@1.12.2:
|
||||
resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
|
||||
dev: true
|
||||
|
||||
/object-inspect@1.12.3:
|
||||
resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
|
||||
|
||||
@@ -19080,7 +19137,6 @@ packages:
|
||||
|
||||
/pathe@1.1.1:
|
||||
resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
|
||||
dev: true
|
||||
|
||||
/pathval@1.1.1:
|
||||
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
|
||||
@@ -19151,7 +19207,6 @@ packages:
|
||||
jsonc-parser: 3.2.0
|
||||
mlly: 1.4.0
|
||||
pathe: 1.1.1
|
||||
dev: true
|
||||
|
||||
/pkginfo@0.4.1:
|
||||
resolution: {integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==}
|
||||
@@ -21942,7 +21997,6 @@ packages:
|
||||
|
||||
/ufo@1.2.0:
|
||||
resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==}
|
||||
dev: true
|
||||
|
||||
/uglify-js@3.17.4:
|
||||
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
|
||||
@@ -22327,7 +22381,6 @@ packages:
|
||||
chokidar: 3.5.3
|
||||
webpack-sources: 3.2.3
|
||||
webpack-virtual-modules: 0.5.0
|
||||
dev: true
|
||||
|
||||
/untildify@4.0.0:
|
||||
resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
|
||||
@@ -23580,6 +23633,7 @@ packages:
|
||||
'@intlify/vue-devtools': 9.2.2
|
||||
'@vue/devtools-api': 6.2.1
|
||||
vue: 3.2.45
|
||||
dev: false
|
||||
|
||||
/vue-i18n@9.2.2(vue@3.3.4):
|
||||
resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==}
|
||||
@@ -24613,6 +24667,15 @@ packages:
|
||||
yaml: 1.10.2
|
||||
dev: true
|
||||
|
||||
/yaml-eslint-parser@1.2.2:
|
||||
resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==}
|
||||
engines: {node: ^14.17.0 || >=16.0.0}
|
||||
dependencies:
|
||||
eslint-visitor-keys: 3.4.3
|
||||
lodash: 4.17.21
|
||||
yaml: 2.3.1
|
||||
dev: false
|
||||
|
||||
/yaml@1.10.2:
|
||||
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
||||
engines: {node: '>= 6'}
|
||||
@@ -24620,7 +24683,6 @@ packages:
|
||||
/yaml@2.3.1:
|
||||
resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==}
|
||||
engines: {node: '>= 14'}
|
||||
dev: true
|
||||
|
||||
/yargs-parser@18.1.3:
|
||||
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
|
||||
@@ -24762,3 +24824,7 @@ packages:
|
||||
/zod@3.22.2:
|
||||
resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==}
|
||||
dev: true
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
Reference in New Issue
Block a user