diff --git a/docs/content/docs/3.options/10.misc.md b/docs/content/docs/3.options/10.misc.md index 36be0cc83..0e38a8126 100644 --- a/docs/content/docs/3.options/10.misc.md +++ b/docs/content/docs/3.options/10.misc.md @@ -64,3 +64,14 @@ Don't enable this option in production. It's not optimized for it. - default: `false` Set the plugin as `parallel`. See [nuxt plugin loading strategy](https://nuxt.com/docs/guide/directory-structure/plugins#loading-strategy). + +## `restructureDir` + +- type: `string | undefined` +- default: `undefined` + +Can be used to configure the directory used to resolve i18n files, this will be set to `i18n` by default in the v9 release. + +::callout{icon="i-heroicons-exclamation-triangle" color="amber"} +Setting this value will also change the default value for `langDir`, which is `locales` if unset, this is the new default value in v9. +:: \ No newline at end of file diff --git a/docs/content/docs/5.v9/2.guide/14.layers.md b/docs/content/docs/5.v9/2.guide/14.layers.md index d7f0b5ea5..1661b064f 100644 --- a/docs/content/docs/5.v9/2.guide/14.layers.md +++ b/docs/content/docs/5.v9/2.guide/14.layers.md @@ -37,7 +37,6 @@ export default defineNuxtConfig({ modules: ['@nuxtjs/i18n'], i18n: { lazy: true, - langDir: './lang', locales: [ { code: 'en', file: 'en.json' }, { code: 'nl', file: 'nl.json' } @@ -60,7 +59,6 @@ Locales provided by a project will be merged with those provided by extended lay export default defineNuxtConfig({ extends: ['my-layer'], i18n: { - langDir: './lang', locales: [{ code: 'en', file: 'en.json' }] } }) @@ -71,7 +69,6 @@ export default defineNuxtConfig({ modules: ['@nuxtjs/i18n'], i18n: { lazy: true, - langDir: './lang', locales: [ { code: 'en', file: 'en.json' }, { code: 'nl', file: 'nl.json' } @@ -83,20 +80,20 @@ export default defineNuxtConfig({ :: ::callout{icon="i-heroicons-light-bulb"} -Note how some options such as `lazy` are inherited, while options such as `langDir` and `locales` need to be set for every layer (project included) providing locale files. +Note how some options such as `lazy` are inherited, while options such as `locales` need to be set for every layer (project included) providing locale files. :: This example would result in the project supporting two locales (`en`, `nl`) and would add the additional messages added for the `en` locale. ::code-group -```ts [project/lang/en.json] +```ts [project/i18n/locales/en.json] { "title": "foo" } ``` -```ts [project/my-layer/lang/en.json] +```ts [project/my-layer/i18n/locales/en.json] { "title": "layer title", "description": "bar" diff --git a/docs/content/docs/5.v9/2.guide/15.server-side-translations.md b/docs/content/docs/5.v9/2.guide/15.server-side-translations.md index cb85bb0f3..6d493c856 100644 --- a/docs/content/docs/5.v9/2.guide/15.server-side-translations.md +++ b/docs/content/docs/5.v9/2.guide/15.server-side-translations.md @@ -17,7 +17,7 @@ Nuxt i18n exports the `defineI18nLocaleDetector` composable function to define i The following is an example of how to define a detector that detects locale using query, cookie, and header: -```ts [localeDetector.ts] +```ts [i18n/localeDetector.ts] // Detect based on query, cookie, header export default defineI18nLocaleDetector((event, config) => { // try to get locale from query @@ -53,7 +53,7 @@ The following is an example of a locale detector configuration defined directly export default defineNuxtConfig({ i18n: { experimental: { - localeDetector: './localeDetector.ts' + localeDetector: 'localeDetector.ts' } } }) diff --git a/docs/content/docs/5.v9/2.guide/18.breaking-changes-in-v9.md b/docs/content/docs/5.v9/2.guide/18.breaking-changes-in-v9.md index bfee9b028..25390b4b2 100644 --- a/docs/content/docs/5.v9/2.guide/18.breaking-changes-in-v9.md +++ b/docs/content/docs/5.v9/2.guide/18.breaking-changes-in-v9.md @@ -22,3 +22,28 @@ https://vue-i18n.intlify.dev/guide/migration/breaking10.html#default-enable-for- Accordingly, the `jit` option in Nuxt I18n v8 is no longer needed, so this option has been removed. +## Directory restructure and `langDir` default value + +We now use a default directory structure that is consistent with [directory structure changes in Nuxt 4](https://nuxt.com/docs/getting-started/upgrade#new-directory-structure). + +What changed + * `langDir` now defaults to `locales`. + * All i18n files are resolved relative to `/i18n`, this can be configured with the `restructureDir` option. + +Here is an example of a project structure after this change: + +```sh +app/ +server/ +i18n/ + locales/ + en.json + ja.json + i18n.config.ts + localeDetector.ts +nuxt.config.ts +``` + +Reasons for change + 1. Context - i18n files are used both server-side and client-side, using a dedicated `i18n/` folder in the root directory outside `app/` and `server/` makes more sense. + 2. Clean - less clutter/fragmentation of i18n files, and should make resolving and loading files easier for us. \ No newline at end of file diff --git a/docs/content/docs/5.v9/2.guide/7.lazy-load-translations.md b/docs/content/docs/5.v9/2.guide/7.lazy-load-translations.md index efa2234f2..167979285 100644 --- a/docs/content/docs/5.v9/2.guide/7.lazy-load-translations.md +++ b/docs/content/docs/5.v9/2.guide/7.lazy-load-translations.md @@ -8,7 +8,6 @@ This can be achieved with **Nuxt i18n module** by letting the module know where To enable translations lazy-loading, follow these steps when configuring **Nuxt i18n module**: - Set `lazy` option to `true` (or to [configuration object](/docs/options/lazy#lazy) if you want to customize some options). -- Set `langDir` option to the directory (cannot be empty) that contains your translation files. - Configure `locales` option as an array of objects, where each object has a `file` or `files` key whose value is the translation file corresponding to the locale. - Optionally, remove all messages that you might have passed to Vue I18n via the `vueI18n` option. - Each `file` or `files` can return either an `Object`, or a function that returns `Promise` which must return an `Object`. @@ -19,10 +18,11 @@ Example files structure: ``` nuxt-project/ -├── lang/ -│ ├── en-US.json -│ ├── es-ES.js -│ ├── fr-FR.ts +├── i18n/ +│ ├── locales/ +│ │ ├── en-US.json +│ │ ├── es-ES.js +│ │ ├── fr-FR.ts ├── nuxt.config.ts ``` @@ -46,7 +46,6 @@ export default defineNuxtConfig({ } ], lazy: true, - langDir: 'lang', defaultLocale: 'en' } }) @@ -97,12 +96,13 @@ The following is an example of a lang directory containing locale files for the ``` nuxt-project/ -├── lang/ -│ ├── es.json # locale messages for common Spanish -│ ├── es-AR.json # locale messages for Argentina -│ ├── es-UY.json # locale messages for Uruguay -│ ├── es-US.json # locale messages for Estados Unidos -| ... # other countries ... +├── i18n/ +│ ├── locales/ +│ │ ├── es.json # locale messages for common Spanish +│ │ ├── es-AR.json # locale messages for Argentina +│ │ ├── es-UY.json # locale messages for Uruguay +│ │ ├── es-US.json # locale messages for Estados Unidos +| | ... # other countries ... ├── nuxt.config.ts ``` @@ -135,7 +135,6 @@ export default defineNuxtConfig({ } ], lazy: true, - langDir: 'lang', defaultLocale: 'en' } }) @@ -187,7 +186,6 @@ export default defineNuxtConfig({ } ], lazy: true, - langDir: 'lang', defaultLocale: 'en' } }) diff --git a/docs/content/docs/5.v9/3.options/10.misc.md b/docs/content/docs/5.v9/3.options/10.misc.md index 36be0cc83..bea0fa486 100644 --- a/docs/content/docs/5.v9/3.options/10.misc.md +++ b/docs/content/docs/5.v9/3.options/10.misc.md @@ -64,3 +64,10 @@ Don't enable this option in production. It's not optimized for it. - default: `false` Set the plugin as `parallel`. See [nuxt plugin loading strategy](https://nuxt.com/docs/guide/directory-structure/plugins#loading-strategy). + +## `restructureDir` + +- type: `string` +- default: `i18n` + +Can be used to configure the directory used to resolve i18n files. diff --git a/docs/content/docs/5.v9/3.options/3.lazy.md b/docs/content/docs/5.v9/3.options/3.lazy.md index 5367bf2f7..1a74f3836 100644 --- a/docs/content/docs/5.v9/3.options/3.lazy.md +++ b/docs/content/docs/5.v9/3.options/3.lazy.md @@ -10,18 +10,18 @@ description: Lazy loading options. See also [Lazy-load translations](/docs/guide/lazy-load-translations). -Whether the translations should be lazy-loaded. If this is enabled, you MUST configure the `langDir` option, and locales must be an array of objects, each containing a `file` or `files` key. +Whether the translations should be lazy-loaded. If this is enabled, locales must be an array of objects, each containing a `file` or `files` key. Loading locale messages lazily means that only messages for currently used locale (and for the fallback locale, if different from current locale) will be loaded on page loading. ## `langDir` -- type: `string` or `null` -- default: `null` +- type: `string` +- default: `locales` A relative path to a directory containing translation files to load. Can be used with or without lazy-loading (the `lazy` option). -The path is resolved relative to the project `srcDir` (project root by default). +The path is resolved relative to the project `restructureDir` at the root of a project ('i18n' by default). ::callout{icon="i-heroicons-exclamation-triangle" color="amber"} Absolute paths will fail in production (eg. `/locales` should be changed into either `locales` or `./locales`) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4fed54d85..b241bc5bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,7 +21,7 @@ importers: version: 10.0.0-beta.1 '@intlify/unplugin-vue-i18n': specifier: ^5.0.0-beta.3 - version: 5.0.0-beta.3(@vue/compiler-dom@3.4.31)(eslint@9.5.0)(rollup@3.29.4)(typescript@5.5.2)(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2)) + version: 5.0.0-beta.3(@vue/compiler-dom@3.4.35)(eslint@9.5.0)(rollup@3.29.4)(typescript@5.5.2)(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2)) '@intlify/utils': specifier: ^0.12.0 version: 0.12.0 @@ -157,7 +157,7 @@ importers: version: 6.2.0 nuxt: specifier: ^3.12.3 - version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@3.29.4)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@3.29.4)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) ofetch: specifier: ^1.3.4 version: 1.3.4 @@ -202,10 +202,10 @@ importers: version: 1.1.107 '@nuxt/content': specifier: ^2.12.0 - version: 2.13.0(ioredis@5.4.1)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.31(typescript@5.5.2)) + version: 2.13.0(ioredis@5.4.1)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2)) '@nuxt/ui-pro': specifier: ^1.0.1 - version: 1.3.1(focus-trap@7.5.4)(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2)) + version: 1.3.1(focus-trap@7.5.4)(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2)) '@nuxtjs/fontaine': specifier: ^0.4.1 version: 0.4.3(encoding@0.1.13)(magicast@0.3.4)(rollup@4.18.0) @@ -214,10 +214,10 @@ importers: version: 3.2.0(magicast@0.3.4)(rollup@4.18.0) nuxt: specifier: ^3.9.3 - version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) nuxt-og-image: specifier: ^2.2.4 - version: 2.2.6(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.31)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))(webpack@5.92.1) + version: 2.2.6(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.35)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))(webpack@5.92.1) vue-tsc: specifier: ^2.0.1 version: 2.0.22(typescript@5.5.2) @@ -241,20 +241,20 @@ importers: version: link:../../.. nuxt: specifier: latest - version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) specs/fixtures/basic_usage: dependencies: '@nuxt/devtools': specifier: ^1.0.8 - version: 1.3.6(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + version: 1.3.6(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) devDependencies: '@nuxtjs/i18n': specifier: link:../../.. version: link:../../.. nuxt: specifier: latest - version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) specs/fixtures/different_domains: devDependencies: @@ -263,7 +263,7 @@ importers: version: link:../../.. nuxt: specifier: latest - version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) specs/fixtures/inline_options: devDependencies: @@ -272,7 +272,7 @@ importers: version: link:../../.. nuxt: specifier: latest - version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) specs/fixtures/lazy: devDependencies: @@ -281,7 +281,16 @@ importers: version: link:../../.. nuxt: specifier: latest - version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + + specs/fixtures/restructure: + devDependencies: + '@nuxtjs/i18n': + specifier: link:../../.. + version: link:../../.. + nuxt: + specifier: latest + version: 3.12.4(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) specs/fixtures/routing: devDependencies: @@ -290,7 +299,7 @@ importers: version: link:../../.. nuxt: specifier: latest - version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + version: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) packages: @@ -1290,6 +1299,9 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -1425,6 +1437,10 @@ packages: resolution: {integrity: sha512-5R8FZLDxBKlkDWYsqwU1tctGJ5vwMA96WBrNkpQ0LznB2/p+3MWWTO6vz+0P0F9xvZZfkk/KKyZ3uUhnG9VJOA==} engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/kit@3.12.4': + resolution: {integrity: sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==} + engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/module-builder@0.6.0': resolution: {integrity: sha512-d/sn+6n23qB+yGuItNvGnNlPpDzwcsW6riyISdo4H2MO/3TWFsIzB5+JZK104t0G6ftxB71xWHmBBYEdkXOhVw==} hasBin: true @@ -1436,6 +1452,10 @@ packages: resolution: {integrity: sha512-Zw/2stN5CWVOHQ6pKyewk3tvYW5ROBloTGyIbie7/TprJT5mL+E9tTgAxOZtkoKSFaYEQXZgE1K2OzMelhLRzw==} engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/schema@3.12.4': + resolution: {integrity: sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==} + engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/telemetry@2.5.4': resolution: {integrity: sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==} hasBin: true @@ -1453,6 +1473,12 @@ packages: peerDependencies: vue: ^3.3.4 + '@nuxt/vite-builder@3.12.4': + resolution: {integrity: sha512-5v3y6SkshJurZYJWHtc7+NGeCgptsreCSguBCZVzJxYdsPFdMicLoxjTt8IGAHWjkGVONrX+K8NBSFFgnx40jQ==} + engines: {node: ^14.18.0 || >=16.10.0} + peerDependencies: + vue: ^3.3.4 + '@nuxtjs/color-mode@3.4.2': resolution: {integrity: sha512-6A+lDP8R6fFXc1Ip5tDepKq9MJW6oxbRlz1plvW52yacnpeDFXv5S5rDS0ax31AuSFUPlgzHymFSdjcylBwZ6w==} @@ -2172,20 +2198,37 @@ packages: '@unhead/dom@1.9.14': resolution: {integrity: sha512-XZSZ2Wmm1Sv7k9scSFGrarbteSIl3p3I3oOUprKPDboBTvuG5q81Qz8O99NKUGKGJ8BKUkxCqE982eH3S8DKJA==} + '@unhead/dom@1.9.16': + resolution: {integrity: sha512-aZIAnnc89Csi1vV4mtlHYI765B7m1yuaXUuQiYHwr6glE9FLyy2X87CzEci4yPH/YbkKm0bGQRfcxXq6Eq0W7g==} + '@unhead/schema@1.9.14': resolution: {integrity: sha512-60NYSM6QjfK/wx4/QfaYyZ3XnNtwxS9a1oij2abEkGHPmA2/fqBOXeuHtnBo4eD42/Eg+owcS5s3mClPL8AkXw==} + '@unhead/schema@1.9.16': + resolution: {integrity: sha512-V2BshX+I6D2wN4ys5so8RQDUgsggsxW9FVBiuQi4h8oPWtHclogxzDiHa5BH2TgvNIoUxLnLYNAShMGipmVuUw==} + '@unhead/shared@1.9.14': resolution: {integrity: sha512-7ZIC7uDV8gp3KHm5JxJ/NXMENQgkh+SCyTcsILSpOhkAGeszMHABrB6vjeZDGM4J9mRUxwyPn24KI2zG/R+XiQ==} + '@unhead/shared@1.9.16': + resolution: {integrity: sha512-pfJnArULCY+GBr7OtYyyxihRiQLkT31TpyK6nUKIwyax4oNOGyhNfk0RFzNq16BwLg60d1lrc5bd5mZGbfClMA==} + '@unhead/ssr@1.9.14': resolution: {integrity: sha512-OIBZu+WBiyCcDMJ4Ysu7uA6yMZ3fWXWyVrT2w0my5oQJgA0BS7lzfReRL8Sw6+ORlupn9Rn++HXfV0ixtxCxIA==} + '@unhead/ssr@1.9.16': + resolution: {integrity: sha512-8R1qt4VAemX4Iun/l7DnUBJqmxA/KaUSc2+/hRYPJYOopXdCWkoaxC1K1ROX2vbRF7qmjdU5ik/a27kSPN94gg==} + '@unhead/vue@1.9.14': resolution: {integrity: sha512-Yc7Qv0ze+iLte4urHiA+ghkF7y+svrawrT+ZrCuGXkZ/eRTF/AY2SKex+rJQJZsP+fKEQ2pGb72IsI5kHFZT3A==} peerDependencies: vue: '>=2.7 || >=3' + '@unhead/vue@1.9.16': + resolution: {integrity: sha512-kpMWWwm8cOwo4gw4An43pz30l2CqNtmJpX5Xsu79rwf6Viq8jHAjk6BGqyKy220M2bpa0Va4fnR532SgGO1YgQ==} + peerDependencies: + vue: '>=2.7 || >=3' + '@unocss/astro@0.61.0': resolution: {integrity: sha512-cbgztX/to5rMhAtEGCcR3ClMlK9F+lPxq21A72qsbWVQjiKa7W4O7qKBmUKPYsWRzJEJtdyN11A65H2037aKQw==} peerDependencies: @@ -2357,15 +2400,27 @@ packages: '@vue/compiler-core@3.4.31': resolution: {integrity: sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==} + '@vue/compiler-core@3.4.35': + resolution: {integrity: sha512-gKp0zGoLnMYtw4uS/SJRRO7rsVggLjvot3mcctlMXunYNsX+aRJDqqw/lV5/gHK91nvaAAlWFgdVl020AW1Prg==} + '@vue/compiler-dom@3.4.31': resolution: {integrity: sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==} + '@vue/compiler-dom@3.4.35': + resolution: {integrity: sha512-pWIZRL76/oE/VMhdv/ovZfmuooEni6JPG1BFe7oLk5DZRo/ImydXijoZl/4kh2406boRQ7lxTYzbZEEXEhj9NQ==} + '@vue/compiler-sfc@3.4.31': resolution: {integrity: sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==} + '@vue/compiler-sfc@3.4.35': + resolution: {integrity: sha512-xacnRS/h/FCsjsMfxBkzjoNxyxEyKyZfBch/P4vkLRvYJwe5ChXmZZrj8Dsed/752H2Q3JE8kYu9Uyha9J6PgA==} + '@vue/compiler-ssr@3.4.31': resolution: {integrity: sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==} + '@vue/compiler-ssr@3.4.35': + resolution: {integrity: sha512-7iynB+0KB1AAJKk/biENTV5cRGHRdbdaD7Mx3nWcm1W8bVD6QmnH3B4AHhQQ1qZHhqFwzEzMwiytXm3PX1e60A==} + '@vue/devtools-api@6.6.3': resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} @@ -2389,23 +2444,40 @@ packages: '@vue/reactivity@3.4.31': resolution: {integrity: sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==} + '@vue/reactivity@3.4.35': + resolution: {integrity: sha512-Ggtz7ZZHakriKioveJtPlStYardwQH6VCs9V13/4qjHSQb/teE30LVJNrbBVs4+aoYGtTQKJbTe4CWGxVZrvEw==} + '@vue/runtime-core@3.4.31': resolution: {integrity: sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==} + '@vue/runtime-core@3.4.35': + resolution: {integrity: sha512-D+BAjFoWwT5wtITpSxwqfWZiBClhBbR+bm0VQlWYFOadUUXFo+5wbe9ErXhLvwguPiLZdEF13QAWi2vP3ZD5tA==} + '@vue/runtime-dom@3.4.31': resolution: {integrity: sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==} + '@vue/runtime-dom@3.4.35': + resolution: {integrity: sha512-yGOlbos+MVhlS5NWBF2HDNgblG8e2MY3+GigHEyR/dREAluvI5tuUUgie3/9XeqhPE4LF0i2wjlduh5thnfOqw==} + '@vue/server-renderer@3.4.31': resolution: {integrity: sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==} peerDependencies: vue: 3.4.31 + '@vue/server-renderer@3.4.35': + resolution: {integrity: sha512-iZ0e/u9mRE4T8tNhlo0tbA+gzVkgv8r5BX6s1kRbOZqfpq14qoIvCZ5gIgraOmYkMYrSEZgkkojFPr+Nyq/Mnw==} + peerDependencies: + vue: 3.4.35 + '@vue/shared@3.4.30': resolution: {integrity: sha512-CLg+f8RQCHQnKvuHY9adMsMaQOcqclh6Z5V9TaoMgy0ut0tz848joZ7/CYFFyF/yZ5i2yaw7Fn498C+CNZVHIg==} '@vue/shared@3.4.31': resolution: {integrity: sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==} + '@vue/shared@3.4.35': + resolution: {integrity: sha512-hvuhBYYDe+b1G8KHxsQ0diDqDMA8D9laxWZhNAjE83VZb5UDaXl9Xnz7cGdDSyiHM90qqI/CyGMcpBpiDy6VVQ==} + '@vueuse/core@10.11.0': resolution: {integrity: sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==} @@ -2550,6 +2622,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -3106,6 +3183,12 @@ packages: peerDependencies: postcss: ^8.4.31 + cssnano-preset-default@7.0.4: + resolution: {integrity: sha512-jQ6zY9GAomQX7/YNLibMEsRZguqMUGuupXcEk2zZ+p3GUxwCAsobqPYE62VrJ9qZ0l9ltrv2rgjwZPBIFIjYtw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + cssnano-utils@5.0.0: resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} @@ -3118,6 +3201,12 @@ packages: peerDependencies: postcss: ^8.4.31 + cssnano@7.0.4: + resolution: {integrity: sha512-rQgpZra72iFjiheNreXn77q1haS2GEy69zCMbu4cpXCFPMQF+D4Ik5V7ktMzUF/sA7xCIgcqHwGPnCD+0a1vHg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -3370,6 +3459,9 @@ packages: error-stack-parser-es@0.1.4: resolution: {integrity: sha512-l0uy0kAoo6toCgVOYaAayqtPa2a1L15efxUMEnQebKwLQX2X0OpS6wMMQdc4juJXmxd9i40DuaUHq+mjIya9TQ==} + errx@0.1.0: + resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==} + es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} @@ -4342,6 +4434,9 @@ packages: magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magicast@0.3.4: resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} @@ -4824,6 +4919,19 @@ packages: '@types/node': optional: true + nuxt@3.12.4: + resolution: {integrity: sha512-/ddvyc2kgYYIN2UEjP8QIz48O/W3L0lZm7wChIDbOCj0vF/yLLeZHBaTb3aNvS9Hwp269nfjrm8j/mVxQK4RhA==} + engines: {node: ^14.18.0 || >=16.10.0} + hasBin: true + peerDependencies: + '@parcel/watcher': ^2.1.0 + '@types/node': ^14.18.0 || >=16.10.0 + peerDependenciesMeta: + '@parcel/watcher': + optional: true + '@types/node': + optional: true + nwsapi@2.2.10: resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} @@ -5051,6 +5159,12 @@ packages: peerDependencies: postcss: ^8.4.31 + postcss-convert-values@7.0.2: + resolution: {integrity: sha512-MuZIF6HJ4izko07Q0TgW6pClalI4al6wHRNPkFzqQdwAwG7hPn0lA58VZdxyb2Vl5AYjJ1piO+jgF9EnTjQwQQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + postcss-discard-comments@7.0.1: resolution: {integrity: sha512-GVrQxUOhmle1W6jX2SvNLt4kmN+JYhV7mzI6BMnkAWR9DtVvg8e67rrV0NfdWhn7x1zxvzdWkMBPdBDCls+uwQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} @@ -5250,6 +5364,10 @@ packages: resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5549,6 +5667,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -6057,6 +6180,9 @@ packages: ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + ultrahtml@1.5.3: resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} @@ -6089,12 +6215,18 @@ packages: resolution: {integrity: sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==} engines: {node: '>=18.17'} + unenv@1.10.0: + resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} + unenv@1.9.0: resolution: {integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==} unhead@1.9.14: resolution: {integrity: sha512-npdYu6CfasX/IhB8OO27e3u4A1zhAY77T1FwWDIIUaJvugYTte5hjsolPX0/fG5jmjnWTFTuIkmbCSfj7bfIkg==} + unhead@1.9.16: + resolution: {integrity: sha512-FOoXkuRNDwt7PUaNE0LXNCb6RCz4vTpkGymz4tJ8rcaG5uUJ0lxGK536hzCFwFw3Xkp3n+tkt2yCcbAZE/FOvA==} + unicode-emoji-modifier-base@1.0.0: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} @@ -6112,6 +6244,9 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unimport@3.10.0: + resolution: {integrity: sha512-/UvKRfWx3mNDWwWQhR62HsoM3wxHwYdTq8ellZzMOHnnw4Dp8tovgthyW7DjTrbjDL+i4idOp06voz2VKlvrLw==} + unimport@3.7.2: resolution: {integrity: sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==} @@ -6181,6 +6316,10 @@ packages: resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} engines: {node: '>=14.0.0'} + unplugin@1.12.0: + resolution: {integrity: sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==} + engines: {node: '>=14.0.0'} + unstorage@1.10.2: resolution: {integrity: sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==} peerDependencies: @@ -6332,6 +6471,40 @@ packages: vue-tsc: optional: true + vite-plugin-checker@0.7.2: + resolution: {integrity: sha512-xeYeJbG0gaCaT0QcUC4B2Zo4y5NR8ZhYenc5gPbttrZvraRFwkEADCYwq+BfEHl9zYz7yf85TxsiGoYwyyIjhw==} + engines: {node: '>=14.16'} + peerDependencies: + '@biomejs/biome': '>=1.7' + eslint: '>=7' + meow: ^9.0.0 + optionator: ^0.9.1 + stylelint: '>=13' + typescript: '*' + vite: '>=2.0.0' + vls: '*' + vti: '*' + vue-tsc: '>=2.0.0' + peerDependenciesMeta: + '@biomejs/biome': + optional: true + eslint: + optional: true + meow: + optional: true + optionator: + optional: true + stylelint: + optional: true + typescript: + optional: true + vls: + optional: true + vti: + optional: true + vue-tsc: + optional: true + vite-plugin-inspect@0.8.4: resolution: {integrity: sha512-G0N3rjfw+AiiwnGw50KlObIHYWfulVwaCBUBLh2xTW9G1eM9ocE5olXkEYUbwyTmX+azM8duubi+9w5awdCz+g==} engines: {node: '>=14'} @@ -6403,6 +6576,34 @@ packages: terser: optional: true + vite@5.3.5: + resolution: {integrity: sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + vitest@2.0.4: resolution: {integrity: sha512-luNLDpfsnxw5QSW4bISPe6tkxVvv5wn2BBs/PuDRkhXZ319doZyLOBr1sjfB5yCEpTiU7xCAdViM8TNVGPwoog==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6502,6 +6703,14 @@ packages: typescript: optional: true + vue@3.4.35: + resolution: {integrity: sha512-+fl/GLmI4GPileHftVlCdB7fUL4aziPcqTudpTGXCT8s+iZWuOCeNEB5haX6Uz2IpRrbEXOgIFbe+XciCuGbNQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -7312,10 +7521,10 @@ snapshots: dependencies: tailwindcss: 3.4.4 - '@headlessui/vue@1.7.22(vue@3.4.31(typescript@5.5.2))': + '@headlessui/vue@1.7.22(vue@3.4.35(typescript@5.5.2))': dependencies: - '@tanstack/vue-virtual': 3.7.0(vue@3.4.31(typescript@5.5.2)) - vue: 3.4.31(typescript@5.5.2) + '@tanstack/vue-virtual': 3.7.0(vue@3.4.35(typescript@5.5.2)) + vue: 3.4.35(typescript@5.5.2) '@humanwhocodes/module-importer@1.0.1': {} @@ -7363,10 +7572,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/vue@4.1.2(vue@3.4.31(typescript@5.5.2))': + '@iconify/vue@4.1.2(vue@3.4.35(typescript@5.5.2))': dependencies: '@iconify/types': 2.0.0 - vue: 3.4.31(typescript@5.5.2) + vue: 3.4.35(typescript@5.5.2) '@intlify/bundle-utils@9.0.0-beta.0(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))': dependencies: @@ -7425,12 +7634,12 @@ snapshots: '@intlify/shared@9.13.1': {} - '@intlify/unplugin-vue-i18n@5.0.0-beta.3(@vue/compiler-dom@3.4.31)(eslint@9.5.0)(rollup@3.29.4)(typescript@5.5.2)(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2))': + '@intlify/unplugin-vue-i18n@5.0.0-beta.3(@vue/compiler-dom@3.4.35)(eslint@9.5.0)(rollup@3.29.4)(typescript@5.5.2)(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2))': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) '@intlify/bundle-utils': 9.0.0-beta.0(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2))) '@intlify/shared': 10.0.0-beta.5 - '@intlify/vue-i18n-extensions': 6.2.0(@intlify/shared@10.0.0-beta.5)(@vue/compiler-dom@3.4.31)(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2)) + '@intlify/vue-i18n-extensions': 6.2.0(@intlify/shared@10.0.0-beta.5)(@vue/compiler-dom@3.4.35)(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2)) '@rollup/pluginutils': 5.1.0(rollup@3.29.4) '@typescript-eslint/scope-manager': 7.14.1 '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) @@ -7455,12 +7664,12 @@ snapshots: '@intlify/utils@0.12.0': {} - '@intlify/vue-i18n-extensions@6.2.0(@intlify/shared@10.0.0-beta.5)(@vue/compiler-dom@3.4.31)(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2))': + '@intlify/vue-i18n-extensions@6.2.0(@intlify/shared@10.0.0-beta.5)(@vue/compiler-dom@3.4.35)(vue-i18n@10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2))': dependencies: '@babel/parser': 7.24.7 optionalDependencies: '@intlify/shared': 10.0.0-beta.5 - '@vue/compiler-dom': 3.4.31 + '@vue/compiler-dom': 3.4.35 vue: 3.4.31(typescript@5.5.2) vue-i18n: 10.0.0-beta.4(vue@3.4.31(typescript@5.5.2)) @@ -7492,6 +7701,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -7643,13 +7854,13 @@ snapshots: - bluebird - supports-color - '@nuxt/content@2.13.0(ioredis@5.4.1)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.31(typescript@5.5.2))': + '@nuxt/content@2.13.0(ioredis@5.4.1)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2))': dependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) '@nuxtjs/mdc': 0.8.2(magicast@0.3.4)(rollup@4.18.0) - '@vueuse/core': 10.11.0(vue@3.4.31(typescript@5.5.2)) - '@vueuse/head': 2.0.0(vue@3.4.31(typescript@5.5.2)) - '@vueuse/nuxt': 10.11.0(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.31(typescript@5.5.2)) + '@vueuse/core': 10.11.0(vue@3.4.35(typescript@5.5.2)) + '@vueuse/head': 2.0.0(vue@3.4.35(typescript@5.5.2)) + '@vueuse/nuxt': 10.11.0(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2)) consola: 3.2.3 defu: 6.1.4 destr: 2.0.3 @@ -7709,12 +7920,23 @@ snapshots: - rollup - supports-color - '@nuxt/devtools-kit@1.3.9(magicast@0.3.4)(rollup@3.29.4)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))': + '@nuxt/devtools-kit@1.3.6(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': + dependencies: + '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) + '@nuxt/schema': 3.12.3(rollup@4.18.0) + execa: 7.2.0 + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + transitivePeerDependencies: + - magicast + - rollup + - supports-color + + '@nuxt/devtools-kit@1.3.9(magicast@0.3.4)(rollup@3.29.4)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': dependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@3.29.4) '@nuxt/schema': 3.12.3(rollup@3.29.4) execa: 7.2.0 - vite: 5.3.3(@types/node@20.14.9)(terser@5.31.1) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) transitivePeerDependencies: - magicast - rollup @@ -7731,29 +7953,40 @@ snapshots: - rollup - supports-color - '@nuxt/devtools-ui-kit@1.3.6(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.31)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))(webpack@5.92.1)': + '@nuxt/devtools-kit@1.3.9(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': + dependencies: + '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) + '@nuxt/schema': 3.12.3(rollup@4.18.0) + execa: 7.2.0 + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + transitivePeerDependencies: + - magicast + - rollup + - supports-color + + '@nuxt/devtools-ui-kit@1.3.6(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.35)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))(webpack@5.92.1)': dependencies: '@iconify-json/carbon': 1.1.36 '@iconify-json/logos': 1.1.43 '@iconify-json/ri': 1.1.21 '@iconify-json/tabler': 1.1.114 - '@nuxt/devtools': 1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) - '@nuxt/devtools-kit': 1.3.6(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/devtools': 1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/devtools-kit': 1.3.6(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) '@unocss/core': 0.61.0 - '@unocss/nuxt': 0.61.0(magicast@0.3.4)(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(webpack@5.92.1) + '@unocss/nuxt': 0.61.0(magicast@0.3.4)(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(webpack@5.92.1) '@unocss/preset-attributify': 0.61.0 '@unocss/preset-icons': 0.61.0 '@unocss/preset-mini': 0.61.0 '@unocss/reset': 0.61.0 - '@vueuse/core': 10.11.0(vue@3.4.31(typescript@5.5.2)) - '@vueuse/integrations': 10.11.0(focus-trap@7.5.4)(fuse.js@6.6.2)(vue@3.4.31(typescript@5.5.2)) - '@vueuse/nuxt': 10.11.0(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.31(typescript@5.5.2)) + '@vueuse/core': 10.11.0(vue@3.4.35(typescript@5.5.2)) + '@vueuse/integrations': 10.11.0(focus-trap@7.5.4)(fuse.js@6.6.2)(vue@3.4.35(typescript@5.5.2)) + '@vueuse/nuxt': 10.11.0(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2)) defu: 6.1.4 focus-trap: 7.5.4 splitpanes: 3.1.5 - unocss: 0.61.0(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) - v-lazy-show: 0.2.4(@vue/compiler-core@3.4.31) + unocss: 0.61.0(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + v-lazy-show: 0.2.4(@vue/compiler-core@3.4.35) transitivePeerDependencies: - '@unocss/webpack' - '@vue/compiler-core' @@ -7851,13 +8084,60 @@ snapshots: - supports-color - utf-8-validate - '@nuxt/devtools@1.3.9(rollup@3.29.4)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))': + '@nuxt/devtools@1.3.6(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': + dependencies: + '@antfu/utils': 0.7.10 + '@nuxt/devtools-kit': 1.3.6(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/devtools-wizard': 1.3.6 + '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) + '@vue/devtools-core': 7.3.3(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + '@vue/devtools-kit': 7.3.3 + birpc: 0.2.17 + consola: 3.2.3 + cronstrue: 2.50.0 + destr: 2.0.3 + error-stack-parser-es: 0.1.4 + execa: 7.2.0 + fast-glob: 3.3.2 + flatted: 3.3.1 + get-port-please: 3.1.2 + hookable: 5.5.3 + image-meta: 0.2.0 + is-installed-globally: 1.0.0 + launch-editor: 2.8.0 + local-pkg: 0.5.0 + magicast: 0.3.4 + nypm: 0.3.8 + ohash: 1.1.3 + pacote: 18.0.6 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.1.1 + rc9: 2.1.2 + scule: 1.3.0 + semver: 7.6.2 + simple-git: 3.25.0 + sirv: 2.0.4 + unimport: 3.7.2(rollup@4.18.0) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + vite-plugin-inspect: 0.8.4(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@4.18.0))(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + vite-plugin-vue-inspector: 5.1.2(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + which: 3.0.1 + ws: 8.17.1 + transitivePeerDependencies: + - bluebird + - bufferutil + - rollup + - supports-color + - utf-8-validate + + '@nuxt/devtools@1.3.9(rollup@3.29.4)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': dependencies: '@antfu/utils': 0.7.10 - '@nuxt/devtools-kit': 1.3.9(magicast@0.3.4)(rollup@3.29.4)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/devtools-kit': 1.3.9(magicast@0.3.4)(rollup@3.29.4)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) '@nuxt/devtools-wizard': 1.3.9 '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@3.29.4) - '@vue/devtools-core': 7.3.3(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@vue/devtools-core': 7.3.3(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) '@vue/devtools-kit': 7.3.3 birpc: 0.2.17 consola: 3.2.3 @@ -7886,9 +8166,9 @@ snapshots: simple-git: 3.25.0 sirv: 2.0.4 unimport: 3.7.2(rollup@3.29.4) - vite: 5.3.3(@types/node@20.14.9)(terser@5.31.1) - vite-plugin-inspect: 0.8.4(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@3.29.4))(rollup@3.29.4)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) - vite-plugin-vue-inspector: 5.1.2(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + vite-plugin-inspect: 0.8.4(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@3.29.4))(rollup@3.29.4)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + vite-plugin-vue-inspector: 5.1.2(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) which: 3.0.1 ws: 8.17.1 transitivePeerDependencies: @@ -7943,6 +8223,52 @@ snapshots: - supports-color - utf-8-validate + '@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': + dependencies: + '@antfu/utils': 0.7.10 + '@nuxt/devtools-kit': 1.3.9(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/devtools-wizard': 1.3.9 + '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) + '@vue/devtools-core': 7.3.3(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + '@vue/devtools-kit': 7.3.3 + birpc: 0.2.17 + consola: 3.2.3 + cronstrue: 2.50.0 + destr: 2.0.3 + error-stack-parser-es: 0.1.4 + execa: 7.2.0 + fast-glob: 3.3.2 + fast-npm-meta: 0.1.1 + flatted: 3.3.1 + get-port-please: 3.1.2 + hookable: 5.5.3 + image-meta: 0.2.0 + is-installed-globally: 1.0.0 + launch-editor: 2.8.0 + local-pkg: 0.5.0 + magicast: 0.3.4 + nypm: 0.3.9 + ohash: 1.1.3 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.1.3 + rc9: 2.1.2 + scule: 1.3.0 + semver: 7.6.2 + simple-git: 3.25.0 + sirv: 2.0.4 + unimport: 3.7.2(rollup@4.18.0) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + vite-plugin-inspect: 0.8.4(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@4.18.0))(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + vite-plugin-vue-inspector: 5.1.2(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + which: 3.0.1 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - rollup + - supports-color + - utf-8-validate + '@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@3.29.4)': dependencies: '@nuxt/schema': 3.12.3(rollup@3.29.4) @@ -7997,13 +8323,40 @@ snapshots: - rollup - supports-color - '@nuxt/module-builder@0.6.0(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@3.29.4))(nuxi@3.12.0)(typescript@5.5.2)(vue-tsc@2.0.22(typescript@5.5.2))': + '@nuxt/kit@3.12.4(magicast@0.3.4)(rollup@4.18.0)': dependencies: - '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@3.29.4) - citty: 0.1.6 + '@nuxt/schema': 3.12.4(rollup@4.18.0) + c12: 1.11.1(magicast@0.3.4) consola: 3.2.3 defu: 6.1.4 - mlly: 1.7.1 + destr: 2.0.3 + globby: 14.0.2 + hash-sum: 2.0.0 + ignore: 5.3.1 + jiti: 1.21.0 + klona: 2.0.6 + knitwork: 1.1.0 + mlly: 1.7.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + scule: 1.3.0 + semver: 7.6.3 + ufo: 1.5.4 + unctx: 2.3.1 + unimport: 3.10.0(rollup@4.18.0) + untyped: 1.4.2 + transitivePeerDependencies: + - magicast + - rollup + - supports-color + + '@nuxt/module-builder@0.6.0(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@3.29.4))(nuxi@3.12.0)(typescript@5.5.2)(vue-tsc@2.0.22(typescript@5.5.2))': + dependencies: + '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@3.29.4) + citty: 0.1.6 + consola: 3.2.3 + defu: 6.1.4 + mlly: 1.7.1 nuxi: 3.12.0 pathe: 1.1.2 pkg-types: 1.1.1 @@ -8050,6 +8403,24 @@ snapshots: - rollup - supports-color + '@nuxt/schema@3.12.4(rollup@4.18.0)': + dependencies: + compatx: 0.1.8 + consola: 3.2.3 + defu: 6.1.4 + hookable: 5.5.3 + pathe: 1.1.2 + pkg-types: 1.1.3 + scule: 1.3.0 + std-env: 3.7.0 + ufo: 1.5.4 + uncrypto: 0.1.3 + unimport: 3.10.0(rollup@4.18.0) + untyped: 1.4.2 + transitivePeerDependencies: + - rollup + - supports-color + '@nuxt/telemetry@2.5.4(magicast@0.3.4)(rollup@3.29.4)': dependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@3.29.4) @@ -8098,10 +8469,10 @@ snapshots: - rollup - supports-color - '@nuxt/ui-pro@1.3.1(focus-trap@7.5.4)(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))': + '@nuxt/ui-pro@1.3.1(focus-trap@7.5.4)(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))': dependencies: - '@nuxt/ui': 2.17.0(focus-trap@7.5.4)(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2)) - '@vueuse/core': 10.11.0(vue@3.4.31(typescript@5.5.2)) + '@nuxt/ui': 2.17.0(focus-trap@7.5.4)(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2)) + '@vueuse/core': 10.11.0(vue@3.4.35(typescript@5.5.2)) defu: 6.1.4 git-url-parse: 14.0.0 ofetch: 1.3.4 @@ -8109,7 +8480,7 @@ snapshots: pathe: 1.1.2 pkg-types: 1.1.1 tailwind-merge: 2.3.0 - vue3-smooth-dnd: 0.0.6(vue@3.4.31(typescript@5.5.2)) + vue3-smooth-dnd: 0.0.6(vue@3.4.35(typescript@5.5.2)) transitivePeerDependencies: - '@vue/composition-api' - async-validator @@ -8131,11 +8502,11 @@ snapshots: - vite - vue - '@nuxt/ui@2.17.0(focus-trap@7.5.4)(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))': + '@nuxt/ui@2.17.0(focus-trap@7.5.4)(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))': dependencies: '@egoist/tailwindcss-icons': 1.8.1(tailwindcss@3.4.4) '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.4) - '@headlessui/vue': 1.7.22(vue@3.4.31(typescript@5.5.2)) + '@headlessui/vue': 1.7.22(vue@3.4.35(typescript@5.5.2)) '@iconify-json/heroicons': 1.1.21 '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) '@nuxtjs/color-mode': 3.4.2(magicast@0.3.4)(rollup@4.18.0) @@ -8145,12 +8516,12 @@ snapshots: '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.4) '@tailwindcss/forms': 0.5.7(tailwindcss@3.4.4) '@tailwindcss/typography': 0.5.13(tailwindcss@3.4.4) - '@vueuse/core': 10.11.0(vue@3.4.31(typescript@5.5.2)) - '@vueuse/integrations': 10.11.0(focus-trap@7.5.4)(fuse.js@6.6.2)(vue@3.4.31(typescript@5.5.2)) - '@vueuse/math': 10.11.0(vue@3.4.31(typescript@5.5.2)) + '@vueuse/core': 10.11.0(vue@3.4.35(typescript@5.5.2)) + '@vueuse/integrations': 10.11.0(focus-trap@7.5.4)(fuse.js@6.6.2)(vue@3.4.35(typescript@5.5.2)) + '@vueuse/math': 10.11.0(vue@3.4.35(typescript@5.5.2)) defu: 6.1.4 fuse.js: 6.6.2 - nuxt-icon: 0.6.10(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2)) + nuxt-icon: 0.6.10(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2)) ohash: 1.1.3 pathe: 1.1.2 scule: 1.3.0 @@ -8291,6 +8662,64 @@ snapshots: - vti - vue-tsc + '@nuxt/vite-builder@3.12.4(@types/node@20.14.9)(eslint@9.5.0)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vue-tsc@2.0.22(typescript@5.5.2))(vue@3.4.35(typescript@5.5.2))': + dependencies: + '@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.18.0) + '@rollup/plugin-replace': 5.0.7(rollup@4.18.0) + '@vitejs/plugin-vue': 5.0.5(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2)) + '@vitejs/plugin-vue-jsx': 4.0.0(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2)) + autoprefixer: 10.4.19(postcss@8.4.39) + clear: 0.1.0 + consola: 3.2.3 + cssnano: 7.0.4(postcss@8.4.39) + defu: 6.1.4 + esbuild: 0.23.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + externality: 1.0.2 + get-port-please: 3.1.2 + h3: 1.12.0 + knitwork: 1.1.0 + magic-string: 0.30.10 + mlly: 1.7.1 + ohash: 1.1.3 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.1.3 + postcss: 8.4.39 + rollup-plugin-visualizer: 5.12.0(rollup@4.18.0) + std-env: 3.7.0 + strip-literal: 2.1.0 + ufo: 1.5.4 + unenv: 1.10.0 + unplugin: 1.11.0 + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + vite-node: 2.0.4(@types/node@20.14.9)(terser@5.31.1) + vite-plugin-checker: 0.7.2(eslint@9.5.0)(optionator@0.9.4)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + vue: 3.4.35(typescript@5.5.2) + vue-bundle-renderer: 2.1.0 + transitivePeerDependencies: + - '@biomejs/biome' + - '@types/node' + - eslint + - less + - lightningcss + - magicast + - meow + - optionator + - rollup + - sass + - stylelint + - stylus + - sugarss + - supports-color + - terser + - typescript + - uWebSockets.js + - vls + - vti + - vue-tsc + '@nuxtjs/color-mode@3.4.2(magicast@0.3.4)(rollup@4.18.0)': dependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) @@ -8948,10 +9377,10 @@ snapshots: '@tanstack/virtual-core@3.7.0': {} - '@tanstack/vue-virtual@3.7.0(vue@3.4.31(typescript@5.5.2))': + '@tanstack/vue-virtual@3.7.0(vue@3.4.35(typescript@5.5.2))': dependencies: '@tanstack/virtual-core': 3.7.0 - vue: 3.4.31(typescript@5.5.2) + vue: 3.4.35(typescript@5.5.2) '@trysound/sax@0.2.0': {} @@ -9112,20 +9541,39 @@ snapshots: '@unhead/schema': 1.9.14 '@unhead/shared': 1.9.14 + '@unhead/dom@1.9.16': + dependencies: + '@unhead/schema': 1.9.16 + '@unhead/shared': 1.9.16 + '@unhead/schema@1.9.14': dependencies: hookable: 5.5.3 zhead: 2.2.4 + '@unhead/schema@1.9.16': + dependencies: + hookable: 5.5.3 + zhead: 2.2.4 + '@unhead/shared@1.9.14': dependencies: '@unhead/schema': 1.9.14 + '@unhead/shared@1.9.16': + dependencies: + '@unhead/schema': 1.9.16 + '@unhead/ssr@1.9.14': dependencies: '@unhead/schema': 1.9.14 '@unhead/shared': 1.9.14 + '@unhead/ssr@1.9.16': + dependencies: + '@unhead/schema': 1.9.16 + '@unhead/shared': 1.9.16 + '@unhead/vue@1.9.14(vue@3.4.31(typescript@5.5.2))': dependencies: '@unhead/schema': 1.9.14 @@ -9134,13 +9582,29 @@ snapshots: unhead: 1.9.14 vue: 3.4.31(typescript@5.5.2) - '@unocss/astro@0.61.0(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))': + '@unhead/vue@1.9.14(vue@3.4.35(typescript@5.5.2))': + dependencies: + '@unhead/schema': 1.9.14 + '@unhead/shared': 1.9.14 + hookable: 5.5.3 + unhead: 1.9.14 + vue: 3.4.35(typescript@5.5.2) + + '@unhead/vue@1.9.16(vue@3.4.35(typescript@5.5.2))': + dependencies: + '@unhead/schema': 1.9.16 + '@unhead/shared': 1.9.16 + hookable: 5.5.3 + unhead: 1.9.16 + vue: 3.4.35(typescript@5.5.2) + + '@unocss/astro@0.61.0(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': dependencies: '@unocss/core': 0.61.0 '@unocss/reset': 0.61.0 - '@unocss/vite': 0.61.0(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@unocss/vite': 0.61.0(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) optionalDependencies: - vite: 5.3.3(@types/node@20.14.9)(terser@5.31.1) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) transitivePeerDependencies: - rollup @@ -9180,7 +9644,7 @@ snapshots: gzip-size: 6.0.0 sirv: 2.0.4 - '@unocss/nuxt@0.61.0(magicast@0.3.4)(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(webpack@5.92.1)': + '@unocss/nuxt@0.61.0(magicast@0.3.4)(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(webpack@5.92.1)': dependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) '@unocss/config': 0.61.0 @@ -9193,9 +9657,9 @@ snapshots: '@unocss/preset-web-fonts': 0.61.0 '@unocss/preset-wind': 0.61.0 '@unocss/reset': 0.61.0 - '@unocss/vite': 0.61.0(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@unocss/vite': 0.61.0(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) '@unocss/webpack': 0.61.0(rollup@4.18.0)(webpack@5.92.1) - unocss: 0.61.0(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + unocss: 0.61.0(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) transitivePeerDependencies: - magicast - postcss @@ -9295,7 +9759,7 @@ snapshots: dependencies: '@unocss/core': 0.61.0 - '@unocss/vite@0.61.0(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))': + '@unocss/vite@0.61.0(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': dependencies: '@ampproject/remapping': 2.3.0 '@rollup/pluginutils': 5.1.0(rollup@4.18.0) @@ -9307,7 +9771,7 @@ snapshots: chokidar: 3.6.0 fast-glob: 3.3.2 magic-string: 0.30.10 - vite: 5.3.3(@types/node@20.14.9)(terser@5.31.1) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) transitivePeerDependencies: - rollup @@ -9354,11 +9818,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-vue-jsx@4.0.0(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))': + dependencies: + '@babel/core': 7.24.7 + '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) + '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.7) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + vue: 3.4.35(typescript@5.5.2) + transitivePeerDependencies: + - supports-color + '@vitejs/plugin-vue@5.0.5(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))': dependencies: vite: 5.3.3(@types/node@20.14.9)(terser@5.31.1) vue: 3.4.31(typescript@5.5.2) + '@vitejs/plugin-vue@5.0.5(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))': + dependencies: + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + vue: 3.4.35(typescript@5.5.2) + '@vitest/expect@2.0.4': dependencies: '@vitest/spy': 2.0.4 @@ -9430,6 +9909,19 @@ snapshots: transitivePeerDependencies: - rollup + '@vue-macros/common@1.10.4(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2))': + dependencies: + '@babel/types': 7.24.7 + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + '@vue/compiler-sfc': 3.4.31 + ast-kit: 0.12.2 + local-pkg: 0.5.0 + magic-string-ast: 0.6.2 + optionalDependencies: + vue: 3.4.35(typescript@5.5.2) + transitivePeerDependencies: + - rollup + '@vue/babel-helper-vue-transform-on@1.2.2': {} '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.7)': @@ -9475,11 +9967,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.0 + '@vue/compiler-core@3.4.35': + dependencies: + '@babel/parser': 7.24.7 + '@vue/shared': 3.4.35 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + '@vue/compiler-dom@3.4.31': dependencies: '@vue/compiler-core': 3.4.31 '@vue/shared': 3.4.31 + '@vue/compiler-dom@3.4.35': + dependencies: + '@vue/compiler-core': 3.4.35 + '@vue/shared': 3.4.35 + '@vue/compiler-sfc@3.4.31': dependencies: '@babel/parser': 7.24.7 @@ -9492,11 +9997,28 @@ snapshots: postcss: 8.4.39 source-map-js: 1.2.0 + '@vue/compiler-sfc@3.4.35': + dependencies: + '@babel/parser': 7.24.7 + '@vue/compiler-core': 3.4.35 + '@vue/compiler-dom': 3.4.35 + '@vue/compiler-ssr': 3.4.35 + '@vue/shared': 3.4.35 + estree-walker: 2.0.2 + magic-string: 0.30.10 + postcss: 8.4.40 + source-map-js: 1.2.0 + '@vue/compiler-ssr@3.4.31': dependencies: '@vue/compiler-dom': 3.4.31 '@vue/shared': 3.4.31 + '@vue/compiler-ssr@3.4.35': + dependencies: + '@vue/compiler-dom': 3.4.35 + '@vue/shared': 3.4.35 + '@vue/devtools-api@6.6.3': {} '@vue/devtools-core@7.3.3(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))': @@ -9510,6 +10032,17 @@ snapshots: transitivePeerDependencies: - vite + '@vue/devtools-core@7.3.3(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))': + dependencies: + '@vue/devtools-kit': 7.3.3 + '@vue/devtools-shared': 7.3.4 + mitt: 3.0.1 + nanoid: 3.3.7 + pathe: 1.1.2 + vite-hot-client: 0.2.3(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + transitivePeerDependencies: + - vite + '@vue/devtools-kit@7.3.3': dependencies: '@vue/devtools-shared': 7.3.4 @@ -9541,11 +10074,20 @@ snapshots: dependencies: '@vue/shared': 3.4.31 + '@vue/reactivity@3.4.35': + dependencies: + '@vue/shared': 3.4.35 + '@vue/runtime-core@3.4.31': dependencies: '@vue/reactivity': 3.4.31 '@vue/shared': 3.4.31 + '@vue/runtime-core@3.4.35': + dependencies: + '@vue/reactivity': 3.4.35 + '@vue/shared': 3.4.35 + '@vue/runtime-dom@3.4.31': dependencies: '@vue/reactivity': 3.4.31 @@ -9553,39 +10095,54 @@ snapshots: '@vue/shared': 3.4.31 csstype: 3.1.3 + '@vue/runtime-dom@3.4.35': + dependencies: + '@vue/reactivity': 3.4.35 + '@vue/runtime-core': 3.4.35 + '@vue/shared': 3.4.35 + csstype: 3.1.3 + '@vue/server-renderer@3.4.31(vue@3.4.31(typescript@5.5.2))': dependencies: '@vue/compiler-ssr': 3.4.31 '@vue/shared': 3.4.31 vue: 3.4.31(typescript@5.5.2) + '@vue/server-renderer@3.4.35(vue@3.4.35(typescript@5.5.2))': + dependencies: + '@vue/compiler-ssr': 3.4.35 + '@vue/shared': 3.4.35 + vue: 3.4.35(typescript@5.5.2) + '@vue/shared@3.4.30': {} '@vue/shared@3.4.31': {} - '@vueuse/core@10.11.0(vue@3.4.31(typescript@5.5.2))': + '@vue/shared@3.4.35': {} + + '@vueuse/core@10.11.0(vue@3.4.35(typescript@5.5.2))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.0 - '@vueuse/shared': 10.11.0(vue@3.4.31(typescript@5.5.2)) - vue-demi: 0.14.8(vue@3.4.31(typescript@5.5.2)) + '@vueuse/shared': 10.11.0(vue@3.4.35(typescript@5.5.2)) + vue-demi: 0.14.8(vue@3.4.35(typescript@5.5.2)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/head@2.0.0(vue@3.4.31(typescript@5.5.2))': + '@vueuse/head@2.0.0(vue@3.4.35(typescript@5.5.2))': dependencies: '@unhead/dom': 1.9.14 '@unhead/schema': 1.9.14 '@unhead/ssr': 1.9.14 - '@unhead/vue': 1.9.14(vue@3.4.31(typescript@5.5.2)) - vue: 3.4.31(typescript@5.5.2) + '@unhead/vue': 1.9.14(vue@3.4.35(typescript@5.5.2)) + vue: 3.4.35(typescript@5.5.2) - '@vueuse/integrations@10.11.0(focus-trap@7.5.4)(fuse.js@6.6.2)(vue@3.4.31(typescript@5.5.2))': + '@vueuse/integrations@10.11.0(focus-trap@7.5.4)(fuse.js@6.6.2)(vue@3.4.35(typescript@5.5.2))': dependencies: - '@vueuse/core': 10.11.0(vue@3.4.31(typescript@5.5.2)) - '@vueuse/shared': 10.11.0(vue@3.4.31(typescript@5.5.2)) - vue-demi: 0.14.8(vue@3.4.31(typescript@5.5.2)) + '@vueuse/core': 10.11.0(vue@3.4.35(typescript@5.5.2)) + '@vueuse/shared': 10.11.0(vue@3.4.35(typescript@5.5.2)) + vue-demi: 0.14.8(vue@3.4.35(typescript@5.5.2)) optionalDependencies: focus-trap: 7.5.4 fuse.js: 6.6.2 @@ -9593,24 +10150,24 @@ snapshots: - '@vue/composition-api' - vue - '@vueuse/math@10.11.0(vue@3.4.31(typescript@5.5.2))': + '@vueuse/math@10.11.0(vue@3.4.35(typescript@5.5.2))': dependencies: - '@vueuse/shared': 10.11.0(vue@3.4.31(typescript@5.5.2)) - vue-demi: 0.14.8(vue@3.4.31(typescript@5.5.2)) + '@vueuse/shared': 10.11.0(vue@3.4.35(typescript@5.5.2)) + vue-demi: 0.14.8(vue@3.4.35(typescript@5.5.2)) transitivePeerDependencies: - '@vue/composition-api' - vue '@vueuse/metadata@10.11.0': {} - '@vueuse/nuxt@10.11.0(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.31(typescript@5.5.2))': + '@vueuse/nuxt@10.11.0(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2))': dependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) - '@vueuse/core': 10.11.0(vue@3.4.31(typescript@5.5.2)) + '@vueuse/core': 10.11.0(vue@3.4.35(typescript@5.5.2)) '@vueuse/metadata': 10.11.0 local-pkg: 0.5.0 - nuxt: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) - vue-demi: 0.14.8(vue@3.4.31(typescript@5.5.2)) + nuxt: 3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)) + vue-demi: 0.14.8(vue@3.4.35(typescript@5.5.2)) transitivePeerDependencies: - '@vue/composition-api' - magicast @@ -9618,9 +10175,9 @@ snapshots: - supports-color - vue - '@vueuse/shared@10.11.0(vue@3.4.31(typescript@5.5.2))': + '@vueuse/shared@10.11.0(vue@3.4.35(typescript@5.5.2))': dependencies: - vue-demi: 0.14.8(vue@3.4.31(typescript@5.5.2)) + vue-demi: 0.14.8(vue@3.4.35(typescript@5.5.2)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -9728,6 +10285,8 @@ snapshots: acorn@8.12.0: {} + acorn@8.12.1: {} + agent-base@6.0.2: dependencies: debug: 4.3.5 @@ -10362,6 +10921,40 @@ snapshots: postcss-svgo: 7.0.1(postcss@8.4.39) postcss-unique-selectors: 7.0.1(postcss@8.4.39) + cssnano-preset-default@7.0.4(postcss@8.4.39): + dependencies: + browserslist: 4.23.1 + css-declaration-sorter: 7.2.0(postcss@8.4.39) + cssnano-utils: 5.0.0(postcss@8.4.39) + postcss: 8.4.39 + postcss-calc: 10.0.0(postcss@8.4.39) + postcss-colormin: 7.0.1(postcss@8.4.39) + postcss-convert-values: 7.0.2(postcss@8.4.39) + postcss-discard-comments: 7.0.1(postcss@8.4.39) + postcss-discard-duplicates: 7.0.0(postcss@8.4.39) + postcss-discard-empty: 7.0.0(postcss@8.4.39) + postcss-discard-overridden: 7.0.0(postcss@8.4.39) + postcss-merge-longhand: 7.0.2(postcss@8.4.39) + postcss-merge-rules: 7.0.2(postcss@8.4.39) + postcss-minify-font-values: 7.0.0(postcss@8.4.39) + postcss-minify-gradients: 7.0.0(postcss@8.4.39) + postcss-minify-params: 7.0.1(postcss@8.4.39) + postcss-minify-selectors: 7.0.2(postcss@8.4.39) + postcss-normalize-charset: 7.0.0(postcss@8.4.39) + postcss-normalize-display-values: 7.0.0(postcss@8.4.39) + postcss-normalize-positions: 7.0.0(postcss@8.4.39) + postcss-normalize-repeat-style: 7.0.0(postcss@8.4.39) + postcss-normalize-string: 7.0.0(postcss@8.4.39) + postcss-normalize-timing-functions: 7.0.0(postcss@8.4.39) + postcss-normalize-unicode: 7.0.1(postcss@8.4.39) + postcss-normalize-url: 7.0.0(postcss@8.4.39) + postcss-normalize-whitespace: 7.0.0(postcss@8.4.39) + postcss-ordered-values: 7.0.1(postcss@8.4.39) + postcss-reduce-initial: 7.0.1(postcss@8.4.39) + postcss-reduce-transforms: 7.0.0(postcss@8.4.39) + postcss-svgo: 7.0.1(postcss@8.4.39) + postcss-unique-selectors: 7.0.1(postcss@8.4.39) + cssnano-utils@5.0.0(postcss@8.4.38): dependencies: postcss: 8.4.38 @@ -10382,6 +10975,12 @@ snapshots: lilconfig: 3.1.2 postcss: 8.4.39 + cssnano@7.0.4(postcss@8.4.39): + dependencies: + cssnano-preset-default: 7.0.4(postcss@8.4.39) + lilconfig: 3.1.2 + postcss: 8.4.39 + csso@5.0.5: dependencies: css-tree: 2.2.1 @@ -10570,6 +11169,8 @@ snapshots: error-stack-parser-es@0.1.4: {} + errx@0.1.0: {} + es-module-lexer@1.5.4: {} esbuild@0.19.12: @@ -11805,6 +12406,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + magicast@0.3.4: dependencies: '@babel/parser': 7.24.7 @@ -12520,11 +13125,11 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - nuxt-icon@0.6.10(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2)): + nuxt-icon@0.6.10(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2)): dependencies: '@iconify/collections': 1.0.434 - '@iconify/vue': 4.1.2(vue@3.4.31(typescript@5.5.2)) - '@nuxt/devtools-kit': 1.3.6(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@iconify/vue': 4.1.2(vue@3.4.35(typescript@5.5.2)) + '@nuxt/devtools-kit': 1.3.6(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) transitivePeerDependencies: - magicast @@ -12533,7 +13138,7 @@ snapshots: - vite - vue - nuxt-og-image@2.2.6(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.31)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))(webpack@5.92.1): + nuxt-og-image@2.2.6(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.35)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))(webpack@5.92.1): dependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) '@resvg/resvg-js': 2.6.2 @@ -12552,8 +13157,8 @@ snapshots: globby: 13.2.2 image-size: 1.1.1 launch-editor: 2.8.0 - nuxt-site-config: 1.6.7(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.31)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))(webpack@5.92.1) - nuxt-site-config-kit: 1.6.7(magicast@0.3.4)(rollup@4.18.0)(vue@3.4.31(typescript@5.5.2)) + nuxt-site-config: 1.6.7(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.35)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))(webpack@5.92.1) + nuxt-site-config-kit: 1.6.7(magicast@0.3.4)(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2)) nypm: 0.3.8 ofetch: 1.3.4 ohash: 1.1.3 @@ -12597,12 +13202,12 @@ snapshots: - vue - webpack - nuxt-site-config-kit@1.6.7(magicast@0.3.4)(rollup@4.18.0)(vue@3.4.31(typescript@5.5.2)): + nuxt-site-config-kit@1.6.7(magicast@0.3.4)(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2)): dependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) '@nuxt/schema': 3.12.3(rollup@4.18.0) pkg-types: 1.1.1 - site-config-stack: 1.6.7(vue@3.4.31(typescript@5.5.2)) + site-config-stack: 1.6.7(vue@3.4.35(typescript@5.5.2)) std-env: 3.7.0 ufo: 1.5.3 transitivePeerDependencies: @@ -12611,17 +13216,17 @@ snapshots: - supports-color - vue - nuxt-site-config@1.6.7(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.31)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))(webpack@5.92.1): + nuxt-site-config@1.6.7(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.35)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))(webpack@5.92.1): dependencies: - '@nuxt/devtools-kit': 1.3.6(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) - '@nuxt/devtools-ui-kit': 1.3.6(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.31)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.31(typescript@5.5.2))(webpack@5.92.1) + '@nuxt/devtools-kit': 1.3.6(magicast@0.3.4)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/devtools-ui-kit': 1.3.6(@nuxt/devtools@1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)))(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(@vue/compiler-core@3.4.35)(fuse.js@6.6.2)(magicast@0.3.4)(nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue@3.4.35(typescript@5.5.2))(webpack@5.92.1) '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) '@nuxt/schema': 3.12.3(rollup@4.18.0) - nuxt-site-config-kit: 1.6.7(magicast@0.3.4)(rollup@4.18.0)(vue@3.4.31(typescript@5.5.2)) + nuxt-site-config-kit: 1.6.7(magicast@0.3.4)(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2)) pathe: 1.1.2 shiki-es: 0.14.0 sirv: 2.0.4 - site-config-stack: 1.6.7(vue@3.4.31(typescript@5.5.2)) + site-config-stack: 1.6.7(vue@3.4.35(typescript@5.5.2)) ufo: 1.5.3 transitivePeerDependencies: - '@nuxt/devtools' @@ -12648,10 +13253,10 @@ snapshots: - vue - webpack - nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@3.29.4)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)): + nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@3.29.4)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 1.3.9(rollup@3.29.4)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/devtools': 1.3.9(rollup@3.29.4)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@3.29.4) '@nuxt/schema': 3.12.3(rollup@3.29.4) '@nuxt/telemetry': 2.5.4(magicast@0.3.4)(rollup@3.29.4) @@ -12858,21 +13463,233 @@ snapshots: - vue-tsc - xml2js - nwsapi@2.2.10: {} - - nypm@0.3.8: - dependencies: - citty: 0.1.6 - consola: 3.2.3 - execa: 8.0.1 - pathe: 1.1.2 - ufo: 1.5.3 - - nypm@0.3.9: + nuxt@3.12.3(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)): dependencies: - citty: 0.1.6 + '@nuxt/devalue': 2.0.2 + '@nuxt/devtools': 1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) + '@nuxt/schema': 3.12.3(rollup@4.18.0) + '@nuxt/telemetry': 2.5.4(magicast@0.3.4)(rollup@4.18.0) + '@nuxt/vite-builder': 3.12.3(@types/node@20.14.9)(eslint@9.5.0)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vue-tsc@2.0.22(typescript@5.5.2))(vue@3.4.31(typescript@5.5.2)) + '@unhead/dom': 1.9.14 + '@unhead/ssr': 1.9.14 + '@unhead/vue': 1.9.14(vue@3.4.31(typescript@5.5.2)) + '@vue/shared': 3.4.31 + acorn: 8.12.0 + c12: 1.11.1(magicast@0.3.4) + chokidar: 3.6.0 + compatx: 0.1.8 consola: 3.2.3 - execa: 8.0.1 + cookie-es: 1.1.0 + defu: 6.1.4 + destr: 2.0.3 + devalue: 5.0.0 + esbuild: 0.23.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + globby: 14.0.2 + h3: 1.12.0 + hookable: 5.5.3 + ignore: 5.3.1 + jiti: 1.21.0 + klona: 2.0.6 + knitwork: 1.1.0 + magic-string: 0.30.10 + mlly: 1.7.1 + nitropack: 2.9.7(@opentelemetry/api@1.9.0)(encoding@0.1.13)(magicast@0.3.4) + nuxi: 3.12.0 + nypm: 0.3.9 + ofetch: 1.3.4 + ohash: 1.1.3 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.1.3 + radix3: 1.1.2 + scule: 1.3.0 + semver: 7.6.2 + std-env: 3.7.0 + strip-literal: 2.1.0 + ufo: 1.5.3 + ultrahtml: 1.5.3 + uncrypto: 0.1.3 + unctx: 2.3.1 + unenv: 1.9.0 + unimport: 3.7.2(rollup@4.18.0) + unplugin: 1.11.0 + unplugin-vue-router: 0.10.0(rollup@4.18.0)(vue-router@4.4.0(vue@3.4.31(typescript@5.5.2)))(vue@3.4.31(typescript@5.5.2)) + unstorage: 1.10.2(ioredis@5.4.1) + untyped: 1.4.2 + vue: 3.4.31(typescript@5.5.2) + vue-bundle-renderer: 2.1.0 + vue-devtools-stub: 0.1.0 + vue-router: 4.4.0(vue@3.4.31(typescript@5.5.2)) + optionalDependencies: + '@parcel/watcher': 2.4.1 + '@types/node': 20.14.9 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@libsql/client' + - '@netlify/blobs' + - '@opentelemetry/api' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/kv' + - better-sqlite3 + - bufferutil + - drizzle-orm + - encoding + - eslint + - idb-keyval + - ioredis + - less + - lightningcss + - magicast + - meow + - optionator + - rollup + - sass + - stylelint + - stylus + - sugarss + - supports-color + - terser + - typescript + - uWebSockets.js + - utf-8-validate + - vite + - vls + - vti + - vue-tsc + - xml2js + + nuxt@3.12.4(@opentelemetry/api@1.9.0)(@parcel/watcher@2.4.1)(@types/node@20.14.9)(encoding@0.1.13)(eslint@9.5.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)): + dependencies: + '@nuxt/devalue': 2.0.2 + '@nuxt/devtools': 1.3.9(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) + '@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.18.0) + '@nuxt/schema': 3.12.4(rollup@4.18.0) + '@nuxt/telemetry': 2.5.4(magicast@0.3.4)(rollup@4.18.0) + '@nuxt/vite-builder': 3.12.4(@types/node@20.14.9)(eslint@9.5.0)(magicast@0.3.4)(optionator@0.9.4)(rollup@4.18.0)(terser@5.31.1)(typescript@5.5.2)(vue-tsc@2.0.22(typescript@5.5.2))(vue@3.4.35(typescript@5.5.2)) + '@unhead/dom': 1.9.16 + '@unhead/ssr': 1.9.16 + '@unhead/vue': 1.9.16(vue@3.4.35(typescript@5.5.2)) + '@vue/shared': 3.4.35 + acorn: 8.12.1 + c12: 1.11.1(magicast@0.3.4) + chokidar: 3.6.0 + compatx: 0.1.8 + consola: 3.2.3 + cookie-es: 1.1.0 + defu: 6.1.4 + destr: 2.0.3 + devalue: 5.0.0 + errx: 0.1.0 + esbuild: 0.23.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + globby: 14.0.2 + h3: 1.12.0 + hookable: 5.5.3 + ignore: 5.3.1 + jiti: 1.21.0 + klona: 2.0.6 + knitwork: 1.1.0 + magic-string: 0.30.10 + mlly: 1.7.1 + nitropack: 2.9.7(@opentelemetry/api@1.9.0)(encoding@0.1.13)(magicast@0.3.4) + nuxi: 3.12.0 + nypm: 0.3.9 + ofetch: 1.3.4 + ohash: 1.1.3 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.1.3 + radix3: 1.1.2 + scule: 1.3.0 + semver: 7.6.3 + std-env: 3.7.0 + strip-literal: 2.1.0 + ufo: 1.5.4 + ultrahtml: 1.5.3 + uncrypto: 0.1.3 + unctx: 2.3.1 + unenv: 1.10.0 + unimport: 3.10.0(rollup@4.18.0) + unplugin: 1.11.0 + unplugin-vue-router: 0.10.0(rollup@4.18.0)(vue-router@4.4.0(vue@3.4.35(typescript@5.5.2)))(vue@3.4.35(typescript@5.5.2)) + unstorage: 1.10.2(ioredis@5.4.1) + untyped: 1.4.2 + vue: 3.4.35(typescript@5.5.2) + vue-bundle-renderer: 2.1.0 + vue-devtools-stub: 0.1.0 + vue-router: 4.4.0(vue@3.4.35(typescript@5.5.2)) + optionalDependencies: + '@parcel/watcher': 2.4.1 + '@types/node': 20.14.9 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@biomejs/biome' + - '@capacitor/preferences' + - '@libsql/client' + - '@netlify/blobs' + - '@opentelemetry/api' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/kv' + - better-sqlite3 + - bufferutil + - drizzle-orm + - encoding + - eslint + - idb-keyval + - ioredis + - less + - lightningcss + - magicast + - meow + - optionator + - rollup + - sass + - stylelint + - stylus + - sugarss + - supports-color + - terser + - typescript + - uWebSockets.js + - utf-8-validate + - vite + - vls + - vti + - vue-tsc + - xml2js + + nwsapi@2.2.10: {} + + nypm@0.3.8: + dependencies: + citty: 0.1.6 + consola: 3.2.3 + execa: 8.0.1 + pathe: 1.1.2 + ufo: 1.5.3 + + nypm@0.3.9: + dependencies: + citty: 0.1.6 + consola: 3.2.3 + execa: 8.0.1 pathe: 1.1.2 pkg-types: 1.1.3 ufo: 1.5.3 @@ -13138,6 +13955,12 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 + postcss-convert-values@7.0.2(postcss@8.4.39): + dependencies: + browserslist: 4.23.1 + postcss: 8.4.39 + postcss-value-parser: 4.2.0 + postcss-discard-comments@7.0.1(postcss@8.4.38): dependencies: postcss: 8.4.38 @@ -13451,6 +14274,12 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + postcss@8.4.40: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + prelude-ls@1.2.1: {} prettier@3.3.2: {} @@ -13832,6 +14661,8 @@ snapshots: semver@7.6.2: {} + semver@7.6.3: {} + send@0.18.0: dependencies: debug: 2.6.9 @@ -13922,10 +14753,10 @@ snapshots: sisteransi@1.0.5: {} - site-config-stack@1.6.7(vue@3.4.31(typescript@5.5.2)): + site-config-stack@1.6.7(vue@3.4.35(typescript@5.5.2)): dependencies: ufo: 1.5.3 - vue: 3.4.31(typescript@5.5.2) + vue: 3.4.35(typescript@5.5.2) skin-tone@2.0.0: dependencies: @@ -14362,6 +15193,8 @@ snapshots: ufo@1.5.3: {} + ufo@1.5.4: {} + ultrahtml@1.5.3: {} unbuild@2.0.0(typescript@5.5.2)(vue-tsc@2.0.22(typescript@5.5.2)): @@ -14420,6 +15253,14 @@ snapshots: undici@6.19.2: {} + unenv@1.10.0: + dependencies: + consola: 3.2.3 + defu: 6.1.4 + mime: 3.0.0 + node-fetch-native: 1.6.4 + pathe: 1.1.2 + unenv@1.9.0: dependencies: consola: 3.2.3 @@ -14435,6 +15276,13 @@ snapshots: '@unhead/shared': 1.9.14 hookable: 5.5.3 + unhead@1.9.16: + dependencies: + '@unhead/dom': 1.9.16 + '@unhead/schema': 1.9.16 + '@unhead/shared': 1.9.16 + hookable: 5.5.3 + unicode-emoji-modifier-base@1.0.0: {} unicode-properties@1.4.1: @@ -14459,6 +15307,24 @@ snapshots: trough: 2.2.0 vfile: 6.0.1 + unimport@3.10.0(rollup@4.18.0): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + acorn: 8.12.1 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.2 + local-pkg: 0.5.0 + magic-string: 0.30.11 + mlly: 1.7.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + scule: 1.3.0 + strip-literal: 2.1.0 + unplugin: 1.12.0 + transitivePeerDependencies: + - rollup + unimport@3.7.2(rollup@3.29.4): dependencies: '@rollup/pluginutils': 5.1.0(rollup@3.29.4) @@ -14536,9 +15402,9 @@ snapshots: universalify@2.0.1: {} - unocss@0.61.0(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)): + unocss@0.61.0(@unocss/webpack@0.61.0(rollup@4.18.0)(webpack@5.92.1))(postcss@8.4.38)(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)): dependencies: - '@unocss/astro': 0.61.0(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@unocss/astro': 0.61.0(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) '@unocss/cli': 0.61.0(rollup@4.18.0) '@unocss/core': 0.61.0 '@unocss/extractor-arbitrary-variants': 0.61.0 @@ -14557,10 +15423,10 @@ snapshots: '@unocss/transformer-compile-class': 0.61.0 '@unocss/transformer-directives': 0.61.0 '@unocss/transformer-variant-group': 0.61.0 - '@unocss/vite': 0.61.0(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)) + '@unocss/vite': 0.61.0(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)) optionalDependencies: '@unocss/webpack': 0.61.0(rollup@4.18.0)(webpack@5.92.1) - vite: 5.3.3(@types/node@20.14.9)(terser@5.31.1) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) transitivePeerDependencies: - postcss - rollup @@ -14608,6 +15474,27 @@ snapshots: - rollup - vue + unplugin-vue-router@0.10.0(rollup@4.18.0)(vue-router@4.4.0(vue@3.4.35(typescript@5.5.2)))(vue@3.4.35(typescript@5.5.2)): + dependencies: + '@babel/types': 7.24.7 + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + '@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.35(typescript@5.5.2)) + ast-walker-scope: 0.6.1 + chokidar: 3.6.0 + fast-glob: 3.3.2 + json5: 2.2.3 + local-pkg: 0.5.0 + mlly: 1.7.1 + pathe: 1.1.2 + scule: 1.3.0 + unplugin: 1.11.0 + yaml: 2.4.5 + optionalDependencies: + vue-router: 4.4.0(vue@3.4.35(typescript@5.5.2)) + transitivePeerDependencies: + - rollup + - vue + unplugin@1.10.1: dependencies: acorn: 8.12.0 @@ -14622,6 +15509,13 @@ snapshots: webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.2 + unplugin@1.12.0: + dependencies: + acorn: 8.12.1 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.2 + unstorage@1.10.2(ioredis@5.4.1): dependencies: anymatch: 3.1.3 @@ -14689,9 +15583,9 @@ snapshots: util-deprecate@1.0.2: {} - v-lazy-show@0.2.4(@vue/compiler-core@3.4.31): + v-lazy-show@0.2.4(@vue/compiler-core@3.4.35): dependencies: - '@vue/compiler-core': 3.4.31 + '@vue/compiler-core': 3.4.35 validate-npm-package-license@3.0.4: dependencies: @@ -14722,6 +15616,10 @@ snapshots: dependencies: vite: 5.3.3(@types/node@20.14.9)(terser@5.31.1) + vite-hot-client@0.2.3(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)): + dependencies: + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + vite-node@1.6.0(@types/node@20.14.9)(terser@5.31.1): dependencies: cac: 6.7.14 @@ -14780,7 +15678,30 @@ snapshots: typescript: 5.5.2 vue-tsc: 2.0.22(typescript@5.5.2) - vite-plugin-inspect@0.8.4(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@3.29.4))(rollup@3.29.4)(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)): + vite-plugin-checker@0.7.2(eslint@9.5.0)(optionator@0.9.4)(typescript@5.5.2)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1))(vue-tsc@2.0.22(typescript@5.5.2)): + dependencies: + '@babel/code-frame': 7.24.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + chokidar: 3.6.0 + commander: 8.3.0 + fast-glob: 3.3.2 + fs-extra: 11.2.0 + npm-run-path: 4.0.1 + strip-ansi: 6.0.1 + tiny-invariant: 1.3.3 + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + vscode-languageclient: 7.0.0 + vscode-languageserver: 7.0.0 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 + optionalDependencies: + eslint: 9.5.0 + optionator: 0.9.4 + typescript: 5.5.2 + vue-tsc: 2.0.22(typescript@5.5.2) + + vite-plugin-inspect@0.8.4(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@3.29.4))(rollup@3.29.4)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.1.0(rollup@3.29.4) @@ -14791,7 +15712,7 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.0.1 sirv: 2.0.4 - vite: 5.3.3(@types/node@20.14.9)(terser@5.31.1) + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) optionalDependencies: '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@3.29.4) transitivePeerDependencies: @@ -14816,6 +15737,24 @@ snapshots: - rollup - supports-color + vite-plugin-inspect@0.8.4(@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@4.18.0))(rollup@4.18.0)(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + debug: 4.3.5 + error-stack-parser-es: 0.1.4 + fs-extra: 11.2.0 + open: 10.1.0 + perfect-debounce: 1.0.0 + picocolors: 1.0.1 + sirv: 2.0.4 + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + optionalDependencies: + '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) + transitivePeerDependencies: + - rollup + - supports-color + vite-plugin-vue-inspector@5.1.2(vite@5.3.3(@types/node@20.14.9)(terser@5.31.1)): dependencies: '@babel/core': 7.24.7 @@ -14831,6 +15770,21 @@ snapshots: transitivePeerDependencies: - supports-color + vite-plugin-vue-inspector@5.1.2(vite@5.3.5(@types/node@20.14.9)(terser@5.31.1)): + dependencies: + '@babel/core': 7.24.7 + '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) + '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.7) + '@vue/compiler-dom': 3.4.31 + kolorist: 1.8.0 + magic-string: 0.30.10 + vite: 5.3.5(@types/node@20.14.9)(terser@5.31.1) + transitivePeerDependencies: + - supports-color + vite@5.3.1(@types/node@20.14.9)(terser@5.31.1): dependencies: esbuild: 0.21.5 @@ -14851,6 +15805,16 @@ snapshots: fsevents: 2.3.3 terser: 5.31.1 + vite@5.3.5(@types/node@20.14.9)(terser@5.31.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.39 + rollup: 4.18.0 + optionalDependencies: + '@types/node': 20.14.9 + fsevents: 2.3.3 + terser: 5.31.1 + vitest@2.0.4(@types/node@20.14.9)(jsdom@24.1.0)(terser@5.31.1): dependencies: '@ampproject/remapping': 2.3.0 @@ -14911,9 +15875,9 @@ snapshots: dependencies: ufo: 1.5.3 - vue-demi@0.14.8(vue@3.4.31(typescript@5.5.2)): + vue-demi@0.14.8(vue@3.4.35(typescript@5.5.2)): dependencies: - vue: 3.4.31(typescript@5.5.2) + vue: 3.4.35(typescript@5.5.2) vue-devtools-stub@0.1.0: {} @@ -14929,6 +15893,11 @@ snapshots: '@vue/devtools-api': 6.6.3 vue: 3.4.31(typescript@5.5.2) + vue-router@4.4.0(vue@3.4.35(typescript@5.5.2)): + dependencies: + '@vue/devtools-api': 6.6.3 + vue: 3.4.35(typescript@5.5.2) + vue-template-compiler@2.7.16: dependencies: de-indent: 1.0.2 @@ -14941,10 +15910,10 @@ snapshots: semver: 7.6.2 typescript: 5.5.2 - vue3-smooth-dnd@0.0.6(vue@3.4.31(typescript@5.5.2)): + vue3-smooth-dnd@0.0.6(vue@3.4.35(typescript@5.5.2)): dependencies: smooth-dnd: 0.12.1 - vue: 3.4.31(typescript@5.5.2) + vue: 3.4.35(typescript@5.5.2) vue@3.4.31(typescript@5.5.2): dependencies: @@ -14956,6 +15925,16 @@ snapshots: optionalDependencies: typescript: 5.5.2 + vue@3.4.35(typescript@5.5.2): + dependencies: + '@vue/compiler-dom': 3.4.35 + '@vue/compiler-sfc': 3.4.35 + '@vue/runtime-dom': 3.4.35 + '@vue/server-renderer': 3.4.35(vue@3.4.35(typescript@5.5.2)) + '@vue/shared': 3.4.35 + optionalDependencies: + typescript: 5.5.2 + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 diff --git a/specs/fixtures/restructure/app.vue b/specs/fixtures/restructure/app.vue new file mode 100644 index 000000000..1d6984808 --- /dev/null +++ b/specs/fixtures/restructure/app.vue @@ -0,0 +1,11 @@ + + + diff --git a/specs/fixtures/restructure/components/LangSwitcher.vue b/specs/fixtures/restructure/components/LangSwitcher.vue new file mode 100644 index 000000000..ba17e8cc7 --- /dev/null +++ b/specs/fixtures/restructure/components/LangSwitcher.vue @@ -0,0 +1,44 @@ + + + diff --git a/specs/fixtures/restructure/i18n-module/index.ts b/specs/fixtures/restructure/i18n-module/index.ts new file mode 100644 index 000000000..3a3303610 --- /dev/null +++ b/specs/fixtures/restructure/i18n-module/index.ts @@ -0,0 +1,20 @@ +import { createResolver, defineNuxtModule } from '@nuxt/kit' + +export default defineNuxtModule({ + async setup(options, nuxt) { + const { resolve } = createResolver(import.meta.url) + nuxt.hook('i18n:registerModule', register => { + register({ + langDir: resolve('./locales'), + locales: [ + { + code: 'nl', + iso: 'nl-NL', + file: 'lazy-locale-module-nl.ts', + name: 'Nederlands' + } + ] + }) + }) + } +}) diff --git a/specs/fixtures/restructure/i18n-module/locales/lazy-locale-module-nl.ts b/specs/fixtures/restructure/i18n-module/locales/lazy-locale-module-nl.ts new file mode 100644 index 000000000..1fa03ae7d --- /dev/null +++ b/specs/fixtures/restructure/i18n-module/locales/lazy-locale-module-nl.ts @@ -0,0 +1,5 @@ +export default defineI18nLocale(locale => ({ + moduleLayerText: 'This is a merged module layer locale key in Dutch', + welcome: 'Welkom!', + dynamicTime: new Date().toISOString() +})) diff --git a/specs/fixtures/restructure/i18n/i18n.config.ts b/specs/fixtures/restructure/i18n/i18n.config.ts new file mode 100644 index 000000000..fefe6f6a0 --- /dev/null +++ b/specs/fixtures/restructure/i18n/i18n.config.ts @@ -0,0 +1,9 @@ +export default { + legacy: false, + messages: { + en: { + test: 'testing' + } + }, + fallbackLocale: 'en' +} diff --git a/specs/fixtures/restructure/i18n/locales/lazy-locale-en-GB.js b/specs/fixtures/restructure/i18n/locales/lazy-locale-en-GB.js new file mode 100644 index 000000000..652a47422 --- /dev/null +++ b/specs/fixtures/restructure/i18n/locales/lazy-locale-en-GB.js @@ -0,0 +1,3 @@ +export default defineI18nLocale(async function (locale) { + return $fetch(`/api/${locale}`) +}) diff --git a/specs/fixtures/restructure/i18n/locales/lazy-locale-en-GB.ts b/specs/fixtures/restructure/i18n/locales/lazy-locale-en-GB.ts new file mode 100644 index 000000000..a0a58cbda --- /dev/null +++ b/specs/fixtures/restructure/i18n/locales/lazy-locale-en-GB.ts @@ -0,0 +1,3 @@ +export default { + settings_nest_foo_bar_profile: 'Profile2' +} diff --git a/specs/fixtures/restructure/i18n/locales/lazy-locale-en.json b/specs/fixtures/restructure/i18n/locales/lazy-locale-en.json new file mode 100644 index 000000000..51b73ce28 --- /dev/null +++ b/specs/fixtures/restructure/i18n/locales/lazy-locale-en.json @@ -0,0 +1,9 @@ +{ + "home": "Homepage", + "about": "About us", + "posts": "Posts", + "dynamic": "Dynamic", + "html": "This is the danger", + "dynamicTime": "Not dynamic", + "welcome": "Welcome!" +} diff --git a/specs/fixtures/restructure/i18n/locales/lazy-locale-fr.json5 b/specs/fixtures/restructure/i18n/locales/lazy-locale-fr.json5 new file mode 100644 index 000000000..02dce68e9 --- /dev/null +++ b/specs/fixtures/restructure/i18n/locales/lazy-locale-fr.json5 @@ -0,0 +1,7 @@ +{ + home: 'Accueil', + about: 'À propos', + posts: 'Articles', + dynamic: 'Dynamique', + dynamicTime: 'Not dynamic' +} diff --git a/specs/fixtures/restructure/nuxt.config.ts b/specs/fixtures/restructure/nuxt.config.ts new file mode 100644 index 000000000..522c1951c --- /dev/null +++ b/specs/fixtures/restructure/nuxt.config.ts @@ -0,0 +1,60 @@ +import i18nModule from './i18n-module' + +// https://nuxt.com/docs/guide/directory-structure/nuxt.config +export default defineNuxtConfig({ + vite: { + // Prevent reload by optimizing dependency before discovery + optimizeDeps: { + include: ['@unhead/vue'] + }, + // https://nuxt.com/blog/v3-11#chunk-naming + // We change the chunk file name so we can detect file requests in our tests + $client: { + build: { + rollupOptions: { + output: { + chunkFileNames: '_nuxt/[name].js', + entryFileNames: '_nuxt/[name].js' + } + } + } + } + }, + + modules: [i18nModule, '@nuxtjs/i18n'], + + i18n: { + baseUrl: 'http://localhost:3000', + // langDir: 'lang', + // defaultLocale: 'fr', + detectBrowserLanguage: false, + compilation: { + strictMessage: false + }, + restructureDir: 'i18n', + defaultLocale: 'en', + lazy: true, + locales: [ + { + code: 'en', + iso: 'en-US', + file: 'lazy-locale-en.json', + name: 'English' + }, + { + code: 'en-GB', + iso: 'en-GB', + files: ['lazy-locale-en.json', 'lazy-locale-en-GB.js', 'lazy-locale-en-GB.ts'], + name: 'English (UK)' + }, + { + code: 'fr', + iso: 'fr-FR', + file: { path: 'lazy-locale-fr.json5', cache: false }, + name: 'Français' + } + ] + }, + + compatibilityDate: '2024-08-01' +}) diff --git a/specs/fixtures/restructure/package.json b/specs/fixtures/restructure/package.json new file mode 100644 index 000000000..a95cd1de5 --- /dev/null +++ b/specs/fixtures/restructure/package.json @@ -0,0 +1,15 @@ +{ + "name": "nuxt3-test-lazy", + "private": true, + "type": "module", + "scripts": { + "dev": "nuxi dev", + "build": "nuxt build", + "generate": "nuxt generate", + "start": "node .output/server/index.mjs" + }, + "devDependencies": { + "@nuxtjs/i18n": "latest", + "nuxt": "latest" + } +} diff --git a/specs/fixtures/restructure/pages/about/index.vue b/specs/fixtures/restructure/pages/about/index.vue new file mode 100644 index 000000000..1e3fcfa77 --- /dev/null +++ b/specs/fixtures/restructure/pages/about/index.vue @@ -0,0 +1,35 @@ + + + diff --git a/specs/fixtures/restructure/pages/index.vue b/specs/fixtures/restructure/pages/index.vue new file mode 100644 index 000000000..85bcae3a6 --- /dev/null +++ b/specs/fixtures/restructure/pages/index.vue @@ -0,0 +1,51 @@ + + + diff --git a/specs/fixtures/restructure/pages/manual-load.vue b/specs/fixtures/restructure/pages/manual-load.vue new file mode 100644 index 000000000..28587ea98 --- /dev/null +++ b/specs/fixtures/restructure/pages/manual-load.vue @@ -0,0 +1,18 @@ + + + diff --git a/specs/fixtures/restructure/server/api/[locale].ts b/specs/fixtures/restructure/server/api/[locale].ts new file mode 100644 index 000000000..8dc0d4cc4 --- /dev/null +++ b/specs/fixtures/restructure/server/api/[locale].ts @@ -0,0 +1,24 @@ +import type { LocaleMessages, DefineLocaleMessage } from 'vue-i18n' + +const locales: LocaleMessages = { + 'en-GB': { + html: 'This is the danger', + settings: { + nest: { + foo: { + bar: { + profile: 'Profile1' + } + } + } + } + } +} + +export default defineEventHandler(event => { + const locale = event.context.params?.locale + if (locale == null) { + return {} + } + return locales[locale] || {} +}) diff --git a/specs/lazy_load/basic_lazy_load.spec.ts b/specs/lazy_load/basic_lazy_load.spec.ts index 9dbf0903e..7cd06f18f 100644 --- a/specs/lazy_load/basic_lazy_load.spec.ts +++ b/specs/lazy_load/basic_lazy_load.spec.ts @@ -45,6 +45,7 @@ describe('basic lazy loading', async () => { // only default locales are fetched (en) await page.goto(home) + console.log(setFromRequests()) expect(setFromRequests().filter(locale => locale.includes('fr') || locale.includes('nl'))).toHaveLength(0) // wait for request after navigation diff --git a/specs/lazy_load/restructure.spec.ts b/specs/lazy_load/restructure.spec.ts new file mode 100644 index 000000000..88cc8cea4 --- /dev/null +++ b/specs/lazy_load/restructure.spec.ts @@ -0,0 +1,144 @@ +import { test, expect, describe } from 'vitest' +import { fileURLToPath } from 'node:url' +import { setup, url } from '../utils' +import { getText, getData, waitForMs, renderPage, waitForURL } from '../helper' + +describe('basic lazy loading (restructure)', async () => { + await setup({ + rootDir: fileURLToPath(new URL(`../fixtures/restructure`, import.meta.url)), + browser: true, + nuxtConfig: { + i18n: { + debug: true + } + } + }) + + test('dynamic locale files are not cached', async () => { + const { page } = await renderPage('/nl') + + page.on('domcontentloaded', () => { + console.log('domcontentload triggered!') + }) + + // capture dynamicTime - simulates changing api response + const dynamicTime = await getText(page, '#dynamic-time') + + await page.click('#lang-switcher-with-nuxt-link-fr') + await waitForURL(page, '/fr') + expect(await getText(page, '#dynamic-time')).toEqual('Not dynamic') + + // dynamicTime depends on passage of some time + await waitForMs(100) + + // dynamicTime does not match captured dynamicTime + await page.click('#lang-switcher-with-nuxt-link-nl') + await waitForURL(page, '/nl') + expect(await getText(page, '#dynamic-time')).to.not.equal(dynamicTime) + }) + + test('locales are fetched on demand', async () => { + const home = url('/') + const { page, requests } = await renderPage(home) + + const setFromRequests = () => [...new Set(requests)].filter(x => x.includes('lazy-locale-')) + + // only default locales are fetched (en) + await page.goto(home) + console.log(setFromRequests()) + expect(setFromRequests().filter(locale => locale.includes('fr') || locale.includes('nl'))).toHaveLength(0) + + // wait for request after navigation + const localeRequestFr = page.waitForRequest(/lazy-locale-fr/) + await page.click('#lang-switcher-with-nuxt-link-fr') + await localeRequestFr + + // `fr` locale has been fetched + expect(setFromRequests().filter(locale => locale.includes('fr'))).toHaveLength(1) + + // wait for request after navigation + const localeRequestNl = page.waitForRequest(/lazy-locale-module-nl/) + await page.click('#lang-switcher-with-nuxt-link-nl') + await localeRequestNl + + // `nl` (module) locale has been fetched + expect(setFromRequests().filter(locale => locale.includes('nl'))).toHaveLength(1) + }) + + test('can access to no prefix locale (en): /', async () => { + const { page } = await renderPage('/') + + // `en` rendering + expect(await getText(page, '#home-header')).toEqual('Homepage') + expect(await getText(page, 'title')).toEqual('Homepage') + expect(await getText(page, '#link-about')).toEqual('About us') + + // lang switcher rendering + expect(await getText(page, '#set-locale-link-fr')).toEqual('Français') + + // page path + expect(await getData(page, '#home-use-async-data')).toMatchObject({ aboutPath: '/about' }) + + // current locale + expect(await getText(page, '#lang-switcher-current-locale code')).toEqual('en') + + // html tag `lang` attriute with iso code + expect(await page.getAttribute('html', 'lang')).toEqual('en-US') + }) + + test('can access to prefix locale: /fr', async () => { + const { page } = await renderPage('/fr') + + // `fr` rendering + expect(await getText(page, '#home-header')).toEqual('Accueil') + expect(await getText(page, 'title')).toEqual('Accueil') + expect(await getText(page, '#link-about')).toEqual('À propos') + + // lang switcher rendering + expect(await getText(page, '#set-locale-link-en')).toEqual('English') + + // page path + expect(await getData(page, '#home-use-async-data')).toMatchObject({ aboutPath: '/fr/about' }) + + // current locale + expect(await getText(page, '#lang-switcher-current-locale code')).toEqual('fr') + + // html tag `lang` attriute with iso code + expect(await page.getAttribute('html', 'lang')).toEqual('fr-FR') + }) + + test('mutiple lazy loading', async () => { + const { page } = await renderPage('/en-GB') + + // `en` base rendering + expect(await getText(page, '#home-header')).toEqual('Homepage') + expect(await getText(page, 'title')).toEqual('Homepage') + expect(await getText(page, '#link-about')).toEqual('About us') + + expect(await getText(page, '#profile-js')).toEqual('Profile1') + expect(await getText(page, '#profile-ts')).toEqual('Profile2') + }) + + test('files with cache disabled bypass caching', async () => { + const { page, consoleLogs } = await renderPage('/') + + await page.click('#lang-switcher-with-nuxt-link-en-GB') + expect([...consoleLogs].filter(log => log.text.includes('lazy-locale-en-GB.js bypassing cache!'))).toHaveLength(1) + + await page.click('#lang-switcher-with-nuxt-link-fr') + expect([...consoleLogs].filter(log => log.text.includes('lazy-locale-fr.json5 bypassing cache!'))).toHaveLength(1) + + await page.click('#lang-switcher-with-nuxt-link-en-GB') + expect([...consoleLogs].filter(log => log.text.includes('lazy-locale-en-GB.js bypassing cache!'))).toHaveLength(2) + + await page.click('#lang-switcher-with-nuxt-link-fr') + expect([...consoleLogs].filter(log => log.text.includes('lazy-locale-fr.json5 bypassing cache!'))).toHaveLength(2) + }) + + test('manually loaded messages can be used in translations', async () => { + const { page } = await renderPage('/manual-load') + + expect(await getText(page, '#welcome-english')).toEqual('Welcome!') + expect(await getText(page, '#welcome-dutch')).toEqual('Welkom!') + }) +}) diff --git a/src/constants.ts b/src/constants.ts index ba59587c5..fc41cd3db 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -27,6 +27,8 @@ export const DEFAULT_COOKIE_KEY = 'i18n_redirected' export const SWITCH_LOCALE_PATH_LINK_IDENTIFIER = 'nuxt-i18n-slp' export const DEFAULT_OPTIONS = { + // TODO: set to default 'i18n' before v9 release + restructureDir: undefined, experimental: { localeDetector: '', switchLocalePathLinkSSR: false, @@ -56,6 +58,7 @@ export const DEFAULT_OPTIONS = { defaultLocaleRouteNameSuffix: 'default', strategy: STRATEGY_PREFIX_EXCEPT_DEFAULT, lazy: false, + // TODO: set to default 'locales' before v9 release langDir: null, rootRedirect: undefined, detectBrowserLanguage: { diff --git a/src/layers.ts b/src/layers.ts index 96fb1cd37..87331c3d9 100644 --- a/src/layers.ts +++ b/src/layers.ts @@ -1,14 +1,7 @@ import createDebug from 'debug' -import { - getLayerI18n, - getProjectPath, - mergeConfigLocales, - resolveVueI18nConfigInfo, - formatMessage, - getLocaleFiles -} from './utils' - -import { useLogger } from '@nuxt/kit' +import { getLayerI18n, mergeConfigLocales, resolveVueI18nConfigInfo, formatMessage, getLocaleFiles } from './utils' + +import { useLogger, useNuxt } from '@nuxt/kit' import { isAbsolute, parse, resolve } from 'pathe' import { isString } from '@intlify/shared' import { NUXT_I18N_MODULE_ID } from './constants' @@ -32,17 +25,9 @@ export const checkLayerOptions = (_options: NuxtI18nOptions, nuxt: Nuxt) => { const layerHint = `In ${configLocation} (\`${resolve(project.config.rootDir, layer.configFile)}\`) -` try { - // check `lazy` and `langDir` option - if (layerI18n.lazy && !layerI18n.langDir) { - throw new Error('When using the `lazy` option you must also set the `langDir` option.') - } - // check `langDir` option if (layerI18n.langDir) { const locales = layerI18n.locales || [] - if (!locales.length || locales.some(locale => isString(locale))) { - throw new Error('When using the `langDir` option the `locales` must be a list of objects.') - } if (isString(layerI18n.langDir) && isAbsolute(layerI18n.langDir)) { logger.warn( @@ -52,7 +37,11 @@ export const checkLayerOptions = (_options: NuxtI18nOptions, nuxt: Nuxt) => { } for (const locale of locales) { - if (isString(locale) || !(locale.file || locale.files)) { + if (isString(locale)) { + throw new Error('When using the `langDir` option the `locales` must be a list of objects.') + } + + if (!(locale.file || locale.files)) { throw new Error( 'All locales must have the `file` or `files` property set when using `langDir`.\n' + `Found none in:\n${JSON.stringify(locale, null, 2)}.` @@ -99,62 +88,58 @@ export const mergeLayerPages = (analyzer: (pathOverride: string) => void, nuxt: } } -export const mergeLayerLocales = (options: NuxtI18nOptions, nuxt: Nuxt) => { +export function resolveI18nDir(layer: NuxtConfigLayer, i18n: NuxtI18nOptions, fromRootDir: boolean = false) { + if (i18n.restructureDir) { + return resolve(layer.config.rootDir, i18n.restructureDir) + } + + return resolve(layer.config.rootDir, fromRootDir ? '' : layer.config.srcDir) +} + +export function resolveLayerLangDir(layer: NuxtConfigLayer, i18n: NuxtI18nOptions) { + const langDir = i18n.langDir ?? (i18n.restructureDir ? 'locales' : '') + return resolve(resolveI18nDir(layer, i18n), langDir) +} + +const mergeLayerLocales = (options: NuxtI18nOptions, nuxt: Nuxt) => { debug('project layer `lazy` option', options.lazy) - const projectLangDir = getProjectPath(nuxt, nuxt.options.srcDir) options.locales ??= [] - const configs: LocaleConfig[] = nuxt.options._layers - .filter(layer => { - const i18n = getLayerI18n(layer) - return i18n?.locales != null - }) - .map(layer => { - const i18n = getLayerI18n(layer) - return { - ...i18n, - - langDir: resolve(layer.config.srcDir, i18n?.langDir ?? layer.config.srcDir), - projectLangDir - } - }) - - const localeObjects = options.locales.filter((x): x is LocaleObject => x !== 'string') - const absoluteConfigMap = new Map() - // locale `files` use absolute paths installed using `installModule` - const absoluteLocaleObjects = localeObjects.filter(localeObject => { - const files = getLocaleFiles(localeObject) - if (files.length === 0) return false - return files.every( - file => isAbsolute(file.path) && configs.find(config => config.langDir === parse(file.path).dir) == null - ) - }) + const configs: LocaleConfig[] = [] + + for (const layer of nuxt.options._layers) { + const i18n = getLayerI18n(layer) + if (i18n?.locales == null) continue + + configs.push({ ...i18n, langDir: resolveLayerLangDir(layer, i18n) }) + } - // filter layer locales - for (const absoluteLocaleObject of absoluteLocaleObjects) { - const files = getLocaleFiles(absoluteLocaleObject) + const installModuleConfigMap = new Map() + + /** + * Collect any locale files that are not provided by layers these are added when + * installing through `installModule` and should have absolute paths. + */ + outer: for (const locale of options.locales) { + if (typeof locale === 'string') continue + + const files = getLocaleFiles(locale) if (files.length === 0) continue - const langDir = parse(files[0].path).dir - if (absoluteConfigMap.has(langDir)) { - const entry = absoluteConfigMap.get(langDir) + const langDir = parse(files[0].path).dir + const locales = (installModuleConfigMap.get(langDir)?.locales ?? []) as LocaleObject[] - absoluteConfigMap.set(langDir, { - langDir, - projectLangDir, - locales: [...(entry!.locales! as LocaleObject[]), absoluteLocaleObject] - }) - continue + // check if all files are absolute and not present in configs + for (const file of files) { + if (!isAbsolute(file.path)) continue outer + if (configs.find(config => config.langDir === parse(file.path).dir) != null) continue outer } - absoluteConfigMap.set(langDir, { - langDir, - projectLangDir, - locales: [absoluteLocaleObject] - }) + locales.push(locale) + installModuleConfigMap.set(langDir, { langDir, locales }) } - configs.unshift(...Array.from(absoluteConfigMap.values())) + configs.unshift(...Array.from(installModuleConfigMap.values())) return mergeConfigLocales(configs) } @@ -163,53 +148,43 @@ export const mergeLayerLocales = (options: NuxtI18nOptions, nuxt: Nuxt) => { * Returns an array of absolute paths to each layers `langDir` */ export const getLayerLangPaths = (nuxt: Nuxt) => { - return nuxt.options._layers - .filter(layer => { - const i18n = getLayerI18n(layer) - return i18n?.langDir != null - }) - .map(layer => { - const i18n = getLayerI18n(layer) - // @ts-ignore - return resolve(layer.config.srcDir, i18n.langDir) - }) + const langPaths: string[] = [] + + for (const layer of nuxt.options._layers) { + const i18n = getLayerI18n(layer) + if (!i18n?.restructureDir && i18n?.langDir == null) continue + + langPaths.push(resolveLayerLangDir(layer, i18n)) + } + + return langPaths } -export async function resolveLayerVueI18nConfigInfo(options: NuxtI18nOptions, nuxt: Nuxt, buildDir: string) { +export async function resolveLayerVueI18nConfigInfo(options: NuxtI18nOptions) { const logger = useLogger(NUXT_I18N_MODULE_ID) - const layers = [...nuxt.options._layers] - const project = layers.shift() as NuxtConfigLayer - const i18nLayers = [project, ...layers.filter(layer => getLayerI18n(layer))] - - const resolved = await Promise.all( - i18nLayers - .map(layer => { - const i18n = getLayerI18n(layer) as NuxtI18nOptions - - return [layer, i18n, resolveVueI18nConfigInfo(i18n || {}, buildDir, layer.config.rootDir)] as [ - NuxtConfigLayer, - NuxtI18nOptions, - Promise - ] - }) - .map(async ([layer, i18n, resolver]) => { - const res = await resolver - - if (res == null && i18n?.vueI18n != null) { - logger.warn( - `Ignore Vue I18n configuration file does not exist at ${i18n.vueI18n} in ${layer.config.rootDir}. Skipping...` - ) + const nuxt = useNuxt() - return undefined - } + const resolveArr = nuxt.options._layers.map(async layer => { + const i18n = getLayerI18n(layer) + if (i18n == null) return undefined + + const res = await resolveVueI18nConfigInfo(resolveI18nDir(layer, i18n, true), i18n.vueI18n) + + if (res == null && i18n?.vueI18n != null) { + logger.warn( + `Ignore Vue I18n configuration file does not exist at ${i18n.vueI18n} in ${layer.config.rootDir}. Skipping...` + ) + return undefined + } + + return res + }) - return res - }) - ) + const resolved = await Promise.all(resolveArr) // use `vueI18n` passed by `installModule` if (options.vueI18n && isAbsolute(options.vueI18n)) { - resolved.unshift(await resolveVueI18nConfigInfo({ vueI18n: options.vueI18n }, buildDir, parse(options.vueI18n).dir)) + resolved.unshift(await resolveVueI18nConfigInfo(parse(options.vueI18n).dir, options.vueI18n)) } return resolved.filter((x): x is Required => x != null) diff --git a/src/module.ts b/src/module.ts index 588d20e8b..7dddc82e1 100644 --- a/src/module.ts +++ b/src/module.ts @@ -165,18 +165,14 @@ export default defineNuxtModule({ const normalizedLocales = getNormalizedLocales(options.locales) const localeCodes = normalizedLocales.map(locale => locale.code) - const localeInfo = await resolveLocales( - resolve(nuxt.options.srcDir), - normalizedLocales, - relative(nuxt.options.buildDir, nuxt.options.srcDir) - ) + const localeInfo = await resolveLocales(nuxt.options.srcDir, normalizedLocales, nuxt.options.buildDir) debug('localeInfo', localeInfo) /** * resolve vue-i18n config path */ - const vueI18nConfigPaths = await resolveLayerVueI18nConfigInfo(options, nuxt, nuxt.options.buildDir) + const vueI18nConfigPaths = await resolveLayerVueI18nConfigInfo(options) debug('VueI18nConfigPaths', vueI18nConfigPaths) /** @@ -279,7 +275,9 @@ export default defineNuxtModule({ */ nuxt.hook('build:manifest', manifest => { if (options.lazy) { - const langFiles = localeInfo.flatMap(locale => getLocaleFiles(locale)).map(x => x.path) + const langFiles = localeInfo + .flatMap(locale => getLocaleFiles(locale)) + .map(x => relative(nuxt.options.srcDir, x.path)) const langPaths = [...new Set(langFiles)] for (const key in manifest) { diff --git a/src/nitro.ts b/src/nitro.ts index cf58ce105..0fff01581 100644 --- a/src/nitro.ts +++ b/src/nitro.ts @@ -20,6 +20,7 @@ import { import type { Nuxt } from '@nuxt/schema' import type { NuxtI18nOptions, LocaleInfo } from './types' +import { resolveI18nDir } from './layers' const debug = createDebug('@nuxtjs/i18n:nitro') @@ -139,7 +140,8 @@ async function resolveLocaleDetectorPath(nuxt: Nuxt) { if (serverI18nLayer != null) { const serverI18nLayerConfig = getLayerI18n(serverI18nLayer) - const pathTo = resolve(serverI18nLayer.config.rootDir, serverI18nLayerConfig!.experimental!.localeDetector!) + const i18nDir = resolveI18nDir(serverI18nLayer, serverI18nLayerConfig!, true) + const pathTo = resolve(i18nDir, serverI18nLayerConfig!.experimental!.localeDetector!) const localeDetectorPath = await resolvePath(pathTo, { cwd: nuxt.options.rootDir, extensions: EXECUTABLE_EXTENSIONS diff --git a/src/types.ts b/src/types.ts index 3e2cc3fc3..c6d0d6673 100644 --- a/src/types.ts +++ b/src/types.ts @@ -109,6 +109,12 @@ export type NuxtI18nOptions< */ vueI18n?: string experimental?: ExperimentalFeatures + /** + * This can be set to a directory name to opt into the directory restructure for v9 which will have a default of 'i18n'. + * + * @defaultValue `undefined` (v8) or `'i18n'` (v9 release) + */ + restructureDir?: string bundle?: BundleOptions compilation?: LocaleMessageCompilationOptions customBlocks?: CustomBlocksOptions diff --git a/src/utils.ts b/src/utils.ts index 28d43bcd5..81b0b8ad8 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,7 +1,7 @@ import { promises as fs, readFileSync as _readFileSync, constants as FS_CONSTANTS } from 'node:fs' import { createHash } from 'node:crypto' -import { resolvePath } from '@nuxt/kit' -import { parse as parsePath, resolve, relative, normalize, join } from 'pathe' +import { resolvePath, useNuxt } from '@nuxt/kit' +import { parse as parsePath, resolve, relative, join } from 'pathe' import { parse as _parseCode } from '@babel/parser' import { defu } from 'defu' import { genSafeVariableName } from 'knitwork' @@ -69,42 +69,40 @@ function convertToImportId(file: string) { return id } -export async function resolveLocales( - path: string, - locales: LocaleObject[], - relativeBase: string -): Promise { - const files = await Promise.all(locales.flatMap(x => getLocalePaths(x)).map(x => resolve(path, x))) +export async function resolveLocales(srcDir: string, locales: LocaleObject[], buildDir: string): Promise { + const files = await Promise.all(locales.flatMap(x => getLocalePaths(x)).map(x => resolve(srcDir, x))) + const find = (f: string) => files.find(file => file === resolve(srcDir, f)) - const find = (f: string) => files.find(file => file === resolve(path, f)) const localesResolved: LocaleInfo[] = [] for (const { file, ...locale } of locales) { - const resolved: LocaleInfo = { ...locale, files: [], meta: undefined } - const files = getLocaleFiles(locale) + const resolved: LocaleInfo = { ...locale, files: [], meta: [] } - resolved.meta = files.map(file => { - const filePath = find(file.path) ?? '' - const isCached = filePath ? getLocaleType(filePath) !== 'dynamic' : true + const files = getLocaleFiles(locale) + for (const f of files) { + const filePath = find(f.path) ?? '' + const localeType = getLocaleType(filePath) + const isCached = filePath ? localeType !== 'dynamic' : true const parsed = parsePath(filePath) const importKey = join(parsed.root, parsed.dir, parsed.base) const key = genSafeVariableName(`locale_${convertToImportId(importKey)}`) - return { + const metaFile = { path: filePath, - loadPath: normalize(`${relativeBase}/${file.path}`), - type: getLocaleType(filePath), + loadPath: relative(buildDir, filePath), + type: localeType, hash: getHash(filePath), parsed, key, file: { - path: file.path, - cache: file.cache ?? isCached + path: f.path, + cache: f.cache ?? isCached } } - }) - resolved.files = resolved.meta.map(meta => meta.file) + resolved.meta!.push(metaFile) + resolved.files.push(metaFile.file) + } localesResolved.push(resolved) } @@ -247,10 +245,14 @@ export async function isExists(path: string) { } } -export async function resolveVueI18nConfigInfo(options: NuxtI18nOptions, buildDir: string, rootDir: string) { +export async function resolveVueI18nConfigInfo( + rootDir: string, + configPath: string = 'i18n.config', + buildDir = useNuxt().options.buildDir +) { const configPathInfo: Required = { relativeBase: relative(buildDir, rootDir), - relative: options.vueI18n ?? 'i18n.config', + relative: configPath, absolute: '', rootDir, hash: NULL_HASH, @@ -455,36 +457,8 @@ export function parseSegment(segment: string) { return tokens } -export const resolveRelativeLocales = ( - relativeFileResolver: (files: LocaleFile[]) => LocaleFile[], - locale: LocaleObject | string, - merged: LocaleObject | undefined -) => { - if (isString(locale)) return merged ?? { iso: locale, code: locale } - - const { file, files, ...entry } = locale - - const fileEntries = getLocaleFiles(locale) - const relativeFiles = relativeFileResolver(fileEntries) - const mergedLocaleObject = isString(merged) ? undefined : merged - return { - ...entry, - ...mergedLocaleObject, - // @ts-ignore - files: [...(relativeFiles ?? []), ...((mergedLocaleObject?.files ?? []) as LocaleObject)] - } -} - export const getLocalePaths = (locale: LocaleObject): string[] => { - if (locale.file != null) { - return [locale.file as unknown as LocaleFile].map(x => (isString(x) ? x : x.path)) - } - - if (locale.files != null) { - return [...locale.files].map(x => (isString(x) ? x : x.path)) - } - - return [] + return getLocaleFiles(locale).map(x => x.path) } export const getLocaleFiles = (locale: LocaleObject | LocaleInfo): LocaleFile[] => { @@ -499,23 +473,20 @@ export const getLocaleFiles = (locale: LocaleObject | LocaleInfo): LocaleFile[] return [] } -export const localeFilesToRelative = (projectLangDir: string, layerLangDir: string = '', files: LocaleFile[] = []) => { - const absoluteFiles = files.map(file => ({ path: resolve(layerLangDir, file.path), cache: file.cache })) - const relativeFiles = absoluteFiles.map(file => ({ path: relative(projectLangDir, file.path), cache: file.cache })) - - return relativeFiles -} +function resolveRelativeLocales(locale: LocaleObject, config: LocaleConfig) { + const fileEntries = getLocaleFiles(locale) -export const getProjectPath = (nuxt: Nuxt, ...target: string[]) => { - const projectLayer = nuxt.options._layers[0] - return resolve(projectLayer.config.rootDir, ...target) + return fileEntries.map(file => ({ + path: resolve(useNuxt().options.rootDir, resolve(config.langDir ?? '', file.path)), + cache: file.cache + })) as LocaleFile[] } export type LocaleConfig = { - projectLangDir: string langDir?: string | null locales?: string[] | LocaleObject[] } + /** * Generically merge LocaleObject locales * @@ -524,18 +495,39 @@ export type LocaleConfig = { */ export const mergeConfigLocales = (configs: LocaleConfig[], baseLocales: LocaleObject[] = []) => { const mergedLocales = new Map() - baseLocales.forEach(locale => mergedLocales.set(locale.code, locale)) + for (const locale of baseLocales) { + mergedLocales.set(locale.code, locale) + } + + for (const config of configs) { + if (config.locales == null) continue + + for (const locale of config.locales) { + const code = isString(locale) ? locale : locale.code + const merged = mergedLocales.get(code) - const getLocaleCode = (val: string | LocaleObject) => (isString(val) ? val : val.code) + // set normalized locale or to existing entry + if (typeof locale === 'string') { + mergedLocales.set(code, merged ?? { iso: code, code }) + continue + } - for (const { locales, langDir, projectLangDir } of configs) { - if (locales == null) continue + const resolvedFiles = resolveRelativeLocales(locale, config) + delete locale.file + + // merge locale and files with existing entry + if (merged != null) { + merged.files ??= [] as LocaleFile[] + // @ts-ignore + merged.files.unshift(...resolvedFiles) + mergedLocales.set(code, { + ...locale, + ...merged + }) + continue + } - for (const locale of locales) { - const code = getLocaleCode(locale) - const filesResolver = (files: LocaleFile[]) => localeFilesToRelative(projectLangDir, langDir ?? '', files) - const resolvedLocale = resolveRelativeLocales(filesResolver, locale, mergedLocales.get(code)) - if (resolvedLocale != null) mergedLocales.set(code, resolvedLocale) + mergedLocales.set(code, { ...locale, files: resolvedFiles }) } } @@ -555,7 +547,6 @@ export const mergeI18nModules = async (options: NuxtI18nOptions, nuxt: Nuxt) => await nuxt.callHook('i18n:registerModule', registerI18nModule) const modules = options?.i18nModules ?? [] - const projectLangDir = getProjectPath(nuxt, nuxt.options.rootDir) if (modules.length > 0) { const baseLocales: LocaleObject[] = [] @@ -566,10 +557,7 @@ export const mergeI18nModules = async (options: NuxtI18nOptions, nuxt: Nuxt) => baseLocales.push({ ...locale, file: undefined, files: getLocaleFiles(locale) }) } - const mergedLocales = mergeConfigLocales( - modules.map(x => ({ ...x, projectLangDir })), - baseLocales - ) + const mergedLocales = mergeConfigLocales(modules, baseLocales) options.locales = mergedLocales } diff --git a/test/__snapshots__/gen.test.ts.snap b/test/__snapshots__/gen.test.ts.snap index e196ccd53..6f75aace6 100644 --- a/test/__snapshots__/gen.test.ts.snap +++ b/test/__snapshots__/gen.test.ts.snap @@ -3,9 +3,9 @@ exports[`basic 1`] = ` { "importStrings": [ - "import locale__test_srcDir_en_json from "../en.json";", - "import locale__test_srcDir_ja_json from "../ja.json";", - "import locale__test_srcDir_fr_json from "../fr.json";", + "import locale__test_srcDir_en_json from "../srcDir/en.json";", + "import locale__test_srcDir_ja_json from "../srcDir/ja.json";", + "import locale__test_srcDir_fr_json from "../srcDir/fr.json";", ], "localeLoaders": [ [ @@ -13,7 +13,7 @@ exports[`basic 1`] = ` [ { "cache": "true", - "key": ""../en.json"", + "key": ""../srcDir/en.json"", "load": "() => Promise.resolve(locale__test_srcDir_en_json)", }, ], @@ -23,7 +23,7 @@ exports[`basic 1`] = ` [ { "cache": "true", - "key": ""../ja.json"", + "key": ""../srcDir/ja.json"", "load": "() => Promise.resolve(locale__test_srcDir_ja_json)", }, ], @@ -33,7 +33,7 @@ exports[`basic 1`] = ` [ { "cache": "true", - "key": ""../fr.json"", + "key": ""../srcDir/fr.json"", "load": "() => Promise.resolve(locale__test_srcDir_fr_json)", }, ], @@ -59,8 +59,8 @@ exports[`files with cache configuration 1`] = ` [ { "cache": "true", - "key": ""../en.json"", - "load": "() => import("../en.json" /* webpackChunkName: "locale__test_srcDir_en_json" */)", + "key": ""../srcDir/en.json"", + "load": "() => import("../srcDir/en.json" /* webpackChunkName: "locale__test_srcDir_en_json" */)", }, ], ], @@ -69,8 +69,8 @@ exports[`files with cache configuration 1`] = ` [ { "cache": "true", - "key": ""../ja.json"", - "load": "() => import("../ja.json" /* webpackChunkName: "locale__test_srcDir_ja_json" */)", + "key": ""../srcDir/ja.json"", + "load": "() => import("../srcDir/ja.json" /* webpackChunkName: "locale__test_srcDir_ja_json" */)", }, ], ], @@ -79,8 +79,8 @@ exports[`files with cache configuration 1`] = ` [ { "cache": "true", - "key": ""../fr.json"", - "load": "() => import("../fr.json" /* webpackChunkName: "locale__test_srcDir_fr_json" */)", + "key": ""../srcDir/fr.json"", + "load": "() => import("../srcDir/fr.json" /* webpackChunkName: "locale__test_srcDir_fr_json" */)", }, ], ], @@ -89,8 +89,8 @@ exports[`files with cache configuration 1`] = ` [ { "cache": "false", - "key": ""../es.json"", - "load": "() => import("../es.json" /* webpackChunkName: "locale__test_srcDir_es_json" */)", + "key": ""../srcDir/es.json"", + "load": "() => import("../srcDir/es.json" /* webpackChunkName: "locale__test_srcDir_es_json" */)", }, ], ], @@ -99,13 +99,13 @@ exports[`files with cache configuration 1`] = ` [ { "cache": "false", - "key": ""../es.json"", - "load": "() => import("../es.json" /* webpackChunkName: "locale__test_srcDir_es_json" */)", + "key": ""../srcDir/es.json"", + "load": "() => import("../srcDir/es.json" /* webpackChunkName: "locale__test_srcDir_es_json" */)", }, { "cache": "true", - "key": ""../es-AR.json"", - "load": "() => import("../es-AR.json" /* webpackChunkName: "locale__test_srcDir_es_AR_json" */)", + "key": ""../srcDir/es-AR.json"", + "load": "() => import("../srcDir/es-AR.json" /* webpackChunkName: "locale__test_srcDir_es_AR_json" */)", }, ], ], @@ -130,8 +130,8 @@ exports[`lazy 1`] = ` [ { "cache": "true", - "key": ""../en.json"", - "load": "() => import("../en.json" /* webpackChunkName: "locale__test_srcDir_en_json" */)", + "key": ""../srcDir/en.json"", + "load": "() => import("../srcDir/en.json" /* webpackChunkName: "locale__test_srcDir_en_json" */)", }, ], ], @@ -140,8 +140,8 @@ exports[`lazy 1`] = ` [ { "cache": "true", - "key": ""../ja.json"", - "load": "() => import("../ja.json" /* webpackChunkName: "locale__test_srcDir_ja_json" */)", + "key": ""../srcDir/ja.json"", + "load": "() => import("../srcDir/ja.json" /* webpackChunkName: "locale__test_srcDir_ja_json" */)", }, ], ], @@ -150,8 +150,8 @@ exports[`lazy 1`] = ` [ { "cache": "true", - "key": ""../fr.json"", - "load": "() => import("../fr.json" /* webpackChunkName: "locale__test_srcDir_fr_json" */)", + "key": ""../srcDir/fr.json"", + "load": "() => import("../srcDir/fr.json" /* webpackChunkName: "locale__test_srcDir_fr_json" */)", }, ], ], @@ -176,8 +176,8 @@ exports[`locale file in nested 1`] = ` [ { "cache": "true", - "key": ""../en/main.json"", - "load": "() => import("../en/main.json" /* webpackChunkName: "locale__test_srcDir_en_main_json" */)", + "key": ""../srcDir/en/main.json"", + "load": "() => import("../srcDir/en/main.json" /* webpackChunkName: "locale__test_srcDir_en_main_json" */)", }, ], ], @@ -186,8 +186,8 @@ exports[`locale file in nested 1`] = ` [ { "cache": "true", - "key": ""../ja/main.json"", - "load": "() => import("../ja/main.json" /* webpackChunkName: "locale__test_srcDir_ja_main_json" */)", + "key": ""../srcDir/ja/main.json"", + "load": "() => import("../srcDir/ja/main.json" /* webpackChunkName: "locale__test_srcDir_ja_main_json" */)", }, ], ], @@ -196,8 +196,8 @@ exports[`locale file in nested 1`] = ` [ { "cache": "true", - "key": ""../fr/main.json"", - "load": "() => import("../fr/main.json" /* webpackChunkName: "locale__test_srcDir_fr_main_json" */)", + "key": ""../srcDir/fr/main.json"", + "load": "() => import("../srcDir/fr/main.json" /* webpackChunkName: "locale__test_srcDir_fr_main_json" */)", }, ], ], @@ -222,8 +222,8 @@ exports[`multiple files 1`] = ` [ { "cache": "true", - "key": ""../en.json"", - "load": "() => import("../en.json" /* webpackChunkName: "locale__test_srcDir_en_json" */)", + "key": ""../srcDir/en.json"", + "load": "() => import("../srcDir/en.json" /* webpackChunkName: "locale__test_srcDir_en_json" */)", }, ], ], @@ -232,8 +232,8 @@ exports[`multiple files 1`] = ` [ { "cache": "true", - "key": ""../ja.json"", - "load": "() => import("../ja.json" /* webpackChunkName: "locale__test_srcDir_ja_json" */)", + "key": ""../srcDir/ja.json"", + "load": "() => import("../srcDir/ja.json" /* webpackChunkName: "locale__test_srcDir_ja_json" */)", }, ], ], @@ -242,8 +242,8 @@ exports[`multiple files 1`] = ` [ { "cache": "true", - "key": ""../fr.json"", - "load": "() => import("../fr.json" /* webpackChunkName: "locale__test_srcDir_fr_json" */)", + "key": ""../srcDir/fr.json"", + "load": "() => import("../srcDir/fr.json" /* webpackChunkName: "locale__test_srcDir_fr_json" */)", }, ], ], @@ -252,8 +252,8 @@ exports[`multiple files 1`] = ` [ { "cache": "true", - "key": ""../es.json"", - "load": "() => import("../es.json" /* webpackChunkName: "locale__test_srcDir_es_json" */)", + "key": ""../srcDir/es.json"", + "load": "() => import("../srcDir/es.json" /* webpackChunkName: "locale__test_srcDir_es_json" */)", }, ], ], @@ -262,13 +262,13 @@ exports[`multiple files 1`] = ` [ { "cache": "true", - "key": ""../es.json"", - "load": "() => import("../es.json" /* webpackChunkName: "locale__test_srcDir_es_json" */)", + "key": ""../srcDir/es.json"", + "load": "() => import("../srcDir/es.json" /* webpackChunkName: "locale__test_srcDir_es_json" */)", }, { "cache": "true", - "key": ""../es-AR.json"", - "load": "() => import("../es-AR.json" /* webpackChunkName: "locale__test_srcDir_es_AR_json" */)", + "key": ""../srcDir/es-AR.json"", + "load": "() => import("../srcDir/es-AR.json" /* webpackChunkName: "locale__test_srcDir_es_AR_json" */)", }, ], ], @@ -379,9 +379,9 @@ exports[`toCode: function (named) 1`] = ` exports[`vueI18n option 1`] = ` { "importStrings": [ - "import locale__test_srcDir_en_json from "../en.json";", - "import locale__test_srcDir_ja_json from "../ja.json";", - "import locale__test_srcDir_fr_json from "../fr.json";", + "import locale__test_srcDir_en_json from "../srcDir/en.json";", + "import locale__test_srcDir_ja_json from "../srcDir/ja.json";", + "import locale__test_srcDir_fr_json from "../srcDir/fr.json";", ], "localeLoaders": [ [ @@ -389,7 +389,7 @@ exports[`vueI18n option 1`] = ` [ { "cache": "true", - "key": ""../en.json"", + "key": ""../srcDir/en.json"", "load": "() => Promise.resolve(locale__test_srcDir_en_json)", }, ], @@ -399,7 +399,7 @@ exports[`vueI18n option 1`] = ` [ { "cache": "true", - "key": ""../ja.json"", + "key": ""../srcDir/ja.json"", "load": "() => Promise.resolve(locale__test_srcDir_ja_json)", }, ], @@ -409,7 +409,7 @@ exports[`vueI18n option 1`] = ` [ { "cache": "true", - "key": ""../fr.json"", + "key": ""../srcDir/fr.json"", "load": "() => Promise.resolve(locale__test_srcDir_fr_json)", }, ], diff --git a/test/gen.test.ts b/test/gen.test.ts index 674aea73e..f0c459b16 100644 --- a/test/gen.test.ts +++ b/test/gen.test.ts @@ -66,8 +66,8 @@ const makeNuxtOptions = (localeInfo: LocaleInfo[]) => { test('basic', async () => { const { generateLoaderOptions } = await import('../src/gen') - const localeInfo = await resolveLocales('/test/srcDir', LOCALE_INFO, '..') - const vueI18nConfig = await resolveVueI18nConfigInfo({ vueI18n: NUXT_I18N_VUE_I18N_CONFIG.relative }, '.nuxt', '.') + const localeInfo = await resolveLocales('/test/srcDir', LOCALE_INFO, '/test/.nuxt') + const vueI18nConfig = await resolveVueI18nConfigInfo('.', NUXT_I18N_VUE_I18N_CONFIG.relative, '.nuxt') const code = generateLoaderOptions(makeNuxtOptions(localeInfo), { vueI18nConfigPaths: [vueI18nConfig].filter((x): x is Required => x != null), localeInfo, @@ -79,8 +79,8 @@ test('basic', async () => { }) test('lazy', async () => { - const localeInfo = await resolveLocales('/test/srcDir', LOCALE_INFO, '..') - const vueI18nConfig = await resolveVueI18nConfigInfo({ vueI18n: NUXT_I18N_VUE_I18N_CONFIG.relative }, '.nuxt', '.') + const localeInfo = await resolveLocales('/test/srcDir', LOCALE_INFO, '/test/.nuxt') + const vueI18nConfig = await resolveVueI18nConfigInfo('.', NUXT_I18N_VUE_I18N_CONFIG.relative, '.nuxt') const code = generateLoaderOptions(makeNuxtOptions(localeInfo), { vueI18nConfigPaths: [vueI18nConfig].filter((x): x is Required => x != null), localeInfo, @@ -112,9 +112,9 @@ test('multiple files', async () => { } ] ], - '..' + '/test/.nuxt' ) - const vueI18nConfig = await resolveVueI18nConfigInfo({ vueI18n: NUXT_I18N_VUE_I18N_CONFIG.relative }, '.nuxt', '.') + const vueI18nConfig = await resolveVueI18nConfigInfo('.', NUXT_I18N_VUE_I18N_CONFIG.relative, '.nuxt') const code = generateLoaderOptions(makeNuxtOptions(localeInfo), { vueI18nConfigPaths: [vueI18nConfig].filter((x): x is Required => x != null), @@ -147,9 +147,9 @@ test('files with cache configuration', async () => { } ] ], - '..' + '/test/.nuxt' ) - const vueI18nConfig = await resolveVueI18nConfigInfo({ vueI18n: NUXT_I18N_VUE_I18N_CONFIG.relative }, '.nuxt', '.') + const vueI18nConfig = await resolveVueI18nConfigInfo('.', NUXT_I18N_VUE_I18N_CONFIG.relative, '.nuxt') const code = generateLoaderOptions(makeNuxtOptions(localeInfo), { vueI18nConfigPaths: [vueI18nConfig].filter((x): x is Required => x != null), @@ -181,10 +181,10 @@ test('locale file in nested', async () => { paths: ['/path/to/fr.json'] } ], - '..' + '/test/.nuxt' ) - const vueI18nConfig = await resolveVueI18nConfigInfo({ vueI18n: NUXT_I18N_VUE_I18N_CONFIG.relative }, '.nuxt', '.') + const vueI18nConfig = await resolveVueI18nConfigInfo('.', NUXT_I18N_VUE_I18N_CONFIG.relative, '.nuxt') const code = generateLoaderOptions(makeNuxtOptions(localeInfo), { vueI18nConfigPaths: [vueI18nConfig].filter((x): x is Required => x != null), localeInfo, @@ -196,7 +196,7 @@ test('locale file in nested', async () => { }) test('vueI18n option', async () => { - const localeInfo = await resolveLocales('/test/srcDir', LOCALE_INFO, '..') + const localeInfo = await resolveLocales('/test/srcDir', LOCALE_INFO, '/test/.nuxt') const vueI18nConfigs = await Promise.all( [ NUXT_I18N_VUE_I18N_CONFIG, @@ -212,7 +212,7 @@ test('vueI18n option', async () => { rootDir: '/path/foo/layer2', relativeBase: '../../..' } - ].map(x => resolveVueI18nConfigInfo({ vueI18n: x.relative }, '/path/.nuxt', x.rootDir)) + ].map(x => resolveVueI18nConfigInfo(x.rootDir, x.relative, '/path/.nuxt')) ) const code = generateLoaderOptions(makeNuxtOptions(localeInfo), { vueI18nConfigPaths: vueI18nConfigs as Required[], @@ -228,7 +228,7 @@ test('vueI18n option', async () => { }) test('toCode: function (arrow)', async () => { - const vueI18nConfig = await resolveVueI18nConfigInfo({ vueI18n: NUXT_I18N_VUE_I18N_CONFIG.relative }, '.nuxt', '.') + const vueI18nConfig = await resolveVueI18nConfigInfo('.', NUXT_I18N_VUE_I18N_CONFIG.relative, '.nuxt') const localeInfo = LOCALE_INFO.map(locale => ({ ...locale, testFunc: (prop: string) => { @@ -250,7 +250,7 @@ test('toCode: function (arrow)', async () => { }) test('toCode: function (named)', async () => { - const vueI18nConfig = await resolveVueI18nConfigInfo({ vueI18n: NUXT_I18N_VUE_I18N_CONFIG.relative }, '.nuxt', '.') + const vueI18nConfig = await resolveVueI18nConfigInfo('.', NUXT_I18N_VUE_I18N_CONFIG.relative, '.nuxt') const localeInfo = LOCALE_INFO.map(locale => ({ ...locale, testFunc(prop: string) { diff --git a/test/utils.test.ts b/test/utils.test.ts index 6eac0c383..8364ee788 100644 --- a/test/utils.test.ts +++ b/test/utils.test.ts @@ -54,132 +54,178 @@ test('resolveLocales', async () => { files: ['nl.js'] } ] as LocaleObject[] - const resolvedLocales = await resolveLocales('/path/to/project/locales', locales, '..') - expect(resolvedLocales).toEqual([ - { - code: 'en', - files: [{ path: 'en.json', cache: true }], - meta: [ - { - path: '/path/to/project/locales/en.json', - loadPath: '../en.json', - type: 'static', - hash: '18f36abf', - parsed: { - root: '/', - dir: '/path/to/project/locales', - base: 'en.json', - ext: '.json', - name: 'en' + const resolvedLocales = await resolveLocales('/path/to/project', locales, '/path/to/project/.nuxt') + expect(resolvedLocales).toMatchInlineSnapshot(` + [ + { + "code": "en", + "files": [ + { + "cache": true, + "path": "en.json", }, - key: 'locale__path_to_project_locales_en_json', - file: { path: 'en.json', cache: true } - } - ] - }, - { - code: 'ja', - files: [{ path: 'ja.json', cache: true }], - meta: [ - { - path: '/path/to/project/locales/ja.json', - loadPath: '../ja.json', - type: 'static', - hash: '147c88eb', - parsed: { - root: '/', - dir: '/path/to/project/locales', - base: 'ja.json', - ext: '.json', - name: 'ja' + ], + "meta": [ + { + "file": { + "cache": true, + "path": "en.json", + }, + "hash": "5c407b7f", + "key": "locale__path_to_project_en_json", + "loadPath": "../en.json", + "parsed": { + "base": "en.json", + "dir": "/path/to/project", + "ext": ".json", + "name": "en", + "root": "/", + }, + "path": "/path/to/project/en.json", + "type": "static", }, - key: 'locale__path_to_project_locales_ja_json', - file: { path: 'ja.json', cache: true } - } - ] - }, - { - code: 'es', - files: [{ path: 'es.json', cache: true }], - meta: [ - { - path: '/path/to/project/locales/es.json', - loadPath: '../es.json', - type: 'static', - hash: 'f4490d2c', - parsed: { - root: '/', - dir: '/path/to/project/locales', - base: 'es.json', - ext: '.json', - name: 'es' + ], + }, + { + "code": "ja", + "files": [ + { + "cache": true, + "path": "ja.json", }, - key: 'locale__path_to_project_locales_es_json', - file: { path: 'es.json', cache: true } - } - ] - }, - { - code: 'es-AR', - files: [ - { path: 'es.json', cache: true }, - { path: 'es-AR.json', cache: true } - ], - meta: [ - { - path: '/path/to/project/locales/es.json', - loadPath: '../es.json', - type: 'static', - hash: 'f4490d2c', - parsed: { - root: '/', - dir: '/path/to/project/locales', - base: 'es.json', - ext: '.json', - name: 'es' + ], + "meta": [ + { + "file": { + "cache": true, + "path": "ja.json", + }, + "hash": "0e1b8bd4", + "key": "locale__path_to_project_ja_json", + "loadPath": "../ja.json", + "parsed": { + "base": "ja.json", + "dir": "/path/to/project", + "ext": ".json", + "name": "ja", + "root": "/", + }, + "path": "/path/to/project/ja.json", + "type": "static", }, - key: 'locale__path_to_project_locales_es_json', - file: { path: 'es.json', cache: true } - }, - { - path: '/path/to/project/locales/es-AR.json', - loadPath: '../es-AR.json', - type: 'static', - hash: '96ad3952', - parsed: { - root: '/', - dir: '/path/to/project/locales', - base: 'es-AR.json', - ext: '.json', - name: 'es-AR' + ], + }, + { + "code": "es", + "files": [ + { + "cache": true, + "path": "es.json", }, - key: 'locale__path_to_project_locales_es_AR_json', - file: { path: 'es-AR.json', cache: true } - } - ] - }, - { - code: 'nl', - files: [{ path: 'nl.js', cache: false }], - meta: [ - { - path: '/path/to/project/locales/nl.js', - loadPath: '../nl.js', - type: 'dynamic', - hash: '68b1a130', - parsed: { - root: '/', - dir: '/path/to/project/locales', - base: 'nl.js', - ext: '.js', - name: 'nl' + ], + "meta": [ + { + "file": { + "cache": true, + "path": "es.json", + }, + "hash": "c78280fb", + "key": "locale__path_to_project_es_json", + "loadPath": "../es.json", + "parsed": { + "base": "es.json", + "dir": "/path/to/project", + "ext": ".json", + "name": "es", + "root": "/", + }, + "path": "/path/to/project/es.json", + "type": "static", }, - key: 'locale__path_to_project_locales_nl_js', - file: { path: 'nl.js', cache: false } - } - ] - } - ]) + ], + }, + { + "code": "es-AR", + "files": [ + { + "cache": true, + "path": "es.json", + }, + { + "cache": true, + "path": "es-AR.json", + }, + ], + "meta": [ + { + "file": { + "cache": true, + "path": "es.json", + }, + "hash": "c78280fb", + "key": "locale__path_to_project_es_json", + "loadPath": "../es.json", + "parsed": { + "base": "es.json", + "dir": "/path/to/project", + "ext": ".json", + "name": "es", + "root": "/", + }, + "path": "/path/to/project/es.json", + "type": "static", + }, + { + "file": { + "cache": true, + "path": "es-AR.json", + }, + "hash": "65220c0a", + "key": "locale__path_to_project_es_AR_json", + "loadPath": "../es-AR.json", + "parsed": { + "base": "es-AR.json", + "dir": "/path/to/project", + "ext": ".json", + "name": "es-AR", + "root": "/", + }, + "path": "/path/to/project/es-AR.json", + "type": "static", + }, + ], + }, + { + "code": "nl", + "files": [ + { + "cache": false, + "path": "nl.js", + }, + ], + "meta": [ + { + "file": { + "cache": false, + "path": "nl.js", + }, + "hash": "b7971e5b", + "key": "locale__path_to_project_nl_js", + "loadPath": "../nl.js", + "parsed": { + "base": "nl.js", + "dir": "/path/to/project", + "ext": ".js", + "name": "nl", + "root": "/", + }, + "path": "/path/to/project/nl.js", + "type": "dynamic", + }, + ], + }, + ] + `) }) test('parseSegment', () => {