diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
index af953ae09..d903a6025 100644
--- a/.github/workflows/e2e.yml
+++ b/.github/workflows/e2e.yml
@@ -111,6 +111,7 @@ jobs:
- name: Install Nextjs in app-pages-router
working-directory: examples/app-pages-router
run: pnpm add next@${{ needs.check_next_version.outputs.previousNextVersion }}
+ # We do not install the latest canary of Next in the experimental app.
- name: Get Playwright version
id: playwright-version
@@ -157,6 +158,8 @@ jobs:
echo "PAGES_ROUTER_URL=$PAGES_ROUTER_URL" >> $GITHUB_ENV
APP_PAGES_ROUTER_URL=$(jq -r '.["e2e-example-AppPagesRouter"].url' .sst/outputs.json)
echo "APP_PAGES_ROUTER_URL=$APP_PAGES_ROUTER_URL" >> $GITHUB_ENV
+ EXPERIMENTAL_APP_URL=$(jq -r '.["e2e-example-Experimental"].url' .sst/outputs.json)
+ echo "EXPERIMENTAL_APP_URL=$EXPERIMENTAL_APP_URL" >> $GITHUB_ENV
- name: Run e2e Test
run: npm run e2e:test
diff --git a/examples/experimental/.gitignore b/examples/experimental/.gitignore
new file mode 100644
index 000000000..5ef6a5207
--- /dev/null
+++ b/examples/experimental/.gitignore
@@ -0,0 +1,41 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/versions
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# env files (can opt-in for committing if needed)
+.env*
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/examples/experimental/README.md b/examples/experimental/README.md
new file mode 100644
index 000000000..0009a0255
--- /dev/null
+++ b/examples/experimental/README.md
@@ -0,0 +1,3 @@
+# Experimental
+
+This project is meant to test experimental features that are only available on canary builds of Next.js.
\ No newline at end of file
diff --git a/examples/experimental/next.config.ts b/examples/experimental/next.config.ts
new file mode 100644
index 000000000..c3fcdb402
--- /dev/null
+++ b/examples/experimental/next.config.ts
@@ -0,0 +1,16 @@
+import type { NextConfig } from "next";
+
+const nextConfig: NextConfig = {
+ /* config options here */
+ cleanDistDir: true,
+ output: "standalone",
+ eslint: {
+ ignoreDuringBuilds: true,
+ },
+ experimental: {
+ ppr: "incremental",
+ nodeMiddleware: true,
+ },
+};
+
+export default nextConfig;
diff --git a/examples/experimental/open-next.config.ts b/examples/experimental/open-next.config.ts
new file mode 100644
index 000000000..5ff6edf53
--- /dev/null
+++ b/examples/experimental/open-next.config.ts
@@ -0,0 +1,14 @@
+const config = {
+ default: {
+ override: {
+ wrapper: "aws-lambda-streaming",
+ queue: "sqs-lite",
+ incrementalCache: "s3-lite",
+ tagCache: "dynamodb-lite",
+ },
+ },
+ functions: {},
+ buildCommand: "npx turbo build",
+};
+
+export default config;
diff --git a/examples/experimental/package.json b/examples/experimental/package.json
new file mode 100644
index 000000000..a40ac8ff7
--- /dev/null
+++ b/examples/experimental/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "experimental",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "openbuild": "node ../../packages/open-next/dist/index.js build",
+ "dev": "next dev --turbopack --port 3004",
+ "build": "next build",
+ "start": "next start --port 3004",
+ "lint": "next lint",
+ "clean": "rm -rf .turbo node_modules .next .open-next"
+ },
+ "dependencies": {
+ "next": "15.4.0-canary.14",
+ "react": "catalog:",
+ "react-dom": "catalog:"
+ },
+ "devDependencies": {
+ "@types/node": "catalog:",
+ "@types/react": "catalog:",
+ "@types/react-dom": "catalog:",
+ "typescript": "catalog:"
+ }
+}
diff --git a/examples/experimental/src/app/favicon.ico b/examples/experimental/src/app/favicon.ico
new file mode 100644
index 000000000..718d6fea4
Binary files /dev/null and b/examples/experimental/src/app/favicon.ico differ
diff --git a/examples/experimental/src/app/globals.css b/examples/experimental/src/app/globals.css
new file mode 100644
index 000000000..e3734be15
--- /dev/null
+++ b/examples/experimental/src/app/globals.css
@@ -0,0 +1,42 @@
+:root {
+ --background: #ffffff;
+ --foreground: #171717;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --background: #0a0a0a;
+ --foreground: #ededed;
+ }
+}
+
+html,
+body {
+ max-width: 100vw;
+ overflow-x: hidden;
+}
+
+body {
+ color: var(--foreground);
+ background: var(--background);
+ font-family: Arial, Helvetica, sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+* {
+ box-sizing: border-box;
+ padding: 0;
+ margin: 0;
+}
+
+a {
+ color: inherit;
+ text-decoration: none;
+}
+
+@media (prefers-color-scheme: dark) {
+ html {
+ color-scheme: dark;
+ }
+}
diff --git a/examples/experimental/src/app/layout.tsx b/examples/experimental/src/app/layout.tsx
new file mode 100644
index 000000000..42fc323e4
--- /dev/null
+++ b/examples/experimental/src/app/layout.tsx
@@ -0,0 +1,32 @@
+import type { Metadata } from "next";
+import { Geist, Geist_Mono } from "next/font/google";
+import "./globals.css";
+
+const geistSans = Geist({
+ variable: "--font-geist-sans",
+ subsets: ["latin"],
+});
+
+const geistMono = Geist_Mono({
+ variable: "--font-geist-mono",
+ subsets: ["latin"],
+});
+
+export const metadata: Metadata = {
+ title: "Create Next App",
+ description: "Generated by create next app",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
+ {children}
+
+
+ );
+}
diff --git a/examples/experimental/src/app/page.module.css b/examples/experimental/src/app/page.module.css
new file mode 100644
index 000000000..5c7b57e9e
--- /dev/null
+++ b/examples/experimental/src/app/page.module.css
@@ -0,0 +1,165 @@
+.page {
+ --gray-rgb: 0, 0, 0;
+ --gray-alpha-200: rgba(var(--gray-rgb), 0.08);
+ --gray-alpha-100: rgba(var(--gray-rgb), 0.05);
+
+ --button-primary-hover: #383838;
+ --button-secondary-hover: #f2f2f2;
+
+ display: grid;
+ grid-template-rows: 20px 1fr 20px;
+ align-items: center;
+ justify-items: center;
+ min-height: 100svh;
+ padding: 80px;
+ gap: 64px;
+ font-family: var(--font-geist-sans);
+}
+
+@media (prefers-color-scheme: dark) {
+ .page {
+ --gray-rgb: 255, 255, 255;
+ --gray-alpha-200: rgba(var(--gray-rgb), 0.145);
+ --gray-alpha-100: rgba(var(--gray-rgb), 0.06);
+
+ --button-primary-hover: #ccc;
+ --button-secondary-hover: #1a1a1a;
+ }
+}
+
+.main {
+ display: flex;
+ flex-direction: column;
+ gap: 32px;
+ grid-row-start: 2;
+}
+
+.main ol {
+ font-family: var(--font-geist-mono);
+ padding-left: 0;
+ margin: 0;
+ font-size: 14px;
+ line-height: 24px;
+ letter-spacing: -0.01em;
+ list-style-position: inside;
+}
+
+.main li:not(:last-of-type) {
+ margin-bottom: 8px;
+}
+
+.main code {
+ font-family: inherit;
+ background: var(--gray-alpha-100);
+ padding: 2px 4px;
+ border-radius: 4px;
+ font-weight: 600;
+}
+
+.ctas {
+ display: flex;
+ gap: 16px;
+}
+
+.ctas a {
+ appearance: none;
+ border-radius: 128px;
+ height: 48px;
+ padding: 0 20px;
+ border: none;
+ border: 1px solid transparent;
+ transition: background 0.2s, color 0.2s, border-color 0.2s;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 16px;
+ line-height: 20px;
+ font-weight: 500;
+}
+
+a.primary {
+ background: var(--foreground);
+ color: var(--background);
+ gap: 8px;
+}
+
+a.secondary {
+ border-color: var(--gray-alpha-200);
+ min-width: 158px;
+}
+
+.footer {
+ grid-row-start: 3;
+ display: flex;
+ gap: 24px;
+}
+
+.footer a {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.footer img {
+ flex-shrink: 0;
+}
+
+/* Enable hover only on non-touch devices */
+@media (hover: hover) and (pointer: fine) {
+ a.primary:hover {
+ background: var(--button-primary-hover);
+ border-color: transparent;
+ }
+
+ a.secondary:hover {
+ background: var(--button-secondary-hover);
+ border-color: transparent;
+ }
+
+ .footer a:hover {
+ text-decoration: underline;
+ text-underline-offset: 4px;
+ }
+}
+
+@media (max-width: 600px) {
+ .page {
+ padding: 32px;
+ padding-bottom: 80px;
+ }
+
+ .main {
+ align-items: center;
+ }
+
+ .main ol {
+ text-align: center;
+ }
+
+ .ctas {
+ flex-direction: column;
+ }
+
+ .ctas a {
+ font-size: 14px;
+ height: 40px;
+ padding: 0 16px;
+ }
+
+ a.secondary {
+ min-width: auto;
+ }
+
+ .footer {
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: center;
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ .logo {
+ filter: invert();
+ }
+}
diff --git a/examples/experimental/src/app/page.tsx b/examples/experimental/src/app/page.tsx
new file mode 100644
index 000000000..f14e5dad0
--- /dev/null
+++ b/examples/experimental/src/app/page.tsx
@@ -0,0 +1,14 @@
+import Link from "next/link";
+import styles from "./page.module.css";
+
+export default function Home() {
+ return (
+
+
+
+ Incremental PPR
+
+
+
+ );
+}
diff --git a/examples/experimental/src/app/ppr/page.tsx b/examples/experimental/src/app/ppr/page.tsx
new file mode 100644
index 000000000..11d017a76
--- /dev/null
+++ b/examples/experimental/src/app/ppr/page.tsx
@@ -0,0 +1,16 @@
+import { DynamicComponent } from "@/components/dynamic";
+import { StaticComponent } from "@/components/static";
+import { Suspense } from "react";
+
+export const experimental_ppr = true;
+
+export default function PPRPage() {
+ return (
+
+
+ Loading...
}>
+
+
+
+ );
+}
diff --git a/examples/experimental/src/components/dynamic.tsx b/examples/experimental/src/components/dynamic.tsx
new file mode 100644
index 000000000..bca758e49
--- /dev/null
+++ b/examples/experimental/src/components/dynamic.tsx
@@ -0,0 +1,15 @@
+import { setTimeout } from "node:timers/promises";
+import { headers } from "next/headers";
+
+export async function DynamicComponent() {
+ const _headers = await headers();
+ // Simulate a delay to mimic server-side calls
+ await setTimeout(1000, new Date().toString());
+ return (
+
+
Dynamic Component
+
This component should be SSR
+
{_headers.get("referer")}
+
+ );
+}
diff --git a/examples/experimental/src/components/static.tsx b/examples/experimental/src/components/static.tsx
new file mode 100644
index 000000000..8af73f9f0
--- /dev/null
+++ b/examples/experimental/src/components/static.tsx
@@ -0,0 +1,8 @@
+export function StaticComponent() {
+ return (
+
+
Static Component
+
This is a static component that does not change.
+
+ );
+}
diff --git a/examples/experimental/src/middleware.ts b/examples/experimental/src/middleware.ts
new file mode 100644
index 000000000..bb097d692
--- /dev/null
+++ b/examples/experimental/src/middleware.ts
@@ -0,0 +1,27 @@
+import crypto from "node:crypto";
+import { type NextRequest, NextResponse } from "next/server";
+
+export default function middleware(request: NextRequest) {
+ if (request.nextUrl.pathname === "/api/hello") {
+ return NextResponse.json({
+ name: "World",
+ });
+ }
+ if (request.nextUrl.pathname === "/redirect") {
+ return NextResponse.redirect(new URL("/", request.url));
+ }
+ if (request.nextUrl.pathname === "/rewrite") {
+ return NextResponse.rewrite(new URL("/", request.url));
+ }
+
+ return NextResponse.next({
+ headers: {
+ "x-middleware-test": "1",
+ "x-random-node": crypto.randomUUID(),
+ },
+ });
+}
+
+export const config = {
+ runtime: "nodejs",
+};
diff --git a/examples/experimental/tsconfig.json b/examples/experimental/tsconfig.json
new file mode 100644
index 000000000..c1334095f
--- /dev/null
+++ b/examples/experimental/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "target": "ES2017",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/examples/sst/sst.config.ts b/examples/sst/sst.config.ts
index 7d68f3f11..32881d67c 100644
--- a/examples/sst/sst.config.ts
+++ b/examples/sst/sst.config.ts
@@ -2,6 +2,7 @@ import type { SSTConfig } from "sst";
import { AppPagesRouter } from "./stacks/AppPagesRouter";
import { AppRouter } from "./stacks/AppRouter";
+import { Experimental } from "./stacks/Experimental";
import { PagesRouter } from "./stacks/PagesRouter";
export default {
@@ -12,6 +13,10 @@ export default {
};
},
stacks(app) {
- app.stack(AppRouter).stack(PagesRouter).stack(AppPagesRouter);
+ app
+ .stack(AppRouter)
+ .stack(PagesRouter)
+ .stack(AppPagesRouter)
+ .stack(Experimental);
},
} satisfies SSTConfig;
diff --git a/examples/sst/stacks/Experimental.ts b/examples/sst/stacks/Experimental.ts
new file mode 100644
index 000000000..d41603db2
--- /dev/null
+++ b/examples/sst/stacks/Experimental.ts
@@ -0,0 +1,14 @@
+import { OpenNextCdkReferenceImplementation } from "./OpenNextReferenceImplementation";
+
+export function Experimental({ stack }) {
+ const site = new OpenNextCdkReferenceImplementation(stack, "experimental", {
+ path: "../experimental",
+ environment: {
+ OPEN_NEXT_FORCE_NON_EMPTY_RESPONSE: "true",
+ },
+ });
+
+ stack.addOutputs({
+ url: `https://${site.distribution.domainName}`,
+ });
+}
diff --git a/packages/tests-e2e/playwright.config.js b/packages/tests-e2e/playwright.config.js
index fe7e08be2..097102242 100644
--- a/packages/tests-e2e/playwright.config.js
+++ b/packages/tests-e2e/playwright.config.js
@@ -23,5 +23,12 @@ export default defineConfig({
baseURL: process.env.APP_PAGES_ROUTER_URL || "http://localhost:3003",
},
},
+ {
+ name: "experimental",
+ testMatch: ["tests/experimental/*.test.ts"],
+ use: {
+ baseURL: process.env.EXPERIMENTAL_APP_URL || "http://localhost:3004",
+ },
+ },
],
});
diff --git a/packages/tests-e2e/tests/experimental/nodeMiddleware.test.ts b/packages/tests-e2e/tests/experimental/nodeMiddleware.test.ts
new file mode 100644
index 000000000..55fd4e609
--- /dev/null
+++ b/packages/tests-e2e/tests/experimental/nodeMiddleware.test.ts
@@ -0,0 +1,31 @@
+import { expect, test } from "@playwright/test";
+
+test.describe("Node Middleware", () => {
+ test("Node middleware should add headers", async ({ request }) => {
+ const resp = await request.get("/");
+ expect(resp.status()).toEqual(200);
+ const headers = resp.headers();
+ expect(headers["x-middleware-test"]).toEqual("1");
+ expect(headers["x-random-node"]).toBeDefined();
+ });
+
+ test("Node middleware should return json", async ({ request }) => {
+ const resp = await request.get("/api/hello");
+ expect(resp.status()).toEqual(200);
+ const json = await resp.json();
+ expect(json).toEqual({ name: "World" });
+ });
+
+ test("Node middleware should redirect", async ({ page }) => {
+ await page.goto("/redirect");
+ await page.waitForURL("/");
+ const el = page.getByText("Incremental PPR");
+ await expect(el).toBeVisible();
+ });
+
+ test("Node middleware should rewrite", async ({ page }) => {
+ await page.goto("/rewrite");
+ const el = page.getByText("Incremental PPR");
+ await expect(el).toBeVisible();
+ });
+});
diff --git a/packages/tests-e2e/tests/experimental/ppr.test.ts b/packages/tests-e2e/tests/experimental/ppr.test.ts
new file mode 100644
index 000000000..a9e946945
--- /dev/null
+++ b/packages/tests-e2e/tests/experimental/ppr.test.ts
@@ -0,0 +1,24 @@
+import { expect, test } from "@playwright/test";
+
+test.describe("PPR", () => {
+ test("PPR should show loading first", async ({ page }) => {
+ await page.goto("/");
+ await page.getByRole("link", { name: "Incremental PPR" }).click();
+ await page.waitForURL("/ppr");
+ const loading = page.getByText("Loading...");
+ await expect(loading).toBeVisible();
+ const el = page.getByText("Dynamic Component");
+ await expect(el).toBeVisible();
+ });
+
+ test("PPR rsc prefetch request should be cached", async ({ request }) => {
+ const resp = await request.get("/ppr", {
+ headers: { rsc: "1", "next-router-prefetch": "1" },
+ });
+ expect(resp.status()).toEqual(200);
+ const headers = resp.headers();
+ expect(headers["x-nextjs-postponed"]).toEqual("1");
+ expect(headers["x-nextjs-cache"]).toEqual("HIT");
+ expect(headers["cache-control"]).toEqual("s-maxage=31536000");
+ });
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4327bfa4f..48cbd97f9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -137,6 +137,31 @@ importers:
specifier: 'catalog:'
version: 5.6.3
+ examples/experimental:
+ dependencies:
+ next:
+ specifier: 15.4.0-canary.14
+ version: 15.4.0-canary.14(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react:
+ specifier: 'catalog:'
+ version: 19.0.0
+ react-dom:
+ specifier: 'catalog:'
+ version: 19.0.0(react@19.0.0)
+ devDependencies:
+ '@types/node':
+ specifier: 'catalog:'
+ version: 20.17.6
+ '@types/react':
+ specifier: 'catalog:'
+ version: 19.0.0
+ '@types/react-dom':
+ specifier: 'catalog:'
+ version: 19.0.0
+ typescript:
+ specifier: 'catalog:'
+ version: 5.6.3
+
examples/pages-router:
dependencies:
'@example/shared':
@@ -1009,6 +1034,9 @@ packages:
'@emnapi/runtime@1.3.1':
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
+ '@emnapi/runtime@1.4.1':
+ resolution: {integrity: sha512-LMshMVP0ZhACNjQNYXiU1iZJ6QCcv0lUdPDPugqGvCGXt5xtRVBPdtA0qU12pEXZzpWAhWlZYptfdAFq10DOVQ==}
+
'@envelop/core@3.0.6':
resolution: {integrity: sha512-06t1xCPXq6QFN7W1JUEf68aCwYN0OUDNAIoJe7bAqhaoa2vn7NCcuX1VHkJ/OWpmElUgCsRO6RiBbIru1in0Ig==}
@@ -1608,105 +1636,215 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@img/sharp-darwin-arm64@0.34.1':
+ resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+
'@img/sharp-darwin-x64@0.33.5':
resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [darwin]
+ '@img/sharp-darwin-x64@0.34.1':
+ resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+
'@img/sharp-libvips-darwin-arm64@1.0.4':
resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
cpu: [arm64]
os: [darwin]
+ '@img/sharp-libvips-darwin-arm64@1.1.0':
+ resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==}
+ cpu: [arm64]
+ os: [darwin]
+
'@img/sharp-libvips-darwin-x64@1.0.4':
resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
cpu: [x64]
os: [darwin]
+ '@img/sharp-libvips-darwin-x64@1.1.0':
+ resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==}
+ cpu: [x64]
+ os: [darwin]
+
'@img/sharp-libvips-linux-arm64@1.0.4':
resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
cpu: [arm64]
os: [linux]
+ '@img/sharp-libvips-linux-arm64@1.1.0':
+ resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==}
+ cpu: [arm64]
+ os: [linux]
+
'@img/sharp-libvips-linux-arm@1.0.5':
resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
cpu: [arm]
os: [linux]
+ '@img/sharp-libvips-linux-arm@1.1.0':
+ resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-ppc64@1.1.0':
+ resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==}
+ cpu: [ppc64]
+ os: [linux]
+
'@img/sharp-libvips-linux-s390x@1.0.4':
resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
cpu: [s390x]
os: [linux]
+ '@img/sharp-libvips-linux-s390x@1.1.0':
+ resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==}
+ cpu: [s390x]
+ os: [linux]
+
'@img/sharp-libvips-linux-x64@1.0.4':
resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
cpu: [x64]
os: [linux]
+ '@img/sharp-libvips-linux-x64@1.1.0':
+ resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==}
+ cpu: [x64]
+ os: [linux]
+
'@img/sharp-libvips-linuxmusl-arm64@1.0.4':
resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
cpu: [arm64]
os: [linux]
+ '@img/sharp-libvips-linuxmusl-arm64@1.1.0':
+ resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==}
+ cpu: [arm64]
+ os: [linux]
+
'@img/sharp-libvips-linuxmusl-x64@1.0.4':
resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
cpu: [x64]
os: [linux]
+ '@img/sharp-libvips-linuxmusl-x64@1.1.0':
+ resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==}
+ cpu: [x64]
+ os: [linux]
+
'@img/sharp-linux-arm64@0.33.5':
resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
+ '@img/sharp-linux-arm64@0.34.1':
+ resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
'@img/sharp-linux-arm@0.33.5':
resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
+ '@img/sharp-linux-arm@0.34.1':
+ resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+
'@img/sharp-linux-s390x@0.33.5':
resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
+ '@img/sharp-linux-s390x@0.34.1':
+ resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+
'@img/sharp-linux-x64@0.33.5':
resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
+ '@img/sharp-linux-x64@0.34.1':
+ resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
'@img/sharp-linuxmusl-arm64@0.33.5':
resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
+ '@img/sharp-linuxmusl-arm64@0.34.1':
+ resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
'@img/sharp-linuxmusl-x64@0.33.5':
resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
+ '@img/sharp-linuxmusl-x64@0.34.1':
+ resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
'@img/sharp-wasm32@0.33.5':
resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32]
+ '@img/sharp-wasm32@0.34.1':
+ resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+
'@img/sharp-win32-ia32@0.33.5':
resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32]
os: [win32]
+ '@img/sharp-win32-ia32@0.34.1':
+ resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+
'@img/sharp-win32-x64@0.33.5':
resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [win32]
+ '@img/sharp-win32-x64@0.34.1':
+ resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -1768,54 +1906,105 @@ packages:
'@next/env@15.2.0':
resolution: {integrity: sha512-eMgJu1RBXxxqqnuRJQh5RozhskoNUDHBFybvi+Z+yK9qzKeG7dadhv/Vp1YooSZmCnegf7JxWuapV77necLZNA==}
+ '@next/env@15.4.0-canary.14':
+ resolution: {integrity: sha512-ynXM3n0AEcB1mwoOLgar27s/WoFyX0C8kpbfpc6bylq2rfS+q+KNla1WAVX3QdHyV82KyrqdMQAFOIyTZg4K9A==}
+
'@next/swc-darwin-arm64@15.2.0':
resolution: {integrity: sha512-rlp22GZwNJjFCyL7h5wz9vtpBVuCt3ZYjFWpEPBGzG712/uL1bbSkS675rVAUCRZ4hjoTJ26Q7IKhr5DfJrHDA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
+ '@next/swc-darwin-arm64@15.4.0-canary.14':
+ resolution: {integrity: sha512-p62YaNcigaJlZ6IIubZPT+S4N0CXXkjqdIbC2Otr6LLxWsvdkHRgWaPLHauCxWw0zS7jczKY1w4ZfyX9l26sIQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
'@next/swc-darwin-x64@15.2.0':
resolution: {integrity: sha512-DiU85EqSHogCz80+sgsx90/ecygfCSGl5P3b4XDRVZpgujBm5lp4ts7YaHru7eVTyZMjHInzKr+w0/7+qDrvMA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
+ '@next/swc-darwin-x64@15.4.0-canary.14':
+ resolution: {integrity: sha512-PQ4z01gYCeYzP4NpFKBvg0slDu/CZ+vrpin6+O5XfzGOOdBCUqlJWK78ZTlfs8eTjVWnvVEi2FsTnbW5BZ0yiA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
'@next/swc-linux-arm64-gnu@15.2.0':
resolution: {integrity: sha512-VnpoMaGukiNWVxeqKHwi8MN47yKGyki5q+7ql/7p/3ifuU2341i/gDwGK1rivk0pVYbdv5D8z63uu9yMw0QhpQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ '@next/swc-linux-arm64-gnu@15.4.0-canary.14':
+ resolution: {integrity: sha512-u/eeGK9okYiJ24aLcrq2jOCyOnjhzOM/MkcOOMkzE4/Rp7EKIepnGUhnIcLeLmcQw4RCDAjh3QZBqt5rQEm4fA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
'@next/swc-linux-arm64-musl@15.2.0':
resolution: {integrity: sha512-ka97/ssYE5nPH4Qs+8bd8RlYeNeUVBhcnsNUmFM6VWEob4jfN9FTr0NBhXVi1XEJpj3cMfgSRW+LdE3SUZbPrw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ '@next/swc-linux-arm64-musl@15.4.0-canary.14':
+ resolution: {integrity: sha512-6eODbSA592cYMYtBU9Vm2D8ApXn6dBh/cN7GQlsTiDBIlCId9Z8DlkGCDj/9thr0JEluUlkt379+B19BGxsCEg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
'@next/swc-linux-x64-gnu@15.2.0':
resolution: {integrity: sha512-zY1JduE4B3q0k2ZCE+DAF/1efjTXUsKP+VXRtrt/rJCTgDlUyyryx7aOgYXNc1d8gobys/Lof9P9ze8IyRDn7Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ '@next/swc-linux-x64-gnu@15.4.0-canary.14':
+ resolution: {integrity: sha512-FwOtQDbMLJmGPCg8p1ZilCBjfjBZGBRwXnWmxLmpO4lcWTWMFTCfAxkqCUi62zXBZUJztqT8TgXQ9VBk4BKukQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
'@next/swc-linux-x64-musl@15.2.0':
resolution: {integrity: sha512-QqvLZpurBD46RhaVaVBepkVQzh8xtlUN00RlG4Iq1sBheNugamUNPuZEH1r9X1YGQo1KqAe1iiShF0acva3jHQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ '@next/swc-linux-x64-musl@15.4.0-canary.14':
+ resolution: {integrity: sha512-0k8lkaryoYsB4wksRm/5SlWWtJjuq6vOzQ/zqKRlNdpNvsvzZ61sEaCLZn1zdcFcUVH6wSzK/GMclcpn2w0VAg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
'@next/swc-win32-arm64-msvc@15.2.0':
resolution: {integrity: sha512-ODZ0r9WMyylTHAN6pLtvUtQlGXBL9voljv6ujSlcsjOxhtXPI1Ag6AhZK0SE8hEpR1374WZZ5w33ChpJd5fsjw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
+ '@next/swc-win32-arm64-msvc@15.4.0-canary.14':
+ resolution: {integrity: sha512-Kih/2CNMpegubEJT8xoigF+hMihetcFEwWXINfPoO534GQax4o1HU56aai6YgFYCvcrb9fAmW2vVagCQx3GS2g==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
'@next/swc-win32-x64-msvc@15.2.0':
resolution: {integrity: sha512-8+4Z3Z7xa13NdUuUAcpVNA6o76lNPniBd9Xbo02bwXQXnZgFvEopwY2at5+z7yHl47X9qbZpvwatZ2BRo3EdZw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
+ '@next/swc-win32-x64-msvc@15.4.0-canary.14':
+ resolution: {integrity: sha512-iOTIfyhrUDDIFH0BA0ZAek8XEK2Wgtbg1QOiqzTU7QPasn28lK/b2bHI+stFrGfz6u1NZw9V/B+/D+o9lzSWKQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
'@node-minify/core@8.0.6':
resolution: {integrity: sha512-/vxN46ieWDLU67CmgbArEvOb41zlYFOkOtr9QW9CnTrBLuTyGgkyNWC2y5+khvRw3Br58p2B5ZVSx/PxCTru6g==}
engines: {node: '>=16.0.0'}
@@ -4254,6 +4443,27 @@ packages:
sass:
optional: true
+ next@15.4.0-canary.14:
+ resolution: {integrity: sha512-4/WNK9Uw/Js1QruZhZfUJWTLrXtL7cvVWLDi1PoCcGdVY91b/1U5jNDOt/Vebr/aJ6Xr5aF+PNHUTtcvBFPInw==}
+ engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.41.2
+ babel-plugin-react-compiler: '*'
+ react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ babel-plugin-react-compiler:
+ optional: true
+ sass:
+ optional: true
+
node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0}
@@ -4771,6 +4981,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ semver@7.7.1:
+ resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
send@0.19.0:
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
engines: {node: '>= 0.8.0'}
@@ -4798,6 +5013,10 @@ packages:
resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ sharp@0.34.1:
+ resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+
shebang-command@1.2.0:
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
engines: {node: '>=0.10.0'}
@@ -7502,6 +7721,11 @@ snapshots:
tslib: 2.8.0
optional: true
+ '@emnapi/runtime@1.4.1':
+ dependencies:
+ tslib: 2.8.0
+ optional: true
+
'@envelop/core@3.0.6':
dependencies:
'@envelop/types': 3.0.2
@@ -7862,76 +8086,154 @@ snapshots:
'@img/sharp-libvips-darwin-arm64': 1.0.4
optional: true
+ '@img/sharp-darwin-arm64@0.34.1':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.1.0
+ optional: true
+
'@img/sharp-darwin-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.0.4
optional: true
+ '@img/sharp-darwin-x64@0.34.1':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.1.0
+ optional: true
+
'@img/sharp-libvips-darwin-arm64@1.0.4':
optional: true
+ '@img/sharp-libvips-darwin-arm64@1.1.0':
+ optional: true
+
'@img/sharp-libvips-darwin-x64@1.0.4':
optional: true
+ '@img/sharp-libvips-darwin-x64@1.1.0':
+ optional: true
+
'@img/sharp-libvips-linux-arm64@1.0.4':
optional: true
+ '@img/sharp-libvips-linux-arm64@1.1.0':
+ optional: true
+
'@img/sharp-libvips-linux-arm@1.0.5':
optional: true
+ '@img/sharp-libvips-linux-arm@1.1.0':
+ optional: true
+
+ '@img/sharp-libvips-linux-ppc64@1.1.0':
+ optional: true
+
'@img/sharp-libvips-linux-s390x@1.0.4':
optional: true
+ '@img/sharp-libvips-linux-s390x@1.1.0':
+ optional: true
+
'@img/sharp-libvips-linux-x64@1.0.4':
optional: true
+ '@img/sharp-libvips-linux-x64@1.1.0':
+ optional: true
+
'@img/sharp-libvips-linuxmusl-arm64@1.0.4':
optional: true
+ '@img/sharp-libvips-linuxmusl-arm64@1.1.0':
+ optional: true
+
'@img/sharp-libvips-linuxmusl-x64@1.0.4':
optional: true
+ '@img/sharp-libvips-linuxmusl-x64@1.1.0':
+ optional: true
+
'@img/sharp-linux-arm64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.0.4
optional: true
+ '@img/sharp-linux-arm64@0.34.1':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.1.0
+ optional: true
+
'@img/sharp-linux-arm@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.0.5
optional: true
+ '@img/sharp-linux-arm@0.34.1':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.1.0
+ optional: true
+
'@img/sharp-linux-s390x@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.0.4
optional: true
+ '@img/sharp-linux-s390x@0.34.1':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.1.0
+ optional: true
+
'@img/sharp-linux-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.0.4
optional: true
+ '@img/sharp-linux-x64@0.34.1':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.1.0
+ optional: true
+
'@img/sharp-linuxmusl-arm64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.0.4
optional: true
+ '@img/sharp-linuxmusl-arm64@0.34.1':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
+ optional: true
+
'@img/sharp-linuxmusl-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.0.4
optional: true
+ '@img/sharp-linuxmusl-x64@0.34.1':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.1.0
+ optional: true
+
'@img/sharp-wasm32@0.33.5':
dependencies:
'@emnapi/runtime': 1.3.1
optional: true
+ '@img/sharp-wasm32@0.34.1':
+ dependencies:
+ '@emnapi/runtime': 1.4.1
+ optional: true
+
'@img/sharp-win32-ia32@0.33.5':
optional: true
+ '@img/sharp-win32-ia32@0.34.1':
+ optional: true
+
'@img/sharp-win32-x64@0.33.5':
optional: true
+ '@img/sharp-win32-x64@0.34.1':
+ optional: true
+
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -8014,30 +8316,56 @@ snapshots:
'@next/env@15.2.0': {}
+ '@next/env@15.4.0-canary.14': {}
+
'@next/swc-darwin-arm64@15.2.0':
optional: true
+ '@next/swc-darwin-arm64@15.4.0-canary.14':
+ optional: true
+
'@next/swc-darwin-x64@15.2.0':
optional: true
+ '@next/swc-darwin-x64@15.4.0-canary.14':
+ optional: true
+
'@next/swc-linux-arm64-gnu@15.2.0':
optional: true
+ '@next/swc-linux-arm64-gnu@15.4.0-canary.14':
+ optional: true
+
'@next/swc-linux-arm64-musl@15.2.0':
optional: true
+ '@next/swc-linux-arm64-musl@15.4.0-canary.14':
+ optional: true
+
'@next/swc-linux-x64-gnu@15.2.0':
optional: true
+ '@next/swc-linux-x64-gnu@15.4.0-canary.14':
+ optional: true
+
'@next/swc-linux-x64-musl@15.2.0':
optional: true
+ '@next/swc-linux-x64-musl@15.4.0-canary.14':
+ optional: true
+
'@next/swc-win32-arm64-msvc@15.2.0':
optional: true
+ '@next/swc-win32-arm64-msvc@15.4.0-canary.14':
+ optional: true
+
'@next/swc-win32-x64-msvc@15.2.0':
optional: true
+ '@next/swc-win32-x64-msvc@15.4.0-canary.14':
+ optional: true
+
'@node-minify/core@8.0.6':
dependencies:
'@node-minify/utils': 8.0.6
@@ -10752,7 +11080,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
- semver: 7.6.3
+ semver: 7.7.1
make-error@1.3.6: {}
@@ -10954,6 +11282,31 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
+ next@15.4.0-canary.14(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@next/env': 15.4.0-canary.14
+ '@swc/counter': 0.1.3
+ '@swc/helpers': 0.5.15
+ caniuse-lite: 1.0.30001669
+ postcss: 8.4.31
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ styled-jsx: 5.1.6(react@19.0.0)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 15.4.0-canary.14
+ '@next/swc-darwin-x64': 15.4.0-canary.14
+ '@next/swc-linux-arm64-gnu': 15.4.0-canary.14
+ '@next/swc-linux-arm64-musl': 15.4.0-canary.14
+ '@next/swc-linux-x64-gnu': 15.4.0-canary.14
+ '@next/swc-linux-x64-musl': 15.4.0-canary.14
+ '@next/swc-win32-arm64-msvc': 15.4.0-canary.14
+ '@next/swc-win32-x64-msvc': 15.4.0-canary.14
+ '@playwright/test': 1.49.1
+ sharp: 0.34.1
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
node-fetch@2.7.0:
dependencies:
whatwg-url: 5.0.0
@@ -11444,6 +11797,8 @@ snapshots:
semver@7.6.3: {}
+ semver@7.7.1: {}
+
send@0.19.0:
dependencies:
debug: 2.6.9
@@ -11535,6 +11890,34 @@ snapshots:
'@img/sharp-win32-x64': 0.33.5
optional: true
+ sharp@0.34.1:
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.0.3
+ semver: 7.7.1
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.34.1
+ '@img/sharp-darwin-x64': 0.34.1
+ '@img/sharp-libvips-darwin-arm64': 1.1.0
+ '@img/sharp-libvips-darwin-x64': 1.1.0
+ '@img/sharp-libvips-linux-arm': 1.1.0
+ '@img/sharp-libvips-linux-arm64': 1.1.0
+ '@img/sharp-libvips-linux-ppc64': 1.1.0
+ '@img/sharp-libvips-linux-s390x': 1.1.0
+ '@img/sharp-libvips-linux-x64': 1.1.0
+ '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
+ '@img/sharp-libvips-linuxmusl-x64': 1.1.0
+ '@img/sharp-linux-arm': 0.34.1
+ '@img/sharp-linux-arm64': 0.34.1
+ '@img/sharp-linux-s390x': 0.34.1
+ '@img/sharp-linux-x64': 0.34.1
+ '@img/sharp-linuxmusl-arm64': 0.34.1
+ '@img/sharp-linuxmusl-x64': 0.34.1
+ '@img/sharp-wasm32': 0.34.1
+ '@img/sharp-win32-ia32': 0.34.1
+ '@img/sharp-win32-x64': 0.34.1
+ optional: true
+
shebang-command@1.2.0:
dependencies:
shebang-regex: 1.0.0