Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c605384356 | ||
|
|
a7602c9659 | ||
|
|
8b5da6762c | ||
|
|
ef3a090647 | ||
|
|
c4639c2020 | ||
|
|
dd0ee35085 | ||
|
|
3bc7729646 | ||
| 2deac88c0e |
@@ -3,4 +3,8 @@
|
|||||||
export default defineNuxtConfig({
|
export default defineNuxtConfig({
|
||||||
extends: ['..'],
|
extends: ['..'],
|
||||||
compatibilityDate: '2025-07-15',
|
compatibilityDate: '2025-07-15',
|
||||||
|
// An app without pages: vue-seo-layer's HTML sitemap pages would be its
|
||||||
|
// only routes and turn the router on, so every other path would answer
|
||||||
|
// 404. A site with pages keeps them.
|
||||||
|
seo: { htmlSitemap: false },
|
||||||
})
|
})
|
||||||
|
|||||||
23
README.md
23
README.md
@@ -3,13 +3,15 @@
|
|||||||
A Nuxt 4 layer that renders a menu of the SummerCMS menu plugin as an accessible site navigation.
|
A Nuxt 4 layer that renders a menu of the SummerCMS menu plugin as an accessible site navigation.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pnpm add git+https://git.golem15.com/golem15/vue-menu-layer.git#v0.1.0
|
pnpm add git+https://git.golem15.com/golem15/vue-menu-layer.git#v0.5.0
|
||||||
```
|
```
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The layer is consumed with `extends: ['vue-menu-layer']`. It reads one route of the menu plugin's anonymous API, `GET /_menu/api/v1/menus/{code}`, during SSR, so the first paint already has the menu, and renders it with `<MenuNav code="…">`. Editors manage menus in the SummerCMS admin; the site needs no menu data of its own.
|
The layer is consumed with `extends: ['vue-menu-layer']`. It reads one route of the menu plugin's anonymous API, `GET /_menu/api/v1/menus/{code}`, during SSR, so the first paint already has the menu, and renders it with `<MenuNav code="…">`. Editors manage menus in the SummerCMS admin; the site needs no menu data of its own.
|
||||||
|
|
||||||
|
The layer extends [vue-seo-layer](https://git.golem15.com/golem15/vue-seo-layer), which sets every page's head from the SummerCMS SEO plugin and serves the shared site cache purge route; an app that extends vue-menu-layer gets it with no extra entry in `extends`.
|
||||||
|
|
||||||
The layer is neutral: it ships no site colours, no site copy and no Nuxt modules. Its look comes from `--menu-*` CSS custom properties, which an app overrides, and every component can be replaced by a file of the same name in the app.
|
The layer is neutral: it ships no site colours, no site copy and no Nuxt modules. Its look comes from `--menu-*` CSS custom properties, which an app overrides, and every component can be replaced by a file of the same name in the app.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
@@ -20,6 +22,7 @@ The layer is neutral: it ships no site colours, no site copy and no Nuxt modules
|
|||||||
- **Active state**: the entry whose URL path equals the current route path (decoded, query, hash and trailing slash ignored; an absolute URL only on the request host) gets `aria-current="page"` and `menu-nav__link--active`; its ancestors get `menu-nav__item--trail`.
|
- **Active state**: the entry whose URL path equals the current route path (decoded, query, hash and trailing slash ignored; an absolute URL only on the request host) gets `aria-current="page"` and `menu-nav__link--active`; its ancestors get `menu-nav__item--trail`.
|
||||||
- **Dividers**: `aria-hidden` list items, a horizontal line in panels and a short vertical line at the top level on the desktop.
|
- **Dividers**: `aria-hidden` list items, a horizontal line in panels and a short vertical line at the top level on the desktop.
|
||||||
- **Empty states**: a missing menu (404), a failed request or a menu without entries renders nothing, or the `#fallback` slot. There is never an empty `<nav>`.
|
- **Empty states**: a missing menu (404), a failed request or a menu without entries renders nothing, or the `#fallback` slot. There is never an empty `<nav>`.
|
||||||
|
- **Site cache purge**: vue-seo-layer's shared route `POST /api/__site__/cache/purge` drops the site's route cache when the backend saves, deletes or reorders a menu or menu entry (or a FAQ or post, through the other core layers). See [Site cache purge](#site-cache-purge).
|
||||||
- **Rate limits**: server-side fetches forward the visitor's `x-forwarded-for` (also on route-cached renders), so the API's per-client throttle sees visitors, not the Nuxt server.
|
- **Rate limits**: server-side fetches forward the visitor's `x-forwarded-for` (also on route-cached renders), so the API's per-client throttle sees visitors, not the Nuxt server.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -66,8 +69,26 @@ Slots:
|
|||||||
| `runtimeConfig.menu.apiBase` | `http://127.0.0.1:8096/_menu/api/v1` | `NUXT_MENU_API_BASE` (server only, used for SSR) |
|
| `runtimeConfig.menu.apiBase` | `http://127.0.0.1:8096/_menu/api/v1` | `NUXT_MENU_API_BASE` (server only, used for SSR) |
|
||||||
| `runtimeConfig.public.menu.apiBase` | `/_menu/api/v1` | `NUXT_PUBLIC_MENU_API_BASE` (browser, same origin) |
|
| `runtimeConfig.public.menu.apiBase` | `/_menu/api/v1` | `NUXT_PUBLIC_MENU_API_BASE` (browser, same origin) |
|
||||||
|
|
||||||
|
The purge settings (`runtimeConfig.cachePurge.token`, `NUXT_CACHE_PURGE_TOKEN`; `cachePurge.allowProxied`, `NUXT_CACHE_PURGE_ALLOW_PROXIED`; the deprecated `siteCache.*` names) and the SEO options (`seo.*`, `NUXT_SEO_API_BASE` and the rest) are vue-seo-layer's; see its README.
|
||||||
|
|
||||||
The base URLs always come from runtime config, never from request input. In production the web server routes `/_menu/` to the SummerCMS binary.
|
The base URLs always come from runtime config, never from request input. In production the web server routes `/_menu/` to the SummerCMS binary.
|
||||||
|
|
||||||
|
## Site cache purge
|
||||||
|
|
||||||
|
The purge route `POST /api/__site__/cache/purge` that the SummerCMS backend calls after an admin save commits lives in vue-seo-layer: one copy for every layer, which also empties the SEO layer's resolve cache. Its contract is unchanged (`Authorization: Bearer <NUXT_CACHE_PURGE_TOKEN>`, body `{"kind":"<kind>","slug":"<slug>"}`, answer `{"purged": <n>}`, 404 without a token of at least 32 characters, 401 for a wrong token, proxied requests refused unless `NUXT_CACHE_PURGE_ALLOW_PROXIED=true`). Set the token and the backend's `site_cache.purge_url` as vue-seo-layer's README describes.
|
||||||
|
|
||||||
|
### Upgrading from 0.4
|
||||||
|
|
||||||
|
- The layer extends vue-seo-layer. Nothing is needed in the app's `extends`, but every page now resolves through the SEO plugin (`GET /_seo/api/v1/resolve`) and takes its head from the answer; set `NUXT_SEO_API_BASE` when the backend is not on `http://127.0.0.1:8096`, or `seo: { cms: false }` for a site without the SEO plugin.
|
||||||
|
- `server/api/__site__/cache/purge.post.ts`, `server/lib/siteCachePurge.ts` and `server/plugins/site-cache-purge.ts` are removed from this layer: the same route, library and plugin come from vue-seo-layer, with the same environment variables. An app that imported `server/lib/siteCachePurge.ts` from this layer imports it from vue-seo-layer.
|
||||||
|
- **HTML sitemap pages.** The layer brings vue-seo-layer's HTML sitemap pages (pl `/mapa-strony`, en `/sitemap` by default, set in `seo.htmlSitemap.paths`). An app that renders its pages through a root catch-all (`pages/[...slug].vue`, as with the pages plugin) gets none, so a CMS page at such a path is not shadowed, unless it sets `seo.htmlSitemap.overCatchAll: true`; an app with its own page at such a path keeps its page; `seo: { htmlSitemap: false }` turns them off. An app without pages of its own (only `app.vue`) gets none and needs no setting.
|
||||||
|
|
||||||
|
### Upgrading from 0.3
|
||||||
|
|
||||||
|
- Rename `NUXT_SITE_CACHE_PURGE_TOKEN` to `NUXT_CACHE_PURGE_TOKEN` and `NUXT_SITE_CACHE_ALLOW_PROXIED` to `NUXT_CACHE_PURGE_ALLOW_PROXIED` in the site's environment. The old names keep working through 0.4.x (a non-empty new token wins) and are removed in the next minor release.
|
||||||
|
- Why: nuxt-site-config publishes every `NUXT_SITE_*` variable in the page payload, so in a site with nuxt-site-config a token set under `NUXT_SITE_CACHE_PURGE_TOKEN` appeared in every page as `cachePurgeToken`. From 0.4 the layer strips both keys from the site config even under the old names.
|
||||||
|
- Rotate a token that was ever set under `NUXT_SITE_CACHE_PURGE_TOKEN`: earlier versions published it. Set the new value in the site's `NUXT_CACHE_PURGE_TOKEN` and in the backend's `site_cache.purge_token`, then restart both.
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
The layer expects the menu plugin's public API:
|
The layer expects the menu plugin's public API:
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
//
|
//
|
||||||
// Every path below is absolute and built from this file's directory: a
|
// Every path below is absolute and built from this file's directory: a
|
||||||
// relative or ~ path in a layer config resolves against the consuming
|
// relative or ~ path in a layer config resolves against the consuming
|
||||||
// project, not the layer. The layer declares no Nuxt modules.
|
// project, not the layer. The layer declares no Nuxt modules; it extends
|
||||||
|
// vue-seo-layer, which owns the page head and the shared site cache purge
|
||||||
|
// route POST /api/__site__/cache/purge.
|
||||||
import { fileURLToPath } from 'node:url'
|
import { fileURLToPath } from 'node:url'
|
||||||
|
|
||||||
const currentDir = fileURLToPath(new URL('.', import.meta.url))
|
const currentDir = fileURLToPath(new URL('.', import.meta.url))
|
||||||
@@ -13,6 +15,9 @@ export default defineNuxtConfig({
|
|||||||
compatibilityDate: '2025-07-15',
|
compatibilityDate: '2025-07-15',
|
||||||
devtools: { enabled: false },
|
devtools: { enabled: false },
|
||||||
|
|
||||||
|
// Resolved from this layer's own node_modules.
|
||||||
|
extends: ['vue-seo-layer'],
|
||||||
|
|
||||||
// Tokens first, then the neutral styles that use them. The app's own css
|
// Tokens first, then the neutral styles that use them. The app's own css
|
||||||
// array loads after these, so its token overrides win.
|
// array loads after these, so its token overrides win.
|
||||||
css: [`${currentDir}app/assets/css/menu-tokens.css`, `${currentDir}app/assets/css/menu-base.css`],
|
css: [`${currentDir}app/assets/css/menu-tokens.css`, `${currentDir}app/assets/css/menu-base.css`],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vue-menu-layer",
|
"name": "vue-menu-layer",
|
||||||
"version": "0.1.0",
|
"version": "0.5.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./nuxt.config.ts",
|
"main": "./nuxt.config.ts",
|
||||||
@@ -14,6 +14,9 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=22.18"
|
"node": ">=22.18"
|
||||||
},
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"vue-seo-layer": "git+https://git.golem15.com/golem15/vue-seo-layer.git#v0.2.0"
|
||||||
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"nuxt": "4.4.8"
|
"nuxt": "4.4.8"
|
||||||
},
|
},
|
||||||
|
|||||||
206
pnpm-lock.yaml
generated
206
pnpm-lock.yaml
generated
@@ -7,10 +7,14 @@ settings:
|
|||||||
importers:
|
importers:
|
||||||
|
|
||||||
.:
|
.:
|
||||||
|
dependencies:
|
||||||
|
vue-seo-layer:
|
||||||
|
specifier: git+https://git.golem15.com/golem15/vue-seo-layer.git#v0.2.0
|
||||||
|
version: git+https://git.golem15.com/golem15/vue-seo-layer.git#3868f3d74dcebb7a35af43f1defcd68cfe2933b7(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))
|
||||||
devDependencies:
|
devDependencies:
|
||||||
nuxt:
|
nuxt:
|
||||||
specifier: 4.4.8
|
specifier: 4.4.8
|
||||||
version: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1)(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
version: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
typescript:
|
typescript:
|
||||||
specifier: 5.9.3
|
specifier: 5.9.3
|
||||||
version: 5.9.3
|
version: 5.9.3
|
||||||
@@ -3256,6 +3260,13 @@ packages:
|
|||||||
vite:
|
vite:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
vue-seo-layer@git+https://git.golem15.com/golem15/vue-seo-layer.git#3868f3d74dcebb7a35af43f1defcd68cfe2933b7:
|
||||||
|
resolution: {commit: 3868f3d74dcebb7a35af43f1defcd68cfe2933b7, repo: https://git.golem15.com/golem15/vue-seo-layer.git, type: git}
|
||||||
|
version: 0.2.0
|
||||||
|
engines: {node: '>=22.18'}
|
||||||
|
peerDependencies:
|
||||||
|
nuxt: 4.4.8
|
||||||
|
|
||||||
vue@3.5.35:
|
vue@3.5.35:
|
||||||
resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==}
|
resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -3350,20 +3361,20 @@ snapshots:
|
|||||||
|
|
||||||
'@babel/compat-data@7.29.7': {}
|
'@babel/compat-data@7.29.7': {}
|
||||||
|
|
||||||
'@babel/core@7.29.7':
|
'@babel/core@7.29.7(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.29.7
|
'@babel/code-frame': 7.29.7
|
||||||
'@babel/generator': 7.29.8
|
'@babel/generator': 7.29.8
|
||||||
'@babel/helper-compilation-targets': 7.29.7
|
'@babel/helper-compilation-targets': 7.29.7
|
||||||
'@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
|
'@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
|
||||||
'@babel/helpers': 7.29.10
|
'@babel/helpers': 7.29.10
|
||||||
'@babel/parser': 7.29.9
|
'@babel/parser': 7.29.9
|
||||||
'@babel/template': 7.29.7
|
'@babel/template': 7.29.7
|
||||||
'@babel/traverse': 7.29.10
|
'@babel/traverse': 7.29.10(supports-color@10.2.2)
|
||||||
'@babel/types': 7.29.8
|
'@babel/types': 7.29.8
|
||||||
'@jridgewell/remapping': 2.3.5
|
'@jridgewell/remapping': 2.3.5
|
||||||
convert-source-map: 2.0.0
|
convert-source-map: 2.0.0
|
||||||
debug: 4.4.3
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
gensync: 1.0.0-beta.2
|
gensync: 1.0.0-beta.2
|
||||||
json5: 2.2.3
|
json5: 2.2.3
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
@@ -3390,41 +3401,41 @@ snapshots:
|
|||||||
lru-cache: 5.1.1
|
lru-cache: 5.1.1
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
|
|
||||||
'@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)':
|
'@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-annotate-as-pure': 7.29.7
|
'@babel/helper-annotate-as-pure': 7.29.7
|
||||||
'@babel/helper-member-expression-to-functions': 7.29.7
|
'@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-optimise-call-expression': 7.29.7
|
'@babel/helper-optimise-call-expression': 7.29.7
|
||||||
'@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7)
|
'@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
|
||||||
'@babel/helper-skip-transparent-expression-wrappers': 7.29.7
|
'@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/traverse': 7.29.10
|
'@babel/traverse': 7.29.10(supports-color@10.2.2)
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/helper-globals@7.29.7': {}
|
'@babel/helper-globals@7.29.7': {}
|
||||||
|
|
||||||
'@babel/helper-member-expression-to-functions@7.29.7':
|
'@babel/helper-member-expression-to-functions@7.29.7(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/traverse': 7.29.10
|
'@babel/traverse': 7.29.10(supports-color@10.2.2)
|
||||||
'@babel/types': 7.29.8
|
'@babel/types': 7.29.8
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/helper-module-imports@7.29.7':
|
'@babel/helper-module-imports@7.29.7(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/traverse': 7.29.10
|
'@babel/traverse': 7.29.10(supports-color@10.2.2)
|
||||||
'@babel/types': 7.29.8
|
'@babel/types': 7.29.8
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)':
|
'@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-module-imports': 7.29.7
|
'@babel/helper-module-imports': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-validator-identifier': 7.29.7
|
'@babel/helper-validator-identifier': 7.29.7
|
||||||
'@babel/traverse': 7.29.10
|
'@babel/traverse': 7.29.10(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -3434,18 +3445,18 @@ snapshots:
|
|||||||
|
|
||||||
'@babel/helper-plugin-utils@7.29.7': {}
|
'@babel/helper-plugin-utils@7.29.7': {}
|
||||||
|
|
||||||
'@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)':
|
'@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-member-expression-to-functions': 7.29.7
|
'@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-optimise-call-expression': 7.29.7
|
'@babel/helper-optimise-call-expression': 7.29.7
|
||||||
'@babel/traverse': 7.29.10
|
'@babel/traverse': 7.29.10(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@babel/helper-skip-transparent-expression-wrappers@7.29.7':
|
'@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/traverse': 7.29.10
|
'@babel/traverse': 7.29.10(supports-color@10.2.2)
|
||||||
'@babel/types': 7.29.8
|
'@babel/types': 7.29.8
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -3473,24 +3484,24 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@babel/types': 8.0.6
|
'@babel/types': 8.0.6
|
||||||
|
|
||||||
'@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)':
|
'@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-plugin-utils': 7.29.7
|
'@babel/helper-plugin-utils': 7.29.7
|
||||||
|
|
||||||
'@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)':
|
'@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-plugin-utils': 7.29.7
|
'@babel/helper-plugin-utils': 7.29.7
|
||||||
|
|
||||||
'@babel/plugin-transform-typescript@7.29.9(@babel/core@7.29.7)':
|
'@babel/plugin-transform-typescript@7.29.9(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-annotate-as-pure': 7.29.7
|
'@babel/helper-annotate-as-pure': 7.29.7
|
||||||
'@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7)
|
'@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
|
||||||
'@babel/helper-plugin-utils': 7.29.7
|
'@babel/helper-plugin-utils': 7.29.7
|
||||||
'@babel/helper-skip-transparent-expression-wrappers': 7.29.7
|
'@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
|
'@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -3500,7 +3511,7 @@ snapshots:
|
|||||||
'@babel/parser': 7.29.9
|
'@babel/parser': 7.29.9
|
||||||
'@babel/types': 7.29.8
|
'@babel/types': 7.29.8
|
||||||
|
|
||||||
'@babel/traverse@7.29.10':
|
'@babel/traverse@7.29.10(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.29.7
|
'@babel/code-frame': 7.29.7
|
||||||
'@babel/generator': 7.29.8
|
'@babel/generator': 7.29.8
|
||||||
@@ -3508,7 +3519,7 @@ snapshots:
|
|||||||
'@babel/parser': 7.29.9
|
'@babel/parser': 7.29.9
|
||||||
'@babel/template': 7.29.7
|
'@babel/template': 7.29.7
|
||||||
'@babel/types': 7.29.8
|
'@babel/types': 7.29.8
|
||||||
debug: 4.4.3
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -3690,19 +3701,19 @@ snapshots:
|
|||||||
'@jridgewell/resolve-uri': 3.1.2
|
'@jridgewell/resolve-uri': 3.1.2
|
||||||
'@jridgewell/sourcemap-codec': 1.6.0
|
'@jridgewell/sourcemap-codec': 1.6.0
|
||||||
|
|
||||||
'@kwsites/file-exists@1.1.1':
|
'@kwsites/file-exists@1.1.1(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@kwsites/promise-deferred@1.1.1': {}
|
'@kwsites/promise-deferred@1.1.1': {}
|
||||||
|
|
||||||
'@mapbox/node-pre-gyp@2.0.3':
|
'@mapbox/node-pre-gyp@2.0.3(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
consola: 3.4.2
|
consola: 3.4.2
|
||||||
detect-libc: 2.1.2
|
detect-libc: 2.1.2
|
||||||
https-proxy-agent: 7.0.6
|
https-proxy-agent: 7.0.6(supports-color@10.2.2)
|
||||||
node-fetch: 2.7.0
|
node-fetch: 2.7.0
|
||||||
nopt: 8.1.0
|
nopt: 8.1.0
|
||||||
semver: 7.8.5
|
semver: 7.8.5
|
||||||
@@ -3733,7 +3744,7 @@ snapshots:
|
|||||||
'@nodelib/fs.scandir': 2.1.5
|
'@nodelib/fs.scandir': 2.1.5
|
||||||
fastq: 1.20.3
|
fastq: 1.20.3
|
||||||
|
|
||||||
'@nuxt/cli@3.37.0(@nuxt/schema@4.4.8)(cac@6.7.14)(magicast@0.5.5)':
|
'@nuxt/cli@3.37.0(@nuxt/schema@4.4.8)(cac@6.7.14)(magicast@0.5.5)(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@bomb.sh/tab': 0.0.19(cac@6.7.14)(citty@0.2.2)
|
'@bomb.sh/tab': 0.0.19(cac@6.7.14)(citty@0.2.2)
|
||||||
'@clack/prompts': 1.8.1
|
'@clack/prompts': 1.8.1
|
||||||
@@ -3741,7 +3752,7 @@ snapshots:
|
|||||||
citty: 0.2.2
|
citty: 0.2.2
|
||||||
confbox: 0.2.4
|
confbox: 0.2.4
|
||||||
consola: 3.4.2
|
consola: 3.4.2
|
||||||
debug: 4.4.3
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
defu: 6.1.7
|
defu: 6.1.7
|
||||||
exsolve: 1.1.3
|
exsolve: 1.1.3
|
||||||
fuse.js: 7.5.0
|
fuse.js: 7.5.0
|
||||||
@@ -3802,7 +3813,7 @@ snapshots:
|
|||||||
pkg-types: 2.3.3
|
pkg-types: 2.3.3
|
||||||
semver: 7.8.5
|
semver: 7.8.5
|
||||||
|
|
||||||
'@nuxt/devtools@3.4.2(@nuxt/schema@4.4.8)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1)(jiti@2.7.0)(magic-string@0.30.21)(mlly@1.8.2)(oxc-parser@0.133.0)(unplugin@3.4.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))':
|
'@nuxt/devtools@3.4.2(@nuxt/schema@4.4.8)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@0.30.21)(mlly@1.8.2)(oxc-parser@0.133.0)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.4.8)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@0.30.21)(mlly@1.8.2)(oxc-parser@0.133.0)(unplugin@3.4.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
'@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.4.8)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@0.30.21)(mlly@1.8.2)(oxc-parser@0.133.0)(unplugin@3.4.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
'@nuxt/devtools-wizard': 3.4.2
|
'@nuxt/devtools-wizard': 3.4.2
|
||||||
@@ -3828,11 +3839,11 @@ snapshots:
|
|||||||
perfect-debounce: 2.1.0
|
perfect-debounce: 2.1.0
|
||||||
pkg-types: 2.3.3
|
pkg-types: 2.3.3
|
||||||
semver: 7.8.5
|
semver: 7.8.5
|
||||||
simple-git: 3.36.0
|
simple-git: 3.36.0(supports-color@10.2.2)
|
||||||
sirv: 3.0.2
|
sirv: 3.0.2
|
||||||
structured-clone-es: 2.0.1
|
structured-clone-es: 2.0.1
|
||||||
tinyglobby: 0.2.17
|
tinyglobby: 0.2.17
|
||||||
unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
|
unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))
|
||||||
vite: 7.3.7(jiti@2.7.0)(terser@5.51.2)
|
vite: 7.3.7(jiti@2.7.0)(terser@5.51.2)
|
||||||
vite-plugin-inspect: 11.4.1(@nuxt/kit@4.6.0(@nuxt/schema@4.4.8)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@0.30.21)(mlly@1.8.2)(oxc-parser@0.133.0)(unplugin@3.4.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))))(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
vite-plugin-inspect: 11.4.1(@nuxt/kit@4.6.0(@nuxt/schema@4.4.8)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@0.30.21)(mlly@1.8.2)(oxc-parser@0.133.0)(unplugin@3.4.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))))(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
vite-plugin-vue-tracer: 1.5.0(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))
|
vite-plugin-vue-tracer: 1.5.0(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))
|
||||||
@@ -3930,7 +3941,7 @@ snapshots:
|
|||||||
- magic-string
|
- magic-string
|
||||||
- unplugin
|
- unplugin
|
||||||
|
|
||||||
'@nuxt/nitro-server@4.4.8(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1)(magicast@0.5.5)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1)(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(oxc-parser@0.133.0)(rollup@4.64.2)(srvx@0.11.22)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))':
|
'@nuxt/nitro-server@4.4.8(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(oxc-parser@0.133.0)(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/devalue': 2.0.2
|
'@nuxt/devalue': 2.0.2
|
||||||
'@nuxt/kit': 4.4.8(magicast@0.5.5)
|
'@nuxt/kit': 4.4.8(magicast@0.5.5)
|
||||||
@@ -3947,8 +3958,8 @@ snapshots:
|
|||||||
impound: 1.2.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
impound: 1.2.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
klona: 2.0.6
|
klona: 2.0.6
|
||||||
mocked-exports: 0.1.1
|
mocked-exports: 0.1.1
|
||||||
nitropack: 2.13.4(oxc-parser@0.133.0)(srvx@0.11.22)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
nitropack: 2.13.4(oxc-parser@0.133.0)(srvx@0.11.22)(supports-color@10.2.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
nuxt: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1)(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
nuxt: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
nypm: 0.6.10
|
nypm: 0.6.10
|
||||||
ohash: 2.0.12
|
ohash: 2.0.12
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
@@ -3956,12 +3967,12 @@ snapshots:
|
|||||||
std-env: 4.3.0
|
std-env: 4.3.0
|
||||||
ufo: 1.6.4
|
ufo: 1.6.4
|
||||||
unctx: 2.5.0
|
unctx: 2.5.0
|
||||||
unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
|
unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))
|
||||||
vue: 3.5.35(typescript@5.9.3)
|
vue: 3.5.35(typescript@5.9.3)
|
||||||
vue-bundle-renderer: 2.4.0
|
vue-bundle-renderer: 2.4.0
|
||||||
vue-devtools-stub: 0.1.0
|
vue-devtools-stub: 0.1.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
|
'@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@azure/app-configuration'
|
- '@azure/app-configuration'
|
||||||
- '@azure/cosmos'
|
- '@azure/cosmos'
|
||||||
@@ -4026,12 +4037,12 @@ snapshots:
|
|||||||
rc9: 3.1.0
|
rc9: 3.1.0
|
||||||
std-env: 4.3.0
|
std-env: 4.3.0
|
||||||
|
|
||||||
'@nuxt/vite-builder@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(magicast@0.5.5)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1)(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(terser@5.51.2)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))':
|
'@nuxt/vite-builder@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(magicast@0.5.5)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/kit': 4.4.8(magicast@0.5.5)
|
'@nuxt/kit': 4.4.8(magicast@0.5.5)
|
||||||
'@rollup/plugin-replace': 6.0.3(rollup@4.64.2)
|
'@rollup/plugin-replace': 6.0.3(rollup@4.64.2)
|
||||||
'@vitejs/plugin-vue': 6.0.9(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))
|
'@vitejs/plugin-vue': 6.0.9(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))
|
||||||
'@vitejs/plugin-vue-jsx': 5.1.6(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))
|
'@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))
|
||||||
autoprefixer: 10.6.1(postcss@8.5.29)
|
autoprefixer: 10.6.1(postcss@8.5.29)
|
||||||
consola: 3.4.2
|
consola: 3.4.2
|
||||||
cssnano: 8.0.10(postcss@8.5.29)
|
cssnano: 8.0.10(postcss@8.5.29)
|
||||||
@@ -4044,7 +4055,7 @@ snapshots:
|
|||||||
magic-string: 0.30.21
|
magic-string: 0.30.21
|
||||||
mlly: 1.8.2
|
mlly: 1.8.2
|
||||||
mocked-exports: 0.1.1
|
mocked-exports: 0.1.1
|
||||||
nuxt: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1)(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
nuxt: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
nypm: 0.6.10
|
nypm: 0.6.10
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
pkg-types: 2.3.3
|
pkg-types: 2.3.3
|
||||||
@@ -4053,13 +4064,14 @@ snapshots:
|
|||||||
std-env: 4.3.0
|
std-env: 4.3.0
|
||||||
ufo: 1.6.4
|
ufo: 1.6.4
|
||||||
unenv: 2.0.0-rc.24
|
unenv: 2.0.0-rc.24
|
||||||
|
unplugin: 2.3.11
|
||||||
vite: 7.3.7(jiti@2.7.0)(terser@5.51.2)
|
vite: 7.3.7(jiti@2.7.0)(terser@5.51.2)
|
||||||
vite-node: 5.3.0(jiti@2.7.0)(terser@5.51.2)
|
vite-node: 5.3.0(jiti@2.7.0)(terser@5.51.2)
|
||||||
vite-plugin-checker: 0.14.5(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
vite-plugin-checker: 0.14.5(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
vue: 3.5.35(typescript@5.9.3)
|
vue: 3.5.35(typescript@5.9.3)
|
||||||
vue-bundle-renderer: 2.4.0
|
vue-bundle-renderer: 2.4.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
|
'@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
|
||||||
rollup-plugin-visualizer: 7.1.1(rollup@4.64.2)
|
rollup-plugin-visualizer: 7.1.1(rollup@4.64.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@biomejs/biome'
|
- '@biomejs/biome'
|
||||||
@@ -4467,9 +4479,9 @@ snapshots:
|
|||||||
unhead: 2.1.17
|
unhead: 2.1.17
|
||||||
vue: 3.5.35(typescript@5.9.3)
|
vue: 3.5.35(typescript@5.9.3)
|
||||||
|
|
||||||
'@vercel/nft@1.11.0(rollup@4.64.2)':
|
'@vercel/nft@1.11.0(rollup@4.64.2)(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@mapbox/node-pre-gyp': 2.0.3
|
'@mapbox/node-pre-gyp': 2.0.3(supports-color@10.2.2)
|
||||||
'@rollup/pluginutils': 5.4.0(rollup@4.64.2)
|
'@rollup/pluginutils': 5.4.0(rollup@4.64.2)
|
||||||
acorn: 8.19.0
|
acorn: 8.19.0
|
||||||
acorn-import-attributes: 1.9.5(acorn@8.19.0)
|
acorn-import-attributes: 1.9.5(acorn@8.19.0)
|
||||||
@@ -4486,13 +4498,13 @@ snapshots:
|
|||||||
- rollup
|
- rollup
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@vitejs/plugin-vue-jsx@5.1.6(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))':
|
'@vitejs/plugin-vue-jsx@5.1.6(supports-color@10.2.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
|
'@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
|
||||||
'@babel/plugin-transform-typescript': 7.29.9(@babel/core@7.29.7)
|
'@babel/plugin-transform-typescript': 7.29.9(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
|
||||||
'@rolldown/pluginutils': 1.0.1
|
'@rolldown/pluginutils': 1.0.1
|
||||||
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7)
|
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
|
||||||
vite: 7.3.7(jiti@2.7.0)(terser@5.51.2)
|
vite: 7.3.7(jiti@2.7.0)(terser@5.51.2)
|
||||||
vue: 3.5.35(typescript@5.9.3)
|
vue: 3.5.35(typescript@5.9.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -4516,27 +4528,27 @@ snapshots:
|
|||||||
|
|
||||||
'@vue/babel-helper-vue-transform-on@2.0.1': {}
|
'@vue/babel-helper-vue-transform-on@2.0.1': {}
|
||||||
|
|
||||||
'@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7)':
|
'@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/helper-module-imports': 7.29.7
|
'@babel/helper-module-imports': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-plugin-utils': 7.29.7
|
'@babel/helper-plugin-utils': 7.29.7
|
||||||
'@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
|
'@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
|
||||||
'@babel/template': 7.29.7
|
'@babel/template': 7.29.7
|
||||||
'@babel/traverse': 7.29.10
|
'@babel/traverse': 7.29.10(supports-color@10.2.2)
|
||||||
'@babel/types': 7.29.8
|
'@babel/types': 7.29.8
|
||||||
'@vue/babel-helper-vue-transform-on': 2.0.1
|
'@vue/babel-helper-vue-transform-on': 2.0.1
|
||||||
'@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7)
|
'@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
|
||||||
'@vue/shared': 3.5.43
|
'@vue/shared': 3.5.43
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7)':
|
'@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.29.7
|
'@babel/code-frame': 7.29.7
|
||||||
'@babel/core': 7.29.7
|
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-module-imports': 7.29.7
|
'@babel/helper-module-imports': 7.29.7(supports-color@10.2.2)
|
||||||
'@babel/helper-plugin-utils': 7.29.7
|
'@babel/helper-plugin-utils': 7.29.7
|
||||||
'@babel/parser': 7.29.9
|
'@babel/parser': 7.29.9
|
||||||
'@vue/compiler-sfc': 3.5.43
|
'@vue/compiler-sfc': 3.5.43
|
||||||
@@ -4999,9 +5011,11 @@ snapshots:
|
|||||||
|
|
||||||
db0@0.3.4: {}
|
db0@0.3.4: {}
|
||||||
|
|
||||||
debug@4.4.3:
|
debug@4.4.3(supports-color@10.2.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
|
optionalDependencies:
|
||||||
|
supports-color: 10.2.2
|
||||||
|
|
||||||
deepmerge@4.3.1: {}
|
deepmerge@4.3.1: {}
|
||||||
|
|
||||||
@@ -5288,10 +5302,10 @@ snapshots:
|
|||||||
|
|
||||||
http-shutdown@1.2.2: {}
|
http-shutdown@1.2.2: {}
|
||||||
|
|
||||||
https-proxy-agent@7.0.6:
|
https-proxy-agent@7.0.6(supports-color@10.2.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base: 7.1.4
|
agent-base: 7.1.4
|
||||||
debug: 4.4.3
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -5328,11 +5342,11 @@ snapshots:
|
|||||||
|
|
||||||
ini@4.1.1: {}
|
ini@4.1.1: {}
|
||||||
|
|
||||||
ioredis@5.11.1:
|
ioredis@5.11.1(supports-color@10.2.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ioredis/commands': 1.10.0
|
'@ioredis/commands': 1.10.0
|
||||||
cluster-key-slot: 1.1.1
|
cluster-key-slot: 1.1.1
|
||||||
debug: 4.4.3
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
denque: 2.1.0
|
denque: 2.1.0
|
||||||
redis-errors: 1.2.0
|
redis-errors: 1.2.0
|
||||||
redis-parser: 3.0.0
|
redis-parser: 3.0.0
|
||||||
@@ -5541,7 +5555,7 @@ snapshots:
|
|||||||
|
|
||||||
nanotar@0.3.0: {}
|
nanotar@0.3.0: {}
|
||||||
|
|
||||||
nitropack@2.13.4(oxc-parser@0.133.0)(srvx@0.11.22)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)):
|
nitropack@2.13.4(oxc-parser@0.133.0)(srvx@0.11.22)(supports-color@10.2.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@cloudflare/kv-asset-handler': 0.4.2
|
'@cloudflare/kv-asset-handler': 0.4.2
|
||||||
'@rollup/plugin-alias': 6.0.0(rollup@4.64.2)
|
'@rollup/plugin-alias': 6.0.0(rollup@4.64.2)
|
||||||
@@ -5551,7 +5565,7 @@ snapshots:
|
|||||||
'@rollup/plugin-node-resolve': 16.0.3(rollup@4.64.2)
|
'@rollup/plugin-node-resolve': 16.0.3(rollup@4.64.2)
|
||||||
'@rollup/plugin-replace': 6.0.3(rollup@4.64.2)
|
'@rollup/plugin-replace': 6.0.3(rollup@4.64.2)
|
||||||
'@rollup/plugin-terser': 1.0.0(rollup@4.64.2)
|
'@rollup/plugin-terser': 1.0.0(rollup@4.64.2)
|
||||||
'@vercel/nft': 1.11.0(rollup@4.64.2)
|
'@vercel/nft': 1.11.0(rollup@4.64.2)(supports-color@10.2.2)
|
||||||
archiver: 7.0.1
|
archiver: 7.0.1
|
||||||
c12: 3.3.4(magicast@0.5.5)
|
c12: 3.3.4(magicast@0.5.5)
|
||||||
chokidar: 5.0.0
|
chokidar: 5.0.0
|
||||||
@@ -5575,7 +5589,7 @@ snapshots:
|
|||||||
h3: 1.15.11
|
h3: 1.15.11
|
||||||
hookable: 5.5.3
|
hookable: 5.5.3
|
||||||
httpxy: 0.5.5
|
httpxy: 0.5.5
|
||||||
ioredis: 5.11.1
|
ioredis: 5.11.1(supports-color@10.2.2)
|
||||||
jiti: 2.7.0
|
jiti: 2.7.0
|
||||||
klona: 2.0.6
|
klona: 2.0.6
|
||||||
knitwork: 1.3.0
|
knitwork: 1.3.0
|
||||||
@@ -5598,7 +5612,7 @@ snapshots:
|
|||||||
scule: 1.3.0
|
scule: 1.3.0
|
||||||
semver: 7.8.5
|
semver: 7.8.5
|
||||||
serve-placeholder: 2.0.2
|
serve-placeholder: 2.0.2
|
||||||
serve-static: 2.2.1
|
serve-static: 2.2.1(supports-color@10.2.2)
|
||||||
source-map: 0.7.6
|
source-map: 0.7.6
|
||||||
std-env: 4.3.0
|
std-env: 4.3.0
|
||||||
ufo: 1.6.4
|
ufo: 1.6.4
|
||||||
@@ -5608,7 +5622,7 @@ snapshots:
|
|||||||
unenv: 2.0.0-rc.24
|
unenv: 2.0.0-rc.24
|
||||||
unimport: 6.5.0(esbuild@0.28.2)(oxc-parser@0.133.0)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
unimport: 6.5.0(esbuild@0.28.2)(oxc-parser@0.133.0)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
unplugin-utils: 0.3.2
|
unplugin-utils: 0.3.2
|
||||||
unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
|
unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))
|
||||||
untyped: 2.0.0
|
untyped: 2.0.0
|
||||||
unwasm: 0.5.3
|
unwasm: 0.5.3
|
||||||
youch: 4.1.1
|
youch: 4.1.1
|
||||||
@@ -5689,16 +5703,16 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
boolbase: 1.0.0
|
boolbase: 1.0.0
|
||||||
|
|
||||||
nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1)(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)):
|
nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@dxup/nuxt': 0.4.1(magicast@0.5.5)(typescript@5.9.3)
|
'@dxup/nuxt': 0.4.1(magicast@0.5.5)(typescript@5.9.3)
|
||||||
'@nuxt/cli': 3.37.0(@nuxt/schema@4.4.8)(cac@6.7.14)(magicast@0.5.5)
|
'@nuxt/cli': 3.37.0(@nuxt/schema@4.4.8)(cac@6.7.14)(magicast@0.5.5)(supports-color@10.2.2)
|
||||||
'@nuxt/devtools': 3.4.2(@nuxt/schema@4.4.8)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1)(jiti@2.7.0)(magic-string@0.30.21)(mlly@1.8.2)(oxc-parser@0.133.0)(unplugin@3.4.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))
|
'@nuxt/devtools': 3.4.2(@nuxt/schema@4.4.8)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@0.30.21)(mlly@1.8.2)(oxc-parser@0.133.0)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rollup@4.64.2)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))(vue@3.5.35(typescript@5.9.3))
|
||||||
'@nuxt/kit': 4.4.8(magicast@0.5.5)
|
'@nuxt/kit': 4.4.8(magicast@0.5.5)
|
||||||
'@nuxt/nitro-server': 4.4.8(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1)(magicast@0.5.5)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1)(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(oxc-parser@0.133.0)(rollup@4.64.2)(srvx@0.11.22)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
'@nuxt/nitro-server': 4.4.8(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(db0@0.3.4)(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(oxc-parser@0.133.0)(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
'@nuxt/schema': 4.4.8
|
'@nuxt/schema': 4.4.8
|
||||||
'@nuxt/telemetry': 2.9.1(@nuxt/kit@4.4.8(magicast@0.5.5))
|
'@nuxt/telemetry': 2.9.1(@nuxt/kit@4.4.8(magicast@0.5.5))
|
||||||
'@nuxt/vite-builder': 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(magicast@0.5.5)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1)(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(terser@5.51.2)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))
|
'@nuxt/vite-builder': 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(magicast@0.5.5)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2)))(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))
|
||||||
'@unhead/vue': 2.1.17(vue@3.5.35(typescript@5.9.3))
|
'@unhead/vue': 2.1.17(vue@3.5.35(typescript@5.9.3))
|
||||||
'@vue/shared': 3.5.43
|
'@vue/shared': 3.5.43
|
||||||
chokidar: 5.0.0
|
chokidar: 5.0.0
|
||||||
@@ -6276,9 +6290,9 @@ snapshots:
|
|||||||
|
|
||||||
semver@7.8.5: {}
|
semver@7.8.5: {}
|
||||||
|
|
||||||
send@1.2.1:
|
send@1.2.1(supports-color@10.2.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
etag: 1.8.1
|
etag: 1.8.1
|
||||||
@@ -6300,12 +6314,12 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
defu: 6.1.7
|
defu: 6.1.7
|
||||||
|
|
||||||
serve-static@2.2.1:
|
serve-static@2.2.1(supports-color@10.2.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
parseurl: 1.3.3
|
parseurl: 1.3.3
|
||||||
send: 1.2.1
|
send: 1.2.1(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -6323,13 +6337,13 @@ snapshots:
|
|||||||
|
|
||||||
signal-exit@4.1.0: {}
|
signal-exit@4.1.0: {}
|
||||||
|
|
||||||
simple-git@3.36.0:
|
simple-git@3.36.0(supports-color@10.2.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@kwsites/file-exists': 1.1.1
|
'@kwsites/file-exists': 1.1.1(supports-color@10.2.2)
|
||||||
'@kwsites/promise-deferred': 1.1.1
|
'@kwsites/promise-deferred': 1.1.1
|
||||||
'@simple-git/args-pathspec': 1.0.4
|
'@simple-git/args-pathspec': 1.0.4
|
||||||
'@simple-git/argv-parser': 1.1.1
|
'@simple-git/argv-parser': 1.1.1
|
||||||
debug: 4.4.3
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -6600,7 +6614,7 @@ snapshots:
|
|||||||
escape-string-regexp: 5.0.0
|
escape-string-regexp: 5.0.0
|
||||||
ufo: 1.6.4
|
ufo: 1.6.4
|
||||||
|
|
||||||
unstorage@1.17.5(db0@0.3.4)(ioredis@5.11.1):
|
unstorage@1.17.5(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
anymatch: 3.1.3
|
anymatch: 3.1.3
|
||||||
chokidar: 5.0.0
|
chokidar: 5.0.0
|
||||||
@@ -6612,7 +6626,7 @@ snapshots:
|
|||||||
ufo: 1.6.4
|
ufo: 1.6.4
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
db0: 0.3.4
|
db0: 0.3.4
|
||||||
ioredis: 5.11.1
|
ioredis: 5.11.1(supports-color@10.2.2)
|
||||||
|
|
||||||
untun@0.2.2: {}
|
untun@0.2.2: {}
|
||||||
|
|
||||||
@@ -6765,6 +6779,10 @@ snapshots:
|
|||||||
- unloader
|
- unloader
|
||||||
- webpack
|
- webpack
|
||||||
|
|
||||||
|
vue-seo-layer@git+https://git.golem15.com/golem15/vue-seo-layer.git#3868f3d74dcebb7a35af43f1defcd68cfe2933b7(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))):
|
||||||
|
dependencies:
|
||||||
|
nuxt: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.133.0)(@vue/compiler-sfc@3.5.43)(cac@6.7.14)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(magicast@0.5.5)(rollup-plugin-visualizer@7.1.1(rollup@4.64.2))(rollup@4.64.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.51.2)(typescript@5.9.3)(vite@7.3.7(jiti@2.7.0)(terser@5.51.2))
|
||||||
|
|
||||||
vue@3.5.35(typescript@5.9.3):
|
vue@3.5.35(typescript@5.9.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/compiler-dom': 3.5.35
|
'@vue/compiler-dom': 3.5.35
|
||||||
|
|||||||
@@ -144,7 +144,13 @@ async function main() {
|
|||||||
let nuxt = null
|
let nuxt = null
|
||||||
const failures = /** @type {string[]} */ ([])
|
const failures = /** @type {string[]} */ ([])
|
||||||
try {
|
try {
|
||||||
nuxt = await startNuxtServer({ outputDir: args.output, env: { [API_ENV]: `${api.url}${API_PREFIX}`, ...args.env } })
|
// vue-seo-layer resolves every page through the SEO API; the fixture API
|
||||||
|
// has none and answers 404, so the layer renders without a CMS answer
|
||||||
|
// (fail open) and never reaches a backend on the default port.
|
||||||
|
nuxt = await startNuxtServer({
|
||||||
|
outputDir: args.output,
|
||||||
|
env: { [API_ENV]: `${api.url}${API_PREFIX}`, NUXT_SEO_API_BASE: `${api.url}/_seo/api/v1`, ...args.env },
|
||||||
|
})
|
||||||
for (const line of lines) {
|
for (const line of lines) {
|
||||||
let check
|
let check
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -76,3 +76,59 @@ test('isNotFound reads status, statusCode and response.status', () => {
|
|||||||
assert.equal(isNotFound({ status: 500 }), false)
|
assert.equal(isNotFound({ status: 500 }), false)
|
||||||
assert.equal(isNotFound(null), false)
|
assert.equal(isNotFound(null), false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Plan 06 coverage: useMenuApi picks the base. The composable reads Nuxt
|
||||||
|
// globals and import.meta.server, so the test loads its source with
|
||||||
|
// import.meta.server replaced by a flag, next to the original (its relative
|
||||||
|
// import resolves), with stubbed globals.
|
||||||
|
import { readFileSync, rmSync, writeFileSync } from 'node:fs'
|
||||||
|
import { dirname, join } from 'node:path'
|
||||||
|
import { fileURLToPath, pathToFileURL } from 'node:url'
|
||||||
|
|
||||||
|
type FetchCall = { path: string; opts: { baseURL: string; query?: Record<string, string>; headers?: Record<string, string> } }
|
||||||
|
|
||||||
|
let loads = 0
|
||||||
|
|
||||||
|
async function useMenuApiAs(server: boolean, request: { context?: Record<string, unknown>; xff?: string; peer?: string } = {}) {
|
||||||
|
const calls: FetchCall[] = []
|
||||||
|
const g = globalThis as Record<string, unknown>
|
||||||
|
g.__menuLayerServer = server
|
||||||
|
g.useRuntimeConfig = () => ({ menu: { apiBase: 'http://127.0.0.1:8096/_menu/api/v1' }, public: { menu: { apiBase: '/_menu/api/v1' } } })
|
||||||
|
g.useRequestEvent = () => ({ context: request.context ?? {}, node: { req: { socket: { remoteAddress: request.peer } } } })
|
||||||
|
g.useRequestHeaders = () => (request.xff === undefined ? {} : { 'x-forwarded-for': request.xff })
|
||||||
|
g.$fetch = async (path: string, opts: FetchCall['opts']) => {
|
||||||
|
calls.push({ path, opts })
|
||||||
|
return MENU
|
||||||
|
}
|
||||||
|
const source = join(dirname(fileURLToPath(import.meta.url)), '..', 'app', 'composables', 'useMenuApi.ts')
|
||||||
|
const out = join(dirname(source), `.useMenuApi-${process.pid}-${++loads}.compiled.ts`)
|
||||||
|
writeFileSync(out, readFileSync(source, 'utf8').replaceAll('import.meta.server', '(globalThis as Record<string, unknown>).__menuLayerServer'))
|
||||||
|
try {
|
||||||
|
const mod = (await import(pathToFileURL(out).href)) as { useMenuApi: () => ReturnType<typeof createMenuClient> }
|
||||||
|
return { client: mod.useMenuApi(), calls }
|
||||||
|
} finally {
|
||||||
|
rmSync(out, { force: true })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test('the server base is used on the server, with the visitor forwarded', async () => {
|
||||||
|
const { client, calls } = await useMenuApiAs(true, { xff: '203.0.113.7', peer: '10.0.0.2' })
|
||||||
|
await client.getMenu('main menu', 'pl')
|
||||||
|
assert.deepEqual(calls, [
|
||||||
|
{ path: '/menus/main%20menu', opts: { baseURL: 'http://127.0.0.1:8096/_menu/api/v1', query: { locale: 'pl' }, headers: { 'x-forwarded-for': '203.0.113.7, 10.0.0.2' } } },
|
||||||
|
])
|
||||||
|
// A value recorded on the request context (route cache) wins.
|
||||||
|
const recorded = await useMenuApiAs(true, { context: { menuForwardedFor: '198.51.100.9' }, xff: '1.1.1.1', peer: '10.0.0.2' })
|
||||||
|
await recorded.client.getMenu('main')
|
||||||
|
assert.deepEqual(recorded.calls[0]!.opts.headers, { 'x-forwarded-for': '198.51.100.9' })
|
||||||
|
// Nothing to forward: no header at all.
|
||||||
|
const bare = await useMenuApiAs(true)
|
||||||
|
await bare.client.getMenu('main')
|
||||||
|
assert.deepEqual(bare.calls[0]!.opts, { baseURL: 'http://127.0.0.1:8096/_menu/api/v1', query: undefined, headers: {} })
|
||||||
|
})
|
||||||
|
|
||||||
|
test('the public base is used in the browser, without forwarded headers', async () => {
|
||||||
|
const { client, calls } = await useMenuApiAs(false, { xff: '203.0.113.7', peer: '10.0.0.2' })
|
||||||
|
await client.getMenu('main', 'en')
|
||||||
|
assert.deepEqual(calls, [{ path: '/menus/main', opts: { baseURL: '/_menu/api/v1', query: { locale: 'en' } } }])
|
||||||
|
})
|
||||||
|
|||||||
@@ -135,3 +135,72 @@ test('rendered: an entry with children and a URL keeps its link and gets a label
|
|||||||
assert.match(html, /<button type="button" class="menu-nav__subtoggle" aria-expanded="true" aria-controls="m-0-sub">.*Show submenu: Blog/)
|
assert.match(html, /<button type="button" class="menu-nav__subtoggle" aria-expanded="true" aria-controls="m-0-sub">.*Show submenu: Blog/)
|
||||||
assert.match(html, /menu-nav__item--open/)
|
assert.match(html, /menu-nav__item--open/)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Plan 06 coverage of the D-18 link rules.
|
||||||
|
test('every refused scheme and spacing renders as text without an href', async () => {
|
||||||
|
for (const url of ['javascript:alert(1)', 'JAVASCRIPT:alert(1)', 'JaVaScRiPt:x', 'data:text/html,x', 'DATA:x', 'vbscript:msgbox(1)', 'VBScript:x', 'file:///etc/passwd', 'ftp://a.test/x', ' https://a.test', 'https://a.test/\u0000']) {
|
||||||
|
assert.equal(entryHref(entry(url)), null, url)
|
||||||
|
assert.equal(linkKind(entry(url)), 'text', url)
|
||||||
|
assert.equal(isActive(entry(url), '/', 'site.test'), false, url)
|
||||||
|
}
|
||||||
|
const html = await renderNavItem({
|
||||||
|
entry: entry('#', {
|
||||||
|
title: 'Parent',
|
||||||
|
items: [
|
||||||
|
entry('JAVASCRIPT:alert(1)', { id: 2, title: 'Upper' }),
|
||||||
|
entry('vbscript:x', { id: 3, title: 'Vb' }),
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
routePath: '/',
|
||||||
|
})
|
||||||
|
assert.ok(!/href="(javascript|vbscript)/i.test(html), html)
|
||||||
|
assert.match(html, /<span class="menu-nav__text"[^>]*>Upper<\/span>/)
|
||||||
|
assert.match(html, /<span class="menu-nav__text"[^>]*>Vb<\/span>/)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('protocol-relative URLs are never site paths: an anchor, never active', () => {
|
||||||
|
for (const url of ['//evil.test/x', '/\\evil.test/x', '//site.test/blog']) {
|
||||||
|
assert.equal(linkKind(entry(url)), 'anchor', url)
|
||||||
|
assert.equal(entryPath(entry(url), 'site.test'), null, url)
|
||||||
|
assert.equal(isActive(entry(url), '/x', 'site.test'), false, url)
|
||||||
|
assert.equal(isActive(entry(url), '/blog', 'site.test'), false, url)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
test('rel is added only for _blank, whatever the URL kind', () => {
|
||||||
|
for (const target of ['_blank']) assert.equal(linkRel(target), 'noopener noreferrer')
|
||||||
|
for (const target of ['_self', '', undefined, '_BLANK', '_top']) assert.equal(linkRel(target as string | undefined), undefined, String(target))
|
||||||
|
})
|
||||||
|
|
||||||
|
test('active matching ignores query, hash and a trailing slash, except that / is only /', () => {
|
||||||
|
assert.equal(isActive(entry('/'), '/', 'site.test'), true)
|
||||||
|
assert.equal(isActive(entry('/'), '/?utm=x#top', 'site.test'), true)
|
||||||
|
assert.equal(isActive(entry('/'), '/blog', 'site.test'), false)
|
||||||
|
assert.equal(isActive(entry('/blog#x'), '/blog?page=2', 'site.test'), true)
|
||||||
|
assert.equal(isActive(entry('/blog///'), '/blog', 'site.test'), true)
|
||||||
|
assert.equal(isActive(entry('/Blog'), '/blog', 'site.test'), false)
|
||||||
|
assert.equal(isActive(entry('/grzyby%20le%C5%9Bne'), '/grzyby leśne/', 'site.test'), true)
|
||||||
|
assert.equal(isActive(entry('#'), '/', 'site.test'), false)
|
||||||
|
assert.equal(isActive(entry('#faq'), '/', 'site.test'), false)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('an absolute URL is active only on the same host', () => {
|
||||||
|
assert.equal(isActive(entry('https://SITE.test/blog/'), '/blog', 'site.test'), true)
|
||||||
|
assert.equal(isActive(entry('http://site.test/blog'), '/blog', 'Site.Test'), true)
|
||||||
|
assert.equal(isActive(entry('https://site.test:8443/blog'), '/blog', 'site.test'), false)
|
||||||
|
assert.equal(isActive(entry('https://site.test:8443/blog'), '/blog', 'site.test:8443'), true)
|
||||||
|
assert.equal(isActive(entry('https://other.test/blog'), '/blog', 'site.test'), false)
|
||||||
|
assert.equal(isActive(entry('https://site.test/blog'), '/blog', ''), false)
|
||||||
|
assert.equal(isActive(entry('mailto:a@site.test'), '/', 'site.test'), false)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('the trail marks ancestors only, never the active entry itself', () => {
|
||||||
|
const leaf = entry('/a')
|
||||||
|
assert.equal(inTrail(leaf, '/a', 'site.test'), false)
|
||||||
|
const parent = entry('/a', { items: [entry('/a/b')] })
|
||||||
|
assert.equal(inTrail(parent, '/a', 'site.test'), false)
|
||||||
|
assert.equal(inTrail(parent, '/a/b', 'site.test'), true)
|
||||||
|
const deep = entry(null, { items: [entry(null, { items: [entry(null, { items: [entry('/x/y/z/')] })] })] })
|
||||||
|
assert.equal(inTrail(deep, '/x/y/z', 'site.test'), true)
|
||||||
|
assert.equal(inTrail(entry('/a', { items: undefined as unknown as MenuEntry[] }), '/a', 'site.test'), false)
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user