diff --git a/examples/snippets-middleware/.gitignore b/examples/snippets-middleware/.gitignore new file mode 100644 index 000000000..438cb0860 --- /dev/null +++ b/examples/snippets-middleware/.gitignore @@ -0,0 +1,8 @@ +node_modules +*.log* +.nuxt +.nitro +.cache +.output +.env +dist diff --git a/examples/snippets-middleware/README.md b/examples/snippets-middleware/README.md new file mode 100644 index 000000000..708fc2eec --- /dev/null +++ b/examples/snippets-middleware/README.md @@ -0,0 +1,122 @@ +# Working with admin snippets via middleware (Nuxt) + +![Shopware Frontends](./public/shopware-frontends-logo.png) + +This repository shows an example of how to use translation snippets using admin API accessible by a middleware to use them in **@nuxtjs/i18n** module in the end to translate strings for two languages. + +## What's inside + +- Nuxt 3 application +- Required libraries installed (api-client, composables, nuxt3-module) +- Minimum configuration of Nuxt 3 module +- **Configured i18n module: `i18n` section in `nuxt.config.ts` file** +- **API middleware added: `./server/api/translations.get.ts` file** +- **Component displaying translated phrases for two languages: en-GB & de-DE** + +## Requirements + +Go to [Documentation > Requirements](https://frontends.shopware.com/framework/requirements.html) to see the details. + +## The idea + +We are going to display translated strings in a Vue Component for two different languages. +The problem is the translation snippets aren't exposed in `store-api` scope, so there is a necessity to fetch them from admin `api` (using special credentials), and expose them via Nuxt Server's API. + +1. As a store to keep translations for each language we utilize Snippets system which a part of Shopware 6. + + | translation key | en-GB | de-DE | + | ---------------------------------------- | ---------------------- | ------------------------- | + | frontends.general.currency | Currency | Währung | + | frontends.general.default_payment_method | Default payment method | Standard-Zahlungsmethode | + | frontends.account.is_customer_logged_in | Is logged in | Ist der Kunde eingeloggt? | + +2. Fetch translations from backend via Admin API (using [@shopware/api-client](https://www.npmjs.com/package/@shopware/api-client)) and expose them via Nuxt's server endpoint ([see Nuxt docs](https://nuxt.com/docs/guide/directory-structure/server)) + +3. In order to display translated strings, the [@nuxtjs/i18n](https://www.npmjs.com/package/@nuxtjs/i18n) module is used. + + A special helper will take care of displaying, and another will be used to change the current locale (en-GB or de-DE) in order to load a different translations. + +## Admin panel: Prepare translations + +Go to Settings > Snippets > Choose one > Add snippet ([visit official docs](https://docs.shopware.com/en/shopware-6-en/settings/snippets#creating-a-new-snippet) to see how to achieve this) + +For readiness purposes, and to easily distinguish our _frontends_ related snippets we will use an additional prefix for a snippet's key, like: + +`general.currency` will become `frontends.general.currency`. Thanks to this, the results can be narrowed down only for our application when [Prefix Filter](https://developer.shopware.com/docs/resources/references/core-reference/dal-reference/filters-reference.html#prefix) type is used in the search query. + +![editing snippet view](./docs/snippet_view.png) + +Since now, the `/api/snippet` or `/api/search/snippet` will have a newly created translation to be fetched and used in our frontend app. + +## Admin panel: setup API credentials for Admin scoped requests + +The example does the requests to the Admin API, so it's a good reason to utilize the machine-to-machine authentication grant type, named [Client Credentials](https://shopware.stoplight.io/docs/admin-api/8e1d78252fa6f-authentication#client-credentials). + +Beforehand, make sure there is a Role with only READ rights you can use later on. +Then create an [Integration](https://docs.shopware.com/en/shopware-6-en/settings/system/integrationen?category=shopware-6-en/settings/system) to generate the API tokens pair. + +For demo purposes, we can use the predefined "snippet-reader" integration, having only two ACL's items role: READ `snippet` and READ `snippet-set`: + +``` +Access key ID: SWIARW9QA2DYOUX3OXJMRGX2UQ +Secret access key: dTRpT3ptZDlmMHZocDNrb2ZOODYxYWtIWnZtRTByUnBvRXh5M3Q +``` + +(see [translations.get.ts](./server/api/translations.get.ts) file, line 38.) + +API Client configured that way will make every requests using those credentials. + +## @nuxtjs/i18n configuration + +```ts +// nuxt.config.ts +i18n: { + defaultLocale: "en-GB", // fallback locale + detectBrowserLanguage: false, + langDir: "./i18n/langs", // place when `all.ts` entrypoint is stored + locales: [ + { + code: "en-GB", + iso: "en-GB", + file: "all.ts", // common entrypoint accepting locale code + }, + { + code: "de-DE", + iso: "de-DE", + file: "all.ts", // common entrypoint accepting locale code + }, + ], + }, +``` + +## Translations source + +```ts +// ./i18n/langs/all.ts +export default defineI18nLocale(async (locale) => { + return $fetch(`/api/translations?locale=${locale}`); // points to endpoint exposed via ./server/api/translations.get.ts file +}); +``` + +## API middleware - what it does + +Server API exposes an endpoint under `/api/translations` for HTTP GET requests that accepts query parameter. + +1. It accepts a `locale` query parameter (en-GB, de-DE, ...) to find a snippet set ID (identifier of specific language) +2. Gets all translations for given `snippetSedId` +3. Narrow down the result by applying `prefix` filter with `frontends.` value to have snippets made only for our purposes. + +## Install & Run + +1. `pnpm i` to install deps +2. `pnpm dev` to run the project in dev mode + +## Try it online + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/shopware/frontends/tree/main/examples/snippets-middleware) + +## FURTHER STEPS + +1. Add caching layers (HTTP Cache / LRU Cache /... ) to speed up +2. Share snippets between app contexts for different users (useNuxtApp / Redis / ... ) +3. Store oauth access token to save amount of requests - utilize `onAuthChange` and `sessionData` parameters while creating a client instance using `createAdminAPIClient` method. diff --git a/examples/snippets-middleware/app.vue b/examples/snippets-middleware/app.vue new file mode 100644 index 000000000..270e8b5c8 --- /dev/null +++ b/examples/snippets-middleware/app.vue @@ -0,0 +1,17 @@ + + + + diff --git a/examples/snippets-middleware/components/Frontends.vue b/examples/snippets-middleware/components/Frontends.vue new file mode 100644 index 000000000..4ed44bc9a --- /dev/null +++ b/examples/snippets-middleware/components/Frontends.vue @@ -0,0 +1,70 @@ + + + + diff --git a/examples/snippets-middleware/docs/snippet_view.png b/examples/snippets-middleware/docs/snippet_view.png new file mode 100644 index 000000000..36d6031e7 Binary files /dev/null and b/examples/snippets-middleware/docs/snippet_view.png differ diff --git a/examples/snippets-middleware/i18n/langs/all.ts b/examples/snippets-middleware/i18n/langs/all.ts new file mode 100644 index 000000000..e5f7cbe96 --- /dev/null +++ b/examples/snippets-middleware/i18n/langs/all.ts @@ -0,0 +1,3 @@ +export default defineI18nLocale(async (locale) => { + return $fetch(`/api/translations?locale=${locale}`); +}); diff --git a/examples/snippets-middleware/nuxt.config.ts b/examples/snippets-middleware/nuxt.config.ts new file mode 100644 index 000000000..12b583427 --- /dev/null +++ b/examples/snippets-middleware/nuxt.config.ts @@ -0,0 +1,40 @@ +// https://v3.nuxtjs.org/api/configuration/nuxt.config +export default defineNuxtConfig({ + extends: [ + "@shopware-pwa/composables-next/nuxt-layer", + "@shopware-pwa/cms-base", + ], + runtimeConfig: { + // These values are used in the Shopware API client + // TODO: replace with environment variables copied from Github once feature is supported + api_client_id: "SWIARW9QA2DYOUX3OXJMRGX2UQ", // or import.meta.env.NUXT_SHOPWARE_ACCESS_KEY_ID when .env is defined + api_client_secret: "dTRpT3ptZDlmMHZocDNrb2ZOODYxYWtIWnZtRTByUnBvRXh5M3Q", // or import.meta.env.NUXT_SHOPWARE_SECRET_ACCESS_KEY when .env is defined + public: { + shopware: { + shopwareEndpoint: "https://demo-frontends.shopware.store/store-api", + shopwareAccessToken: "SWSCBHFSNTVMAWNZDNFKSHLAYW", + }, + }, + }, + modules: ["@shopware-pwa/nuxt3-module", "@nuxtjs/i18n"], + typescript: { + strict: true, + }, + i18n: { + defaultLocale: "en-GB", + detectBrowserLanguage: false, + langDir: "./i18n/langs", + locales: [ + { + code: "en-GB", + iso: "en-GB", + file: "all.ts", + }, + { + code: "de-DE", + iso: "de-DE", + file: "all.ts", + }, + ], + }, +}); diff --git a/examples/snippets-middleware/package.json b/examples/snippets-middleware/package.json new file mode 100644 index 000000000..63c10a597 --- /dev/null +++ b/examples/snippets-middleware/package.json @@ -0,0 +1,28 @@ +{ + "name": "example-translation-snippets", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "nuxt build", + "dev": "nuxt dev", + "generate": "nuxt generate", + "preview": "nuxt preview" + }, + "devDependencies": { + "@nuxtjs/i18n": "8.0.0", + "@shopware-pwa/cms-base": "canary", + "@shopware-pwa/composables-next": "canary", + "@shopware-pwa/nuxt3-module": "canary", + "@shopware/api-client": "canary", + "@types/lru-cache": "^7.10.10", + "@types/node": "^20.3.2", + "@vueuse/nuxt": "^10.7.2", + "nuxt": "^3.9.3", + "typescript": "^5.3.3", + "vue": "^3.4.15", + "vue-tsc": "^1.8.27" + }, + "engines": { + "node": "^18.x || ^20.x" + } +} \ No newline at end of file diff --git a/examples/snippets-middleware/public/shopware-frontends-logo.png b/examples/snippets-middleware/public/shopware-frontends-logo.png new file mode 100644 index 000000000..6daa1afe4 Binary files /dev/null and b/examples/snippets-middleware/public/shopware-frontends-logo.png differ diff --git a/examples/snippets-middleware/server/api/translations.get.ts b/examples/snippets-middleware/server/api/translations.get.ts new file mode 100644 index 000000000..cb1aafbf3 --- /dev/null +++ b/examples/snippets-middleware/server/api/translations.get.ts @@ -0,0 +1,120 @@ +// import type { Schemas } from "#shopware"; +import { createAdminAPIClient } from "@shopware/api-client"; +import type { + operationPaths, + operations, + components, +} from "@shopware/api-client/admin-api-types"; + +// import { LRUCache } from "lru-cache"; + +const FALLBACK_LOCALE = "en-GB"; + +// const cache = new LRUCache({ +// max: 10, +// }); + +export default defineEventHandler(async (handler) => { + const query = getQuery(handler); + + const localeParam = query.locale as string; + + if (!localeParam) { + return sendError(handler, { + statusCode: 400, + statusMessage: `Wrong input parameter`, + fatal: true, + message: `Locale is not provided`, + name: "LocaleNotProvided", + }); + } + + // if (cache.has(localeParam)) { + // return cache.get(localeParam); + // } + + // create an instance of the Shopware API client + // using client credentials grant type + const client = createAdminAPIClient({ + baseURL: `${useRuntimeConfig().public.shopware.shopwareEndpoint.replace("store-api", "api")}`, + credentials: { + grant_type: "client_credentials", + client_id: useRuntimeConfig()?.api_client_id, + client_secret: useRuntimeConfig()?.api_client_secret, + }, + // onAuthChange: (auth) => { + // auth.accessToken + // auth.expirationTime + // }, + // sessionData: { + // accessToken: "", + // expirationTime: 600, + // }, + }); + + let snippetSetResponse; + + try { + // fetch snippetSetId for the given locale to use it in the next request + snippetSetResponse = await client.invoke( + "searchSnippetSet post /search/snippet-set", + { + filter: [ + { + type: "equals", + field: "iso", + value: localeParam || FALLBACK_LOCALE, + }, + ], + }, + ); + } catch (error) { + console.error("ERROR WHILE FETCHING snippets: ", error); + } + + if (!snippetSetResponse?.data?.[0]?.id) { + return sendError(handler, { + statusCode: 404, + statusMessage: `Locale "${query.locale}" Not Found`, + fatal: true, + message: `Locale "${query.locale}" Not Found`, + name: "LocaleNotFound", + }); + } + + // fetch all snippets for the given locale (via snippetSetId) + const snippetsFound = await client.invoke( + "searchSnippet post /search/snippet", + { + filter: [ + { + type: "prefix", + field: "translationKey", + value: "frontends.", + }, + { + type: "equals", + field: "setId", + value: snippetSetResponse.data?.[0]?.id, + }, + ], + }, + ); + + const response = Object.assign( + {}, + // create an object with keys from translationKey and values from value + // with removed frontends. prefix + ...(snippetsFound?.data?.map((snippet) => ({ + [snippet.translationKey.replace("frontends.", "")]: snippet.value, + })) || []), + ); + + // cache.set(localeParam, response); + + // Consider HTTP Cache for production + // setHeader(handler, "Cache-Control", "public, max-age=3600"); + // setHeader(handler, "Max-Age", "3600, must-revalidate"); + + return response; +}); diff --git a/examples/snippets-middleware/style.css b/examples/snippets-middleware/style.css new file mode 100644 index 000000000..0192f9aac --- /dev/null +++ b/examples/snippets-middleware/style.css @@ -0,0 +1,81 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/examples/snippets-middleware/tsconfig.json b/examples/snippets-middleware/tsconfig.json new file mode 100644 index 000000000..a7bfa186c --- /dev/null +++ b/examples/snippets-middleware/tsconfig.json @@ -0,0 +1,4 @@ +{ + // https://v3.nuxtjs.org/concepts/typescript + "extends": "./.nuxt/tsconfig.json" +} diff --git a/packages/api-client-next/admin-api-types/adminApiTypes.d.ts b/packages/api-client-next/admin-api-types/adminApiTypes.d.ts index 06a809e2b..505530104 100644 --- a/packages/api-client-next/admin-api-types/adminApiTypes.d.ts +++ b/packages/api-client-next/admin-api-types/adminApiTypes.d.ts @@ -3813,6 +3813,14 @@ export type paths = { */ patch: operations["updateShippingMethod"]; }; + "/search/snippet": { + // TODO: [OpenAPI][searchSnippet] path should be present + post: operations["searchSnippet"]; + }; + "/search/snippet-set": { + // TODO: [OpenAPI][searchSnippetSet] path should be present + post: operations["searchSnippetSet"]; + }; "/snippet": { /** * List with basic information of Snippet resources. @@ -58578,6 +58586,57 @@ export type operations = { 404: components["responses"]["404"]; }; }; + // TODO: [OpenAPI][searchSnippet] operation should be present + searchSnippet: { + requestBody: { + content: { + "application/json": components["schemas"]["Criteria"]; + "application/vnd.api+json": components["schemas"]["Criteria"]; + }; + }; + responses: { + /** List of Snippet */ + 200: { + content: { + "application/json": { + data?: components["schemas"]["Snippet"][]; + total?: number; + }; + "application/vnd.api+json": components["schemas"]["success"] & { + data?: components["schemas"]["Snippet"][]; + }; + }; + }; + 400: components["responses"]["400"]; + 401: components["responses"]["401"]; + }; + }; + // TODO: [OpenAPI][searchSnippetSet] operation should be present + + searchSnippetSet: { + requestBody: { + content: { + "application/json": components["schemas"]["Criteria"]; + "application/vnd.api+json": components["schemas"]["Criteria"]; + }; + }; + responses: { + /** List of SnippetSet */ + 200: { + content: { + "application/json": { + data?: components["schemas"]["SnippetSet"][]; + total?: number; + }; + "application/vnd.api+json": components["schemas"]["success"] & { + data?: components["schemas"]["SnippetSet"][]; + }; + }; + }; + 400: components["responses"]["400"]; + 401: components["responses"]["401"]; + }; + }; }; export type operationPaths = @@ -59565,4 +59624,6 @@ export type operationPaths = | "iterate post /_action/indexing/{indexer}" | "info get /_action/cache_info" | "customPriceImport post /_action/custom-price" - | "rulePreview post /api/_admin/rule-builder-preview/{orderId}"; + | "rulePreview post /api/_admin/rule-builder-preview/{orderId}" + | "searchSnippet post /search/snippet" // TODO: [OpenAPI][searchSnippet] missing operation should be added + | "searchSnippetSet post /search/snippet-set"; // TODO: [OpenAPI][searchSnippetSet] missing operation should be added diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index defe64ac8..3b749bf9e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -355,11 +355,11 @@ importers: dependencies: '@nuxt/kit': specifier: ^3.10.1 - version: 3.10.1(rollup@3.29.4) + version: 3.10.1 devDependencies: '@nuxt/schema': specifier: ^3.10.1 - version: 3.10.1(rollup@3.29.4) + version: 3.10.1 '@shopware-pwa/composables-next': specifier: canary version: link:../../packages/composables @@ -368,7 +368,7 @@ importers: version: 20.8.6 nuxt: specifier: ^3.10.1 - version: 3.10.1(@types/node@20.8.6)(typescript@5.3.3) + version: 3.10.1(@types/node@20.8.6)(typescript@5.3.3)(vue-tsc@1.8.27) examples/new-api-client: dependencies: @@ -454,6 +454,45 @@ importers: specifier: ^5.0.12 version: 5.0.12(@types/node@20.8.6) + examples/snippets-middleware: + devDependencies: + '@nuxtjs/i18n': + specifier: 8.0.0 + version: 8.0.0(rollup@3.29.4)(vue@3.4.19) + '@shopware-pwa/cms-base': + specifier: canary + version: link:../../packages/cms-base + '@shopware-pwa/composables-next': + specifier: canary + version: link:../../packages/composables + '@shopware-pwa/nuxt3-module': + specifier: canary + version: link:../../packages/nuxt3-module + '@shopware/api-client': + specifier: canary + version: link:../../packages/api-client-next + '@types/lru-cache': + specifier: ^7.10.10 + version: 7.10.10 + '@types/node': + specifier: ^20 + version: 20.11.17 + '@vueuse/nuxt': + specifier: ^10.7.2 + version: 10.7.2(nuxt@3.10.1)(rollup@3.29.4)(vue@3.4.19) + nuxt: + specifier: ^3.9.3 + version: 3.10.1(@types/node@20.11.17)(eslint@8.56.0)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27) + typescript: + specifier: ^5.3.3 + version: 5.3.3 + vue: + specifier: ^3.4.15 + version: 3.4.19(typescript@5.3.3) + vue-tsc: + specifier: ^1.8.27 + version: 1.8.27(typescript@5.3.3) + examples/strapi-cms: {} examples/use-add-to-cart: @@ -3405,7 +3444,7 @@ packages: vue-i18n: optional: true dependencies: - '@intlify/message-compiler': 9.4.1 + '@intlify/message-compiler': 9.8.0 '@intlify/shared': 9.8.0 acorn: 8.11.3 escodegen: 2.1.0 @@ -3442,14 +3481,6 @@ packages: '@intlify/utils': 0.12.0 dev: true - /@intlify/message-compiler@9.4.1: - resolution: {integrity: sha512-aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw==} - engines: {node: '>= 16'} - dependencies: - '@intlify/shared': 9.4.1 - source-map-js: 1.0.2 - dev: true - /@intlify/message-compiler@9.8.0: resolution: {integrity: sha512-McnYWhcoYmDJvssVu6QGR0shqlkJuL1HHdi5lK7fNqvQqRYaQ4lSLjYmZxwc8tRNMdIe9/KUKfyPxU9M6yCtNQ==} engines: {node: '>= 16'} @@ -3458,11 +3489,6 @@ packages: source-map-js: 1.0.2 dev: true - /@intlify/shared@9.4.1: - resolution: {integrity: sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng==} - engines: {node: '>= 16'} - dev: true - /@intlify/shared@9.8.0: resolution: {integrity: sha512-TmgR0RCLjzrSo+W3wT0ALf9851iFMlVI9EYNGeWvZFUQTAJx0bvfsMlPdgVtV1tDNRiAfhkFsMKu6jtUY1ZLKQ==} engines: {node: '>= 16'} @@ -3501,6 +3527,39 @@ packages: - supports-color dev: true + /@intlify/unplugin-vue-i18n@2.0.0(rollup@3.29.4)(vue-i18n@9.8.0): + resolution: {integrity: sha512-1oKvm92L9l2od2H9wKx2ZvR4tzn7gUtd7bPLI7AWUmm7U9H1iEypndt5d985ypxGsEs0gToDaKTrytbBIJwwSg==} + engines: {node: '>= 14.16'} + peerDependencies: + petite-vue-i18n: '*' + vue-i18n: '*' + vue-i18n-bridge: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + vue-i18n-bridge: + optional: true + dependencies: + '@intlify/bundle-utils': 7.4.0(vue-i18n@9.8.0) + '@intlify/shared': 9.8.0 + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@vue/compiler-sfc': 3.4.19 + debug: 4.3.4 + fast-glob: 3.3.2 + js-yaml: 4.1.0 + json5: 2.2.3 + pathe: 1.1.2 + picocolors: 1.0.0 + source-map-js: 1.0.2 + unplugin: 1.6.0 + vue-i18n: 9.8.0(vue@3.4.19) + transitivePeerDependencies: + - rollup + - supports-color + dev: true + /@intlify/utils@0.12.0: resolution: {integrity: sha512-yCBNcuZQ49iInqmWC2xfW0rgEQyNtCM8C8KcWKTXxyscgUE1+48gjLgZZqP75MjhlApxwph7ZMWLqyABkSgxQA==} engines: {node: '>= 18'} @@ -3888,7 +3947,7 @@ packages: optional: true dependencies: '@nuxt/kit': 3.10.1 - '@nuxt/schema': 3.10.1(rollup@3.29.4) + '@nuxt/schema': 3.10.1 execa: 7.2.0 nuxt: 3.10.1(@types/node@20.11.17)(typescript@5.3.3) transitivePeerDependencies: @@ -3925,7 +3984,7 @@ packages: '@nuxt/kit': 3.10.1(rollup@3.29.4) '@nuxt/schema': 3.10.1(rollup@3.29.4) execa: 7.2.0 - nuxt: 3.10.1(@types/node@20.11.17)(eslint@8.56.0)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27) + nuxt: 3.10.1(@types/node@20.11.17)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27) transitivePeerDependencies: - rollup - supports-color @@ -3985,7 +4044,7 @@ packages: semver: 7.6.0 simple-git: 3.22.0 sirv: 2.0.4 - unimport: 3.7.1(rollup@3.29.4) + unimport: 3.7.1(rollup@3.28.1) vite-plugin-inspect: 0.8.1(@nuxt/kit@3.10.1) vite-plugin-vue-inspector: 4.0.2 which: 3.0.1 @@ -4078,7 +4137,7 @@ packages: launch-editor: 2.6.1 local-pkg: 0.5.0 magicast: 0.3.3 - nuxt: 3.10.1(@types/node@20.11.17)(eslint@8.56.0)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27) + nuxt: 3.10.1(@types/node@20.11.17)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27) nypm: 0.3.6 ohash: 1.1.3 pacote: 17.0.6 @@ -4106,7 +4165,7 @@ packages: resolution: {integrity: sha512-M9VRY0QGbG6lWOVqt69ZF96RLBUZVXyFpbBUwHnoHgjF9BXSX/MT/hrZcJicN4aPM2QRephGgsBd4U5wFmmn6g==} engines: {node: ^14.18.0 || >=16.10.0} dependencies: - '@nuxt/schema': 3.10.1(rollup@3.29.4) + '@nuxt/schema': 3.10.1 c12: 1.6.1 consola: 3.2.3 defu: 6.1.4 @@ -4122,7 +4181,7 @@ packages: semver: 7.6.0 ufo: 1.4.0 unctx: 2.3.1 - unimport: 3.7.1(rollup@3.29.4) + unimport: 3.7.1(rollup@3.28.1) untyped: 1.4.2 transitivePeerDependencies: - rollup @@ -4180,6 +4239,25 @@ packages: - rollup - supports-color + /@nuxt/schema@3.10.1: + resolution: {integrity: sha512-DyZLhbaaoGBCXO2jboCHTp77jbCIUem/va5iSu2+GO6M8vAHbNRphksw38gpSk/F74LbJDTbW0t3hrMBzU4B3g==} + engines: {node: ^14.18.0 || >=16.10.0} + dependencies: + '@nuxt/ui-templates': 1.3.1 + consola: 3.2.3 + defu: 6.1.4 + hookable: 5.5.3 + pathe: 1.1.2 + pkg-types: 1.0.3 + scule: 1.3.0 + std-env: 3.7.0 + ufo: 1.4.0 + unimport: 3.7.1(rollup@3.28.1) + untyped: 1.4.2 + transitivePeerDependencies: + - rollup + - supports-color + /@nuxt/schema@3.10.1(rollup@3.28.1): resolution: {integrity: sha512-DyZLhbaaoGBCXO2jboCHTp77jbCIUem/va5iSu2+GO6M8vAHbNRphksw38gpSk/F74LbJDTbW0t3hrMBzU4B3g==} engines: {node: ^14.18.0 || >=16.10.0} @@ -4228,7 +4306,7 @@ packages: create-require: 1.1.1 defu: 6.1.4 destr: 2.0.2 - dotenv: 16.4.1 + dotenv: 16.4.3 git-url-parse: 13.1.1 is-docker: 3.0.0 jiti: 1.21.0 @@ -4253,7 +4331,7 @@ packages: create-require: 1.1.1 defu: 6.1.4 destr: 2.0.2 - dotenv: 16.4.1 + dotenv: 16.4.3 git-url-parse: 13.1.1 is-docker: 3.0.0 jiti: 1.21.0 @@ -4279,7 +4357,7 @@ packages: create-require: 1.1.1 defu: 6.1.4 destr: 2.0.2 - dotenv: 16.4.1 + dotenv: 16.4.3 git-url-parse: 13.1.1 is-docker: 3.0.0 jiti: 1.21.0 @@ -4464,7 +4542,7 @@ packages: vue: ^3.3.4 dependencies: '@nuxt/kit': 3.10.1 - '@rollup/plugin-replace': 5.0.5(rollup@3.29.4) + '@rollup/plugin-replace': 5.0.5(rollup@3.28.1) '@vitejs/plugin-vue': 5.0.4(vite@5.0.12)(vue@3.4.19) '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.0.12)(vue@3.4.19) autoprefixer: 10.4.17(postcss@8.4.35) @@ -4487,7 +4565,7 @@ packages: perfect-debounce: 1.0.0 pkg-types: 1.0.3 postcss: 8.4.35 - rollup-plugin-visualizer: 5.12.0(rollup@3.29.4) + rollup-plugin-visualizer: 5.12.0(rollup@3.28.1) std-env: 3.7.0 strip-literal: 2.0.0 ufo: 1.4.0 @@ -4524,67 +4602,7 @@ packages: vue: ^3.3.4 dependencies: '@nuxt/kit': 3.10.1 - '@rollup/plugin-replace': 5.0.5(rollup@3.29.4) - '@vitejs/plugin-vue': 5.0.4(vite@5.0.12)(vue@3.4.19) - '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.0.12)(vue@3.4.19) - autoprefixer: 10.4.17(postcss@8.4.35) - clear: 0.1.0 - consola: 3.2.3 - cssnano: 6.0.3(postcss@8.4.35) - defu: 6.1.4 - esbuild: 0.20.0 - escape-string-regexp: 5.0.0 - estree-walker: 3.0.3 - externality: 1.0.2 - fs-extra: 11.2.0 - get-port-please: 3.1.2 - h3: 1.10.1 - knitwork: 1.0.0 - magic-string: 0.30.7 - mlly: 1.5.0 - ohash: 1.1.3 - pathe: 1.1.2 - perfect-debounce: 1.0.0 - pkg-types: 1.0.3 - postcss: 8.4.35 - rollup-plugin-visualizer: 5.12.0(rollup@3.29.4) - std-env: 3.7.0 - strip-literal: 2.0.0 - ufo: 1.4.0 - unenv: 1.9.0 - unplugin: 1.6.0 - vite: 5.0.12(@types/node@20.8.6) - vite-node: 1.2.2(@types/node@20.8.6) - vite-plugin-checker: 0.6.4(typescript@5.3.3)(vite@5.0.12)(vue-tsc@1.8.27) - vue: 3.4.19(typescript@5.3.3) - vue-bundle-renderer: 2.0.0 - transitivePeerDependencies: - - '@types/node' - - eslint - - less - - lightningcss - - meow - - optionator - - rollup - - sass - - stylelint - - stylus - - sugarss - - supports-color - - terser - - typescript - - vls - - vti - - vue-tsc - - /@nuxt/vite-builder@3.10.1(@types/node@20.8.6)(typescript@5.3.3)(vue@3.4.19): - resolution: {integrity: sha512-Rl3sNWd43LNuKc4Y7vwWPLKH+4brbFCfcCQP1W86eSzfijen9AGuqyYIrRaaMieNE7aHMpYSIGCo4kYohhMsuA==} - engines: {node: ^14.18.0 || >=16.10.0} - peerDependencies: - vue: ^3.3.4 - dependencies: - '@nuxt/kit': 3.10.1 - '@rollup/plugin-replace': 5.0.5(rollup@3.29.4) + '@rollup/plugin-replace': 5.0.5(rollup@3.28.1) '@vitejs/plugin-vue': 5.0.4(vite@5.0.12)(vue@3.4.19) '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.0.12)(vue@3.4.19) autoprefixer: 10.4.17(postcss@8.4.35) @@ -4607,7 +4625,7 @@ packages: perfect-debounce: 1.0.0 pkg-types: 1.0.3 postcss: 8.4.35 - rollup-plugin-visualizer: 5.12.0(rollup@3.29.4) + rollup-plugin-visualizer: 5.12.0(rollup@3.28.1) std-env: 3.7.0 strip-literal: 2.0.0 ufo: 1.4.0 @@ -4636,7 +4654,6 @@ packages: - vls - vti - vue-tsc - dev: true /@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-l2fLouDYwdAvCZEEw7wGxOBj+i8TQcHFu3zMPTLqKuv1qu6WcZIr0uztkbaa8ND1uKZ9YPqKx6UlSOjM4Le69Q==} @@ -4678,6 +4695,41 @@ packages: - supports-color dev: true + /@nuxtjs/i18n@8.0.0(rollup@3.29.4)(vue@3.4.19): + resolution: {integrity: sha512-h436bYKJ9a8NpLoY5kc5QyM6WTsuFU2IGtSErm+iRgWBinguLg/gp0cvgji35WgVlRUAhocYkxOqTSpZiUZyYA==} + engines: {node: ^14.16.0 || >=16.11.0} + dependencies: + '@intlify/h3': 0.5.0 + '@intlify/shared': 9.8.0 + '@intlify/unplugin-vue-i18n': 2.0.0(rollup@3.29.4)(vue-i18n@9.8.0) + '@intlify/utils': 0.12.0 + '@miyaneee/rollup-plugin-json5': 1.1.2(rollup@3.29.4) + '@nuxt/kit': 3.10.1(rollup@3.29.4) + '@rollup/plugin-yaml': 4.1.2(rollup@3.29.4) + '@vue/compiler-sfc': 3.4.19 + debug: 4.3.4 + defu: 6.1.4 + estree-walker: 3.0.3 + is-https: 4.0.0 + knitwork: 1.0.0 + magic-string: 0.30.7 + mlly: 1.5.0 + pathe: 1.1.2 + sucrase: 3.34.0 + ufo: 1.4.0 + unplugin: 1.6.0 + vue-i18n: 9.8.0(vue@3.4.19) + vue-i18n-routing: 1.2.0(vue-i18n@9.8.0)(vue@3.4.19) + transitivePeerDependencies: + - '@vue/composition-api' + - petite-vue-i18n + - rollup + - supports-color + - vue + - vue-i18n-bridge + - vue-router + dev: true + /@nuxtjs/i18n@8.0.0-rc.11(rollup@3.29.4)(vue@3.4.19): resolution: {integrity: sha512-+jR96NgUXwZi/5WKxomnjTyoWGlrbTgYWHO3/w5byH2fIZo2txFoZDaxcht0UpvcbWApgd777uTxEK3OL242ng==} engines: {node: ^14.16.0 || >=16.11.0} @@ -5177,7 +5229,6 @@ packages: '@rollup/pluginutils': 5.1.0(rollup@3.28.1) magic-string: 0.30.7 rollup: 3.28.1 - dev: true /@rollup/plugin-replace@5.0.5(rollup@3.29.4): resolution: {integrity: sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==} @@ -6379,6 +6430,13 @@ packages: /@types/linkify-it@3.0.2: resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} + /@types/lru-cache@7.10.10: + resolution: {integrity: sha512-nEpVRPWW9EBmx2SCfNn3ClYxPL7IktPX12HhIoSc/H5mMjdeW3+YsXIpseLQ2xF35+OcpwKQbEUw5VtqE4PDNA==} + deprecated: This is a stub types definition. lru-cache provides its own type definitions, so you do not need this installed. + dependencies: + lru-cache: 10.2.0 + dev: true + /@types/markdown-it@12.2.3: resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} dependencies: @@ -6949,6 +7007,21 @@ packages: - vite dev: false + /@unocss/astro@0.58.5: + resolution: {integrity: sha512-LtuVnj8oFAK9663OVhQO8KpdJFiOyyPsYfnOZlDCOFK3gHb/2WMrzdBwr1w8LoQF3bDedkFMKirVF7gWjyZiaw==} + peerDependencies: + vite: ^5.0.12 + peerDependenciesMeta: + vite: + optional: true + dependencies: + '@unocss/core': 0.58.5 + '@unocss/reset': 0.58.5 + '@unocss/vite': 0.58.5 + transitivePeerDependencies: + - rollup + dev: true + /@unocss/astro@0.58.5(rollup@3.29.4): resolution: {integrity: sha512-LtuVnj8oFAK9663OVhQO8KpdJFiOyyPsYfnOZlDCOFK3gHb/2WMrzdBwr1w8LoQF3bDedkFMKirVF7gWjyZiaw==} peerDependencies: @@ -6962,6 +7035,7 @@ packages: '@unocss/vite': 0.58.5(rollup@3.29.4) transitivePeerDependencies: - rollup + dev: false /@unocss/cli@0.49.8: resolution: {integrity: sha512-UDm4aQmZqbUrqxZXD+d4fmRvGZPnEV1zk0vdjZZ33jX8kZjIA3FwmmXStnuQitFK7FPY6B72pqNSXV5QLgc+gA==} @@ -6969,7 +7043,7 @@ packages: hasBin: true dependencies: '@ampproject/remapping': 2.2.1 - '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) '@unocss/config': 0.49.8 '@unocss/core': 0.49.8 '@unocss/preset-uno': 0.49.8 @@ -6985,6 +7059,28 @@ packages: - rollup dev: false + /@unocss/cli@0.58.5: + resolution: {integrity: sha512-FzVVXO9ghsGtJpu9uR4o7JeM9gUfWNbVZZ/IfH+0WbDJuyx4rO/jwN55z0yA5QDkhvOz9DvzwPCBzLpTJ5q+Lw==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) + '@unocss/config': 0.58.5 + '@unocss/core': 0.58.5 + '@unocss/preset-uno': 0.58.5 + cac: 6.7.14 + chokidar: 3.6.0 + colorette: 2.0.20 + consola: 3.2.3 + fast-glob: 3.3.2 + magic-string: 0.30.7 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + transitivePeerDependencies: + - rollup + dev: true + /@unocss/cli@0.58.5(rollup@3.29.4): resolution: {integrity: sha512-FzVVXO9ghsGtJpu9uR4o7JeM9gUfWNbVZZ/IfH+0WbDJuyx4rO/jwN55z0yA5QDkhvOz9DvzwPCBzLpTJ5q+Lw==} engines: {node: '>=14'} @@ -7005,6 +7101,7 @@ packages: perfect-debounce: 1.0.0 transitivePeerDependencies: - rollup + dev: false /@unocss/config@0.49.8: resolution: {integrity: sha512-tEpxZ/FvmvBV+PdF7hiqRT7F4PTI2HG6Ytw4cgusmp62VeWJ1t1L+9DuGsUDpaLL/LYyYS7wiCdZj/m+GeNBLg==} @@ -7062,8 +7159,8 @@ packages: '@unocss/preset-web-fonts': 0.58.5 '@unocss/preset-wind': 0.58.5 '@unocss/reset': 0.58.5 - '@unocss/vite': 0.58.5(rollup@3.29.4) - '@unocss/webpack': 0.58.5(rollup@3.29.4) + '@unocss/vite': 0.58.5 + '@unocss/webpack': 0.58.5 unocss: 0.58.5(@unocss/webpack@0.58.5)(postcss@8.4.35) transitivePeerDependencies: - postcss @@ -7308,7 +7405,7 @@ packages: optional: true dependencies: '@ampproject/remapping': 2.2.1 - '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) '@unocss/config': 0.49.8 '@unocss/core': 0.49.8 '@unocss/inspector': 0.49.8 @@ -7321,6 +7418,28 @@ packages: - rollup dev: false + /@unocss/vite@0.58.5: + resolution: {integrity: sha512-p4o1XNX1rvjmoUqSSdua8XyWNg/d+YUChDd2L/xEty+6j2qv0wUaohs3UQ87vWlv632/UmgdX+2MbrgtqthCtw==} + peerDependencies: + vite: ^5.0.12 + peerDependenciesMeta: + vite: + optional: true + dependencies: + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) + '@unocss/config': 0.58.5 + '@unocss/core': 0.58.5 + '@unocss/inspector': 0.58.5 + '@unocss/scope': 0.58.5 + '@unocss/transformer-directives': 0.58.5 + chokidar: 3.6.0 + fast-glob: 3.3.2 + magic-string: 0.30.7 + transitivePeerDependencies: + - rollup + dev: true + /@unocss/vite@0.58.5(rollup@3.29.4): resolution: {integrity: sha512-p4o1XNX1rvjmoUqSSdua8XyWNg/d+YUChDd2L/xEty+6j2qv0wUaohs3UQ87vWlv632/UmgdX+2MbrgtqthCtw==} peerDependencies: @@ -7341,6 +7460,28 @@ packages: magic-string: 0.30.7 transitivePeerDependencies: - rollup + dev: false + + /@unocss/webpack@0.58.5: + resolution: {integrity: sha512-FR17fZRZA+dHJtk7mmUUOlWuuhAxahhsQlTG0WSHh1FVDtpHGwGKDqWHrfmhFRi0XOcV+5bkVc6cp05yjfYqdA==} + peerDependencies: + webpack: ^4 || ^5 + peerDependenciesMeta: + webpack: + optional: true + dependencies: + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) + '@unocss/config': 0.58.5 + '@unocss/core': 0.58.5 + chokidar: 3.6.0 + fast-glob: 3.3.2 + magic-string: 0.30.7 + unplugin: 1.6.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - rollup + dev: true /@unocss/webpack@0.58.5(rollup@3.29.4): resolution: {integrity: sha512-FR17fZRZA+dHJtk7mmUUOlWuuhAxahhsQlTG0WSHh1FVDtpHGwGKDqWHrfmhFRi0XOcV+5bkVc6cp05yjfYqdA==} @@ -7361,6 +7502,7 @@ packages: webpack-sources: 3.2.3 transitivePeerDependencies: - rollup + dev: false /@vercel/build-utils@7.6.0: resolution: {integrity: sha512-NHTakIX/OMl/VY+uKVZA8teNAekkkldUlYuoAxUGfVuxnRDoUGSouE6LJR3Cwi0NJXte20Y+z1n5h+fhLdqcrA==} @@ -7723,6 +7865,25 @@ packages: transitivePeerDependencies: - rollup + /@vue-macros/common@1.8.0(vue@3.4.19): + resolution: {integrity: sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + dependencies: + '@babel/types': 7.23.9 + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) + '@vue/compiler-sfc': 3.4.19 + ast-kit: 0.11.2(rollup@3.28.1) + local-pkg: 0.4.3 + magic-string-ast: 0.3.0 + vue: 3.4.19(typescript@5.3.3) + transitivePeerDependencies: + - rollup + /@vue/babel-helper-vue-transform-on@1.1.5: resolution: {integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==} @@ -8058,14 +8219,13 @@ packages: '@vueuse/core': 10.7.2(vue@3.4.19) '@vueuse/metadata': 10.7.2 local-pkg: 0.5.0 - nuxt: 3.10.1(@types/node@20.11.17)(eslint@8.56.0)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27) + nuxt: 3.10.1(@types/node@20.11.17)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27) vue-demi: 0.14.6(vue@3.4.19) transitivePeerDependencies: - '@vue/composition-api' - rollup - supports-color - vue - dev: false /@vueuse/nuxt@10.7.2(nuxt@3.10.1)(vue@3.4.19): resolution: {integrity: sha512-yv2hY4AiRoSqg9ELNpN6gOkDWxGuLiKE/bEbuTAAuUBhS5OeEDf5aB/kY0e/V6ZXj5XiU4LX3nE8YV8c+UKfmQ==} @@ -8470,7 +8630,6 @@ packages: pathe: 1.1.2 transitivePeerDependencies: - rollup - dev: true /ast-kit@0.11.2(rollup@3.29.4): resolution: {integrity: sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ==} @@ -8491,7 +8650,6 @@ packages: pathe: 1.1.2 transitivePeerDependencies: - rollup - dev: true /ast-kit@0.9.5(rollup@3.29.4): resolution: {integrity: sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg==} @@ -8503,6 +8661,15 @@ packages: transitivePeerDependencies: - rollup + /ast-walker-scope@0.5.0: + resolution: {integrity: sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/parser': 7.23.9 + ast-kit: 0.9.5(rollup@3.28.1) + transitivePeerDependencies: + - rollup + /ast-walker-scope@0.5.0(rollup@3.28.1): resolution: {integrity: sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q==} engines: {node: '>=16.14.0'} @@ -8860,7 +9027,7 @@ packages: dependencies: chokidar: 3.6.0 defu: 6.1.4 - dotenv: 16.4.1 + dotenv: 16.4.3 giget: 1.2.1 jiti: 1.21.0 mlly: 1.5.0 @@ -9884,11 +10051,11 @@ packages: /dotenv@16.4.1: resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==} engines: {node: '>=12'} + dev: true /dotenv@16.4.3: resolution: {integrity: sha512-II98GFrje5psQTSve0E7bnwMFybNLqT8Vu8JIFWRjsE3khyNUm/loZupuy5DVzG2IXf/ysxvrixYOQnM6mjD3A==} engines: {node: '>=12'} - dev: false /dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} @@ -14858,6 +15025,7 @@ packages: - vti - vue-tsc - xml2js + dev: true /nuxt@3.10.1(@types/node@20.11.17)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-1X1DFTGPbVQFF1tjOWYl3qYc3zQww8htknu3qiP8xNzY1MFnDT3Xisxcf6KDe375tHHui0UpXflseL6evlEoMQ==} @@ -14875,7 +15043,7 @@ packages: '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 1.0.8(nuxt@3.10.1) '@nuxt/kit': 3.10.1 - '@nuxt/schema': 3.10.1(rollup@3.29.4) + '@nuxt/schema': 3.10.1 '@nuxt/telemetry': 2.5.3 '@nuxt/ui-templates': 1.3.1 '@nuxt/vite-builder': 3.10.1(@types/node@20.11.17)(eslint@8.56.0)(typescript@5.3.3)(vue@3.4.19) @@ -14920,7 +15088,7 @@ packages: uncrypto: 0.1.3 unctx: 2.3.1 unenv: 1.9.0 - unimport: 3.7.1(rollup@3.29.4) + unimport: 3.7.1(rollup@3.28.1) unplugin: 1.6.0 unplugin-vue-router: 0.7.0(vue-router@4.2.5)(vue@3.4.19) untyped: 1.4.2 @@ -14965,7 +15133,7 @@ packages: - xml2js dev: true - /nuxt@3.10.1(@types/node@20.11.17)(typescript@5.3.3): + /nuxt@3.10.1(@types/node@20.11.17)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27): resolution: {integrity: sha512-1X1DFTGPbVQFF1tjOWYl3qYc3zQww8htknu3qiP8xNzY1MFnDT3Xisxcf6KDe375tHHui0UpXflseL6evlEoMQ==} engines: {node: ^14.18.0 || >=16.10.0} hasBin: true @@ -14979,12 +15147,12 @@ packages: optional: true dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 1.0.8(nuxt@3.10.1) - '@nuxt/kit': 3.10.1 + '@nuxt/devtools': 1.0.8(nuxt@3.10.1)(rollup@3.29.4) + '@nuxt/kit': 3.10.1(rollup@3.29.4) '@nuxt/schema': 3.10.1(rollup@3.29.4) - '@nuxt/telemetry': 2.5.3 + '@nuxt/telemetry': 2.5.3(rollup@3.29.4) '@nuxt/ui-templates': 1.3.1 - '@nuxt/vite-builder': 3.10.1(@types/node@20.11.17)(eslint@8.56.0)(typescript@5.3.3)(vue@3.4.19) + '@nuxt/vite-builder': 3.10.1(@types/node@20.11.17)(eslint@8.56.0)(rollup@3.29.4)(typescript@5.3.3)(vue-tsc@1.8.27)(vue@3.4.19) '@types/node': 20.11.17 '@unhead/dom': 1.8.10 '@unhead/ssr': 1.8.10 @@ -15018,7 +15186,7 @@ packages: perfect-debounce: 1.0.0 pkg-types: 1.0.3 radix3: 1.1.0 - scule: 1.2.0 + scule: 1.3.0 std-env: 3.7.0 strip-literal: 2.0.0 ufo: 1.4.0 @@ -15028,7 +15196,7 @@ packages: unenv: 1.9.0 unimport: 3.7.1(rollup@3.29.4) unplugin: 1.6.0 - unplugin-vue-router: 0.7.0(vue-router@4.2.5)(vue@3.4.19) + unplugin-vue-router: 0.7.0(rollup@3.29.4)(vue-router@4.2.5)(vue@3.4.19) untyped: 1.4.2 vue: 3.4.19(typescript@5.3.3) vue-bundle-renderer: 2.0.0 @@ -15070,7 +15238,7 @@ packages: - vue-tsc - xml2js - /nuxt@3.10.1(@types/node@20.8.6)(typescript@5.3.3): + /nuxt@3.10.1(@types/node@20.11.17)(typescript@5.3.3): resolution: {integrity: sha512-1X1DFTGPbVQFF1tjOWYl3qYc3zQww8htknu3qiP8xNzY1MFnDT3Xisxcf6KDe375tHHui0UpXflseL6evlEoMQ==} engines: {node: ^14.18.0 || >=16.10.0} hasBin: true @@ -15086,11 +15254,11 @@ packages: '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 1.0.8(nuxt@3.10.1) '@nuxt/kit': 3.10.1 - '@nuxt/schema': 3.10.1(rollup@3.29.4) + '@nuxt/schema': 3.10.1 '@nuxt/telemetry': 2.5.3 '@nuxt/ui-templates': 1.3.1 - '@nuxt/vite-builder': 3.10.1(@types/node@20.8.6)(typescript@5.3.3)(vue@3.4.19) - '@types/node': 20.8.6 + '@nuxt/vite-builder': 3.10.1(@types/node@20.11.17)(eslint@8.56.0)(typescript@5.3.3)(vue@3.4.19) + '@types/node': 20.11.17 '@unhead/dom': 1.8.10 '@unhead/ssr': 1.8.10 '@unhead/vue': 1.8.10(vue@3.4.19) @@ -15123,7 +15291,7 @@ packages: perfect-debounce: 1.0.0 pkg-types: 1.0.3 radix3: 1.1.0 - scule: 1.3.0 + scule: 1.2.0 std-env: 3.7.0 strip-literal: 2.0.0 ufo: 1.4.0 @@ -15131,7 +15299,7 @@ packages: uncrypto: 0.1.3 unctx: 2.3.1 unenv: 1.9.0 - unimport: 3.7.1(rollup@3.29.4) + unimport: 3.7.1(rollup@3.28.1) unplugin: 1.6.0 unplugin-vue-router: 0.7.0(vue-router@4.2.5)(vue@3.4.19) untyped: 1.4.2 @@ -15174,7 +15342,6 @@ packages: - vti - vue-tsc - xml2js - dev: true /nuxt@3.10.1(@types/node@20.8.6)(typescript@5.3.3)(vue-tsc@1.8.27): resolution: {integrity: sha512-1X1DFTGPbVQFF1tjOWYl3qYc3zQww8htknu3qiP8xNzY1MFnDT3Xisxcf6KDe375tHHui0UpXflseL6evlEoMQ==} @@ -15192,7 +15359,7 @@ packages: '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 1.0.8(nuxt@3.10.1) '@nuxt/kit': 3.10.1 - '@nuxt/schema': 3.10.1(rollup@3.29.4) + '@nuxt/schema': 3.10.1 '@nuxt/telemetry': 2.5.3 '@nuxt/ui-templates': 1.3.1 '@nuxt/vite-builder': 3.10.1(@types/node@20.8.6)(typescript@5.3.3)(vue-tsc@1.8.27)(vue@3.4.19) @@ -15237,7 +15404,7 @@ packages: uncrypto: 0.1.3 unctx: 2.3.1 unenv: 1.9.0 - unimport: 3.7.1(rollup@3.29.4) + unimport: 3.7.1(rollup@3.28.1) unplugin: 1.6.0 unplugin-vue-router: 0.7.0(vue-router@4.2.5)(vue@3.4.19) untyped: 1.4.2 @@ -16874,7 +17041,6 @@ packages: rollup: 3.28.1 source-map: 0.7.4 yargs: 17.7.2 - dev: true /rollup-plugin-visualizer@5.12.0(rollup@3.29.4): resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} @@ -18789,8 +18955,8 @@ packages: vite: optional: true dependencies: - '@unocss/astro': 0.58.5(rollup@3.29.4) - '@unocss/cli': 0.58.5(rollup@3.29.4) + '@unocss/astro': 0.58.5 + '@unocss/cli': 0.58.5 '@unocss/core': 0.58.5 '@unocss/extractor-arbitrary-variants': 0.58.5 '@unocss/postcss': 0.58.5(postcss@8.4.35) @@ -18808,8 +18974,8 @@ packages: '@unocss/transformer-compile-class': 0.58.5 '@unocss/transformer-directives': 0.58.5 '@unocss/transformer-variant-group': 0.58.5 - '@unocss/vite': 0.58.5(rollup@3.29.4) - '@unocss/webpack': 0.58.5(rollup@3.29.4) + '@unocss/vite': 0.58.5 + '@unocss/webpack': 0.58.5 transitivePeerDependencies: - postcss - rollup @@ -18922,9 +19088,9 @@ packages: optional: true dependencies: '@babel/types': 7.23.9 - '@rollup/pluginutils': 5.1.0(rollup@3.29.4) - '@vue-macros/common': 1.8.0(rollup@3.29.4)(vue@3.4.19) - ast-walker-scope: 0.5.0(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) + '@vue-macros/common': 1.8.0(vue@3.4.19) + ast-walker-scope: 0.5.0 chokidar: 3.6.0 fast-glob: 3.3.2 json5: 2.2.3 @@ -19381,58 +19547,6 @@ packages: vscode-uri: 3.0.7 vue-tsc: 1.8.27(typescript@5.3.3) - /vite-plugin-checker@0.6.4(typescript@5.3.3)(vite@5.0.12)(vue-tsc@1.8.27): - resolution: {integrity: sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==} - engines: {node: '>=14.16'} - peerDependencies: - eslint: '>=7' - meow: ^9.0.0 - optionator: ^0.9.1 - stylelint: '>=13' - typescript: '*' - vite: ^5.0.12 - vls: '*' - vti: '*' - vue-tsc: '>=1.3.9' - peerDependenciesMeta: - eslint: - optional: true - meow: - optional: true - optionator: - optional: true - stylelint: - optional: true - typescript: - optional: true - vite: - optional: true - vls: - optional: true - vti: - optional: true - vue-tsc: - optional: true - dependencies: - '@babel/code-frame': 7.23.5 - 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 - semver: 7.6.0 - strip-ansi: 6.0.1 - tiny-invariant: 1.2.0 - typescript: 5.3.3 - vite: 5.0.12(@types/node@20.8.6) - vscode-languageclient: 7.0.0 - vscode-languageserver: 7.0.0 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 - vue-tsc: 1.8.27(typescript@5.3.3) - /vite-plugin-inspect@0.8.1(@nuxt/kit@3.10.1): resolution: {integrity: sha512-oPBPVGp6tBd5KdY/qY6lrbLXqrbHRG0hZLvEaJfiZ/GQfDB+szRuLHblQh1oi1Hhh8GeLit/50l4xfs2SA+TCA==} engines: {node: '>=14'} @@ -19447,7 +19561,7 @@ packages: dependencies: '@antfu/utils': 0.7.7 '@nuxt/kit': 3.10.1 - '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) debug: 4.3.4 error-stack-parser-es: 0.1.1 fs-extra: 11.2.0