mirror of
https://github.com/cloudflare/vinext.git
synced 2026-09-14 19:04:59 +08:00
@vinext/cloudflare@1.0.0-beta.0
27 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b0367f1448 |
fix(link): avoid reusing dynamic app route prefetches (#2450)
* fix(link): avoid reusing dynamic app route prefetches * fix(link): preserve static dynamic app prefetches * test(e2e): scope segment cache client params to prod |
||
|
|
49945a9e05 |
fix(link): reuse full prefetch loading shells (#2332)
* fix(link): reuse full prefetch loading shells * fix(link): share loading shell prefetch ownership |
||
|
|
b0de1af028 |
fix(cloudflare): support Sentry request errors on Workers (#2425)
* fix(cloudflare): support sentry request errors on workers * fix(cloudflare): avoid worker conditions in node pages builds * test(cloudflare): run sentry worker e2es in ci * test(cloudflare): cover sentry render errors * test(cloudflare): mirror sentry next setup in fixtures * update lockfile * update lockfile * test(cloudflare): cover sentry client instrumentation |
||
|
|
bcd4e44d96 |
feat(build): support prerender vite config (#2415)
* feat(build): support prerender vite config * feat(init): offer prerender config opt-in * fix(cloudflare): export prerender deploy helper * fix(cloudflare): avoid redundant prerender config load * fix(build): quiet adapter fallback warnings |
||
|
|
f0ba7b4afe |
fix(app-router): reuse committed client cache payloads (#2251)
* fix(app-router): seed client navigation cache * fix(cache): parse prerender cache metadata marker * test(cache): cover prerender metadata done marker * fix(cache): preserve static committed stale time * fix(link): honor dynamic stale time for auto prefetches * fix(router): retain committed client cache state * fix(router): publish client cache after commit * fix(router): gate hydration cache publication * fix(router): guard late client cache publication * fix(router): isolate client cache parity coverage * fix(router): preserve authoritative navigation commits * fix(router): preserve committed navigation streams |
||
|
|
2cbd2a0356 |
fix(build): apply default server externals (#2257)
* fix(build): externalize Next.js default server packages * test(node): cover externalized shiki in standalone output |
||
|
|
42f8700f15 |
fix(router): enhance navigation with as mask for URL handling (#2076)
* fix(router): enhance navigation with `as` mask for URL handling * fix(router): implement bracket-pattern interpolation for dynamic routes in Pages Router * fix(router): preserve masked state in beforePopState * fix(router): cover basepath navigation in ci * docs(router): clarify navigation state invariants * refactor(router): require complete history state * refactor(router): share dynamic href interpolation * test(router): cover localized masked navigation * fix(router): keep interpolation internals private --------- Co-authored-by: James <james@eli.cx> |
||
|
|
c3dcdba1fe |
fix(pages): honor basePath in dev module loaders (#2033)
* fix(pages): honor basePath in dev module loaders * fix(pages): preserve basePath in ISR loaders * style(pages): format dev module loader changes * fix(pages): preserve dynamic route module paths * test(pages): run basePath dev coverage in CI |
||
|
|
a3d2f92152 |
fix(router): honor hybrid pages route priority (#1997)
* fix(router): honor hybrid pages route priority * fix(router): share hybrid owner decision with client navigation PR #1997 fixed the server-side route ownership for direct document loads, but the same invariant broke for client-side soft navigations and the matching prefetch path: - navigateClientSide() always delegated to the App runtime's RSC fetch, even when the Pages route had higher priority. renderPagesFallback() short-circuits RSC requests with null, so the App catch-all won. - prefetchUrl() prefetched an RSC stream for any URL that matched an App route, again ignoring Pages ownership. - The Pages entry was loaded on every hybrid request, even when a static App route had already matched (Pages can never win in that case). Expose the Pages route manifest on the client via a new __VINEXT_PAGES_LINK_PREFETCH_ROUTES__ window global emitted by both the App and Pages browser entries. The link shim consults a shared resolveHybridClientRouteOwner helper that mirrors the server-side pagesRouteHasPriorityOverAppRoute comparison. When Pages owns the URL, the click handler issues a window.location navigation and the prefetch path returns early. Gate the renderPagesFallback call behind a static-App-route check in handleAppRscRequest: when a static App route matches, the bridge cannot win, so skip the eager Pages entry load. Centralise the comparison in a new resolveHybridRouteOwner helper so server and client reach the same answer for the same (URL, route pair). Adds the missing client-navigation coverage to the use-params e2e fixture (Link from /app/ to /pages-dir/foobar) and unit tests for the shared owner decision. * fix(router): mirror server hybrid owner decision on the client PR review flagged two split-brain bugs in the previous hybrid ownership fix: a hand-copied client comparator and a Link-only ownership gate that left programmatic App Router navigations on the wrong path. The hand-copied routePrecedence in hybrid-client-route-owner.ts omitted the static-prefix reduction that lives in routing/utils.ts#routePrecedence, and used a strict-less-than comparison that returned App for identical dynamic patterns. The server returns Pages for both cases (Pages providers sort ahead of App providers, and routePrecedence subtracts 50 per static prefix segment). The split produced a real ownership disagreement on overlapping patterns like /_sites/:slug* (Pages) vs /:slug* (App). Add a shared compareHybridRoutePatterns to routing/utils.ts as the single source of truth: the static/dynamic short-circuits plus a sortRoutes call (which carries the static-prefix reduction and the Pages-first equal-pattern tiebreak). The server pagesRouteHasPriorityOverAppRoute and the client resolveHybridClientRouteOwner both delegate to it, so they cannot diverge. Drop the hand-copied routePrecedence entirely. Wire the ownership check at the App navigation runtime boundary so useRouter().push, useRouter().replace, gesturePush, and form submits all get the same hard-nav contract as the Link click handler. Specifically: - navigateClientSide: after same-origin normalization, if Pages owns the URL, hard-navigate via window.location and return (matching the existing external-URL branch). - _appRouter.prefetch: short-circuit RSC URL construction for Pages-owned targets so we do not warm an unusable cache entry. Centralise the existing two inline hard-nav branches in navigateClientSide into a hardNavigateTo helper for clarity. Tests: - Direct unit tests for compareHybridRoutePatterns covering identical-dynamic tiebreak, static-prefix dynamic overlap, static-prefix catch-all overlap, and infix-static bonus. - Direct unit tests for resolveHybridClientRouteOwner mirroring the server assertions plus a basePath-stripping test. - e2e: useRouter().push('/pages-dir/foobar') from an App page resolves to the Pages document. - e2e: useRouter().prefetch('/pages-dir/foobar') issues zero RSC requests for the target URL. * docs(router): fix stale score in static-prefix catch-all test comment The hand-copied comparator note quoted the dynamic-segment scores (51 / 1000) for the optional-catch-all example (/_sites/:slug* vs /:slug*). The current optional-catch-all scoring actually produces 1951 vs 2000. The test assertion was correct; only the comment was stale. * test(use-params): fix direct-load single dynamic param to use /a instead of /a/b * fix(router): compare hybrid routes structurally * fix(router): reject hybrid route conflicts * fix(router): refresh hybrid route ownership * fix(router): preserve hybrid routing lifecycle * fix(router): recheck pages routes after rewrites * fix(router): preserve rewritten pages queries * fix(router): preserve rewritten route ownership * fix(router): resolve client rewrites sequentially * fix(router): apply rewrite phases sequentially * fix(router): preserve rewrite params and endpoints * fix(router): hand off endpoint navigations * fix(router): preserve rewrite fragment params * test(e2e): avoid hybrid fixture route conflicts * test(pages): await async config validation * test(hybrid): avoid duplicate page fixtures * chore(router): clarify hybrid priority semantics * refactor(router): remove duplicate app route matcher * docs(router): clarify client hybrid comparator --------- Co-authored-by: James <james@eli.cx> |
||
|
|
930e03c449 |
fix(ppr): gate fallback shells until request-time resume is supported (#1716)
* fix(app-router): prerender cacheComponents root-param fallback shells PR 1 of 4: core model + build integration. Model: app-ppr-fallback-shell, pregenerated-concrete-paths, prerender-manifest Build: prerender/run-prerender fallback shell artifact generation Tests: createAppPprFallbackShells, pregenerated-concrete-paths core * feat(ppr): add fallback shell payload identity * feat(ppr): safely serve fallback shell cache entries * refactor(ppr): extract fallback shell render pipeline and dedupe getViteMajorVersion * fix(ppr): restore safe-serving CI checks The safe-serving branch failed CI because a client-side server-only guard rejected valid 'use server' action modules, a fallback-shell dependency cast no longer matched its helper type, apps/web lost the Cloudflare cache adapter source path during typecheck, and Knip could not resolve the documented Cloudflare cache adapter subpaths. The server-only guard now reads the directive prologue and skips top-level 'use server' modules, fallback-shell regeneration passes an explicit typed dependency object, apps/web gets the workspace Cloudflare cache path, the Cloudflare package exports explicit adapter subpaths, Knip uses a relative source import in the dispatch unit test, and the readiness test awaits the actual cache-ready promise. * fix(ppr): guard fallback shell reads for queries * fix(ppr): normalize pregenerated concrete paths * fix(ppr): address review comments on fallback shell serving and react runtime check * fix(ci): restore knip ignores for unlisted binaries and prune dependencies * fix(ppr): restrict bracket check in fallback detection to legacy manifests * fix(ppr): prefer stable ESM react-dom/static.edge before CJS fallback The loadStaticPrerender dev-mode path hard-codes react-dom's internal CJS file layout (cjs/react-dom-server.edge.development.js). A React upgrade could silently break fallback-shell rendering in dev without affecting production because the function never tried the stable ESM entry in development. Change the order so that react-dom/static.edge is attempted first in all environments. Only fall back to the CJS path when the ESM entry does not export prerender() and we are in a development runtime. This lets future React dev builds that expose prerender() from the ESM entry work automatically, and it surfaces the CJS-path failure only when the stable path is genuinely unavailable. Also handle the CJS default-export interop shape that Node.js ESM produces when dynamically importing a CommonJS module. * refactor(ppr): address four review cleanup items 1. Remove redundant double-normalization in seed-cache.ts addPregeneratedConcretePath already normalizes internally, so the call-site normalizePregeneratedPathname() was redundant. Dropping it gives a single source of truth for pathname normalization. 2. Lazily construct FallbackShellRenderDeps in tryServePprFallbackShell Extract the large FallbackShellRenderDeps object into a top-level buildFallbackShellRenderDeps helper. The closure in the probe loop now just delegates, so the heavy object is only created when a STALE entry actually triggers regeneration, not on every HIT probe. 3. Add dev-only warning for legacy bracket heuristic When isFallbackShellArtifactPath falls back to the bracket substring scan (route.fallback === undefined), emit a console.warn in dev so developers know a legacy manifest is being used and concrete URLs with literal brackets may be misclassified. 4. Update pregenerated-concrete-paths.test.ts to colon notation The production manifest writer uses colon notation (/:slug) for the route field, but the test fixtures used bracket notation (/[slug]). Update the fixtures so the test format matches production, exercising the real key format that the safe-serving guard depends on. * test(ppr): compact fallback shell dispatch fixtures * refactor(ppr): name fallback shell render phases * refactor(app-router): deduplicate PPR fallback shell and app page cache render paths * fix(ppr): avoid serving incomplete fallback shells * chore: drop redundant cloudflare cache aliases * fix(ppr): track fallback navigation hooks * test(ppr): render navigation hook probes * test(ppr): type navigation hook probes * refactor(ppr): remove unused shell regeneration path * refactor(ppr): remove unused shell result type * fix(ppr): safely gate fallback shell prerendering * fix(ppr): keep fallback shell gate internal * fix(ppr): mark generated dynamic fallback shells * test(ppr): align fallback fixture and search params --------- Co-authored-by: James <james@eli.cx> |
||
|
|
d1a80cd668 |
fix(app-router): preserve front redirects through fallback route handlers (#2000)
* fix(app-router): preserve front redirects through fallback route handlers * test(e2e): assert single bootstrap hydration in front-redirect test * chore: remove dead stripDeploymentIdQuery export * fix(app-router): handle cancelled bootstrap streams * docs(app-router): clarify bootstrap recovery * test(e2e): tolerate dangling fixture symlink * test(e2e): run front redirect regression in CI * fix(app-router): always hide internal RSC queries * fix(app-router): preserve visible hydration URL * test(e2e): scope visible URL regression * refactor(app-router): trim front redirect residue * test(e2e): group fixture setup command * test(e2e): tighten front redirect assertions * fix(app-router): preserve ordinary route handler URLs * fix(app-router): normalize edge route handler URLs * docs(app-router): explain route URL parity * fix(app-router): preserve Node RSC request URLs * fix(app-router): normalize route handler RSC paths * fix(app-router): forward RSC tokens through rewrites --------- Co-authored-by: James <james@eli.cx> |
||
|
|
79d78b0cce |
chore: standardize prod-build project commands in playwright.config.ts (#1932)
Replace error TS5058: The specified path does not exist: '../../../packages/vinext/tsconfig.json'. with ~/packages/vinext$ vp pack ⊘ cache disabled ℹ entry: src/cache.ts, src/check.ts, src/cli-args.ts, src/cli.ts, src/deploy.ts, src/index.ts, src/init.ts, src/typegen.ts, src/build/assets-ignore.ts, src/build/clean-output.ts, src/build/client-build-config.ts, src/build/css-url-assets.ts, src/build/inline-css.ts, src/build/layout-classification-types.ts, src/build/layout-classification.ts, src/build/next-client-runtime-manifests.ts, src/build/nitro-route-rules.ts, src/build/precompress.ts, src/build/prerender.ts, src/build/report.ts, src/build/route-classification-injector.ts, src/build/route-classification-manifest.ts, src/build/run-prerender.ts, src/build/server-manifest.ts, src/build/ssr-manifest.ts, src/build/standalone.ts, src/build/static-export.ts, src/cache/cache-adapters-virtual.ts, src/client/empty-module.ts, src/client/instrumentation-client-inject.ts, src/client/instrumentation-client-state.ts, src/client/instrumentation-client.ts, src/client/navigation-runtime.ts, src/client/pages-router-link-navigation.ts, src/client/validate-module-path.ts, src/client/vinext-next-data.ts, src/client/window-next.ts, src/cloudflare/index.ts, src/cloudflare/tpr.ts, src/config/config-matchers.ts, src/config/dotenv.ts, src/config/next-config.ts, src/config/tsconfig-paths.ts, src/routing/app-route-graph.ts, src/routing/app-router.ts, src/routing/file-matcher.ts, src/routing/pages-router.ts, src/routing/route-matching.ts, src/routing/route-pattern.ts, src/routing/route-trie.ts, src/routing/route-validation.ts, src/routing/utils.ts, src/entries/app-browser-entry.ts, src/entries/app-rsc-entry.ts, src/entries/app-rsc-manifest.ts, src/entries/app-ssr-entry.ts, src/entries/pages-client-entry.ts, src/entries/pages-entry-helpers.ts, src/entries/pages-server-entry.ts, src/entries/runtime-entry-module.ts, src/plugins/ast-utils.ts, src/plugins/async-hooks-stub.ts, src/plugins/client-reference-dedup.ts, src/plugins/css-data-url.ts, src/plugins/dynamic-preload-metadata.ts, src/plugins/fonts.ts, src/plugins/import-meta-url.ts, src/plugins/instrumentation-client.ts, src/plugins/middleware-server-only.ts, src/plugins/og-assets.ts, src/plugins/optimize-imports.ts, src/plugins/postcss.ts, src/plugins/remove-console.ts, src/plugins/require-context.ts, src/plugins/rsc-client-reference-loaders.ts, src/plugins/rsc-client-shim-excludes.ts, src/plugins/sass.ts, src/plugins/server-externals-manifest.ts, src/plugins/strip-server-exports.ts, src/plugins/wasm-module-import.ts, src/shims/amp.ts, src/shims/app-router-scroll-state.ts, src/shims/app-router-scroll.tsx, src/shims/app.tsx, src/shims/before-interactive-context.tsx, src/shims/cache-for-request.ts, src/shims/cache-runtime.ts, src/shims/cache.ts, src/shims/cdn-cache.ts, src/shims/client-hook-error.ts, src/shims/client-locale.ts, src/shims/client-only.ts, src/shims/compat-router.ts, src/shims/config.ts, src/shims/constants.ts, src/shims/default-global-error.tsx, src/shims/default-not-found.tsx, src/shims/document.tsx, src/shims/dynamic-preload-chunks.tsx, src/shims/dynamic.ts, src/shims/error-boundary.tsx, src/shims/error.tsx, src/shims/fetch-cache.ts, src/shims/font-google-base.ts, src/shims/font-google.ts, src/shims/font-local.ts, src/shims/font-utils.ts, src/shims/form.tsx, src/shims/hash-scroll.ts, src/shims/head-state.ts, src/shims/head.ts, src/shims/headers.ts, src/shims/i18n-context.ts, src/shims/i18n-state.ts, src/shims/image-config.ts, src/shims/image.tsx, src/shims/layout-segment-context.tsx, src/shims/legacy-image.tsx, src/shims/link-prefetch.ts, src/shims/link.tsx, src/shims/metadata.tsx, src/shims/navigation-state.ts, src/shims/navigation.react-server.ts, src/shims/navigation.ts, src/shims/offline.ts, src/shims/og.tsx, src/shims/pages-router-runtime.ts, src/shims/ppr-fallback-shell.ts, src/shims/readonly-url-search-params.ts, src/shims/request-context.ts, src/shims/request-state-types.ts, src/shims/root-params.ts, src/shims/router-state.ts, src/shims/router.ts, src/shims/script-nonce-context.tsx, src/shims/script.tsx, src/shims/server-only.ts, src/shims/server.ts, src/shims/slot.tsx, src/shims/thenable-params.ts, src/shims/unified-request-context.ts, src/shims/unrecognized-action-error.ts, src/shims/url-safety.ts, src/shims/url-utils.ts, src/shims/use-merged-ref.ts, src/shims/web-vitals.ts, src/server/api-handler.ts, src/server/app-bfcache-id.ts, src/server/app-browser-action-result.ts, src/server/app-browser-client-reuse-manifest.ts, src/server/app-browser-entry.ts, src/server/app-browser-error.ts, src/server/app-browser-history-controller.ts, src/server/app-browser-hydration.ts, src/server/app-browser-interception-context.ts, src/server/app-browser-mpa-navigation.ts, src/server/app-browser-navigation-controller.ts, src/server/app-browser-popstate.ts, src/server/app-browser-rsc-redirect.ts, src/server/app-browser-state.ts, src/server/app-browser-stream.ts, src/server/app-browser-visible-commit.ts, src/server/app-client-reference-preloader.ts, src/server/app-elements-wire.ts, src/server/app-elements.ts, src/server/app-fallback-renderer.ts, src/server/app-history-state.ts, src/server/app-hook-warning-suppression.ts, src/server/app-inline-css-client.ts, src/server/app-interception-context-header.ts, src/server/app-layout-param-observation.ts, src/server/app-middleware.ts, src/server/app-mounted-slots-header.ts, src/server/app-optimistic-routing.ts, src/server/app-page-boundary-render.ts, src/server/app-page-boundary.ts, src/server/app-page-cache.ts, src/server/app-page-dispatch.ts, src/server/app-page-element-builder.ts, src/server/app-page-execution.ts, src/server/app-page-head.ts, src/server/app-page-method.ts, src/server/app-page-params.ts, src/server/app-page-probe.ts, src/server/app-page-render-identity.ts, src/server/app-page-render-observation.ts, src/server/app-page-render.ts, src/server/app-page-request.ts, src/server/app-page-response.ts, src/server/app-page-route-wiring.tsx, src/server/app-page-search-params-observation.ts, src/server/app-page-segment-state.ts, src/server/app-page-stream.ts, src/server/app-pages-bridge.ts, src/server/app-post-middleware-context.ts, src/server/app-ppr-fallback-shell.ts, src/server/app-prerender-endpoints.ts, src/server/app-prerender-static-params.ts, src/server/app-render-dependency.tsx, src/server/app-request-context.ts, src/server/app-route-handler-cache.ts, src/server/app-route-handler-dispatch.ts, src/server/app-route-handler-execution.ts, src/server/app-route-handler-policy.ts, src/server/app-route-handler-response.ts, src/server/app-route-handler-runtime.ts, src/server/app-route-module-loader.ts, src/server/app-router-entry.ts, src/server/app-rsc-cache-busting.ts, src/server/app-rsc-embedded-chunks.ts, src/server/app-rsc-error-handler.ts, src/server/app-rsc-errors.ts, src/server/app-rsc-handler.ts, src/server/app-rsc-render-mode.ts, src/server/app-rsc-request-normalization.ts, src/server/app-rsc-response-finalizer.ts, src/server/app-rsc-route-matching.ts, src/server/app-segment-config.ts, src/server/app-server-action-execution.ts, src/server/app-ssr-entry.ts, src/server/app-ssr-error-meta.ts, src/server/app-ssr-stream.ts, src/server/app-static-generation.ts, src/server/app-visited-response-cache.ts, src/server/artifact-compatibility.ts, src/server/cache-control.ts, src/server/cache-headers.ts, src/server/cache-proof.ts, src/server/client-reuse-manifest.ts, src/server/client-trace-metadata.ts, src/server/cookie-utils.ts, src/server/csp.ts, src/server/default-global-error-module.ts, src/server/default-not-found-module.ts, src/server/dev-error-overlay-store.ts, src/server/dev-error-overlay.tsx, src/server/dev-initial-server-error.ts, src/server/dev-lockfile.ts, src/server/dev-module-runner.ts, src/server/dev-origin-check.ts, src/server/dev-route-files.ts, src/server/dev-server.ts, src/server/dev-stack-sourcemap-endpoint.ts, src/server/dev-stack-sourcemap.ts, src/server/document-initial-head.ts, src/server/edge-api-runtime.ts, src/server/file-based-metadata.ts, src/server/headers.ts, src/server/html.ts, src/server/http-error-responses.ts, src/server/image-optimization.ts, src/server/implicit-tags.ts, src/server/instrumentation-runtime.ts, src/server/instrumentation.ts, src/server/isr-cache.ts, src/server/isr-decision.ts, src/server/metadata-route-build-data.ts, src/server/metadata-route-response.ts, src/server/metadata-routes.ts, src/server/middleware-matcher.ts, src/server/middleware-request-headers.ts, src/server/middleware-response-headers.ts, src/server/middleware-runtime.ts, src/server/middleware.ts, src/server/navigation-planner.ts, src/server/navigation-trace.ts, src/server/next-error-digest.ts, src/server/normalize-path.ts, src/server/otel-tracer-extension.ts, src/server/pages-api-route.ts, src/server/pages-asset-tags.ts, src/server/pages-body-parser-config.ts, src/server/pages-data-route.ts, src/server/pages-default-404.ts, src/server/pages-document-initial-props.ts, src/server/pages-get-initial-props.ts, src/server/pages-i18n.ts, src/server/pages-media-type.ts, src/server/pages-node-compat.ts, src/server/pages-page-data.ts, src/server/pages-page-handler.ts, src/server/pages-page-method.ts, src/server/pages-page-response.ts, src/server/pages-readiness.ts, src/server/pages-request-pipeline.ts, src/server/pages-revalidate.ts, src/server/pages-serializable-props.ts, src/server/pregenerated-concrete-paths.ts, src/server/prerender-route-params.ts, src/server/prerender-work-unit-setup.ts, src/server/prod-server.ts, src/server/proxy-trust.ts, src/server/request-log.ts, src/server/request-pipeline.ts, src/server/rsc-stream-hints.ts, src/server/seed-cache.ts, src/server/server-action-not-found.ts, src/server/server-globals.ts, src/server/skip-cache-proof.ts, src/server/socket-error-backstop.ts, src/server/static-file-cache.ts, src/server/static-layout-client-reuse-proof.ts, src/server/streaming-metadata.ts, src/server/worker-utils.ts, src/utils/asset-prefix.ts, src/utils/base-path.ts, src/utils/cache-control-metadata.ts, src/utils/client-build-manifest.ts, src/utils/client-entry-manifest.ts, src/utils/client-runtime-metadata.ts, src/utils/compare.ts, src/utils/dev-error-recovery-event.ts, src/utils/domain-locale.ts, src/utils/encode-cache-tag.ts, src/utils/error-cause.ts, src/utils/hash.ts, src/utils/html-limited-bots.ts, src/utils/lazy-chunks.ts, src/utils/manifest-paths.ts, src/utils/mdx-scan.ts, src/utils/navigation-signal.ts, src/utils/number.ts, src/utils/path.ts, src/utils/prerender-output-paths.ts, src/utils/project.ts, src/utils/promise.ts, src/utils/public-routes.ts, src/utils/query.ts, src/utils/record.ts, src/utils/regex.ts, src/utils/safe-json-file.ts, src/utils/sorted-array.ts, src/utils/text-stream.ts, src/utils/vinext-root.ts, src/utils/vite-version.ts, src/build/google-fonts/build-url.ts, src/build/google-fonts/fallback-metrics.ts, src/build/google-fonts/font-metadata.ts, src/build/google-fonts/get-axes.ts, src/build/google-fonts/sort-variants.ts, src/build/google-fonts/validate.ts, src/shims/internal/als-registry.ts, src/shims/internal/api-utils.ts, src/shims/internal/app-route-detection.ts, src/shims/internal/app-router-context.ts, src/shims/internal/cookie-serialize.ts, src/shims/internal/cookies.ts, src/shims/internal/link-status-registry.ts, src/shims/internal/make-hanging-promise.ts, src/shims/internal/pages-data-fetch-dedup.ts, src/shims/internal/pages-data-target.ts, src/shims/internal/pages-data-url.ts, src/shims/internal/parse-cookie-header.ts, src/shims/internal/route-pattern-for-warning.ts, src/shims/internal/router-context.ts, src/shims/internal/utils.ts, src/shims/internal/work-unit-async-storage.ts ℹ target: node22.0.0 ℹ tsconfig: tsconfig.json ℹ Build start ℹ Cleaning 736 files ℹ Granting execute permission to dist/cli.js ℹ dist/index.js 104.22 kB │ gzip: 26.12 kB ℹ dist/shims/navigation.js 67.62 kB │ gzip: 16.87 kB ℹ dist/routing/app-route-graph.js 59.75 kB │ gzip: 14.51 kB ℹ dist/shims/router.js 55.70 kB │ gzip: 14.83 kB ℹ dist/server/app-browser-entry.js 53.69 kB │ gzip: 11.83 kB ℹ dist/server/dev-error-overlay.js 45.33 kB │ gzip: 10.72 kB ℹ dist/server/prod-server.js 44.54 kB │ gzip: 12.46 kB ℹ dist/config/next-config.js 41.77 kB │ gzip: 13.01 kB ℹ dist/server/dev-server.js 40.31 kB │ gzip: 9.69 kB ℹ dist/config/config-matchers.js 38.47 kB │ gzip: 12.36 kB ℹ dist/deploy.js 38.45 kB │ gzip: 11.53 kB ℹ dist/entries/app-rsc-entry.js 36.62 kB │ gzip: 9.31 kB ℹ dist/build/prerender.js 36.17 kB │ gzip: 9.45 kB ℹ dist/check.js 35.06 kB │ gzip: 10.01 kB ℹ dist/server/app-server-action-execution.js 32.42 kB │ gzip: 7.65 kB ℹ dist/shims/metadata.js 31.86 kB │ gzip: 7.14 kB ℹ dist/shims/cache.js 30.74 kB │ gzip: 9.04 kB ℹ dist/plugins/fonts.js 30.73 kB │ gzip: 9.33 kB ℹ dist/shims/fetch-cache.js 28.38 kB │ gzip: 7.76 kB ℹ dist/server/navigation-planner.js 28.04 kB │ gzip: 5.52 kB ℹ dist/server/cache-proof.js 27.73 kB │ gzip: 5.76 kB ℹ dist/shims/headers.js 27.63 kB │ gzip: 7.75 kB ℹ dist/server/app-page-dispatch.js 27.24 kB │ gzip: 6.20 kB ℹ dist/cli.js 26.01 kB │ gzip: 7.96 kB ℹ dist/shims/link.js 25.90 kB │ gzip: 7.08 kB ℹ dist/server/app-page-route-wiring.js 24.02 kB │ gzip: 4.81 kB ℹ dist/server/app-page-render.js 23.08 kB │ gzip: 5.49 kB ℹ dist/shims/server.js 22.28 kB │ gzip: 6.87 kB ℹ dist/build/report.js 20.84 kB │ gzip: 5.66 kB ℹ dist/cloudflare/tpr.js 20.37 kB │ gzip: 6.76 kB ℹ dist/shims/cache-runtime.js 20.19 kB │ gzip: 6.45 kB ℹ dist/server/request-pipeline.js 19.80 kB │ gzip: 6.40 kB ℹ dist/plugins/optimize-imports.js 19.75 kB │ gzip: 5.46 kB ℹ dist/server/app-elements-wire.js 19.54 kB │ gzip: 4.57 kB ℹ dist/server/app-browser-state.js 19.06 kB │ gzip: 4.59 kB ℹ dist/entries/pages-server-entry.js 18.37 kB │ gzip: 5.09 kB ℹ dist/shims/image.js 17.87 kB │ gzip: 5.31 kB ℹ dist/server/file-based-metadata.js 17.80 kB │ gzip: 4.08 kB ℹ dist/server/app-browser-navigation-controller.js 17.72 kB │ gzip: 4.10 kB ℹ dist/server/app-rsc-handler.js 17.28 kB │ gzip: 4.29 kB ℹ dist/server/dev-stack-sourcemap.js 17.27 kB │ gzip: 4.62 kB ℹ dist/server/metadata-routes.js 17.19 kB │ gzip: 4.66 kB ℹ dist/server/app-ssr-stream.js 16.86 kB │ gzip: 5.41 kB ℹ dist/plugins/dynamic-preload-metadata.js 16.32 kB │ gzip: 3.96 kB ℹ dist/server/pages-page-handler.js 16.10 kB │ gzip: 4.22 kB ℹ dist/server/app-page-cache.js 14.52 kB │ gzip: 3.28 kB ℹ dist/server/app-page-execution.js 13.76 kB │ gzip: 4.25 kB ℹ dist/shims/head.js 13.65 kB │ gzip: 4.89 kB ℹ dist/entries/app-rsc-manifest.js 13.52 kB │ gzip: 3.02 kB ℹ dist/server/pages-page-response.js 13.46 kB │ gzip: 4.44 kB ℹ dist/server/app-ssr-entry.js 13.39 kB │ gzip: 4.32 kB ℹ dist/server/pages-page-data.js 13.39 kB │ gzip: 3.97 kB ℹ dist/shims/script.js 13.00 kB │ gzip: 4.03 kB ℹ dist/plugins/import-meta-url.js 12.53 kB │ gzip: 3.29 kB ℹ dist/plugins/sass.js 12.45 kB │ gzip: 4.76 kB ℹ dist/server/isr-cache.js 12.32 kB │ gzip: 4.45 kB ℹ dist/shims/font-google-base.js 12.12 kB │ gzip: 4.06 kB ℹ dist/server/app-page-boundary-render.js 11.97 kB │ gzip: 2.88 kB ℹ dist/server/app-page-probe.js 11.67 kB │ gzip: 3.83 kB ℹ dist/shims/form.js 11.06 kB │ gzip: 3.51 kB ℹ dist/server/pages-request-pipeline.js 10.92 kB │ gzip: 2.97 kB ℹ dist/server/app-rsc-cache-busting.js 10.79 kB │ gzip: 2.97 kB ℹ dist/shims/slot.js 10.73 kB │ gzip: 2.92 kB ℹ dist/server/app-page-head.js 10.70 kB │ gzip: 2.78 kB ℹ dist/build/client-build-config.js 10.50 kB │ gzip: 4.10 kB ℹ dist/server/app-browser-history-controller.js 10.18 kB │ gzip: 2.51 kB ℹ dist/server/app-page-element-builder.js 10.16 kB │ gzip: 3.14 kB ℹ dist/server/app-browser-visible-commit.js 9.72 kB │ gzip: 2.23 kB ℹ dist/shims/error-boundary.js 9.70 kB │ gzip: 2.05 kB ℹ dist/server/middleware-runtime.js 9.64 kB │ gzip: 2.77 kB ℹ dist/server/app-history-state.js 9.60 kB │ gzip: 2.29 kB ℹ dist/typegen.js 9.46 kB │ gzip: 2.85 kB ℹ dist/server/client-reuse-manifest.js 9.39 kB │ gzip: 2.41 kB ℹ dist/server/api-handler.js 9.12 kB │ gzip: 3.23 kB ℹ dist/build/css-url-assets.js 8.98 kB │ gzip: 3.46 kB ℹ dist/server/metadata-route-response.js 8.92 kB │ gzip: 2.48 kB ℹ dist/server/app-route-handler-runtime.js 8.82 kB │ gzip: 2.39 kB ℹ dist/server/image-optimization.js 8.71 kB │ gzip: 3.09 kB ℹ dist/server/app-optimistic-routing.js 8.69 kB │ gzip: 2.37 kB ℹ dist/server/app-page-request.js 8.57 kB │ gzip: 2.19 kB ℹ dist/init.js 8.57 kB │ gzip: 3.07 kB ℹ dist/build/standalone.js 8.41 kB │ gzip: 2.58 kB ℹ dist/server/socket-error-backstop.js 8.35 kB │ gzip: 3.49 kB ℹ dist/build/run-prerender.js 8.35 kB │ gzip: 3.04 kB ℹ dist/server/pages-i18n.js 8.29 kB │ gzip: 2.92 kB ℹ dist/plugins/og-assets.js 8.25 kB │ gzip: 3.22 kB ℹ dist/routing/utils.js 8.09 kB │ gzip: 3.05 kB ℹ dist/client/navigation-runtime.js 8.09 kB │ gzip: 2.08 kB ℹ dist/server/headers.js 7.98 kB │ gzip: 2.88 kB ℹ dist/server/pages-node-compat.js 7.96 kB │ gzip: 2.53 kB ℹ dist/server/static-file-cache.js 7.80 kB │ gzip: 3.11 kB ℹ dist/shims/font-local.js 7.77 kB │ gzip: 2.69 kB ℹ dist/server/app-layout-param-observation.js 7.75 kB │ gzip: 1.88 kB ℹ dist/server/skip-cache-proof.js 7.73 kB │ gzip: 1.94 kB ℹ dist/plugins/client-reference-dedup.js 7.73 kB │ gzip: 2.40 kB ℹ dist/shims/dynamic.js 7.72 kB │ gzip: 2.21 kB ℹ dist/shims/constants.js 7.65 kB │ gzip: 2.38 kB ℹ dist/routing/route-pattern.js 7.47 kB │ gzip: 2.10 kB ℹ dist/utils/project.js 7.00 kB │ gzip: 2.40 kB ℹ dist/entries/pages-client-entry.js 6.75 kB │ gzip: 2.70 kB ℹ dist/server/app-middleware.js 6.70 kB │ gzip: 1.82 kB ℹ dist/server/app-route-handler-response.js 6.68 kB │ gzip: 2.22 kB ℹ dist/server/app-route-handler-dispatch.js 6.66 kB │ gzip: 1.76 kB ℹ dist/shims/thenable-params.js 6.50 kB │ gzip: 1.56 kB ℹ dist/server/pages-data-route.js 6.38 kB │ gzip: 2.39 kB ℹ dist/server/dev-origin-check.js 6.28 kB │ gzip: 2.24 kB ℹ dist/server/dev-lockfile.js 6.23 kB │ gzip: 2.57 kB ℹ dist/shims/url-utils.js 6.20 kB │ gzip: 2.18 kB ℹ dist/plugins/remove-console.js 6.13 kB │ gzip: 2.27 kB ℹ dist/server/app-page-stream.js 6.08 kB │ gzip: 2.24 kB ℹ dist/server/app-page-response.js 5.99 kB │ gzip: 1.51 kB ℹ dist/build/route-classification-manifest.js 5.96 kB │ gzip: 2.26 kB ℹ dist/server/app-route-handler-execution.js 5.93 kB │ gzip: 1.61 kB ℹ dist/server/app-page-boundary.js 5.88 kB │ gzip: 1.70 kB ℹ dist/utils/asset-prefix.js 5.79 kB │ gzip: 2.18 kB ℹ dist/server/seed-cache.js 5.72 kB │ gzip: 2.06 kB ℹ dist/plugins/require-context.js 5.68 kB │ gzip: 1.98 kB ℹ dist/server/metadata-route-build-data.js 5.67 kB │ gzip: 1.54 kB ℹ dist/config/tsconfig-paths.js 5.63 kB │ gzip: 2.04 kB ℹ dist/routing/pages-router.js 5.58 kB │ gzip: 1.69 kB ℹ dist/shims/ppr-fallback-shell.js 5.58 kB │ gzip: 1.42 kB ℹ dist/server/pages-document-initial-props.js 5.56 kB │ gzip: 2.19 kB ℹ dist/server/pages-asset-tags.js 5.54 kB │ gzip: 2.16 kB ℹ dist/server/instrumentation.js 5.52 kB │ gzip: 2.13 kB ℹ dist/shims/default-global-error.js 5.51 kB │ gzip: 1.90 kB ℹ dist/server/app-fallback-renderer.js 5.46 kB │ gzip: 1.29 kB ℹ dist/server/prerender-route-params.js 5.31 kB │ gzip: 1.47 kB ℹ dist/utils/query.js 5.29 kB │ gzip: 1.79 kB ℹ dist/server/app-rsc-route-matching.js 5.02 kB │ gzip: 1.55 kB ℹ dist/routing/route-validation.js 4.95 kB │ gzip: 1.61 kB ℹ dist/utils/lazy-chunks.js 4.91 kB │ gzip: 1.90 kB ℹ dist/server/otel-tracer-extension.js 4.71 kB │ gzip: 1.82 kB ℹ dist/server/artifact-compatibility.js 4.64 kB │ gzip: 1.11 kB ℹ dist/server/middleware.js 4.61 kB │ gzip: 1.95 kB ℹ dist/server/app-segment-config.js 4.58 kB │ gzip: 1.33 kB ℹ dist/shims/app-router-scroll.js 4.57 kB │ gzip: 1.58 kB ℹ dist/server/app-browser-action-result.js 4.53 kB │ gzip: 1.61 kB ℹ dist/routing/file-matcher.js 4.48 kB │ gzip: 1.75 kB ℹ dist/server/middleware-matcher.js 4.42 kB │ gzip: 1.45 kB ℹ dist/shims/cdn-cache.js 4.35 kB │ gzip: 1.86 kB ℹ dist/build/precompress.js 4.32 kB │ gzip: 1.93 kB ℹ dist/server/app-rsc-request-normalization.js 4.19 kB │ gzip: 1.71 kB ℹ dist/routing/route-trie.js 4.15 kB │ gzip: 1.40 kB ℹ dist/shims/error.js 4.05 kB │ gzip: 1.61 kB ℹ dist/build/layout-classification.js 3.99 kB │ gzip: 1.60 kB ℹ dist/shims/font-utils.js 3.94 kB │ gzip: 1.52 kB ℹ dist/cli-args.js 3.94 kB │ gzip: 1.37 kB ℹ dist/utils/client-runtime-metadata.js 3.87 kB │ gzip: 1.40 kB ℹ dist/shims/internal/pages-data-target.js 3.80 kB │ gzip: 1.73 kB ℹ dist/utils/client-build-manifest.js 3.80 kB │ gzip: 1.17 kB ℹ dist/server/app-prerender-endpoints.js 3.80 kB │ gzip: 1.16 kB ℹ dist/utils/manifest-paths.js 3.73 kB │ gzip: 1.25 kB ℹ dist/server/http-error-responses.js 3.72 kB │ gzip: 1.45 kB ℹ dist/server/app-browser-client-reuse-manifest.js 3.71 kB │ gzip: 1.19 kB ℹ dist/plugins/middleware-server-only.js 3.67 kB │ gzip: 1.59 kB ℹ dist/server/app-route-handler-cache.js 3.65 kB │ gzip: 1.14 kB ℹ dist/server/worker-utils.js 3.63 kB │ gzip: 1.35 kB ℹ dist/build/route-classification-injector.js 3.55 kB │ gzip: 1.18 kB ℹ dist/server/dev-module-runner.js 3.53 kB │ gzip: 1.55 kB ℹ dist/build/ssr-manifest.js 3.45 kB │ gzip: 1.05 kB ℹ dist/server/app-route-handler-policy.js 3.41 kB │ gzip: 1.08 kB ℹ dist/server/app-prerender-static-params.js 3.40 kB │ gzip: 1.20 kB ℹ dist/plugins/postcss.js 3.39 kB │ gzip: 1.31 kB ℹ dist/server/pregenerated-concrete-paths.js 3.38 kB │ gzip: 1.30 kB ℹ dist/build/google-fonts/validate.js 3.38 kB │ gzip: 1.12 kB ℹ dist/server/pages-serializable-props.js 3.37 kB │ gzip: 1.35 kB ℹ dist/server/server-action-not-found.js 3.31 kB │ gzip: 1.17 kB ℹ dist/server/app-ppr-fallback-shell.js 3.31 kB │ gzip: 1.10 kB ℹ dist/utils/error-cause.js 3.25 kB │ gzip: 1.56 kB ℹ dist/server/isr-decision.js 3.25 kB │ gzip: 1.12 kB ℹ dist/server/app-page-segment-state.js 3.21 kB │ gzip: 0.86 kB ℹ dist/server/normalize-path.js 3.21 kB │ gzip: 1.33 kB ℹ dist/shims/document.js 3.18 kB │ gzip: 1.47 kB ℹ dist/plugins/server-externals-manifest.js 3.16 kB │ gzip: 1.43 kB ℹ dist/build/nitro-route-rules.js 3.15 kB │ gzip: 1.30 kB ℹ dist/shims/unified-request-context.js 3.14 kB │ gzip: 1.29 kB ℹ dist/shims/image-config.js 3.14 kB │ gzip: 1.38 kB ℹ dist/server/app-browser-stream.js 3.13 kB │ gzip: 1.11 kB ℹ dist/server/middleware-request-headers.js 3.13 kB │ gzip: 0.97 kB ℹ dist/server/client-trace-metadata.js 3.09 kB │ gzip: 1.33 kB ℹ dist/server/pages-body-parser-config.js 3.05 kB │ gzip: 1.34 kB ℹ dist/shims/url-safety.js 3.04 kB │ gzip: 1.41 kB ℹ dist/server/app-mounted-slots-header.js 3.03 kB │ gzip: 1.45 kB ℹ dist/shims/internal/app-route-detection.js 3.02 kB │ gzip: 1.22 kB ℹ dist/shims/dynamic-preload-chunks.js 3.00 kB │ gzip: 1.35 kB ℹ dist/shims/internal/pages-data-fetch-dedup.js 2.99 kB │ gzip: 1.44 kB ℹ dist/client/instrumentation-client-inject.js 2.98 kB │ gzip: 1.22 kB ℹ dist/utils/domain-locale.js 2.94 kB │ gzip: 0.93 kB ℹ dist/server/pages-api-route.js 2.92 kB │ gzip: 1.02 kB ℹ dist/shims/internal/pages-data-url.js 2.91 kB │ gzip: 1.33 kB ℹ dist/server/proxy-trust.js 2.89 kB │ gzip: 1.17 kB ℹ dist/config/dotenv.js 2.87 kB │ gzip: 1.35 kB ℹ dist/server/cache-control.js 2.82 kB │ gzip: 1.19 kB ℹ dist/server/pages-default-404.js 2.81 kB │ gzip: 1.42 kB ℹ dist/server/app-rsc-errors.js 2.76 kB │ gzip: 1.21 kB ℹ dist/entries/app-browser-entry.js 2.76 kB │ gzip: 1.05 kB ℹ dist/plugins/css-data-url.js 2.75 kB │ gzip: 1.35 kB ℹ dist/cache/cache-adapters-virtual.js 2.73 kB │ gzip: 1.08 kB ℹ dist/server/dev-route-files.js 2.71 kB │ gzip: 0.94 kB ℹ dist/server/app-page-render-observation.js 2.69 kB │ gzip: 0.83 kB ℹ dist/build/assets-ignore.js 2.61 kB │ gzip: 1.32 kB ℹ dist/server/navigation-trace.js 2.60 kB │ gzip: 0.94 kB ℹ dist/shims/default-not-found.js 2.58 kB │ gzip: 1.22 kB ℹ dist/server/app-pages-bridge.js 2.53 kB │ gzip: 0.94 kB ℹ dist/shims/cache-for-request.js 2.42 kB │ gzip: 1.04 kB ℹ dist/server/app-browser-interception-context.js 2.40 kB │ gzip: 0.70 kB ℹ dist/plugins/strip-server-exports.js 2.36 kB │ gzip: 0.99 kB ℹ dist/server/pages-get-initial-props.js 2.36 kB │ gzip: 0.76 kB ℹ dist/plugins/ast-utils.js 2.35 kB │ gzip: 0.78 kB ℹ dist/shims/internal/als-registry.js 2.33 kB │ gzip: 1.11 kB ℹ dist/shims/navigation-state.js 2.31 kB │ gzip: 0.88 kB ℹ dist/server/app-rsc-response-finalizer.js 2.25 kB │ gzip: 0.92 kB ℹ dist/routing/app-router.js 2.25 kB │ gzip: 0.86 kB ℹ dist/server/app-browser-rsc-redirect.js 2.24 kB │ gzip: 0.68 kB ℹ dist/build/google-fonts/fallback-metrics.js 2.18 kB │ gzip: 0.81 kB ℹ dist/shims/internal/cookie-serialize.js 2.16 kB │ gzip: 1.04 kB ℹ dist/shims/navigation.react-server.js 2.16 kB │ gzip: 0.59 kB ℹ dist/server/app-router-entry.js 2.15 kB │ gzip: 0.85 kB ℹ dist/server/app-ssr-error-meta.js 2.11 kB │ gzip: 0.84 kB ℹ dist/server/app-browser-popstate.js 2.11 kB │ gzip: 0.75 kB ℹ dist/server/csp.js 2.10 kB │ gzip: 0.71 kB ℹ dist/utils/text-stream.js 2.08 kB │ gzip: 0.92 kB ℹ dist/server/app-elements.js 1.98 kB │ gzip: 0.66 kB ℹ dist/server/app-interception-context-header.js 1.98 kB │ gzip: 1.02 kB ℹ dist/client/window-next.js 1.96 kB │ gzip: 0.92 kB ℹ dist/client/vinext-next-data.js 1.94 kB │ gzip: 0.77 kB ℹ dist/server/app-page-render-identity.js 1.93 kB │ gzip: 0.60 kB ℹ dist/plugins/rsc-client-reference-loaders.js 1.92 kB │ gzip: 0.85 kB ℹ dist/utils/hash.js 1.92 kB │ gzip: 1.00 kB ℹ dist/build/inline-css.js 1.90 kB │ gzip: 0.79 kB ℹ dist/server/dev-error-overlay-store.js 1.89 kB │ gzip: 0.68 kB ℹ dist/shims/internal/make-hanging-promise.js 1.89 kB │ gzip: 0.82 kB ℹ dist/server/html.js 1.85 kB │ gzip: 0.92 kB ℹ dist/server/app-client-reference-preloader.js 1.83 kB │ gzip: 0.59 kB ℹ dist/build/static-export.js 1.82 kB │ gzip: 0.71 kB ℹ dist/shims/internal/link-status-registry.js 1.81 kB │ gzip: 0.71 kB ℹ dist/shims/app.js 1.81 kB │ gzip: 0.87 kB ℹ dist/shims/link-prefetch.js 1.80 kB │ gzip: 0.74 kB ℹ dist/server/app-page-params.js 1.79 kB │ gzip: 0.57 kB ℹ dist/shims/internal/route-pattern-for-warning.js 1.76 kB │ gzip: 0.88 kB ℹ dist/shims/request-context.js 1.76 kB │ gzip: 0.77 kB ℹ dist/utils/base-path.js 1.73 kB │ gzip: 0.75 kB ℹ dist/plugins/wasm-module-import.js 1.72 kB │ gzip: 0.88 kB ℹ dist/build/google-fonts/get-axes.js 1.69 kB │ gzip: 0.70 kB ℹ dist/server/request-log.js 1.69 kB │ gzip: 0.76 kB ℹ dist/server/app-browser-mpa-navigation.js 1.68 kB │ gzip: 0.63 kB ℹ dist/server/implicit-tags.js 1.67 kB │ gzip: 0.65 kB ℹ dist/entries/runtime-entry-module.js 1.66 kB │ gzip: 0.76 kB ℹ dist/shims/layout-segment-context.js 1.66 kB │ gzip: 0.76 kB ℹ dist/utils/encode-cache-tag.js 1.65 kB │ gzip: 0.93 kB ℹ dist/plugins/instrumentation-client.js 1.64 kB │ gzip: 0.69 kB ℹ dist/shims/unrecognized-action-error.js 1.63 kB │ gzip: 0.77 kB ℹ dist/build/next-client-runtime-manifests.js 1.62 kB │ gzip: 0.56 kB ℹ dist/routing/route-matching.js 1.60 kB │ gzip: 0.75 kB ℹ dist/server/server-globals.js 1.58 kB │ gzip: 0.70 kB ℹ dist/shims/internal/app-router-context.js 1.58 kB │ gzip: 0.62 kB ℹ dist/shims/legacy-image.js 1.56 kB │ gzip: 0.70 kB ℹ dist/server/next-error-digest.js 1.55 kB │ gzip: 0.72 kB ℹ dist/shims/app-router-scroll-state.js 1.54 kB │ gzip: 0.49 kB ℹ dist/server/instrumentation-runtime.js 1.54 kB │ gzip: 0.72 kB ℹ dist/server/app-render-dependency.js 1.53 kB │ gzip: 0.54 kB ℹ dist/utils/vite-version.js 1.49 kB │ gzip: 0.75 kB ℹ dist/shims/router-state.js 1.48 kB │ gzip: 0.68 kB ℹ dist/utils/client-entry-manifest.js 1.46 kB │ gzip: 0.52 kB ℹ dist/server/app-rsc-render-mode.js 1.45 kB │ gzip: 0.44 kB ℹ dist/shims/og.js 1.45 kB │ gzip: 0.71 kB ℹ dist/server/static-layout-client-reuse-proof.js 1.42 kB │ gzip: 0.47 kB ℹ dist/server/app-inline-css-client.js 1.42 kB │ gzip: 0.58 kB ℹ dist/server/middleware-response-headers.js 1.41 kB │ gzip: 0.66 kB ℹ dist/server/document-initial-head.js 1.41 kB │ gzip: 0.70 kB ℹ dist/shims/i18n-context.js 1.41 kB │ gzip: 0.47 kB ℹ dist/server/rsc-stream-hints.js 1.39 kB │ gzip: 0.65 kB ℹ dist/plugins/async-hooks-stub.js 1.38 kB │ gzip: 0.70 kB ℹ dist/server/app-static-generation.js 1.36 kB │ gzip: 0.62 kB ℹ dist/shims/i18n-state.js 1.34 kB │ gzip: 0.65 kB ℹ dist/server/app-page-method.js 1.33 kB │ gzip: 0.53 kB ℹ dist/shims/head-state.js 1.27 kB │ gzip: 0.51 kB ℹ dist/utils/vinext-root.js 1.27 kB │ gzip: 0.62 kB ℹ dist/shims/hash-scroll.js 1.26 kB │ gzip: 0.53 kB ℹ dist/build/google-fonts/build-url.js 1.24 kB │ gzip: 0.57 kB ℹ dist/utils/mdx-scan.js 1.21 kB │ gzip: 0.63 kB ℹ dist/server/app-route-module-loader.js 1.20 kB │ gzip: 0.54 kB ℹ dist/server/pages-revalidate.js 1.19 kB │ gzip: 0.60 kB ℹ dist/utils/public-routes.js 1.19 kB │ gzip: 0.53 kB ℹ dist/shims/root-params.js 1.16 kB │ gzip: 0.51 kB ℹ dist/server/app-rsc-embedded-chunks.js 1.16 kB │ gzip: 0.53 kB ℹ dist/server/dev-initial-server-error.js 1.07 kB │ gzip: 0.51 kB ℹ dist/server/app-post-middleware-context.js 1.06 kB │ gzip: 0.55 kB ℹ dist/server/app-request-context.js 1.06 kB │ gzip: 0.52 kB ℹ dist/build/clean-output.js 1.05 kB │ gzip: 0.43 kB ℹ dist/shims/script-nonce-context.js 1.05 kB │ gzip: 0.38 kB ℹ dist/server/prerender-work-unit-setup.js 1.05 kB │ gzip: 0.57 kB ℹ dist/plugins/rsc-client-shim-excludes.js 1.03 kB │ gzip: 0.49 kB ℹ dist/shims/pages-router-runtime.js 1.02 kB │ gzip: 0.46 kB ℹ dist/server/app-browser-hydration.js 0.99 kB │ gzip: 0.45 kB ℹ dist/server/default-not-found-module.js 0.99 kB │ gzip: 0.56 kB ℹ dist/shims/compat-router.js 0.97 kB │ gzip: 0.49 kB ℹ dist/server/default-global-error-module.js 0.97 kB │ gzip: 0.55 kB ℹ dist/entries/app-ssr-entry.js 0.95 kB │ gzip: 0.53 kB ℹ dist/shims/use-merged-ref.js 0.95 kB │ gzip: 0.37 kB ℹ dist/server/app-rsc-error-handler.js 0.91 kB │ gzip: 0.49 kB ℹ dist/shims/internal/parse-cookie-header.js 0.89 kB │ gzip: 0.52 kB ℹ dist/server/app-visited-response-cache.js 0.88 kB │ gzip: 0.39 kB ℹ dist/utils/path.js 0.85 kB │ gzip: 0.53 kB ℹ dist/client/validate-module-path.js 0.84 kB │ gzip: 0.47 kB ℹ dist/shims/readonly-url-search-params.js 0.83 kB │ gzip: 0.38 kB ℹ dist/server/app-page-search-params-observation.js 0.82 kB │ gzip: 0.36 kB ℹ dist/server/pages-media-type.js 0.82 kB │ gzip: 0.46 kB ℹ dist/utils/html-limited-bots.js 0.81 kB │ gzip: 0.48 kB ℹ dist/server/pages-readiness.js 0.80 kB │ gzip: 0.36 kB ℹ dist/build/server-manifest.js 0.79 kB │ gzip: 0.44 kB ℹ dist/server/app-browser-error.js 0.77 kB │ gzip: 0.34 kB ℹ dist/shims/client-hook-error.js 0.75 kB │ gzip: 0.41 kB ℹ dist/shims/internal/work-unit-async-storage.js 0.75 kB │ gzip: 0.41 kB ℹ dist/client/instrumentation-client-state.js 0.74 kB │ gzip: 0.28 kB ℹ dist/server/cookie-utils.js 0.73 kB │ gzip: 0.44 kB ℹ dist/utils/safe-json-file.js 0.70 kB │ gzip: 0.45 kB ℹ dist/utils/prerender-output-paths.js 0.69 kB │ gzip: 0.33 kB ℹ dist/server/pages-page-method.js 0.67 kB │ gzip: 0.37 kB ℹ dist/shims/client-locale.js 0.66 kB │ gzip: 0.35 kB ℹ dist/shims/internal/utils.js 0.66 kB │ gzip: 0.34 kB ℹ dist/shims/web-vitals.js 0.61 kB │ gzip: 0.28 kB ℹ dist/server/cache-headers.js 0.60 kB │ gzip: 0.27 kB ℹ dist/shims/amp.js 0.50 kB │ gzip: 0.30 kB ℹ dist/shims/config.js 0.50 kB │ gzip: 0.29 kB ℹ dist/utils/navigation-signal.js 0.48 kB │ gzip: 0.29 kB ℹ dist/utils/sorted-array.js 0.48 kB │ gzip: 0.27 kB ℹ dist/build/google-fonts/sort-variants.js 0.46 kB │ gzip: 0.25 kB ℹ dist/server/app-hook-warning-suppression.js 0.46 kB │ gzip: 0.29 kB ℹ dist/utils/cache-control-metadata.js 0.45 kB │ gzip: 0.25 kB ℹ dist/client/instrumentation-client.js 0.43 kB │ gzip: 0.18 kB ℹ dist/shims/offline.js 0.43 kB │ gzip: 0.30 kB ℹ dist/client/pages-router-link-navigation.js 0.42 kB │ gzip: 0.24 kB ℹ dist/server/streaming-metadata.js 0.34 kB │ gzip: 0.21 kB ℹ dist/shims/internal/router-context.js 0.33 kB │ gzip: 0.22 kB ℹ dist/shims/before-interactive-context.js 0.31 kB │ gzip: 0.18 kB ℹ dist/shims/font-google.js 0.28 kB │ gzip: 0.15 kB ℹ dist/utils/promise.js 0.24 kB │ gzip: 0.17 kB ℹ dist/utils/number.js 0.20 kB │ gzip: 0.15 kB ℹ dist/server/dev-stack-sourcemap-endpoint.js 0.19 kB │ gzip: 0.16 kB ℹ dist/build/google-fonts/font-metadata.js 0.19 kB │ gzip: 0.14 kB ℹ dist/utils/compare.js 0.19 kB │ gzip: 0.14 kB ℹ dist/server/app-bfcache-id.js 0.18 kB │ gzip: 0.13 kB ℹ dist/server/edge-api-runtime.js 0.18 kB │ gzip: 0.15 kB ℹ dist/utils/record.js 0.18 kB │ gzip: 0.16 kB ℹ dist/utils/dev-error-recovery-event.js 0.17 kB │ gzip: 0.14 kB ℹ dist/utils/regex.js 0.15 kB │ gzip: 0.15 kB ℹ dist/cloudflare/index.js 0.14 kB │ gzip: 0.12 kB ℹ dist/shims/internal/cookies.js 0.11 kB │ gzip: 0.08 kB ℹ dist/cache.js 0.09 kB │ gzip: 0.08 kB ℹ dist/entries/pages-entry-helpers.js 0.09 kB │ gzip: 0.09 kB ℹ dist/build/layout-classification-types.js 0.01 kB │ gzip: 0.03 kB ℹ dist/client/empty-module.js 0.01 kB │ gzip: 0.03 kB ℹ dist/shims/client-only.js 0.01 kB │ gzip: 0.03 kB ℹ dist/shims/internal/api-utils.js 0.01 kB │ gzip: 0.03 kB ℹ dist/shims/request-state-types.js 0.01 kB │ gzip: 0.03 kB ℹ dist/shims/server-only.js 0.01 kB │ gzip: 0.03 kB ℹ dist/build/google-fonts/font-data.js 358.51 kB │ gzip: 24.18 kB ℹ dist/build/google-fonts/fallback-metrics-data.js 103.01 kB │ gzip: 23.28 kB ℹ dist/cloudflare/src/cache/kv-data-adapter.runtime.js 15.65 kB │ gzip: 5.30 kB ℹ dist/cloudflare/src/cache/cdn-adapter.runtime.js 4.23 kB │ gzip: 1.96 kB ℹ dist/cloudflare/src/utils/cache-control-metadata.js 0.82 kB │ gzip: 0.42 kB ℹ dist/shims/navigation.d.ts 28.82 kB │ gzip: 8.69 kB ℹ dist/config/next-config.d.ts 23.30 kB │ gzip: 8.14 kB ℹ dist/server/cache-proof.d.ts 16.27 kB │ gzip: 3.06 kB ℹ dist/shims/cache.d.ts 15.81 kB │ gzip: 5.09 kB ℹ dist/routing/app-route-graph.d.ts 15.25 kB │ gzip: 4.52 kB ℹ dist/config/config-matchers.d.ts 12.18 kB │ gzip: 4.64 kB ℹ dist/server/request-pipeline.d.ts 11.14 kB │ gzip: 4.08 kB ℹ dist/shims/headers.d.ts 11.11 kB │ gzip: 3.91 kB ℹ dist/server/app-server-action-execution.d.ts 10.63 kB │ gzip: 3.33 kB ℹ dist/shims/server.d.ts 10.54 kB │ gzip: 3.45 kB ℹ dist/server/app-elements-wire.d.ts 9.41 kB │ gzip: 2.53 kB ℹ dist/server/pages-page-data.d.ts 8.87 kB │ gzip: 3.05 kB ℹ dist/shims/metadata.d.ts 8.62 kB │ gzip: 2.51 kB ℹ dist/deploy.d.ts 8.54 kB │ gzip: 3.07 kB ℹ dist/server/prod-server.d.ts 8.47 kB │ gzip: 3.41 kB ℹ dist/build/prerender.d.ts 8.13 kB │ gzip: 3.08 kB ℹ dist/server/app-page-dispatch.d.ts 8.07 kB │ gzip: 2.43 kB ℹ dist/shims/router.d.ts 8.04 kB │ gzip: 2.77 kB ℹ dist/build/client-build-config.d.ts 7.81 kB │ gzip: 2.96 kB ℹ dist/server/app-page-route-wiring.d.ts 7.81 kB │ gzip: 2.11 kB ℹ dist/server/navigation-planner.d.ts 7.79 kB │ gzip: 1.99 kB ℹ dist/server/headers.d.ts 7.73 kB │ gzip: 2.76 kB ℹ dist/shims/constants.d.ts 7.54 kB │ gzip: 2.10 kB ℹ dist/server/app-browser-state.d.ts 7.37 kB │ gzip: 1.76 kB ℹ dist/server/app-page-stream.d.ts 7.26 kB │ gzip: 2.36 kB ℹ dist/server/app-page-request.d.ts 7.20 kB │ gzip: 1.57 kB ℹ dist/client/window-next.d.ts 7.12 kB │ gzip: 2.64 kB ℹ dist/server/app-page-execution.d.ts 6.96 kB │ gzip: 2.67 kB ℹ dist/server/app-rsc-handler.d.ts 6.86 kB │ gzip: 2.12 kB ℹ dist/server/isr-cache.d.ts 6.67 kB │ gzip: 2.56 kB ℹ dist/server/app-page-probe.d.ts 6.66 kB │ gzip: 2.57 kB ℹ dist/shims/error-boundary.d.ts 6.37 kB │ gzip: 1.16 kB ℹ dist/server/pages-page-response.d.ts 6.24 kB │ gzip: 2.54 kB ℹ dist/server/client-reuse-manifest.d.ts 6.04 kB │ gzip: 1.49 kB ℹ dist/shims/fetch-cache.d.ts 6.03 kB │ gzip: 2.26 kB ℹ dist/server/app-page-boundary.d.ts 5.88 kB │ gzip: 1.41 kB ℹ dist/build/report.d.ts 5.77 kB │ gzip: 2.23 kB ℹ dist/server/app-page-cache.d.ts 5.63 kB │ gzip: 1.42 kB ℹ dist/server/app-page-element-builder.d.ts 5.59 kB │ gzip: 1.81 kB ℹ dist/server/image-optimization.d.ts 5.56 kB │ gzip: 2.22 kB ℹ dist/server/pages-data-route.d.ts 5.54 kB │ gzip: 2.08 kB ℹ dist/shims/cdn-cache.d.ts 5.48 kB │ gzip: 2.17 kB ℹ dist/server/pages-page-handler.d.ts 5.41 kB │ gzip: 1.94 kB ℹ dist/server/app-browser-history-controller.d.ts 5.35 kB │ gzip: 1.78 kB ℹ dist/server/metadata-routes.d.ts 5.34 kB │ gzip: 1.78 kB ℹ dist/server/app-fallback-renderer.d.ts 5.30 kB │ gzip: 1.80 kB ℹ dist/server/app-browser-navigation-controller.d.ts 5.21 kB │ gzip: 1.60 kB ℹ dist/plugins/fonts.d.ts 5.19 kB │ gzip: 2.31 kB ℹ dist/server/pages-request-pipeline.d.ts 5.05 kB │ gzip: 1.86 kB ℹ dist/shims/link.d.ts 5.01 kB │ gzip: 1.52 kB ℹ dist/utils/asset-prefix.d.ts 5.00 kB │ gzip: 1.93 kB ℹ dist/server/dev-lockfile.d.ts 4.90 kB │ gzip: 2.01 kB ℹ dist/server/app-page-render.d.ts 4.84 kB │ gzip: 1.63 kB ℹ dist/server/pages-document-initial-props.d.ts 4.76 kB │ gzip: 1.68 kB ℹ dist/server/pages-i18n.d.ts 4.73 kB │ gzip: 1.83 kB ℹ dist/routing/utils.d.ts 4.59 kB │ gzip: 1.83 kB ℹ dist/index.d.ts 4.54 kB │ gzip: 1.83 kB ℹ dist/entries/app-rsc-entry.d.ts 4.36 kB │ gzip: 1.97 kB ℹ dist/server/app-page-boundary-render.d.ts 4.31 kB │ gzip: 1.41 kB ℹ dist/client/navigation-runtime.d.ts 4.29 kB │ gzip: 1.51 kB ℹ dist/server/http-error-responses.d.ts 4.18 kB │ gzip: 1.73 kB ℹ dist/shims/cache-runtime.d.ts 4.13 kB │ gzip: 1.77 kB ℹ dist/server/app-history-state.d.ts 3.97 kB │ gzip: 1.14 kB ℹ dist/shims/document.d.ts 3.94 kB │ gzip: 1.66 kB ℹ dist/server/app-rsc-cache-busting.d.ts 3.86 kB │ gzip: 1.27 kB ℹ dist/shims/unified-request-context.d.ts 3.82 kB │ gzip: 1.40 kB ℹ dist/server/instrumentation.d.ts 3.79 kB │ gzip: 1.48 kB ℹ dist/server/isr-decision.d.ts 3.79 kB │ gzip: 1.47 kB ℹ dist/check.d.ts 3.72 kB │ gzip: 1.69 kB ℹ dist/server/app-route-handler-execution.d.ts 3.71 kB │ gzip: 1.30 kB ℹ dist/server/pages-asset-tags.d.ts 3.70 kB │ gzip: 1.57 kB ℹ dist/shims/head.d.ts 3.69 kB │ gzip: 1.65 kB ℹ dist/server/middleware.d.ts 3.67 kB │ gzip: 1.56 kB ℹ dist/server/navigation-trace.d.ts 3.56 kB │ gzip: 1.15 kB ℹ dist/cloudflare/tpr.d.ts 3.43 kB │ gzip: 1.59 kB ℹ dist/server/app-ssr-stream.d.ts 3.33 kB │ gzip: 1.41 kB ℹ dist/server/pages-api-route.d.ts 3.31 kB │ gzip: 1.43 kB ℹ dist/init.d.ts 3.31 kB │ gzip: 1.46 kB ℹ dist/server/artifact-compatibility.d.ts 3.28 kB │ gzip: 0.76 kB ℹ dist/server/app-rsc-request-normalization.d.ts 3.27 kB │ gzip: 1.46 kB ℹ dist/shims/font-google-base.d.ts 3.22 kB │ gzip: 1.35 kB ℹ dist/server/app-rsc-route-matching.d.ts 3.21 kB │ gzip: 1.18 kB ℹ dist/routing/route-pattern.d.ts 3.20 kB │ gzip: 1.20 kB ℹ dist/server/app-browser-visible-commit.d.ts 3.17 kB │ gzip: 0.86 kB ℹ dist/server/skip-cache-proof.d.ts 3.13 kB │ gzip: 0.78 kB ℹ dist/utils/lazy-chunks.d.ts 3.02 kB │ gzip: 1.33 kB ℹ dist/server/middleware-runtime.d.ts 3.02 kB │ gzip: 1.23 kB ℹ dist/shims/internal/pages-data-target.d.ts 3.01 kB │ gzip: 1.44 kB ℹ dist/server/app-browser-action-result.d.ts 3.00 kB │ gzip: 0.96 kB ℹ dist/plugins/sass.d.ts 3.00 kB │ gzip: 1.39 kB ℹ dist/build/layout-classification.d.ts 2.95 kB │ gzip: 1.16 kB ℹ dist/server/app-page-response.d.ts 2.94 kB │ gzip: 0.99 kB ℹ dist/server/app-page-head.d.ts 2.89 kB │ gzip: 0.83 kB ℹ dist/utils/project.d.ts 2.88 kB │ gzip: 1.25 kB ℹ dist/server/dev-origin-check.d.ts 2.86 kB │ gzip: 1.20 kB ℹ dist/build/route-classification-manifest.d.ts 2.85 kB │ gzip: 1.21 kB ℹ dist/shims/internal/pages-data-fetch-dedup.d.ts 2.72 kB │ gzip: 1.33 kB ℹ dist/server/pages-default-404.d.ts 2.72 kB │ gzip: 1.34 kB ℹ dist/shims/url-utils.d.ts 2.69 kB │ gzip: 1.06 kB ℹ dist/utils/query.d.ts 2.64 kB │ gzip: 1.17 kB ℹ dist/plugins/middleware-server-only.d.ts 2.63 kB │ gzip: 1.23 kB ℹ dist/server/dev-server.d.ts 2.61 kB │ gzip: 1.21 kB ℹ dist/server/static-file-cache.d.ts 2.60 kB │ gzip: 1.23 kB ℹ dist/cache/cache-adapters-virtual.d.ts 2.59 kB │ gzip: 1.14 kB ℹ dist/shims/font-utils.d.ts 2.57 kB │ gzip: 1.01 kB ℹ dist/routing/file-matcher.d.ts 2.54 kB │ gzip: 1.04 kB ℹ dist/server/app-route-handler-policy.d.ts 2.52 kB │ gzip: 0.72 kB ℹ dist/server/app-route-handler-runtime.d.ts 2.45 kB │ gzip: 0.99 kB ℹ dist/server/pages-body-parser-config.d.ts 2.41 kB │ gzip: 1.14 kB ℹ dist/server/app-layout-param-observation.d.ts 2.40 kB │ gzip: 0.81 kB ℹ dist/entries/app-rsc-manifest.d.ts 2.40 kB │ gzip: 1.09 kB ℹ dist/shims/request-context.d.ts 2.37 kB │ gzip: 1.02 kB ℹ dist/server/app-route-module-loader.d.ts 2.36 kB │ gzip: 1.07 kB ℹ dist/server/dev-error-overlay.d.ts 2.32 kB │ gzip: 0.76 kB ℹ dist/server/pages-node-compat.d.ts 2.29 kB │ gzip: 0.91 kB ℹ dist/plugins/og-assets.d.ts 2.29 kB │ gzip: 1.11 kB ℹ dist/server/otel-tracer-extension.d.ts 2.28 kB │ gzip: 1.03 kB ℹ dist/routing/route-trie.d.ts 2.26 kB │ gzip: 1.07 kB ℹ dist/shims/slot.d.ts 2.25 kB │ gzip: 0.81 kB ℹ dist/server/app-route-handler-cache.d.ts 2.23 kB │ gzip: 0.79 kB ℹ dist/server/instrumentation-runtime.d.ts 2.22 kB │ gzip: 1.08 kB ℹ dist/server/cache-control.d.ts 2.20 kB │ gzip: 1.03 kB ℹ dist/shims/internal/link-status-registry.d.ts 2.19 kB │ gzip: 0.95 kB ℹ dist/server/app-pages-bridge.d.ts 2.16 kB │ gzip: 0.95 kB ℹ dist/build/nitro-route-rules.d.ts 2.14 kB │ gzip: 0.95 kB ℹ dist/shims/internal/pages-data-url.d.ts 2.14 kB │ gzip: 0.98 kB ℹ dist/build/run-prerender.d.ts 2.13 kB │ gzip: 1.00 kB ℹ dist/config/dotenv.d.ts 2.13 kB │ gzip: 1.10 kB ℹ dist/server/app-ssr-entry.d.ts 2.12 kB │ gzip: 1.07 kB ℹ dist/routing/pages-router.d.ts 2.04 kB │ gzip: 0.85 kB ℹ dist/server/app-optimistic-routing.d.ts 2.02 kB │ gzip: 0.53 kB ℹ dist/server/app-route-handler-dispatch.d.ts 2.02 kB │ gzip: 0.79 kB ℹ dist/server/app-mounted-slots-header.d.ts 2.02 kB │ gzip: 1.06 kB ℹ dist/shims/cache-for-request.d.ts 2.01 kB │ gzip: 0.88 kB ℹ dist/build/static-export.d.ts 1.99 kB │ gzip: 0.75 kB ℹ dist/server/app-elements.d.ts 1.98 kB │ gzip: 0.60 kB ℹ dist/shims/internal/cookie-serialize.d.ts 1.97 kB │ gzip: 0.95 kB ℹ dist/build/layout-classification-types.d.ts 1.96 kB │ gzip: 0.86 kB ℹ dist/client/instrumentation-client-inject.d.ts 1.95 kB │ gzip: 0.89 kB ℹ dist/server/next-error-digest.d.ts 1.94 kB │ gzip: 0.89 kB ℹ dist/server/normalize-path.d.ts 1.91 kB │ gzip: 0.90 kB ℹ dist/plugins/optimize-imports.d.ts 1.91 kB │ gzip: 0.93 kB ℹ dist/utils/client-runtime-metadata.d.ts 1.91 kB │ gzip: 0.90 kB ℹ dist/shims/script.d.ts 1.86 kB │ gzip: 0.88 kB ℹ dist/shims/navigation.react-server.d.ts 1.86 kB │ gzip: 0.54 kB ℹ dist/server/pregenerated-concrete-paths.d.ts 1.81 kB │ gzip: 0.82 kB ℹ dist/shims/image.d.ts 1.81 kB │ gzip: 0.83 kB ℹ dist/shims/image-config.d.ts 1.80 kB │ gzip: 0.87 kB ℹ dist/shims/internal/app-route-detection.d.ts 1.80 kB │ gzip: 0.92 kB ℹ dist/shims/ppr-fallback-shell.d.ts 1.80 kB │ gzip: 0.55 kB ℹ dist/shims/url-safety.d.ts 1.79 kB │ gzip: 0.90 kB ℹ dist/server/dev-stack-sourcemap.d.ts 1.77 kB │ gzip: 0.62 kB ℹ dist/server/app-middleware.d.ts 1.77 kB │ gzip: 0.72 kB ℹ dist/utils/manifest-paths.d.ts 1.76 kB │ gzip: 0.82 kB ℹ dist/server/socket-error-backstop.d.ts 1.76 kB │ gzip: 0.91 kB ℹ dist/server/prerender-route-params.d.ts 1.76 kB │ gzip: 0.47 kB ℹ dist/server/proxy-trust.d.ts 1.73 kB │ gzip: 0.84 kB ℹ dist/build/assets-ignore.d.ts 1.72 kB │ gzip: 0.92 kB ℹ dist/server/app-segment-config.d.ts 1.68 kB │ gzip: 0.66 kB ℹ dist/server/pages-page-method.d.ts 1.67 kB │ gzip: 0.85 kB ℹ dist/server/app-interception-context-header.d.ts 1.65 kB │ gzip: 0.91 kB ℹ dist/server/app-route-handler-response.d.ts 1.62 kB │ gzip: 0.52 kB ℹ dist/shims/unrecognized-action-error.d.ts 1.58 kB │ gzip: 0.74 kB ℹ dist/shims/before-interactive-context.d.ts 1.56 kB │ gzip: 0.71 kB ℹ dist/plugins/client-reference-dedup.d.ts 1.55 kB │ gzip: 0.74 kB ℹ dist/server/app-rsc-response-finalizer.d.ts 1.54 kB │ gzip: 0.78 kB ℹ dist/server/app-page-render-observation.d.ts 1.54 kB │ gzip: 0.50 kB ℹ dist/shims/link-prefetch.d.ts 1.53 kB │ gzip: 0.54 kB ℹ dist/server/pages-readiness.d.ts 1.51 kB │ gzip: 0.77 kB ℹ dist/utils/encode-cache-tag.d.ts 1.49 kB │ gzip: 0.86 kB ℹ dist/server/dev-error-overlay-store.d.ts 1.49 kB │ gzip: 0.53 kB ℹ dist/server/client-trace-metadata.d.ts 1.48 kB │ gzip: 0.63 kB ℹ dist/server/app-prerender-static-params.d.ts 1.46 kB │ gzip: 0.67 kB ℹ dist/build/css-url-assets.d.ts 1.46 kB │ gzip: 0.77 kB ℹ dist/server/file-based-metadata.d.ts 1.45 kB │ gzip: 0.66 kB ℹ dist/server/app-browser-hydration.d.ts 1.43 kB │ gzip: 0.51 kB ℹ dist/server/html.d.ts 1.41 kB │ gzip: 0.71 kB ℹ dist/client/vinext-next-data.d.ts 1.39 kB │ gzip: 0.62 kB ℹ dist/shims/internal/route-pattern-for-warning.d.ts 1.39 kB │ gzip: 0.73 kB ℹ dist/utils/text-stream.d.ts 1.37 kB │ gzip: 0.73 kB ℹ dist/shims/internal/work-unit-async-storage.d.ts 1.37 kB │ gzip: 0.55 kB ℹ dist/utils/base-path.d.ts 1.36 kB │ gzip: 0.60 kB ℹ dist/utils/domain-locale.d.ts 1.35 kB │ gzip: 0.57 kB ℹ dist/shims/internal/utils.d.ts 1.34 kB │ gzip: 0.61 kB ℹ dist/build/precompress.d.ts 1.33 kB │ gzip: 0.68 kB ℹ dist/routing/app-router.d.ts 1.31 kB │ gzip: 0.55 kB ℹ dist/server/server-action-not-found.d.ts 1.31 kB │ gzip: 0.59 kB ℹ dist/server/app-browser-popstate.d.ts 1.31 kB │ gzip: 0.48 kB ℹ dist/server/app-browser-stream.d.ts 1.30 kB │ gzip: 0.60 kB ℹ dist/shims/font-local.d.ts 1.29 kB │ gzip: 0.59 kB ℹ dist/shims/internal/app-router-context.d.ts 1.24 kB │ gzip: 0.47 kB ℹ dist/shims/legacy-image.d.ts 1.24 kB │ gzip: 0.55 kB ℹ dist/shims/layout-segment-context.d.ts 1.24 kB │ gzip: 0.55 kB ℹ dist/server/app-browser-rsc-redirect.d.ts 1.23 kB │ gzip: 0.41 kB ℹ dist/shims/default-global-error.d.ts 1.22 kB │ gzip: 0.66 kB ℹ dist/server/seed-cache.d.ts 1.22 kB │ gzip: 0.64 kB ℹ dist/server/app-browser-interception-context.d.ts 1.21 kB │ gzip: 0.51 kB ℹ dist/shims/app.d.ts 1.20 kB │ gzip: 0.50 kB ℹ dist/build/route-classification-injector.d.ts 1.19 kB │ gzip: 0.55 kB ℹ dist/shims/navigation-state.d.ts 1.19 kB │ gzip: 0.50 kB ℹ dist/server/dev-module-runner.d.ts 1.18 kB │ gzip: 0.62 kB ℹ dist/utils/hash.d.ts 1.17 kB │ gzip: 0.65 kB ℹ dist/plugins/postcss.d.ts 1.17 kB │ gzip: 0.61 kB ℹ dist/shims/dynamic.d.ts 1.17 kB │ gzip: 0.54 kB ℹ dist/server/pages-serializable-props.d.ts 1.13 kB │ gzip: 0.56 kB ℹ dist/entries/runtime-entry-module.d.ts 1.13 kB │ gzip: 0.58 kB ℹ dist/cli-args.d.ts 1.12 kB │ gzip: 0.57 kB ℹ dist/entries/app-browser-entry.d.ts 1.10 kB │ gzip: 0.58 kB ℹ dist/plugins/server-externals-manifest.d.ts 1.09 kB │ gzip: 0.61 kB ℹ dist/utils/vinext-root.d.ts 1.07 kB │ gzip: 0.53 kB ℹ dist/server/app-rsc-errors.d.ts 1.05 kB │ gzip: 0.45 kB ℹ dist/build/standalone.d.ts 1.05 kB │ gzip: 0.53 kB ℹ dist/utils/client-build-manifest.d.ts 1.04 kB │ gzip: 0.30 kB ℹ dist/server/app-rsc-render-mode.d.ts 1.03 kB │ gzip: 0.38 kB ℹ dist/server/metadata-route-build-data.d.ts 1.02 kB │ gzip: 0.41 kB ℹ dist/shims/router-state.d.ts 1.01 kB │ gzip: 0.53 kB ℹ dist/shims/form.d.ts 0.99 kB │ gzip: 0.56 kB ℹ dist/server/app-visited-response-cache.d.ts 0.97 kB │ gzip: 0.38 kB ℹ dist/shims/error.d.ts 0.97 kB │ gzip: 0.53 kB ℹ dist/server/app-render-dependency.d.ts 0.97 kB │ gzip: 0.35 kB ℹ dist/server/request-log.d.ts 0.97 kB │ gzip: 0.53 kB ℹ dist/server/default-not-found-module.d.ts 0.94 kB │ gzip: 0.56 kB ℹ dist/server/app-ppr-fallback-shell.d.ts 0.94 kB │ gzip: 0.32 kB ℹ dist/shims/config.d.ts 0.94 kB │ gzip: 0.45 kB ℹ dist/routing/route-matching.d.ts 0.93 kB │ gzip: 0.49 kB ℹ dist/server/default-global-error-module.d.ts 0.92 kB │ gzip: 0.55 kB ℹ dist/shims/request-state-types.d.ts 0.89 kB │ gzip: 0.29 kB ℹ dist/server/app-request-context.d.ts 0.88 kB │ gzip: 0.48 kB ℹ dist/server/app-page-render-identity.d.ts 0.87 kB │ gzip: 0.33 kB ℹ dist/shims/app-router-scroll-state.d.ts 0.86 kB │ gzip: 0.28 kB ℹ dist/plugins/ast-utils.d.ts 0.85 kB │ gzip: 0.37 kB ℹ dist/shims/thenable-params.d.ts 0.84 kB │ gzip: 0.45 kB ℹ dist/config/tsconfig-paths.d.ts 0.84 kB │ gzip: 0.43 kB ℹ dist/server/static-layout-client-reuse-proof.d.ts 0.83 kB │ gzip: 0.31 kB ℹ dist/server/app-rsc-error-handler.d.ts 0.82 kB │ gzip: 0.46 kB ℹ dist/server/app-static-generation.d.ts 0.78 kB │ gzip: 0.31 kB ℹ dist/plugins/async-hooks-stub.d.ts 0.78 kB │ gzip: 0.45 kB ℹ dist/utils/client-entry-manifest.d.ts 0.78 kB │ gzip: 0.29 kB ℹ dist/server/app-prerender-endpoints.d.ts 0.77 kB │ gzip: 0.38 kB ℹ dist/server/csp.d.ts 0.76 kB │ gzip: 0.26 kB ℹ dist/shims/root-params.… |
||
|
|
e018a08708 |
fix(pages-router): restore scroll across reload history traversal (#1905)
* fix(pages-router): restore scroll across reload history traversal
Pages Router pages with experimental.scrollRestoration currently expose window.next.router before the popstate runtime is installed and only keep Vinext scroll coordinates in the in-memory history state. After a reload, a back or forward traversal can run before the runtime is ready and has no durable scroll snapshot for the target history entry.
The violated invariant is that the Pages Router owns browser scroll restoration whenever the Next.js scroll restoration flag is enabled, with one stable history key per entry and routeChangeComplete emitted after the new page commits.
Resolve the Next.js config flag into process.env.__NEXT_SCROLL_RESTORATION, install the Pages Router runtime during next/router evaluation, persist Next-style sessionStorage scroll snapshots per history key, and render navigations through a stable commit boundary before emitting routeChangeComplete.
Regression coverage ports Next.js reload-scroll-backforward-restoration and verifies manual restoration plus exact scroll positions across reload, back, and forward traversal.
* fix(pages-router): sequence routeChangeComplete after scroll restoration and settle on render failures
* fix(router): guard against missing window.history in stampInitialHistoryState
* fix(router): defer hash scroll until after routeChangeComplete
Move hash scrolling out of renderPagesRouterElement's commit callback
and into the post-routeChangeComplete path, matching Next.js ordering:
x/y restoration happens during render commit, hash scrolling happens
after the completion event.
Also fix E2E test expectRouteChangeComplete to use one-shot event
listeners instead of checking for stale text, and add listener cleanup
to the fixture to prevent accumulation.
* fix(test): remove post-push deadlock and throw on missing events in E2E helper
expectRouteChangeComplete() now throws if window.next.router.events is
absent instead of silently resolving. Remove the redundant
expectRouteChangeComplete call after pushWithPagesRouter in the third
test — the awaited router.push already resolves after routeChangeComplete,
so registering a listener after it would deadlock.
* fix(test): replace as any casts with type-safe window.next narrowing in E2E scroll tests
* fix(router): narrow renderPagesRouterElement scroll param, drop dead hash branch
* fix(router): reset x/y scroll on hash routes before routeChangeComplete and cancel pending render on supersede
- Pass {x:0, y:0} through commit boundary for all scrollable
navigations, not just hash-less ones (hash scroll deferred to after
routeChangeComplete as before).
- Cancel pending render-commit Promise when a newer navigation starts,
preventing hang when the first root.render() commit is dropped by
React re-reconciliation.
- Add regression tests for both edge cases.
* fix(router): use SSR-safe layout effect in commit boundary and pin shallow scroll ordering
Address bonk review on #1905:
- swap the commit boundary's raw useLayoutEffect for the SSR-safe
useNonWarningLayoutEffect pattern from shims/image.tsx so Pages Router
SSR renders no longer log React's useLayoutEffect warning
- document that the default-noop commit boundary intentionally also wraps
SSR and initial hydration
- document the intentional shallow-scroll-before-routeChangeComplete
ordering and add a unit test pinning it
* fix(router): keep history-state scroll restore on popstate when scrollRestoration flag is off
Without experimental.scrollRestoration, popstate must still honour the
__vinext_scrollX/Y saved into history state on push, since a soft popstate
re-renders content the browser's native restoration can't position. Also
document why the popstate-time sessionStorage snapshot depends on
history.scrollRestoration = "manual".
* fix(router): guard render-commit canceller against late commits from superseded trees
* fix(router): defer current-history-key commit until beforePopState allows navigation
When beforePopState cancels a popstate the app stays on the previous
history entry, but _currentHistoryKey had already been updated to the
target key, skewing subsequent scroll-position bookkeeping. Move the
key commit below the beforePopState early-return, matching the
deliberate deferral of _lastPathnameAndSearch.
* chore(router): note intentional eager scroll snapshot; fix fixture link increment
- Document that the outgoing-entry scroll snapshot is deliberately written
before the beforePopState gate: on cancellation the app stays on
currentKey, so the saved value remains that entry's live scroll.
- Coerce id to a number in the pages-scroll-restoration fixture Link so
the href increments numerically instead of string-concatenating.
* fix(router): keep manual scroll restoration opt-in Pages-Router-only
Gate installManualScrollRestoration on the document not being an App
Router one (window.next.appDir === true): with the now-global
__NEXT_SCROLL_RESTORATION define, an App Router app that value-imports
next/router for compat would otherwise have its native browser scroll
restoration disabled at module eval. Upstream only flips
history.scrollRestoration inside the Pages Router constructor, which
never runs on App Router documents.
Also document the hash-only popstate path discarding the per-entry
__next_scroll_<key> snapshot as intentional upstream parity (change()'s
onlyAHashChange branch passes null to this.set and only scrollToHash
runs), and add unit coverage for both behaviors.
* ci: run pages-scroll-restoration E2E project in the CI matrix
Add the missing E2E matrix entry so the ported Next.js regression spec
(reload-scroll-backforward-restoration.spec.ts) actually executes in CI,
matching the shape of the sibling single-shard Pages Router entries.
Also document why the soft-popstate scroll fallback differs between
manual restoration on ({ x: 0, y: 0 }) and off (null -> native auto
restoration handles unstamped entries), per review.
* refactor(router): fold App Router gate into manualScrollRestoration constant
The popstate handler's sessionStorage save/read branches gated on the
module-level constant, which lacked the window.next?.appDir check that
installManualScrollRestoration used, leaving those branches relying
solely on the __N state filter to stay inert on App Router documents.
Fold the appDir check into the constant so every consumer is
Pages-Router-only by the same gate; the App Router bootstrap stamps
window.next.appDir before any client module evaluates, so the
module-eval-time check is reliable.
* test(pages-scroll-restoration): default getServerSideProps id to string "0"
Route params always arrive as strings, so the numeric 0 fallback was
inconsistent with the string values the component relies on
(Number(id) + 1 href, id === "error" check). Default to "0" for type
consistency.
* test(pages-scroll-restoration): align fixture deps and vinext import with pages-basic
Import vinext via the workspace package name instead of reaching into
dist by relative path, and declare the same react/react-dom/vinext
dependencies as the other fixtures so the fixture is self-describing
and the pnpm-lock.yaml importer entry is populated.
* fix(router): snapshot outgoing scroll on hash-only pushes
Upstream Next.js snapshots the outgoing entry's scroll into
__next_scroll_<key> inside Router.push() itself, before change()'s
onlyAHashChange short-circuit, so hash-only pushes still capture the
departed entry's position. Our hash-only push branch returned before
saveScrollPosition() ran, so a later back-popstate to that entry
restored {x: 0, y: 0} instead of the position the user had reached.
Save the outgoing scroll before updateHistory mints the new key,
matching the full-navigation push path and upstream ordering.
* docs(router): clarify manual scroll-target fallback chain precedence
* test(shims): tag scrollRestoration App Router test as eval-order guard
* docs(router): note missing-snapshot fallback intent at forcedScroll default
---------
Co-authored-by: James <james@eli.cx>
|
||
|
|
f5bee1a26f |
fix(app-router): preserve unstable_catchError boundaries (#1906)
* fix(app-router): preserve unstable_catchError boundaries
* test(e2e): add Next-parity test for shouldRerenderAppPageWithGlobalError (#1906)
Add a test proving that for uncaught post-shell RSC errors (with no
client boundary), the server preserves the original HTML stream and the
client renders global-error. This is the Next.js behavior that justifies
keeping shouldRerenderAppPageWithGlobalError unconditional at false.
The server cannot detect userland client boundaries like
unstable_catchError from the route manifest, so the only safe way to
get a global-error rerender is to make a targeted error-boundary test.
The test uses a loading.tsx boundary so the error is truly post-shell,
not caught by the pre-shell error-recovery catch block.
* fix(error): restore sentinel wrapper for falsy thrown values in unstable_catchError
Restores the _CatchErrorState sentinel wrapper ({ thrownValue: unknown }) so
falsy thrown values (null, undefined, 0, "") are routed to the fallback
instead of being treated as no error. Also restores ErrorInfo.error as unknown.
Adds back unit tests for falsy values, class-component lifecycle, and
unstable_retry behavior parity with the component-rendered fallback shape.
Refs: #1906
* fix(error): align ambient ErrorInfo.error type with runtime implementation
* refactor(app-router): remove shouldRerenderAppPageWithGlobalError dead code
The function always returned false and its _options parameter and
ShouldRerenderAppPageWithGlobalErrorOptions type were vestigial.
The call site at app-page-render.ts:892-904 was therefore never taken.
Remove the function, type, import, call site, and the now-redundant
unit test, leaving the shell-level recovery path in
renderAppPageHtmlStreamWithRecovery as the sole error recovery seam.
Addresses ask-bonk review comment on #1906.
* fix(test): restore typed globalAny view and document Fallback as any intent
Addresses two non-blocking review findings from ask-bonk on PR #1906:
- Restored the typed `globalThis as unknown as { window?: unknown }`
pattern for window stubs in the unstable_catchError test section,
replacing the `(globalThis as any).window` pattern that was a type-safety
regression from the prior rewrite.
- Added an inline comment explaining why `Fallback as any` is necessary
in the class-component lifecycle test: the test probes the inner
_CatchError class directly, where the fallback function is used as a
React component type (receiving a single `{ props, errorInfo }` object)
rather than the public API signature `(props, errorInfo)`.
* chore: trigger CI
* fix(test): rename forwardedProps to props in unstable-catchError test
Addresses ask-bonk review finding on PR #1906: the test was seeding
the inner _CatchError class with the stale key name forwardedProps,
but the production wrapper now passes props (and isPagesRouter).
Since this test only exercises the App Router unstable_retry path
(which reads neither key), behavior was unaffected, but renaming
aligns the test with the current boundary shape for future readers.
* refactor(server): remove dead routeHasLocalBoundary field
Removing shouldRerenderAppPageWithGlobalError (commit
|
||
|
|
835e6b9943 |
fix(app-router): suppress redirect console errors in production onCaughtError (root-layout-redirect) (#1878)
* fix(app-router): suppress redirect console errors in production onCaughtError (#1830) When redirect() is called from a 'use client' root layout (or any client component), React catches the NEXT_REDIRECT sentinel via RedirectErrorBoundary and then calls the hydrateRoot onCaughtError callback. In dev mode vinext already filtered these via devOnCaughtError, but the production path had no onCaughtError at all — React's built-in fallback calls console.error, producing a spurious browser console error that fails the Next.js compat test assertion `expect(foundErrors).toBe(false)`. Fix: add prodOnCaughtError to app-browser-error.ts that silently drops navigation signal errors (NEXT_REDIRECT, NEXT_NOT_FOUND, NEXT_HTTP_ERROR_FALLBACK) and logs all other caught errors, preserving React's default behavior. Add fixture tests/fixtures/root-layout-redirect/ (dedicated 'use client' root layout with redirect()) and Playwright project root-layout-redirect (port 4184) with spec porting the Next.js root-layout-redirect > should work using browser. Part of #1830 * fix: include result/ page in root-layout-redirect fixture * fix: add lockfile entry for root-layout-redirect fixture, use prod server, import isNavigationSignalError Three fixes to unblock catastrophically-failing CI: 1. pnpm-lock.yaml: Add missing importer entry for tests/fixtures/root-layout-redirect. The fixture was added without updating the lockfile, causing ERR_PNPM_OUTDATED_LOCKFILE on every CI job during `vp install`. 2. playwright.config.ts: Switch the root-layout-redirect server from `npx vp dev` (dev mode) to `vinext build + vinext start` (production mode). The fix under test — prodOnCaughtError — is only active in production builds; running in dev mode exercised the pre-existing devOnCaughtError path and never touched the new code. 3. app-browser-error.ts: Replace the inline isNavigationSignalDigest helper with an import of isNavigationSignalError from utils/navigation-signal.ts. The module is dependency-free and already in the production browser bundle; inlining it reintroduced the drift risk that navigation-signal.ts was created to prevent. Addresses ask-bonk findings: blocking (test ran in dev mode) and maintainability (inline classifier duplication). * test: add prodOnCaughtError unit tests, run root-layout-redirect e2e in CI, scope gitignore negation |
||
|
|
cda19e1c58 |
fix(app-router): preserve recent segment state with Activity BFCache (#1739)
* fix(app-router): preserve recent segment state with Activity BFCache Fresh App Router navigations were reusing the active React tree when moving between dynamic segment values. That leaked client state into a newly entered segment and made the upstream back-forward-cache suite fail before it even reached browser traversal assertions. The root cause was that vinext had history-entry bfcacheId plumbing but no separate segment state-key cache. Next.js treats those identities separately: render state is keyed by segment identity/pathname, while useRouter().bfcacheId identifies a concrete history entry. Add state-key maps for app router slots, render retained entries through React.Activity when cacheComponents is enabled, keep the active one-entry keyed reset path otherwise, and port focused Next.js regression coverage for the three-entry BFCache behavior. * fix(bfcache): store stateKeyMap in retained slot entries and re-provide on render Review feedback requested two changes: 1. Add stateKeyMap to BfcacheSlotEntry so each retained BFCache entry carries the state-key map that belonged to it when active, rather than borrowing the current navigation's map. This prevents nested hidden entries from being rendered with old elements but new pathname-derived state keys — an identity corruption bug that upstream Next.js avoids by rendering each retained entry from its own state. 2. Add a nested dynamic regression test: /nested/[section]/item/[id] with client counters in both the [section] layout and [id] page. The existing flat /page/[n] tests do not exercise nested retained-entry identity, which is exactly where the missing state-key-map bug lives. Changes: - BfcacheSlotEntry gains stateKeyMap?: Readonly<Record<string, string>> - updateBfcacheSlotEntries accepts and stores an optional stateKeyMap argument - BfcacheSlotBoundary stores the current stateKeyMap alongside elements when caching the active entry - Both the Activity visible/hidden path and the non-cacheComponents single-entry path now wrap rendered entries in BfcacheStateKeyMapContext.Provider using the entry's own stateKeyMap (falling back to current map for forward compatibility) - New e2e test verifies nested layout + page counter preservation across segment navigations * refactor(bfcache): extract shared provider stack into BfcacheEntryProviders BfcacheSlotBoundary rendered the BfcacheStateKeyMapContext / ElementsContext / SegmentContext provider stack in two places: the one-entry keyed reset path and the per-entry Activity retention list. The two stacks were identical except for where the React key sat, so the retained-entry bookkeeping and its render shape were tangled together and harder to audit than needed. Extract BfcacheEntryProviders as a pure presentational helper and render it from both paths. The keyed-reset path keeps its remount semantics: the key now sits on the BfcacheEntryProviders element, so a fresh active stateKey still remounts the whole provider subtree. Hook ordering is unchanged. All hooks stay above the early returns in BfcacheSlotBoundary, so the boundary still satisfies the Rules of Hooks across the activeStateKey undefined-to-defined transition. Covered by the slot BFCache entry-state suite in tests/shims.test.ts. * test(bfcache): isolate cacheComponents BFCache coverage in a dedicated fixture The back/forward-cache e2e suite ran against the shared app-basic fixture with cacheComponents: true. app-basic backs the single app-router Playwright server that every app-router spec uses, so enabling cacheComponents globally changed a core DOM invariant for unrelated tests: inactive route trees stay mounted as hidden Activity DOM. The contamination already leaked a :visible workaround into the interception-modal bfcacheId spec, which had nothing to do with Activity. cacheComponents is an opt-in semantic mode, not default app-router behaviour, so it does not belong on the shared baseline fixture. Move the BFCache routes into a dedicated tests/fixtures/app-bfcache fixture with cacheComponents: true, served by a new app-router-bfcache Playwright project on port 4183, and run the back-forward-cache spec there against the project baseURL. The :visible locators stay in that spec, where duplicate hidden DOM is the expected contract. Remove cacheComponents and the BFCache routes from app-basic so the shared fixture models default behaviour again, and revert the :visible workaround in use-router-bfcache-id.spec.ts now that the modal route no longer retains hidden DOM. Fix the nested item page import while moving it: nested/[section]/item/[id]/ page.tsx imported ../counter, but the counter lives two levels up at nested/[section]/counter.tsx, so it must be ../../counter. Validation: PLAYWRIGHT_PROJECT=app-router-bfcache (5 passed) and the full use-router-bfcache-id spec under app-router (11 passed), plus the slot BFCache unit suite (1172 passed) and vp check (formatting + lint + types clean). * ci: run the app-router-bfcache e2e project in the matrix The dedicated app-router-bfcache Playwright project was added to playwright.config.ts but not to the CI E2E matrix, so the back/forward-cache specs never ran in CI. Add it to the matrix project list so the BFCache suite runs on every push. It uses the default chromium browser, so the existing setup and browser-cache steps apply unchanged. * fix(bfcache): keep persisted slots mounted when cacheComponents is off Without cacheComponents there is no Activity retention, yet BfcacheSlotBoundary still keyed the active entry by its segment stateKey. That stateKey tracks the pathname (createBfcacheSegmentIdentity), so any slot whose identity moves with the URL (shared layouts, interception source slots) was remounted on navigation, discarding client state that survives a normal route change. The baseline router reconciles these slots in place. This regressed seven existing app-router e2e tests once cacheComponents was no longer masking it on the shared fixture: interception source-context and modal preservation in advanced.spec.ts, and layout-persistence.spec.ts dynamic-segment layout counter survival. Fresh-entry reset is driven by userland bfcacheId keying in the fixtures, not by remounting the slot subtree, so the keying was pure overreach in the non-cacheComponents path. Render the single active entry unkeyed when cacheComponents is off so the boundary reconciles in place like the baseline. The keyed Activity retention path is unchanged for cacheComponents. Validation: full app-router project 436 passed / 0 failed (the seven regressions now pass); use-router-bfcache-id 11 passed (fresh-push reset intact); app-bfcache 5 passed (Activity retention intact); shims unit suite 1024 passed. * docs(test): point bfcacheId spec comment at the app-router-bfcache project The header noted that Activity-backed preservation is covered in back-forward-cache.spec.ts, but that spec moved to the dedicated app-bfcache fixture under the app-router-bfcache project. Name the project and path so the cross-reference stays accurate. * docs: align cacheComponents comment with unkeyed active-segment behavior * test(bfcache): assert fresh bfcacheId after Activity-restored return * style: collapse locator chains per oxfmt * refactor(bfcache): split slot entry order from snapshots * fix(bfcache): keep non-cacheComponents slot path baseline * fix(bfcache): use string cacheComponents define * test: remove external fetch from revalidate tag fixture * fix(bfcache): harden Activity state key retention * docs(bfcache): document cacheComponents Activity caveats * fix(bfcache): preserve navigation context for fallback SSR Fallback boundary rendering can outlive the original request-scoped navigation context. That made app SSR fail fast with a missing navigation context when loading-boundary digest routes rendered their HTTP fallback shell. The SSR boundary contract still requires a navigation context for real request renders, but boundary renderers now synthesize the same typed shape from the request URL and matched params when request scope has already been cleared. * refactor(bfcache): normalize pathname in state-key map, document invariant callers Moves hydration-pathname normalization into createBfcacheSegmentStateKeyMap so SSR and client always produce byte-identical Activity keys. Documents the requireNavigationContext guaranteeing callers per review feedback. * fix(bfcache): tolerate malformed state-key pathnames * docs(bfcache): document known Next.js divergence and dead-branch contract * chore(deps): update lockfile for vite 0.1.24 * fix(app-router): preserve encoded delimiters in bfcache keys * docs(bfcache): track router-owned retention follow-up * chore: retrigger ci * fix(app-router): preserve redirect bridge fallback |
||
|
|
9126344cd8 |
fix: use loader for client reference (#1141)
* fix: split client chunk * add test * fix ci deps * install deps * use loader * tweaks |
||
|
|
f972d45034 |
fix: resolve symlink paths in standalone BFS package copy (#724) (#942)
* fix: resolve symlink paths in standalone BFS package copy (#724) When resolvePackageJsonPath finds a package via the lookup-paths fallback, the returned path may be a symlink (e.g., under a hoisted node_modules/ directory). Calling createRequire() on a symlink path causes Node module resolution to miss transitive dependencies because it walks up from the symlink ancestor directories rather than the real (e.g., .pnpm/) path. Fix: call fs.realpathSync() on the resolved package.json path before using it for createRequire() and readPackageJson(). Also adds E2E test coverage for the standalone output mode. * fix: address review feedback Add standalone-output to CI E2E matrix, rename server header test to reflect what it actually asserts, fix unused req parameter. |
||
|
|
207588d164 |
feat: add instrumentation-client support (#679)
* feat: add instrumentation-client support * trigger ci * fix deps * tweaks * tweaks * tweaks * tweaks * rebuild lockfile * fix: add app-with-src to CI E2E matrix --------- Co-authored-by: James <james@eli.cx> |
||
|
|
a515f07a49 |
test: add static export E2E tests (#564) (#686)
* test: add static export E2E tests (#564) Add Playwright E2E tests for `output: "export"` static builds covering both App Router and Pages Router. Includes a lightweight static file server with path traversal protection, proper error handling, and startup validation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update tests/e2e/static-export/serve-static.mjs Co-authored-by: ask-bonk[bot] <249159057+ask-bonk[bot]@users.noreply.github.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: ask-bonk[bot] <249159057+ask-bonk[bot]@users.noreply.github.com> |
||
|
|
c17d6941be |
chore: migrate to vite plus (#535)
* chore: migrate to vite plus
* Disable typeAware and typeCheck
* Update CI
* Fix CI
* Fix test
* Clean
* Run test with vp
* Try revert
* react: false In test
* Fix test
* Revert "Try revert"
This reverts commit
|
||
|
|
764a496ce7 |
add oxfmt formatter (#380)
* add oxfmt formatter: config, scripts, CI, editor setup, docs * rebuild lockfile * fix: add Format to required checks list, remove dead ignore pattern * run fmt * add format to agents.md again |
||
|
|
7fdcdd3c69 |
feat(og): add @next/og / @vercel/og support with Cloudflare Workers compatibility (#356)
* feat(og): add @next/og support with Cloudflare Workers compatibility
- Add vinext:og-font-fix transform plugin that patches @vercel/og/dist/index.edge.js
at Vite transform time: inlines the fallback font as base64 (avoids fetch() with
import.meta.url which breaks in workerd) and defers WASM init to first use (avoids
WebAssembly.instantiate() being blocked in Node.js module runner)
- Add @vercel/og to optimizeDeps.exclude so Vite's esbuild pre-bundler doesn't cache
the module before the transform hook runs
- Add vinext:og-assets build plugin that copies font/WASM assets to RSC output dir
- Add /app/api/og route to app-router-cloudflare example and app-basic fixture
- Add shared Playwright e2e spec (tests/e2e/og-image.spec.ts) asserting PNG validity,
correct 1200x630 dimensions, param-driven content, and determinism
- Register og-image.spec.ts in app-router, cloudflare-workers, and cloudflare-dev
Playwright projects (18 tests total, all passing)
* refactor(og): generalize fetch+import.meta.url asset inlining, drop WASM lazy-init patch
Replace the @vercel/og-specific vinext:og-font-fix plugin with a general
vinext:og-inline-fetch-assets plugin that:
- Matches ANY fetch(new URL('./asset', import.meta.url)).then(res => res.arrayBuffer())
pattern, not just the hardcoded noto-sans filename
- Resolves each asset relative to the module's on-disk path (via the transform id)
and inlines it as base64 — works for any font version or additional assets
- Applies to any library using this pattern, not just @vercel/og
Also removes the WASM lazy-init patch: now that @vercel/og is in optimizeDeps.exclude,
the module runs through workerd (not the Node.js pre-bundler cache) where
WebAssembly.instantiate() works fine. The lazy-init workaround was only needed
when the pre-bundler cache bypassed the transform hook.
The og-assets build plugin is updated to only copy resvg.wasm (not the font,
which is now inlined and will no longer appear in the bundle by filename).
* fix(og): inline readFileSync assets from @vercel/og node build
The production RSC bundle resolves @vercel/og under the 'import' export
condition, getting dist/index.node.js instead of dist/index.edge.js.
The node build loads font and WASM via fs.readFileSync(fileURLToPath(
new URL('./file', import.meta.url))), which breaks after bundling because
import.meta.url points to the bundle output file, not the dist/ dir.
Extend vinext:og-inline-fetch-assets with a second regex pattern that
matches readFileSync(fileURLToPath(new URL(...))) and replaces it with
Buffer.from('<base64>', 'base64'), inlining both noto-sans font and
resvg.wasm at transform time. This eliminates the ENOENT errors seen
in the production build CI tests.
* refactor(og): address code review feedback
- Remove Fix 1 (font inlining) from vinext:og-font-patch — it was dead
code since vinext:og-inline-fetch-assets (earlier in the plugin array)
already handles the same fetch(new URL(...)) pattern generically. Only
Fix 2 (yoga WASM extraction) remains in og-font-patch.
- Use split().join() instead of String.replace() in both Pattern 1 and
Pattern 2 loops of og-inline-fetch-assets. String.replace(string, ...)
only replaces the first occurrence; split().join() replaces all of them,
which matters for libraries that may use the same pattern multiple times.
* refactor(og): use replaceAll instead of split().join()
|
||
|
|
4e0294fc4f |
fix: middleware crash in dev mode with cloudflare plugin (#344)
* test: middleware with cloudflare plugin and routing bypass * fix: use module runner for pages middleware * add pages router dev test |
||
|
|
cb2bbc65b6 | test: app router instrumentation with cloudflare plugin (#333) | ||
|
|
80acf27933 |
fix: register instrumentation in rsc entry and put error handler in global scope (#330)
* test: instrumentation * store onRequestError on globalThis * add instrumentation registration app-dev-server * guard against double calling runinstrumentation for appdir |
||
|
|
12fea722b6 | Initial public release of vinext |