From 5d7a811fbe52678c8af61d578b5df4b6fdca9778 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 09:05:18 +0000 Subject: [PATCH 1/4] chore(deps): update dependency nuxt-og-image to v6 --- package.json | 2 +- pnpm-lock.yaml | 540 ++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 423 insertions(+), 119 deletions(-) diff --git a/package.json b/package.json index 59f3ec444..878401a41 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "nuxt-auth-utils": "^0.5.29", "nuxt-charts": "^2.1.3", "nuxt-llms": "^0.2.0", - "nuxt-og-image": "^5.1.13", + "nuxt-og-image": "^6.3.3", "ofetch": "^1.5.1", "resend": "^6.9.3", "scule": "^1.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a0b654a3..f9236f3cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,8 +114,8 @@ importers: specifier: ^0.2.0 version: 0.2.0(magicast@0.5.2) nuxt-og-image: - specifier: ^5.1.13 - version: 5.1.13(@unhead/vue@2.1.13(vue@3.5.32(typescript@6.0.2)))(magicast@0.5.2)(unstorage@1.17.5(@vercel/functions@3.4.3)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(ioredis@5.10.1))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + specifier: ^6.3.3 + version: 6.3.3(b69ef693330d8f19d0451ea001b098dd) ofetch: specifier: ^1.5.1 version: 1.5.1 @@ -1500,6 +1500,11 @@ packages: peerDependencies: vite: '>=6.0' + '@nuxt/devtools-kit@4.0.0-alpha.3': + resolution: {integrity: sha512-ymp4jqS3hFfwRw8uDkv8cpu4kWvhQrX+S4jnA/oOc76s4AXf2HCZZJgrncKxh+txqi1NJj8nsQNBbaqRAo3g4w==} + peerDependencies: + vite: '>=6.0' + '@nuxt/devtools-wizard@3.2.4': resolution: {integrity: sha512-5tu2+Quu9XTxwtpzM8CUN0UKn/bzZIfJcoGd+at5Yy1RiUQJ4E52tRK0idW1rMSUDkbkvX3dSnu8Tpj7SAtWdQ==} hasBin: true @@ -1877,6 +1882,12 @@ packages: cpu: [arm] os: [android] + '@oxc-parser/binding-android-arm-eabi@0.124.0': + resolution: {integrity: sha512-+R9zCafSL8ovjokdPtorUp3sXrh8zQ2AC2L0ivXNvlLR0WS+5WdPkNVrnENq5UvzagM4Xgl0NPsJKz3Hv9+y8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + '@oxc-parser/binding-android-arm64@0.115.0': resolution: {integrity: sha512-lWRX75u+gqfB4TF3pWCHuvhaeneAmRl2b2qNBcl4S6yJ0HtnT4VXOMEZrq747i4Zby1ZTxj6mtOe678Bg8gRLw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1889,6 +1900,12 @@ packages: cpu: [arm64] os: [android] + '@oxc-parser/binding-android-arm64@0.124.0': + resolution: {integrity: sha512-ULHC/gVZ+nP4pd3kNNQTYaQ/e066BW/KuY5qUsvwkVWwOUQGDg+WpfyVOmQ4xfxoue6cMlkKkJ+ntdzfDXpNlg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@oxc-parser/binding-darwin-arm64@0.115.0': resolution: {integrity: sha512-ii/oOZjfGY1aszXTy29Z5DRyCEnBOrAXDVCvfdfXFQsOZlbbOa7NMHD7D+06YFe5qdxfmbWAYv4yn6QJi/0d2g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1901,6 +1918,12 @@ packages: cpu: [arm64] os: [darwin] + '@oxc-parser/binding-darwin-arm64@0.124.0': + resolution: {integrity: sha512-fGJ2hw7bnbUYn6UvTjp0m4WJ9zXz3cohgcwcgeo7gUZehpPNpvcVEVeIVHNmHnAuAw/ysf4YJR8DA1E+xCA4Lw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@oxc-parser/binding-darwin-x64@0.115.0': resolution: {integrity: sha512-R/sW/p8l77wglbjpMcF+h/3rWbp9zk1mRP3U14mxTYIC2k3m+aLBpXXgk2zksqf9qKk5mcc4GIYsuCn9l8TgDg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1913,6 +1936,12 @@ packages: cpu: [x64] os: [darwin] + '@oxc-parser/binding-darwin-x64@0.124.0': + resolution: {integrity: sha512-j0+re9pgps5BH2Tk3fm59Hi3QuLP3C4KhqXi6A+wRHHHJWDFR8mc/KI9mBrfk2JRT+15doGo+zv1eN75/9DuOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@oxc-parser/binding-freebsd-x64@0.115.0': resolution: {integrity: sha512-CSJ5ldNm9wIGGkhaIJeGmxRMZbgxThRN+X1ufYQQUNi5jZDV/U3C2QDMywpP93fczNBj961hXtcUPO/oVGq4Pw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1925,6 +1954,12 @@ packages: cpu: [x64] os: [freebsd] + '@oxc-parser/binding-freebsd-x64@0.124.0': + resolution: {integrity: sha512-0k5mS0npnrhKy72UfF51lpOZ2ESoPWn6gdFw+RdeRWcokraDW1O2kSx3laQ+yk7cCEavQdJSpWCYS/GvBbUCXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@oxc-parser/binding-linux-arm-gnueabihf@0.115.0': resolution: {integrity: sha512-uWFwssE5dHfQ8lH+ktrsD9JA49+Qa0gtxZHUs62z1e91NgGz6O7jefHGI6aygNyKNS45pnnBSDSP/zV977MsOQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1937,6 +1972,12 @@ packages: cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm-gnueabihf@0.124.0': + resolution: {integrity: sha512-P/i4eguRWvAUfGdfhQYg1jpwYkyUV6D3gefIH7HhmRl1Ph6P4IqTIEVcyJr1i/3vr1V5OHU4wonH6/ue/Qzvrw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm-musleabihf@0.115.0': resolution: {integrity: sha512-fZbqt8y/sKQ+v6bBCuv/mYYFoC0+fZI3mGDDEemmDOhT78+aUs2+4ZMdbd2btlXmnLaScl37r8IRbhnok5Ka9w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1949,6 +1990,12 @@ packages: cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm-musleabihf@0.124.0': + resolution: {integrity: sha512-/ameqFQH5fFP+66Atr8Ynv/2rYe4utcU7L4MoWS5JtrFLVO78g4qDLavyIlJxa6caSwYOvG/eO3c/DXqY5/6Rw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm64-gnu@0.115.0': resolution: {integrity: sha512-1ej/MjuTY9tJEunU/hUPIFmgH5PqgMQoRjNOvOkibtJ3Zqlw/+Lc+HGHDNET8sjbgIkWzdhX+p4J96A5CPdbag==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1963,6 +2010,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-arm64-gnu@0.124.0': + resolution: {integrity: sha512-gNeyEcXTtfrRCbj2EfxWU85Fs0wIX3p44Y3twnvuMfkWlLrb9M1Z25AYNSKjJM+fdAjeeQCjw0on47zFuBYwQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-arm64-musl@0.115.0': resolution: {integrity: sha512-HjsZbJPH9mMd4swJRywVMsDZsJX0hyKb1iNHo5ijRl5yhtbO3lj7ImSrrL1oZ1VEg0te4iKmDGGz/6YPLd1G8w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1977,6 +2031,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-arm64-musl@0.124.0': + resolution: {integrity: sha512-uvG7v4Tz9S8/PVqY0SP0DLHxo4hZGe+Pv2tGVnwcsjKCCUPjplbrFVvDzXq+kOaEoUkiCY0Kt1hlZ6FDJ1LKNQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-ppc64-gnu@0.115.0': resolution: {integrity: sha512-zhhePoBrd7kQx3oClX/W6NldsuCbuMqaN9rRsY+6/WoorAb4j490PG/FjqgAXscWp2uSW2WV9L+ksn0wHrvsrg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1991,6 +2052,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-ppc64-gnu@0.124.0': + resolution: {integrity: sha512-t7KZaaUhfp2au0MRpoENEFqwLKYDdptEry6V7pTAVdPEcFG4P6ii8yeGU9m6p5vb+b8WEKmdpGMNXBEYy7iJdw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.115.0': resolution: {integrity: sha512-t/IRojvUE9XrKu+/H1b8YINug+7Q6FLls5rsm2lxB5mnS8GN/eYAYrPgHkcg9/1SueRDSzGpDYu3lGWTObk1zw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2005,6 +2073,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.124.0': + resolution: {integrity: sha512-eurGGaxHZiIQ+fBSageS8TAkRqZgdOiBeqNrWAqAPup9hXBTmQ0WcBjwsLElf+3jvDL9NhnX0dOgOqPfsjSjdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-riscv64-musl@0.115.0': resolution: {integrity: sha512-79jBHSSh/YpQRAmvYoaCfpyToRbJ/HBrdB7hxK2ku2JMehjopTVo+xMJss/RV7/ZYqeezgjvKDQzapJbgcjVZA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2019,6 +2094,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-riscv64-musl@0.124.0': + resolution: {integrity: sha512-d1V7/ll1i/LhqE/gZy6Wbz6evlk0egh2XKkwMI3epiojtbtUwQSLIER0Y3yDBBocPuWOjJdvmjtEmPTTLXje/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-s390x-gnu@0.115.0': resolution: {integrity: sha512-nA1TpxkhNTIOMMyiSSsa7XIVJVoOU/SsVrHIz3gHvWweB5PHCQfO7w+Lb2EP0lBWokv7HtA/KbF7aLDoXzmuMw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2033,6 +2115,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-s390x-gnu@0.124.0': + resolution: {integrity: sha512-w1+cBvriUteOpox6ATqCFVkpGL47PFdcfCPGmgUZbd78Fw44U0gQkc+kVGvAOTvGrptMYgwomD1c6OTVvkrpGg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.115.0': resolution: {integrity: sha512-9iVX789DoC3SaOOG+X6NcF/tVChgLp2vcHffzOC2/Z1JTPlz6bMG2ogvcW6/9s0BG2qvhNQImd+gbWYeQbOwVw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2047,6 +2136,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.124.0': + resolution: {integrity: sha512-RRB1evQiXRtMCsQQiAh9U0H3HzguLpE0ytfStuhRgmOj7tqUCOVxkHsvM9geZjAax6NqVRj7VXx32qjjkZPsBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-musl@0.115.0': resolution: {integrity: sha512-RmQmk+mjCB0nMNfEYhaCxwofLo1Z95ebHw1AGvRiWGCd4zhCNOyskgCbMogIcQzSB3SuEKWgkssyaiQYVAA4hQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2061,6 +2157,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-x64-musl@0.124.0': + resolution: {integrity: sha512-asVYN0qmSHlCU8H9Q47SmeJ/Z5EG4IWCC+QGxkfFboI5qh15aLlJnHmnrV61MwQRPXGnVC/sC3qKhrUyqGxUqw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-openharmony-arm64@0.115.0': resolution: {integrity: sha512-viigraWWQhhDvX5aGq+wrQq58k00Xq3MHz/0R4AFMxGlZ8ogNonpEfNc73Q5Ly87Z6sU9BvxEdG0dnYTfVnmew==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2073,6 +2176,12 @@ packages: cpu: [arm64] os: [openharmony] + '@oxc-parser/binding-openharmony-arm64@0.124.0': + resolution: {integrity: sha512-nhwuxm6B8pn9lzAzMUfa571L5hCXYwQo8C8cx5aGOuHWCzruR8gPJnRRXGBci+uGaIIQEZDyU/U6HDgrSp/JlQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@oxc-parser/binding-wasm32-wasi@0.115.0': resolution: {integrity: sha512-IzGCrMwXhpb4kTXy/8lnqqqwjI7eOvy+r9AhVw+hsr8t1ecBBEHprcNy0aKatFHN6hsX7UMHHQmBAQjVvL/p1A==} engines: {node: '>=14.0.0'} @@ -2083,6 +2192,11 @@ packages: engines: {node: '>=14.0.0'} cpu: [wasm32] + '@oxc-parser/binding-wasm32-wasi@0.124.0': + resolution: {integrity: sha512-LWuq4Dl9tff7n+HjJcqoBjDlVCtruc0shgtdtGM+rTUIE9aFxHA/P+wCYR+aWMjN8m9vNaRME/sKXErmhmeKrA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@oxc-parser/binding-win32-arm64-msvc@0.115.0': resolution: {integrity: sha512-/ym+Absk/TLFvbhh3se9XYuI1D7BrUVHw4RaG/2dmWKgBenrZHaJsgnRb7NJtaOyjEOLIPtULx1wDdVL0SX2eg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2095,6 +2209,12 @@ packages: cpu: [arm64] os: [win32] + '@oxc-parser/binding-win32-arm64-msvc@0.124.0': + resolution: {integrity: sha512-aOh3Lf3AeH0dgzT4yBXcArFZ8VhqNXwZ/xlN0GqBtgVaGoHOOqL2YHlcVIgT+ghsXPVR2PTtYgBiQ1CNK7jp5A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@oxc-parser/binding-win32-ia32-msvc@0.115.0': resolution: {integrity: sha512-AQSZjIR+b+Te7uaO/hGTMjT8/oxlYrvKrOTi4KTHF/O6osjHEatUQ3y6ZW2+8+lJxy20zIcGz6iQFmFq/qDKkg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2107,6 +2227,12 @@ packages: cpu: [ia32] os: [win32] + '@oxc-parser/binding-win32-ia32-msvc@0.124.0': + resolution: {integrity: sha512-sib5xC0nz/+SCpaETBuHBz4SXS02KuG5HtyOcHsO/SK5ZvLRGhOZx0elDKawjb6adFkD7dQCqpXUS25wY6ELKQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.115.0': resolution: {integrity: sha512-oxUl82N+fIO9jIaXPph8SPPHQXrA08BHokBBJW8ct9F/x6o6bZE6eUAhUtWajbtvFhL8UYcCWRMba+kww6MBlA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2119,6 +2245,12 @@ packages: cpu: [x64] os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.124.0': + resolution: {integrity: sha512-UgojtjGUgZgAZQYt7SC6VO65OVdxEkRe2q+2vbHJO//18qw3Hrk6UvHGQKldsQKgbVcIBT/YBrt85YberiYIPQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxc-project/types@0.103.0': resolution: {integrity: sha512-bkiYX5kaXWwUessFRSoXFkGIQTmc6dLGdxuRTrC+h8PSnIdZyuXHHlLAeTmOue5Br/a0/a7dHH0Gca6eXn9MKg==} @@ -2131,6 +2263,9 @@ packages: '@oxc-project/types@0.122.0': resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@oxc-project/types@0.124.0': + resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} + '@oxc-transform/binding-android-arm-eabi@0.117.0': resolution: {integrity: sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3729,22 +3864,6 @@ packages: peerDependencies: vue: '>=3.5.18' - '@unocss/core@66.6.7': - resolution: {integrity: sha512-Q8456iWFtdwrUNYKVOQY8ygRggjZOVtLc6Jc8KIkxig7OiNlUWOgXJTfCh4I8g6jBYzC5eHaHFDLgJOmOrxBsg==} - - '@unocss/extractor-arbitrary-variants@66.6.7': - resolution: {integrity: sha512-PQiBHK0yUJ0BR+3GYnTPU6va6HVSRPV+O+s1zZmt23TWbyIeucoKCNR47TDtv+Z1xuksY8krIjtDYtufdrVWKw==} - - '@unocss/preset-mini@66.6.7': - resolution: {integrity: sha512-tf0mqiSEhPQ49WZOqjNhxlbZbNakiBLzCoxfLSzqfIGglOPYShP8mxsdp9Jv0n+Ntn0rHcBiX5KTLfax1/Bd9g==} - - '@unocss/preset-wind3@66.6.7': - resolution: {integrity: sha512-PKyqeRzlIMd3Irdt6fCKMm73zgwweiXESk5edUK8dVWndvPIcZCOqrEq7yg6Pr/Q8tHdq26viYSkVY3a3t8RSg==} - - '@unocss/rule-utils@66.6.7': - resolution: {integrity: sha512-4PT/s8yKIShSqP9XPSw4EjbZopcu3wlIB9i3kbGbzQwF91H+0Yy10guK3kHDGtkmWVN6Np6VvaGIj2UcbmaivA==} - engines: {node: '>=14'} - '@unovis/dagre-layout@0.8.8-2': resolution: {integrity: sha512-ZfDvfcYtzzhZhgKZty8XDi+zQIotfRqfNVF5M3dFQ9d9C5MTaRdbeBnPUkNrmlLJGgQ42HMOE2ajZLfm2VlRhg==} @@ -4404,6 +4523,7 @@ packages: basic-ftp@5.2.0: resolution: {integrity: sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==} engines: {node: '>=10.0.0'} + deprecated: Security vulnerability fixed in 5.2.1, please upgrade better-sqlite3@12.8.0: resolution: {integrity: sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ==} @@ -4836,6 +4956,10 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + culori@4.0.2: + resolution: {integrity: sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + d3-array@2.12.1: resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} @@ -6235,11 +6359,6 @@ packages: image-meta@0.2.2: resolution: {integrity: sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==} - image-size@2.0.2: - resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} - engines: {node: '>=16.x'} - hasBin: true - import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -7220,18 +7339,50 @@ packages: nuxt-llms@0.2.0: resolution: {integrity: sha512-GoEW00x8zaZ1wS0R0aOYptt3b54JEaRwlyVtuAiQoH51BwYdjN5/3+00/+4wi39M5cT4j5XcnGwOxJ7v4WVb9A==} - nuxt-og-image@5.1.13: - resolution: {integrity: sha512-H9kqGlmcEb9agWURwT5iFQjbr7Ec7tcQHZZaYSpC/JXKq2/dFyRyAoo6oXTk6ob20dK9aNjkJDcX2XmgZy67+w==} + nuxt-og-image@6.3.3: + resolution: {integrity: sha512-9yM/HJhzv04K2Nt2+52RtmiKvbalNZzimvXDTqPxUxCU24tn2RzBlQdckr2zKv0w0/mD4odsMV2kuHLbH9HY9A==} engines: {node: '>=18.0.0'} + hasBin: true peerDependencies: + '@resvg/resvg-js': ^2.6.0 + '@resvg/resvg-wasm': ^2.6.0 + '@takumi-rs/core': ^1.0.0-beta.3 + '@takumi-rs/wasm': ^1.0.0-beta.3 '@unhead/vue': ^2.0.5 + fontless: ^0.2.0 + playwright-core: ^1.50.0 + satori: '>=0.19.2' + sharp: ^0.34.0 + tailwindcss: ^4.0.0 + unifont: ^0.7.0 unstorage: ^1.15.0 + peerDependenciesMeta: + '@resvg/resvg-js': + optional: true + '@resvg/resvg-wasm': + optional: true + '@takumi-rs/core': + optional: true + '@takumi-rs/wasm': + optional: true + fontless: + optional: true + playwright-core: + optional: true + satori: + optional: true + sharp: + optional: true + tailwindcss: + optional: true + unifont: + optional: true - nuxt-site-config-kit@3.2.21: - resolution: {integrity: sha512-fvvAyv/mBUqnzsqro4iuXHypFtEUVIPYVW7e5j1/oP9JANfHFrGqosUhY8FAkI21HZgJ8H/8GdcQtnnN2xk+QA==} + nuxt-site-config-kit@4.0.7: + resolution: {integrity: sha512-iG4yFCHReySlm7c1dLNctFW07+LBeIT75Q/N5F/O3UVWxNas0ZzxZBrqlP2ZB7dxVya3dA7zWtsZJoDeXJBYZQ==} - nuxt-site-config@3.2.21: - resolution: {integrity: sha512-WCqo4cirBc+GLPBZOU1ye5+f4xjC7Sf7qbKt/zpeCtEUqJLHDR0MoKICfsGt/8EdkSDYUo+m5BNZ1oxai0isgQ==} + nuxt-site-config@4.0.7: + resolution: {integrity: sha512-y0XwldSX7KD4uTDX72tv9ZAjFBVHrrtO9n6YURkLNak7wco8mj74ENDkanyHXfgWVAKJlYHjth3h25JWzj33Xg==} nuxt@4.4.2: resolution: {integrity: sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q==} @@ -7246,6 +7397,34 @@ packages: '@types/node': optional: true + nuxtseo-shared@0.9.0: + resolution: {integrity: sha512-3V/vT2F4jON8mRThHPWzwVq6ZTU/J4PsqKwuaoON6b2OraULUhqOl1dOUQcduGHNgfYKhg9UygrT0xk+aUwM/g==} + peerDependencies: + '@nuxt/schema': ^3.16.0 || ^4.0.0 + nuxt: ^3.16.0 || ^4.0.0 + nuxt-site-config: ^3.2.0 || ^4.0.0 + vue: ^3.5.0 + zod: ^3.23.0 || ^4.0.0 + peerDependenciesMeta: + nuxt-site-config: + optional: true + zod: + optional: true + + nuxtseo-shared@5.1.2: + resolution: {integrity: sha512-L8nYZCmdFh2w9wNf4dxQy5Vzv2JTWd661zAg3D0h9HRm3chUkMZNgWQbodE7rK6jpitydONyvi7uHXOEHbGIuA==} + peerDependencies: + '@nuxt/schema': ^3.16.0 || ^4.0.0 + nuxt: ^3.16.0 || ^4.0.0 + nuxt-site-config: ^3.2.0 || ^4.0.0 + vue: ^3.5.0 + zod: ^3.23.0 || ^4.0.0 + peerDependenciesMeta: + nuxt-site-config: + optional: true + zod: + optional: true + nypm@0.6.5: resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} engines: {node: '>=18'} @@ -7347,6 +7526,10 @@ packages: resolution: {integrity: sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ==} engines: {node: ^20.19.0 || >=22.12.0} + oxc-parser@0.124.0: + resolution: {integrity: sha512-h07SFj/tp2U3cf3+LFX6MmOguQiM9ahwpGs0ZK5CGhgL8p4kk24etrJKsEzhXAvo7mfvoKTZooZ5MLKAPRmJ1g==} + engines: {node: ^20.19.0 || >=22.12.0} + oxc-transform@0.117.0: resolution: {integrity: sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -8179,13 +8362,6 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - satori-html@0.3.2: - resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} - - satori@0.18.4: - resolution: {integrity: sha512-HanEzgXHlX3fzpGgxPoR3qI7FDpc/B+uE/KplzA6BkZGlWMaH98B/1Amq+OBF1pYPlGNzAXPYNHlrEVBvRBnHQ==} - engines: {node: '>=16'} - satori@0.19.3: resolution: {integrity: sha512-dKr8TNYSyceWqBoTHWntjy25xaiWMw5GF+f8QOqFsov9OpTswLs7xdbvZudGRp9jkzbhv/4mVjVZYFtpruGKiA==} engines: {node: '>=16'} @@ -8316,10 +8492,10 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - site-config-stack@3.2.21: - resolution: {integrity: sha512-Ry/kCqXV9QTbaXHk1PNlVAlwWojgaKzRb0hxxnmwpg24/QoitME2U1iBZqQUAMsf7gzDOqczvNrqmeyPUzDEXw==} + site-config-stack@4.0.7: + resolution: {integrity: sha512-mD1FpuEcJDXbJqAeyir9cCFhfku4hBapX49kDNgSVo0p2tCOpQJuITw7Y+Zqevi6Gs27Ryk/KV3RYil/JbxllQ==} peerDependencies: - vue: ^3 + vue: ^3.5.30 sitemap@9.0.1: resolution: {integrity: sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==} @@ -9487,9 +9663,6 @@ packages: yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} - yoga-wasm-web@0.3.3: - resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} - youch-core@0.3.3: resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} @@ -10742,6 +10915,14 @@ snapshots: transitivePeerDependencies: - magicast + '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + tinyexec: 1.1.1 + vite: 7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - magicast + '@nuxt/devtools-wizard@3.2.4': dependencies: '@clack/prompts': 1.2.0 @@ -11667,96 +11848,144 @@ snapshots: '@oxc-parser/binding-android-arm-eabi@0.117.0': optional: true + '@oxc-parser/binding-android-arm-eabi@0.124.0': + optional: true + '@oxc-parser/binding-android-arm64@0.115.0': optional: true '@oxc-parser/binding-android-arm64@0.117.0': optional: true + '@oxc-parser/binding-android-arm64@0.124.0': + optional: true + '@oxc-parser/binding-darwin-arm64@0.115.0': optional: true '@oxc-parser/binding-darwin-arm64@0.117.0': optional: true + '@oxc-parser/binding-darwin-arm64@0.124.0': + optional: true + '@oxc-parser/binding-darwin-x64@0.115.0': optional: true '@oxc-parser/binding-darwin-x64@0.117.0': optional: true + '@oxc-parser/binding-darwin-x64@0.124.0': + optional: true + '@oxc-parser/binding-freebsd-x64@0.115.0': optional: true '@oxc-parser/binding-freebsd-x64@0.117.0': optional: true + '@oxc-parser/binding-freebsd-x64@0.124.0': + optional: true + '@oxc-parser/binding-linux-arm-gnueabihf@0.115.0': optional: true '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0': optional: true + '@oxc-parser/binding-linux-arm-gnueabihf@0.124.0': + optional: true + '@oxc-parser/binding-linux-arm-musleabihf@0.115.0': optional: true '@oxc-parser/binding-linux-arm-musleabihf@0.117.0': optional: true + '@oxc-parser/binding-linux-arm-musleabihf@0.124.0': + optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.115.0': optional: true '@oxc-parser/binding-linux-arm64-gnu@0.117.0': optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.124.0': + optional: true + '@oxc-parser/binding-linux-arm64-musl@0.115.0': optional: true '@oxc-parser/binding-linux-arm64-musl@0.117.0': optional: true + '@oxc-parser/binding-linux-arm64-musl@0.124.0': + optional: true + '@oxc-parser/binding-linux-ppc64-gnu@0.115.0': optional: true '@oxc-parser/binding-linux-ppc64-gnu@0.117.0': optional: true + '@oxc-parser/binding-linux-ppc64-gnu@0.124.0': + optional: true + '@oxc-parser/binding-linux-riscv64-gnu@0.115.0': optional: true '@oxc-parser/binding-linux-riscv64-gnu@0.117.0': optional: true + '@oxc-parser/binding-linux-riscv64-gnu@0.124.0': + optional: true + '@oxc-parser/binding-linux-riscv64-musl@0.115.0': optional: true '@oxc-parser/binding-linux-riscv64-musl@0.117.0': optional: true + '@oxc-parser/binding-linux-riscv64-musl@0.124.0': + optional: true + '@oxc-parser/binding-linux-s390x-gnu@0.115.0': optional: true '@oxc-parser/binding-linux-s390x-gnu@0.117.0': optional: true + '@oxc-parser/binding-linux-s390x-gnu@0.124.0': + optional: true + '@oxc-parser/binding-linux-x64-gnu@0.115.0': optional: true '@oxc-parser/binding-linux-x64-gnu@0.117.0': optional: true + '@oxc-parser/binding-linux-x64-gnu@0.124.0': + optional: true + '@oxc-parser/binding-linux-x64-musl@0.115.0': optional: true '@oxc-parser/binding-linux-x64-musl@0.117.0': optional: true + '@oxc-parser/binding-linux-x64-musl@0.124.0': + optional: true + '@oxc-parser/binding-openharmony-arm64@0.115.0': optional: true '@oxc-parser/binding-openharmony-arm64@0.117.0': optional: true + '@oxc-parser/binding-openharmony-arm64@0.124.0': + optional: true + '@oxc-parser/binding-wasm32-wasi@0.115.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) @@ -11773,24 +12002,41 @@ snapshots: - '@emnapi/runtime' optional: true + '@oxc-parser/binding-wasm32-wasi@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + '@oxc-parser/binding-win32-arm64-msvc@0.115.0': optional: true '@oxc-parser/binding-win32-arm64-msvc@0.117.0': optional: true + '@oxc-parser/binding-win32-arm64-msvc@0.124.0': + optional: true + '@oxc-parser/binding-win32-ia32-msvc@0.115.0': optional: true '@oxc-parser/binding-win32-ia32-msvc@0.117.0': optional: true + '@oxc-parser/binding-win32-ia32-msvc@0.124.0': + optional: true + '@oxc-parser/binding-win32-x64-msvc@0.115.0': optional: true '@oxc-parser/binding-win32-x64-msvc@0.117.0': optional: true + '@oxc-parser/binding-win32-x64-msvc@0.124.0': + optional: true + '@oxc-project/types@0.103.0': {} '@oxc-project/types@0.115.0': {} @@ -11799,6 +12045,8 @@ snapshots: '@oxc-project/types@0.122.0': {} + '@oxc-project/types@0.124.0': {} + '@oxc-transform/binding-android-arm-eabi@0.117.0': optional: true @@ -12062,8 +12310,10 @@ snapshots: '@resvg/resvg-js-win32-arm64-msvc': 2.6.2 '@resvg/resvg-js-win32-ia32-msvc': 2.6.2 '@resvg/resvg-js-win32-x64-msvc': 2.6.2 + optional: true - '@resvg/resvg-wasm@2.6.2': {} + '@resvg/resvg-wasm@2.6.2': + optional: true '@rolldown/binding-android-arm64@1.0.0-beta.57': optional: true @@ -13072,7 +13322,7 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 24.12.2 + '@types/node': 25.5.2 '@types/semver@7.7.1': {} @@ -13245,29 +13495,6 @@ snapshots: unhead: 2.1.13 vue: 3.5.32(typescript@6.0.2) - '@unocss/core@66.6.7': {} - - '@unocss/extractor-arbitrary-variants@66.6.7': - dependencies: - '@unocss/core': 66.6.7 - - '@unocss/preset-mini@66.6.7': - dependencies: - '@unocss/core': 66.6.7 - '@unocss/extractor-arbitrary-variants': 66.6.7 - '@unocss/rule-utils': 66.6.7 - - '@unocss/preset-wind3@66.6.7': - dependencies: - '@unocss/core': 66.6.7 - '@unocss/preset-mini': 66.6.7 - '@unocss/rule-utils': 66.6.7 - - '@unocss/rule-utils@66.6.7': - dependencies: - '@unocss/core': 66.6.7 - magic-string: 0.30.21 - '@unovis/dagre-layout@0.8.8-2': dependencies: '@unovis/graphlibrary': 2.2.0-2 @@ -14395,6 +14622,8 @@ snapshots: csstype@3.2.3: {} + culori@4.0.2: {} + d3-array@2.12.1: dependencies: internmap: 1.0.1 @@ -15971,8 +16200,6 @@ snapshots: image-meta@0.2.2: {} - image-size@2.0.2: {} - import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -17246,72 +17473,86 @@ snapshots: transitivePeerDependencies: - magicast - nuxt-og-image@5.1.13(@unhead/vue@2.1.13(vue@3.5.32(typescript@6.0.2)))(magicast@0.5.2)(unstorage@1.17.5(@vercel/functions@3.4.3)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(ioredis@5.10.1))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)): + nuxt-og-image@6.3.3(b69ef693330d8f19d0451ea001b098dd): dependencies: - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@clack/prompts': 1.2.0 '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@resvg/resvg-js': 2.6.2 - '@resvg/resvg-wasm': 2.6.2 '@unhead/vue': 2.1.13(vue@3.5.32(typescript@6.0.2)) - '@unocss/core': 66.6.7 - '@unocss/preset-wind3': 66.6.7 + '@vue/compiler-sfc': 3.5.32 chrome-launcher: 1.2.1 consola: 3.4.2 + culori: 4.0.2 defu: 6.1.7 - execa: 9.6.1 - image-size: 2.0.2 + devalue: 5.7.0 + exsolve: 1.0.8 + lightningcss: 1.32.0 magic-string: 0.30.21 + magicast: 0.5.2 mocked-exports: 0.1.1 - nuxt-site-config: 3.2.21(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + nuxt-site-config: 4.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6) + nuxtseo-shared: 5.1.2(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt-site-config@4.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6))(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6) nypm: 0.6.5 ofetch: 1.5.1 ohash: 2.0.11 + oxc-parser: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-walker: 0.7.0(oxc-parser@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) pathe: 2.0.3 pkg-types: 2.3.0 - playwright-core: 1.59.1 radix3: 1.1.2 - satori: 0.18.4 - satori-html: 0.3.2 - sirv: 3.0.2 - std-env: 3.10.0 + std-env: 4.0.0 strip-literal: 3.1.0 + tinyexec: 1.1.1 + tinyglobby: 0.2.15 ufo: 1.6.3 - unplugin: 2.3.11 + ultrahtml: 1.6.0 + unplugin: 3.0.0 unstorage: 1.17.5(@vercel/functions@3.4.3)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(ioredis@5.10.1) - unwasm: 0.5.3 - yoga-wasm-web: 0.3.3 + optionalDependencies: + '@resvg/resvg-js': 2.6.2 + '@resvg/resvg-wasm': 2.6.2 + fontless: 0.2.1(@vercel/functions@3.4.3)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + playwright-core: 1.59.1 + satori: 0.19.3 + sharp: 0.34.5 + tailwindcss: 4.2.2 + unifont: 0.7.4 transitivePeerDependencies: - - magicast + - '@emnapi/core' + - '@emnapi/runtime' + - '@nuxt/schema' + - nuxt - supports-color - vite - vue + - zod - nuxt-site-config-kit@3.2.21(magicast@0.5.2)(vue@3.5.32(typescript@6.0.2)): + nuxt-site-config-kit@4.0.7(magicast@0.5.2)(vue@3.5.32(typescript@6.0.2)): dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) - pkg-types: 2.3.0 - site-config-stack: 3.2.21(vue@3.5.32(typescript@6.0.2)) - std-env: 3.10.0 + site-config-stack: 4.0.7(vue@3.5.32(typescript@6.0.2)) + std-env: 4.0.0 ufo: 1.6.3 transitivePeerDependencies: - magicast - vue - nuxt-site-config@3.2.21(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)): + nuxt-site-config@4.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6): dependencies: - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@nuxt/kit': 4.4.2(magicast@0.5.2) h3: 1.15.11 - nuxt-site-config-kit: 3.2.21(magicast@0.5.2)(vue@3.5.32(typescript@6.0.2)) + nuxt-site-config-kit: 4.0.7(magicast@0.5.2)(vue@3.5.32(typescript@6.0.2)) + nuxtseo-shared: 0.9.0(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt-site-config@4.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6))(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6) pathe: 2.0.3 pkg-types: 2.3.0 - sirv: 3.0.2 - site-config-stack: 3.2.21(vue@3.5.32(typescript@6.0.2)) + site-config-stack: 4.0.7(vue@3.5.32(typescript@6.0.2)) ufo: 1.6.3 transitivePeerDependencies: + - '@nuxt/schema' - magicast + - nuxt - vite - vue + - zod nuxt@4.4.2(445499489540052a4c2e3761b79c8923): dependencies: @@ -17446,6 +17687,56 @@ snapshots: - xml2js - yaml + nuxtseo-shared@0.9.0(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt-site-config@4.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6))(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6): + dependencies: + '@clack/prompts': 1.2.0 + '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/schema': 4.4.2 + birpc: 4.0.0 + consola: 3.4.2 + defu: 6.1.7 + nuxt: 4.4.2(445499489540052a4c2e3761b79c8923) + ofetch: 1.5.1 + pathe: 2.0.3 + pkg-types: 2.3.0 + radix3: 1.1.2 + sirv: 3.0.2 + std-env: 4.0.0 + ufo: 1.6.3 + vue: 3.5.32(typescript@6.0.2) + optionalDependencies: + nuxt-site-config: 4.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6) + zod: 4.3.6 + transitivePeerDependencies: + - magicast + - vite + + nuxtseo-shared@5.1.2(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt-site-config@4.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6))(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6): + dependencies: + '@clack/prompts': 1.2.0 + '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/schema': 4.4.2 + birpc: 4.0.0 + consola: 3.4.2 + defu: 6.1.7 + nuxt: 4.4.2(445499489540052a4c2e3761b79c8923) + ofetch: 1.5.1 + pathe: 2.0.3 + pkg-types: 2.3.0 + radix3: 1.1.2 + sirv: 3.0.2 + std-env: 4.0.0 + ufo: 1.6.3 + vue: 3.5.32(typescript@6.0.2) + optionalDependencies: + nuxt-site-config: 4.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(zod@4.3.6) + zod: 4.3.6 + transitivePeerDependencies: + - magicast + - vite + nypm@0.6.5: dependencies: citty: 0.2.2 @@ -17632,6 +17923,34 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' + oxc-parser@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + dependencies: + '@oxc-project/types': 0.124.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.124.0 + '@oxc-parser/binding-android-arm64': 0.124.0 + '@oxc-parser/binding-darwin-arm64': 0.124.0 + '@oxc-parser/binding-darwin-x64': 0.124.0 + '@oxc-parser/binding-freebsd-x64': 0.124.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.124.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.124.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.124.0 + '@oxc-parser/binding-linux-arm64-musl': 0.124.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.124.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.124.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.124.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.124.0 + '@oxc-parser/binding-linux-x64-gnu': 0.124.0 + '@oxc-parser/binding-linux-x64-musl': 0.124.0 + '@oxc-parser/binding-openharmony-arm64': 0.124.0 + '@oxc-parser/binding-wasm32-wasi': 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@oxc-parser/binding-win32-arm64-msvc': 0.124.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.124.0 + '@oxc-parser/binding-win32-x64-msvc': 0.124.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + oxc-transform@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): optionalDependencies: '@oxc-transform/binding-android-arm-eabi': 0.117.0 @@ -17663,6 +17982,11 @@ snapshots: magic-regexp: 0.10.0 oxc-parser: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-walker@0.7.0(oxc-parser@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)): + dependencies: + magic-regexp: 0.10.0 + oxc-parser: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -18681,24 +19005,6 @@ snapshots: safer-buffer@2.1.2: {} - satori-html@0.3.2: - dependencies: - ultrahtml: 1.6.0 - - satori@0.18.4: - dependencies: - '@shuding/opentype.js': 1.4.0-beta.0 - css-background-parser: 0.1.0 - css-box-shadow: 1.0.0-3 - css-gradient-parser: 0.0.17 - css-to-react-native: 3.2.0 - emoji-regex-xs: 2.0.1 - escape-html: 1.0.3 - linebreak: 1.1.0 - parse-css-color: 0.2.1 - postcss-value-parser: 4.2.0 - yoga-layout: 3.2.1 - satori@0.19.3: dependencies: '@shuding/opentype.js': 1.4.0-beta.0 @@ -18919,7 +19225,7 @@ snapshots: sisteransi@1.0.5: {} - site-config-stack@3.2.21(vue@3.5.32(typescript@6.0.2)): + site-config-stack@4.0.7(vue@3.5.32(typescript@6.0.2)): dependencies: ufo: 1.6.3 vue: 3.5.32(typescript@6.0.2) @@ -19324,7 +19630,7 @@ snapshots: cac: 6.7.14 defu: 6.1.7 empathic: 2.0.0 - hookable: 6.0.1 + hookable: 6.1.0 import-without-cache: 0.2.5 obug: 2.1.1 picomatch: 4.0.4 @@ -20136,8 +20442,6 @@ snapshots: yoga-layout@3.2.1: {} - yoga-wasm-web@0.3.3: {} - youch-core@0.3.3: dependencies: '@poppinss/exception': 1.2.3 From 43f61e73b84ae53d777c7a5d9509c31122c58d92 Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Thu, 9 Apr 2026 13:48:24 +0100 Subject: [PATCH 2/4] up --- app/components/OgImage/Docs.satori.vue | 36 +++++ app/components/OgImage/Docs.vue | 29 ---- app/components/OgImage/Module.satori.vue | 82 ++++++++++++ app/components/OgImage/Module.vue | 49 ------- app/pages/blog/[slug].vue | 9 +- app/pages/blog/index.vue | 2 +- app/pages/changelog.vue | 2 +- app/pages/deploy/[slug].vue | 2 +- app/pages/deploy/index.vue | 2 +- app/pages/design-kit.vue | 2 +- app/pages/docs/[...slug].vue | 4 +- app/pages/enterprise/agencies/[slug].vue | 2 +- app/pages/enterprise/agencies/index.vue | 2 +- app/pages/enterprise/jobs.vue | 2 +- app/pages/enterprise/sponsors.vue | 2 +- app/pages/enterprise/support.vue | 7 +- app/pages/evals.vue | 2 +- app/pages/modules/[slug].vue | 5 +- app/pages/newsletter.vue | 2 +- app/pages/showcase.vue | 2 +- app/pages/team.vue | 2 +- app/pages/templates.vue | 2 +- app/pages/video-courses.vue | 2 +- content/blog/16.new-website.md | 2 +- nuxt.config.ts | 6 + package.json | 2 + pnpm-lock.yaml | 160 ++++++++++++++++++++--- 27 files changed, 297 insertions(+), 124 deletions(-) create mode 100644 app/components/OgImage/Docs.satori.vue delete mode 100644 app/components/OgImage/Docs.vue create mode 100644 app/components/OgImage/Module.satori.vue delete mode 100644 app/components/OgImage/Module.vue diff --git a/app/components/OgImage/Docs.satori.vue b/app/components/OgImage/Docs.satori.vue new file mode 100644 index 000000000..ec1ebf235 --- /dev/null +++ b/app/components/OgImage/Docs.satori.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/OgImage/Docs.vue b/app/components/OgImage/Docs.vue deleted file mode 100644 index 36122f443..000000000 --- a/app/components/OgImage/Docs.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/app/components/OgImage/Module.satori.vue b/app/components/OgImage/Module.satori.vue new file mode 100644 index 000000000..6ed0a6772 --- /dev/null +++ b/app/components/OgImage/Module.satori.vue @@ -0,0 +1,82 @@ + + + diff --git a/app/components/OgImage/Module.vue b/app/components/OgImage/Module.vue deleted file mode 100644 index 5f92f9ab5..000000000 --- a/app/components/OgImage/Module.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/app/pages/blog/[slug].vue b/app/pages/blog/[slug].vue index 9661e7416..82e62eaba 100644 --- a/app/pages/blog/[slug].vue +++ b/app/pages/blog/[slug].vue @@ -30,13 +30,12 @@ useSeoMeta({ title, description, ogDescription: description, - ogTitle: `${title} · Nuxt Blog` + ogTitle: `${title} · Nuxt Blog`, + ...(article.value.image ? { ogImage: article.value.image } : {}) }) -if (article.value.image) { - defineOgImage({ url: article.value.image }) -} else { - defineOgImageComponent('Docs', { +if (!article.value.image) { + defineOgImage('Docs', { headline: 'Blog', title, description diff --git a/app/pages/blog/index.vue b/app/pages/blog/index.vue index b71368fff..fd92037f8 100644 --- a/app/pages/blog/index.vue +++ b/app/pages/blog/index.vue @@ -25,7 +25,7 @@ useSeoMeta({ ogDescription: page.value.description, ogTitle: page.value.title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Blog', title: page.value.title, description: page.value.description diff --git a/app/pages/changelog.vue b/app/pages/changelog.vue index 70e1a0454..bc447192a 100644 --- a/app/pages/changelog.vue +++ b/app/pages/changelog.vue @@ -15,7 +15,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Changelog', title, description diff --git a/app/pages/deploy/[slug].vue b/app/pages/deploy/[slug].vue index cfd941e24..b86c9f14a 100644 --- a/app/pages/deploy/[slug].vue +++ b/app/pages/deploy/[slug].vue @@ -32,7 +32,7 @@ useSeoMeta({ ogTitle: `Deploy Nuxt to ${title}` }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Deploy To', title, description diff --git a/app/pages/deploy/index.vue b/app/pages/deploy/index.vue index 8073c840d..cb178b6d8 100644 --- a/app/pages/deploy/index.vue +++ b/app/pages/deploy/index.vue @@ -21,7 +21,7 @@ useSeoMeta({ ogTitle: title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { title: 'Deploy Nuxt', description }) diff --git a/app/pages/design-kit.vue b/app/pages/design-kit.vue index 93ad29d14..32c91247f 100644 --- a/app/pages/design-kit.vue +++ b/app/pages/design-kit.vue @@ -18,7 +18,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { title, description }) diff --git a/app/pages/docs/[...slug].vue b/app/pages/docs/[...slug].vue index a3936efc6..4b3ab5651 100644 --- a/app/pages/docs/[...slug].vue +++ b/app/pages/docs/[...slug].vue @@ -152,9 +152,9 @@ if (import.meta.server) { ogTitle: titleTemplate.value?.includes('%s') ? titleTemplate.value.replace('%s', title.value) : title.value }) - defineOgImageComponent('Docs', { + defineOgImage('Docs', { headline: breadcrumb.value.length ? breadcrumb.value.map(link => link.label).join(' > ') : '', - title, + title: title.value ?? '', description }) } diff --git a/app/pages/enterprise/agencies/[slug].vue b/app/pages/enterprise/agencies/[slug].vue index efbaead51..2001e5ced 100644 --- a/app/pages/enterprise/agencies/[slug].vue +++ b/app/pages/enterprise/agencies/[slug].vue @@ -35,7 +35,7 @@ useSeoMeta({ ogTitle: `${title} · Nuxt Agencies` }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Nuxt Agencies', title, description diff --git a/app/pages/enterprise/agencies/index.vue b/app/pages/enterprise/agencies/index.vue index 24c0eb0b9..9a79c4880 100644 --- a/app/pages/enterprise/agencies/index.vue +++ b/app/pages/enterprise/agencies/index.vue @@ -22,7 +22,7 @@ useSeoMeta({ ogTitle: `${title} · Enterprise` }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Enterprise', title, description diff --git a/app/pages/enterprise/jobs.vue b/app/pages/enterprise/jobs.vue index c7fa528d0..1fe39112c 100644 --- a/app/pages/enterprise/jobs.vue +++ b/app/pages/enterprise/jobs.vue @@ -19,7 +19,7 @@ useSeoMeta({ ogTitle: `${title} · Enterprise` }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Enterprise', title, description diff --git a/app/pages/enterprise/sponsors.vue b/app/pages/enterprise/sponsors.vue index 14d7490cc..26be24f20 100644 --- a/app/pages/enterprise/sponsors.vue +++ b/app/pages/enterprise/sponsors.vue @@ -22,7 +22,7 @@ useSeoMeta({ ogTitle: `${title} · Community` }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Community', title, description diff --git a/app/pages/enterprise/support.vue b/app/pages/enterprise/support.vue index 421a6d3a7..e5bbee80f 100644 --- a/app/pages/enterprise/support.vue +++ b/app/pages/enterprise/support.vue @@ -16,11 +16,8 @@ useSeoMeta({ title, description, ogDescription: description, - ogTitle: `${title} · Enterprise` -}) - -defineOgImage({ - url: '/assets/enterprise/support/social-card.png' + ogTitle: `${title} · Enterprise`, + ogImage: '/assets/enterprise/support/social-card.png' }) diff --git a/app/pages/evals.vue b/app/pages/evals.vue index 3729e7d97..25ee0363c 100644 --- a/app/pages/evals.vue +++ b/app/pages/evals.vue @@ -52,7 +52,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImageComponent('Docs', { title, description }) +defineOgImage('Docs', { title, description }) // Build experiment map by name const experimentMap = computed(() => { diff --git a/app/pages/modules/[slug].vue b/app/pages/modules/[slug].vue index 42978efff..c79024f3c 100644 --- a/app/pages/modules/[slug].vue +++ b/app/pages/modules/[slug].vue @@ -78,8 +78,9 @@ useSeoMeta({ ogTitle: `${title} · Nuxt Modules` }) -defineOgImageComponent('Module', { - module: module.value, +defineOgImage('Module', { + icon: module.value.icon, + npm: module.value.npm, headline: 'Nuxt Modules', title, description diff --git a/app/pages/newsletter.vue b/app/pages/newsletter.vue index f692ae7e3..7de491e64 100644 --- a/app/pages/newsletter.vue +++ b/app/pages/newsletter.vue @@ -17,7 +17,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { title, description }) diff --git a/app/pages/showcase.vue b/app/pages/showcase.vue index 464912dd5..581c11d12 100644 --- a/app/pages/showcase.vue +++ b/app/pages/showcase.vue @@ -22,7 +22,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Resources', title, description diff --git a/app/pages/team.vue b/app/pages/team.vue index 6295ac620..a0237e56a 100644 --- a/app/pages/team.vue +++ b/app/pages/team.vue @@ -36,7 +36,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { title, description }) diff --git a/app/pages/templates.vue b/app/pages/templates.vue index 4f0b86e8b..6b19b326f 100644 --- a/app/pages/templates.vue +++ b/app/pages/templates.vue @@ -24,7 +24,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Resources', title, description diff --git a/app/pages/video-courses.vue b/app/pages/video-courses.vue index e0635899d..93e019922 100644 --- a/app/pages/video-courses.vue +++ b/app/pages/video-courses.vue @@ -21,7 +21,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImageComponent('Docs', { +defineOgImage('Docs', { headline: 'Resources', title, description diff --git a/content/blog/16.new-website.md b/content/blog/16.new-website.md index e4b925fdd..e94312023 100644 --- a/content/blog/16.new-website.md +++ b/content/blog/16.new-website.md @@ -118,7 +118,7 @@ We are big fans of having a custom image when we share a link on social media. T Example of the [Installation page](/docs/getting-started/installation): -:img{src="/__og-image__/image/docs/getting-started/introduction/og.png" alt="Nuxt OG Image" width="1200" height="630" class="border rounded border-gray-700"} +:img{src="/_og/d/c_Docs,p_Ii9kb2NzL2dldHRpbmctc3RhcnRlZC9pbnN0YWxsYXRpb24i.png" alt="Nuxt OG Image" width="1200" height="630" class="border rounded border-gray-700"} ::read-more{to="https://nuxtseo.com/og-image/getting-started/installation" target="_blank"} Discover the **Nuxt OG Image** module. diff --git a/nuxt.config.ts b/nuxt.config.ts index e60920625..b2f63a532 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -435,6 +435,12 @@ export default defineNuxtConfig({ include: ['../test/nuxt'] } }, + // Docs crawl prerenders many /_og/ URLs; Satori+Resvg can exceed the default 15s per image under load. + ogImage: { + security: { + renderTimeout: 120_000 + } + }, hooks: { 'content:file:beforeParse': async ({ file }) => { if (file.id.startsWith('docsv5/')) { diff --git a/package.json b/package.json index 878401a41..cbb747f0f 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@nuxtjs/mcp-toolkit": "^0.7.0", "@nuxtjs/mdc": "^0.20.2", "@nuxtjs/plausible": "^2.0.1", + "@resvg/resvg-js": "^2.6.2", "@vercel/analytics": "^2.0.0", "@vercel/functions": "^3.4.3", "@vercel/speed-insights": "^2.0.0", @@ -61,6 +62,7 @@ "nuxt-og-image": "^6.3.3", "ofetch": "^1.5.1", "resend": "^6.9.3", + "satori": "^0.19.3", "scule": "^1.3.0", "sitemap": "^9.0.1", "std-env": "^4.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9236f3cf..9118ae57f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,7 +43,7 @@ importers: version: 0.13.2(@types/youtube@0.1.2)(@unhead/vue@2.1.13(vue@3.5.32(typescript@6.0.2)))(@vercel/functions@3.4.3)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)) '@nuxt/ui': specifier: ^4.5.1 - version: 4.6.1(@nuxt/content@3.12.0(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.2)))(@tiptap/extensions@3.22.2(@tiptap/core@3.22.2(@tiptap/pm@3.22.2))(@tiptap/pm@3.22.2))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(@vercel/functions@3.4.3)(change-case@5.4.4)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.2)(typescript@6.0.2)(valibot@1.3.1(typescript@6.0.2))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(yjs@13.6.30)(zod@4.3.6) + version: 4.6.1(dc93837d71a3209c19929f0a57f02654) '@nuxthub/core': specifier: ^0.10.7 version: 0.10.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vercel/functions@3.4.3)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) @@ -59,15 +59,18 @@ importers: '@nuxtjs/plausible': specifier: ^2.0.1 version: 2.0.1(magicast@0.5.2) + '@resvg/resvg-js': + specifier: ^2.6.2 + version: 2.6.2 '@vercel/analytics': specifier: ^2.0.0 - version: 2.0.1(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vue@3.5.32(typescript@6.0.2)) + version: 2.0.1(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(react@19.2.5)(vue@3.5.32(typescript@6.0.2)) '@vercel/functions': specifier: ^3.4.3 version: 3.4.3 '@vercel/speed-insights': specifier: ^2.0.0 - version: 2.0.0(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vue@3.5.32(typescript@6.0.2)) + version: 2.0.0(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(react@19.2.5)(vue@3.5.32(typescript@6.0.2)) '@vue/compiler-sfc': specifier: ^3.5.29 version: 3.5.32 @@ -100,7 +103,7 @@ importers: version: 1.2.1 motion-v: specifier: ^1.10.3 - version: 1.10.3(@vueuse/core@14.2.1(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)) + version: 1.10.3(@vueuse/core@14.2.1(vue@3.5.32(typescript@6.0.2)))(react@19.2.5)(vue@3.5.32(typescript@6.0.2)) nuxt: specifier: ^4.4.2 version: 4.4.2(445499489540052a4c2e3761b79c8923) @@ -115,13 +118,16 @@ importers: version: 0.2.0(magicast@0.5.2) nuxt-og-image: specifier: ^6.3.3 - version: 6.3.3(b69ef693330d8f19d0451ea001b098dd) + version: 6.3.3(8ce566be90d60cd1d79313cc50533d1d) ofetch: specifier: ^1.5.1 version: 1.5.1 resend: specifier: ^6.9.3 version: 6.10.0 + satori: + specifier: ^0.19.3 + version: 0.19.3 scule: specifier: ^1.3.0 version: 1.3.0 @@ -3284,6 +3290,71 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 + '@takumi-rs/core-darwin-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-9MRCMzyK7dXD9jRannfQ2KQwSggBYgVU7I/lPtnOFO2VO/cHlFxDC7TyoyFqYZ/szP8y7sumNkMl9tHtWqQcBQ==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + cpu: [arm64] + os: [darwin] + + '@takumi-rs/core-darwin-x64@1.0.0-rc.16': + resolution: {integrity: sha512-Mf9vGQzynSyCanqS/XM5GwkfgH6SbiBNnaEZRBvVwwKekBqewz0Vi26ZhLpeYRMIxpjVwYEZw+FOM6DqkiUdJg==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + cpu: [x64] + os: [darwin] + + '@takumi-rs/core-linux-arm64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-x7mcJmKMFE65mDl3RVjrnn9+WpKZrP479BapnVuD/NLtBmshWhVaIXFlVqqAj/GtTBIzmvHXOhPqyhq0Vdzz7Q==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@takumi-rs/core-linux-arm64-musl@1.0.0-rc.16': + resolution: {integrity: sha512-HEqXyZ+lW8r3rGLrOeIorF9QPdK4NMX7cFIWxs/m1bVxUoHhSfGR8PTpbi7rj2OSvcK0HnnFo+bEkAHilAY8ow==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@takumi-rs/core-linux-x64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-6a5ROL8T3tdyAW6FTDgWSyuG1DImDUDUMH0VIVuur5IT4KeM/A+4PFhGjWP9zNONZysMukR4+wgKMR6DVWezcw==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@takumi-rs/core-linux-x64-musl@1.0.0-rc.16': + resolution: {integrity: sha512-ikj1qMprfl+ZvlExizP0ZeMXlT+DEZXlJ9x5kYny8QCfAG6i9t/+GOOpfvjaJxTWLenQP24p37g94dYlDVHjKA==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@takumi-rs/core-win32-arm64-msvc@1.0.0-rc.16': + resolution: {integrity: sha512-B8Sg1SWYX9aX6+6vAHgk7FNeHTNGdI4GfeInBO/RG7bghjWK9Us5k3NqxUTDyK9g5N5Ko00XOYJXQvMllNlZ0A==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + cpu: [arm64] + os: [win32] + + '@takumi-rs/core-win32-x64-msvc@1.0.0-rc.16': + resolution: {integrity: sha512-t8+9LwKEHC2Ayra/+mfVFeJ3oGx7EjcHS3AVkJAFu2ARPY0ucz01Z5iQ8lSspDTnZcRpJjzwzx4cV0B3NUH6Nw==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + cpu: [x64] + os: [win32] + + '@takumi-rs/core@1.0.0-rc.16': + resolution: {integrity: sha512-08KaI9PTeV6Dp7biBnhmloxz7w9K73FxMvfccEiWY5bb1iA/IVFFOjYtOvU/pFENHyw+MplZVJOvxoSzVKxbRA==} + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} + + '@takumi-rs/helpers@1.0.0-rc.16': + resolution: {integrity: sha512-z0pJHcHGdrh1k8VsjrI3Qb4fcswBIxIaz9lwLccnJ0L5XMF22avzkOKKRzQNJ3xEjxD+5ZU1cJLoHkr/ubP0uQ==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + react-dom: + optional: true + '@tanstack/table-core@8.21.3': resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} engines: {node: '>=12'} @@ -8103,6 +8174,10 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + engines: {node: '>=0.10.0'} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -11427,7 +11502,7 @@ snapshots: - typescript - vite - '@nuxt/ui@4.6.1(@nuxt/content@3.12.0(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.2)))(@tiptap/extensions@3.22.2(@tiptap/core@3.22.2(@tiptap/pm@3.22.2))(@tiptap/pm@3.22.2))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(@vercel/functions@3.4.3)(change-case@5.4.4)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.2)(typescript@6.0.2)(valibot@1.3.1(typescript@6.0.2))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))(yjs@13.6.30)(zod@4.3.6)': + '@nuxt/ui@4.6.1(dc93837d71a3209c19929f0a57f02654)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.32(typescript@6.0.2)) @@ -11479,7 +11554,7 @@ snapshots: knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.2 - motion-v: 2.2.0(@vueuse/core@14.2.1(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)) + motion-v: 2.2.0(@vueuse/core@14.2.1(vue@3.5.32(typescript@6.0.2)))(react@19.2.5)(vue@3.5.32(typescript@6.0.2)) ohash: 2.0.11 pathe: 2.0.3 reka-ui: 2.9.3(vue@3.5.32(typescript@6.0.2)) @@ -12310,7 +12385,6 @@ snapshots: '@resvg/resvg-js-win32-arm64-msvc': 2.6.2 '@resvg/resvg-js-win32-ia32-msvc': 2.6.2 '@resvg/resvg-js-win32-x64-msvc': 2.6.2 - optional: true '@resvg/resvg-wasm@2.6.2': optional: true @@ -12821,6 +12895,52 @@ snapshots: tailwindcss: 4.2.2 vite: 7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@takumi-rs/core-darwin-arm64@1.0.0-rc.16': + optional: true + + '@takumi-rs/core-darwin-x64@1.0.0-rc.16': + optional: true + + '@takumi-rs/core-linux-arm64-gnu@1.0.0-rc.16': + optional: true + + '@takumi-rs/core-linux-arm64-musl@1.0.0-rc.16': + optional: true + + '@takumi-rs/core-linux-x64-gnu@1.0.0-rc.16': + optional: true + + '@takumi-rs/core-linux-x64-musl@1.0.0-rc.16': + optional: true + + '@takumi-rs/core-win32-arm64-msvc@1.0.0-rc.16': + optional: true + + '@takumi-rs/core-win32-x64-msvc@1.0.0-rc.16': + optional: true + + '@takumi-rs/core@1.0.0-rc.16(react@19.2.5)': + dependencies: + '@takumi-rs/helpers': 1.0.0-rc.16(react@19.2.5) + optionalDependencies: + '@takumi-rs/core-darwin-arm64': 1.0.0-rc.16 + '@takumi-rs/core-darwin-x64': 1.0.0-rc.16 + '@takumi-rs/core-linux-arm64-gnu': 1.0.0-rc.16 + '@takumi-rs/core-linux-arm64-musl': 1.0.0-rc.16 + '@takumi-rs/core-linux-x64-gnu': 1.0.0-rc.16 + '@takumi-rs/core-linux-x64-musl': 1.0.0-rc.16 + '@takumi-rs/core-win32-arm64-msvc': 1.0.0-rc.16 + '@takumi-rs/core-win32-x64-msvc': 1.0.0-rc.16 + transitivePeerDependencies: + - react + - react-dom + optional: true + + '@takumi-rs/helpers@1.0.0-rc.16(react@19.2.5)': + dependencies: + react: 19.2.5 + optional: true + '@tanstack/table-core@8.21.3': {} '@tanstack/virtual-core@3.13.23': {} @@ -13643,9 +13763,10 @@ snapshots: '@uploadthing/mime-types@0.3.6': {} - '@vercel/analytics@2.0.1(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vue@3.5.32(typescript@6.0.2))': + '@vercel/analytics@2.0.1(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(react@19.2.5)(vue@3.5.32(typescript@6.0.2))': optionalDependencies: nuxt: 4.4.2(445499489540052a4c2e3761b79c8923) + react: 19.2.5 vue: 3.5.32(typescript@6.0.2) '@vercel/functions@3.4.3': @@ -13675,9 +13796,10 @@ snapshots: '@vercel/oidc@3.2.0': {} - '@vercel/speed-insights@2.0.0(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(vue@3.5.32(typescript@6.0.2))': + '@vercel/speed-insights@2.0.0(nuxt@4.4.2(445499489540052a4c2e3761b79c8923))(react@19.2.5)(vue@3.5.32(typescript@6.0.2))': optionalDependencies: nuxt: 4.4.2(445499489540052a4c2e3761b79c8923) + react: 19.2.5 vue: 3.5.32(typescript@6.0.2) '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))': @@ -15769,11 +15891,13 @@ snapshots: fraction.js@5.3.4: {} - framer-motion@12.38.0: + framer-motion@12.38.0(react@19.2.5): dependencies: motion-dom: 12.38.0 motion-utils: 12.36.0 tslib: 2.8.1 + optionalDependencies: + react: 19.2.5 fresh@2.0.0: {} @@ -17200,10 +17324,10 @@ snapshots: motion-utils@12.36.0: {} - motion-v@1.10.3(@vueuse/core@14.2.1(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)): + motion-v@1.10.3(@vueuse/core@14.2.1(vue@3.5.32(typescript@6.0.2)))(react@19.2.5)(vue@3.5.32(typescript@6.0.2)): dependencies: '@vueuse/core': 14.2.1(vue@3.5.32(typescript@6.0.2)) - framer-motion: 12.38.0 + framer-motion: 12.38.0(react@19.2.5) hey-listen: 1.0.8 motion-dom: 12.38.0 vue: 3.5.32(typescript@6.0.2) @@ -17212,10 +17336,10 @@ snapshots: - react - react-dom - motion-v@2.2.0(@vueuse/core@14.2.1(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)): + motion-v@2.2.0(@vueuse/core@14.2.1(vue@3.5.32(typescript@6.0.2)))(react@19.2.5)(vue@3.5.32(typescript@6.0.2)): dependencies: '@vueuse/core': 14.2.1(vue@3.5.32(typescript@6.0.2)) - framer-motion: 12.38.0 + framer-motion: 12.38.0(react@19.2.5) hey-listen: 1.0.8 motion-dom: 12.38.0 motion-utils: 12.36.0 @@ -17473,7 +17597,7 @@ snapshots: transitivePeerDependencies: - magicast - nuxt-og-image@6.3.3(b69ef693330d8f19d0451ea001b098dd): + nuxt-og-image@6.3.3(8ce566be90d60cd1d79313cc50533d1d): dependencies: '@clack/prompts': 1.2.0 '@nuxt/kit': 4.4.2(magicast@0.5.2) @@ -17510,6 +17634,7 @@ snapshots: optionalDependencies: '@resvg/resvg-js': 2.6.2 '@resvg/resvg-wasm': 2.6.2 + '@takumi-rs/core': 1.0.0-rc.16(react@19.2.5) fontless: 0.2.1(@vercel/functions@3.4.3)(db0@0.3.4(@libsql/client@0.17.2)(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.2)(@opentelemetry/api@1.9.0)(better-sqlite3@12.8.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) playwright-core: 1.59.1 satori: 0.19.3 @@ -18613,6 +18738,9 @@ snapshots: react-is@17.0.2: {} + react@19.2.5: + optional: true + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 From 6fedebeaf7b100d45bb8b32b687be2cdd5fae936 Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Thu, 9 Apr 2026 15:09:30 +0100 Subject: [PATCH 3/4] fix lint et typecheck --- modules/auto-mcp.ts | 10 +++++++++- nuxt.config.ts | 12 ++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/modules/auto-mcp.ts b/modules/auto-mcp.ts index f0a9c2e50..796037c24 100644 --- a/modules/auto-mcp.ts +++ b/modules/auto-mcp.ts @@ -25,7 +25,15 @@ export default defineNuxtModule({ if (!ide) { return } - const modulesWithMCP = await $fetch('https://api.nuxt.com/modules').then((res: any) => res.modules.filter((module: any) => module.mcp).map(({ name, npm, mcp }: any) => ({ name, npm, mcp }))) + let modulesWithMCP: { name: string, npm: string, mcp: string }[] = [] + try { + const res = await $fetch<{ modules: { mcp?: string, name: string, npm: string }[] }>('https://api.nuxt.com/modules') + modulesWithMCP = res.modules + .filter(module => module.mcp) + .map(({ name, npm, mcp }) => ({ name, npm, mcp: mcp! })) + } catch { + consola.debug('[auto-mcp] Skipping module list (api.nuxt.com unreachable)') + } const localMcpJson = join(nuxt.options.rootDir, `.${ide}/mcp.json`) const globalMcpJson = join(homedir(), `.${ide}/mcp.json`) const mcpConfigs = { diff --git a/nuxt.config.ts b/nuxt.config.ts index b2f63a532..cc357f590 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -435,12 +435,6 @@ export default defineNuxtConfig({ include: ['../test/nuxt'] } }, - // Docs crawl prerenders many /_og/ URLs; Satori+Resvg can exceed the default 15s per image under load. - ogImage: { - security: { - renderTimeout: 120_000 - } - }, hooks: { 'content:file:beforeParse': async ({ file }) => { if (file.id.startsWith('docsv5/')) { @@ -524,6 +518,12 @@ export default defineNuxtConfig({ route: '/mcp', browserRedirect: '/docs/guide/ai/mcp' }, + // Docs crawl prerenders many /_og/ URLs; Satori+Resvg can exceed the default 15s per image under load. + ogImage: { + security: { + renderTimeout: 120_000 + } + }, turnstile: { siteKey: '0x4AAAAAAAP2vNBsTBT3ucZi' }, From 768c9b86e64b2ac892c5733be43bcb11b0be2ed7 Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Thu, 9 Apr 2026 15:18:55 +0100 Subject: [PATCH 4/4] up --- app/pages/blog/[slug].vue | 2 +- app/pages/blog/index.vue | 2 +- app/pages/changelog.vue | 2 +- app/pages/deploy/[slug].vue | 2 +- app/pages/deploy/index.vue | 2 +- app/pages/design-kit.vue | 2 +- app/pages/docs/[...slug].vue | 2 +- app/pages/enterprise/agencies/[slug].vue | 2 +- app/pages/enterprise/agencies/index.vue | 2 +- app/pages/enterprise/jobs.vue | 2 +- app/pages/enterprise/sponsors.vue | 2 +- app/pages/evals.vue | 2 +- app/pages/newsletter.vue | 2 +- app/pages/showcase.vue | 2 +- app/pages/team.vue | 2 +- app/pages/templates.vue | 2 +- app/pages/video-courses.vue | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/pages/blog/[slug].vue b/app/pages/blog/[slug].vue index 82e62eaba..3103701af 100644 --- a/app/pages/blog/[slug].vue +++ b/app/pages/blog/[slug].vue @@ -35,7 +35,7 @@ useSeoMeta({ }) if (!article.value.image) { - defineOgImage('Docs', { + defineOgImage('DocsSatori', { headline: 'Blog', title, description diff --git a/app/pages/blog/index.vue b/app/pages/blog/index.vue index fd92037f8..bf8eaecfb 100644 --- a/app/pages/blog/index.vue +++ b/app/pages/blog/index.vue @@ -25,7 +25,7 @@ useSeoMeta({ ogDescription: page.value.description, ogTitle: page.value.title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Blog', title: page.value.title, description: page.value.description diff --git a/app/pages/changelog.vue b/app/pages/changelog.vue index bc447192a..259ea72d4 100644 --- a/app/pages/changelog.vue +++ b/app/pages/changelog.vue @@ -15,7 +15,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Changelog', title, description diff --git a/app/pages/deploy/[slug].vue b/app/pages/deploy/[slug].vue index b86c9f14a..08a05edeb 100644 --- a/app/pages/deploy/[slug].vue +++ b/app/pages/deploy/[slug].vue @@ -32,7 +32,7 @@ useSeoMeta({ ogTitle: `Deploy Nuxt to ${title}` }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Deploy To', title, description diff --git a/app/pages/deploy/index.vue b/app/pages/deploy/index.vue index cb178b6d8..fca70db9e 100644 --- a/app/pages/deploy/index.vue +++ b/app/pages/deploy/index.vue @@ -21,7 +21,7 @@ useSeoMeta({ ogTitle: title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { title: 'Deploy Nuxt', description }) diff --git a/app/pages/design-kit.vue b/app/pages/design-kit.vue index 32c91247f..1b7a81d01 100644 --- a/app/pages/design-kit.vue +++ b/app/pages/design-kit.vue @@ -18,7 +18,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { title, description }) diff --git a/app/pages/docs/[...slug].vue b/app/pages/docs/[...slug].vue index 4b3ab5651..2134fb1d1 100644 --- a/app/pages/docs/[...slug].vue +++ b/app/pages/docs/[...slug].vue @@ -152,7 +152,7 @@ if (import.meta.server) { ogTitle: titleTemplate.value?.includes('%s') ? titleTemplate.value.replace('%s', title.value) : title.value }) - defineOgImage('Docs', { + defineOgImage('DocsSatori', { headline: breadcrumb.value.length ? breadcrumb.value.map(link => link.label).join(' > ') : '', title: title.value ?? '', description diff --git a/app/pages/enterprise/agencies/[slug].vue b/app/pages/enterprise/agencies/[slug].vue index 2001e5ced..ced47e49e 100644 --- a/app/pages/enterprise/agencies/[slug].vue +++ b/app/pages/enterprise/agencies/[slug].vue @@ -35,7 +35,7 @@ useSeoMeta({ ogTitle: `${title} · Nuxt Agencies` }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Nuxt Agencies', title, description diff --git a/app/pages/enterprise/agencies/index.vue b/app/pages/enterprise/agencies/index.vue index 9a79c4880..012badd27 100644 --- a/app/pages/enterprise/agencies/index.vue +++ b/app/pages/enterprise/agencies/index.vue @@ -22,7 +22,7 @@ useSeoMeta({ ogTitle: `${title} · Enterprise` }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Enterprise', title, description diff --git a/app/pages/enterprise/jobs.vue b/app/pages/enterprise/jobs.vue index 1fe39112c..69023ce3d 100644 --- a/app/pages/enterprise/jobs.vue +++ b/app/pages/enterprise/jobs.vue @@ -19,7 +19,7 @@ useSeoMeta({ ogTitle: `${title} · Enterprise` }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Enterprise', title, description diff --git a/app/pages/enterprise/sponsors.vue b/app/pages/enterprise/sponsors.vue index 26be24f20..a15e07458 100644 --- a/app/pages/enterprise/sponsors.vue +++ b/app/pages/enterprise/sponsors.vue @@ -22,7 +22,7 @@ useSeoMeta({ ogTitle: `${title} · Community` }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Community', title, description diff --git a/app/pages/evals.vue b/app/pages/evals.vue index 25ee0363c..9afcb85c4 100644 --- a/app/pages/evals.vue +++ b/app/pages/evals.vue @@ -52,7 +52,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImage('Docs', { title, description }) +defineOgImage('DocsSatori', { title, description }) // Build experiment map by name const experimentMap = computed(() => { diff --git a/app/pages/newsletter.vue b/app/pages/newsletter.vue index 7de491e64..b543fea09 100644 --- a/app/pages/newsletter.vue +++ b/app/pages/newsletter.vue @@ -17,7 +17,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { title, description }) diff --git a/app/pages/showcase.vue b/app/pages/showcase.vue index 581c11d12..eec8ad4c1 100644 --- a/app/pages/showcase.vue +++ b/app/pages/showcase.vue @@ -22,7 +22,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Resources', title, description diff --git a/app/pages/team.vue b/app/pages/team.vue index a0237e56a..80cb777e3 100644 --- a/app/pages/team.vue +++ b/app/pages/team.vue @@ -36,7 +36,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { title, description }) diff --git a/app/pages/templates.vue b/app/pages/templates.vue index 6b19b326f..731ecbb1b 100644 --- a/app/pages/templates.vue +++ b/app/pages/templates.vue @@ -24,7 +24,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Resources', title, description diff --git a/app/pages/video-courses.vue b/app/pages/video-courses.vue index 93e019922..57e6aa273 100644 --- a/app/pages/video-courses.vue +++ b/app/pages/video-courses.vue @@ -21,7 +21,7 @@ useSeoMeta({ ogDescription: description, ogTitle: title }) -defineOgImage('Docs', { +defineOgImage('DocsSatori', { headline: 'Resources', title, description