vinext 1.0.0-beta.8 → 1.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/build/prerender-paths.d.ts +50 -1
- package/dist/build/prerender-paths.js +627 -88
- package/dist/build/prerender.d.ts +4 -2
- package/dist/build/prerender.js +40 -23
- package/dist/build/report.d.ts +16 -1
- package/dist/build/report.js +64 -3
- package/dist/build/static-export.d.ts +1 -1
- package/dist/cache/cache-adapters-virtual.d.ts +47 -1
- package/dist/cache/cache-adapters-virtual.js +10 -1
- package/dist/cli.js +7 -0
- package/dist/client/vinext-next-data.d.ts +2 -0
- package/dist/config/config-matchers.d.ts +3 -3
- package/dist/config/config-matchers.js +8 -3
- package/dist/config/prerender.d.ts +2 -2
- package/dist/config/prerender.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +1 -1
- package/dist/entries/app-browser-entry.js +4 -1
- package/dist/entries/app-rsc-entry.d.ts +2 -0
- package/dist/entries/app-rsc-entry.js +28 -4
- package/dist/entries/app-rsc-manifest.js +1 -0
- package/dist/entries/pages-server-entry.d.ts +1 -1
- package/dist/entries/pages-server-entry.js +4 -1
- package/dist/index.js +135 -24
- package/dist/init-cloudflare.d.ts +5 -3
- package/dist/init-cloudflare.js +58 -25
- package/dist/routing/app-router.d.ts +3 -1
- package/dist/routing/app-router.js +5 -1
- package/dist/server/app-browser-entry.js +41 -13
- package/dist/server/app-browser-navigation-controller.js +1 -1
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-visible-commit.js +1 -1
- package/dist/server/app-middleware.d.ts +8 -0
- package/dist/server/app-middleware.js +28 -2
- package/dist/server/app-optimistic-routing.d.ts +6 -1
- package/dist/server/app-optimistic-routing.js +13 -1
- package/dist/server/app-page-boundary.js +2 -1
- package/dist/server/app-page-cache-finalizer.d.ts +16 -1
- package/dist/server/app-page-cache-finalizer.js +73 -4
- package/dist/server/app-page-cache.js +2 -2
- package/dist/server/app-page-dispatch.d.ts +2 -0
- package/dist/server/app-page-dispatch.js +12 -4
- package/dist/server/app-page-execution.js +1 -1
- package/dist/server/app-page-render.d.ts +1 -0
- package/dist/server/app-page-render.js +27 -9
- package/dist/server/app-page-response.js +2 -2
- package/dist/server/app-page-stream.js +2 -1
- package/dist/server/app-pages-bridge.js +2 -0
- package/dist/server/app-prerender-endpoints.js +23 -11
- package/dist/server/app-prerender-static-params.js +12 -5
- package/dist/server/app-route-handler-dispatch.js +13 -9
- package/dist/server/app-route-handler-execution.d.ts +1 -0
- package/dist/server/app-route-handler-execution.js +127 -14
- package/dist/server/app-route-handler-policy.d.ts +15 -3
- package/dist/server/app-route-handler-policy.js +19 -4
- package/dist/server/app-route-tree-prefetch.js +2 -2
- package/dist/server/app-router-entry.js +52 -8
- package/dist/server/app-rsc-cache-busting.d.ts +22 -4
- package/dist/server/app-rsc-cache-busting.js +68 -18
- package/dist/server/app-rsc-handler.d.ts +2 -0
- package/dist/server/app-rsc-handler.js +95 -30
- package/dist/server/app-rsc-response-finalizer.js +24 -7
- package/dist/server/app-rsc-route-matching.d.ts +1 -0
- package/dist/server/app-rsc-route-matching.js +1 -0
- package/dist/server/app-segment-config.d.ts +3 -1
- package/dist/server/app-segment-config.js +23 -11
- package/dist/server/app-server-action-execution.js +4 -4
- package/dist/server/app-ssr-entry.js +4 -4
- package/dist/server/cache-control.d.ts +8 -2
- package/dist/server/cache-control.js +35 -4
- package/dist/server/cacheability-limits.d.ts +9 -0
- package/dist/server/cacheability-limits.js +9 -0
- package/dist/server/cacheability-manifest.d.ts +42 -0
- package/dist/server/cacheability-manifest.js +191 -0
- package/dist/server/cacheability-request.d.ts +20 -0
- package/dist/server/cacheability-request.js +457 -0
- package/dist/server/config-headers.js +23 -3
- package/dist/server/headers.d.ts +16 -3
- package/dist/server/headers.js +29 -3
- package/dist/server/middleware-matcher.d.ts +9 -1
- package/dist/server/middleware-matcher.js +22 -1
- package/dist/server/middleware-runtime.d.ts +6 -0
- package/dist/server/middleware-runtime.js +18 -3
- package/dist/server/normalize-path.js +1 -1
- package/dist/server/pages-api-route.js +1 -1
- package/dist/server/pages-i18n.js +3 -2
- package/dist/server/pages-page-handler.js +22 -9
- package/dist/server/pages-request-pipeline.d.ts +2 -0
- package/dist/server/pages-request-pipeline.js +17 -6
- package/dist/server/pages-router-entry.js +56 -9
- package/dist/server/prerender-route-params.js +1 -0
- package/dist/server/prerender-work-unit-setup.d.ts +3 -2
- package/dist/server/prerender-work-unit-setup.js +34 -11
- package/dist/server/prod-server.js +5 -5
- package/dist/server/request-pipeline.d.ts +1 -5
- package/dist/server/request-pipeline.js +2 -9
- package/dist/server/revalidation-host.js +1 -0
- package/dist/server/server-globals.js +13 -0
- package/dist/server/static-file-signal.d.ts +13 -0
- package/dist/server/static-file-signal.js +33 -0
- package/dist/server/worker-prerender-discovery.d.ts +19 -0
- package/dist/server/worker-prerender-discovery.js +55 -0
- package/dist/server/worker-utils.js +2 -3
- package/dist/shims/cache-runtime.js +140 -102
- package/dist/shims/cache.js +11 -1
- package/dist/shims/cacheability-classification.d.ts +85 -0
- package/dist/shims/cacheability-classification.js +146 -0
- package/dist/shims/cdn-cache.d.ts +30 -1
- package/dist/shims/cdn-cache.js +25 -1
- package/dist/shims/error.js +1 -1
- package/dist/shims/fetch-cache.js +8 -3
- package/dist/shims/headers.d.ts +3 -1
- package/dist/shims/headers.js +9 -5
- package/dist/shims/internal/app-prefetch-rsc-request.d.ts +25 -0
- package/dist/shims/internal/app-prefetch-rsc-request.js +21 -0
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +2 -0
- package/dist/shims/internal/app-route-prefetch-policy.js +2 -0
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +29 -11
- package/dist/shims/internal/hybrid-client-route-owner.js +2 -2
- package/dist/shims/internal/make-hanging-promise.d.ts +7 -1
- package/dist/shims/internal/make-hanging-promise.js +13 -2
- package/dist/shims/internal/work-unit-async-storage.d.ts +2 -0
- package/dist/shims/link.js +25 -14
- package/dist/shims/navigation.js +31 -11
- package/dist/shims/navigation.react-server.js +1 -1
- package/dist/shims/request-context.d.ts +2 -0
- package/dist/shims/server.js +1 -1
- package/dist/shims/url-utils.d.ts +8 -1
- package/dist/shims/url-utils.js +10 -1
- package/dist/utils/prerender-output-paths.d.ts +7 -7
- package/dist/utils/prerender-output-paths.js +16 -9
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -517,6 +517,7 @@ These are deployed to Cloudflare Workers and updated on every push to `main`:
|
|
|
517
517
|
| Nextra Docs | Nextra docs site (MDX, App Router) | [nextra-docs-template.vinext.workers.dev](https://nextra-docs-template.vinext.workers.dev) |
|
|
518
518
|
| App Router (minimal) | Minimal App Router on Workers | [app-router-cloudflare.vinext.workers.dev](https://app-router-cloudflare.vinext.workers.dev) |
|
|
519
519
|
| Pages Router (minimal) | Minimal Pages Router on Workers | [pages-router-cloudflare.vinext.workers.dev](https://pages-router-cloudflare.vinext.workers.dev) |
|
|
520
|
+
| Static export | [Hybrid App/Pages Router site](examples/static-export) served as assets only | [static-export.vinext.workers.dev](https://static-export.vinext.workers.dev) |
|
|
520
521
|
| RealWorld API | REST API routes example | [realworld-api-rest.vinext.workers.dev](https://realworld-api-rest.vinext.workers.dev) |
|
|
521
522
|
| Benchmarks Dashboard | Build performance tracking over time (D1-backed) | [vinext.dev/benchmarks](https://vinext.dev/benchmarks) |
|
|
522
523
|
| App Router + Nitro | App Router deployed via Nitro (multi-platform) | [examples/app-router-nitro](examples/app-router-nitro) |
|
|
@@ -709,11 +710,26 @@ The KV data adapter reads `env[binding]` at runtime, so add the matching KV name
|
|
|
709
710
|
```jsonc
|
|
710
711
|
{
|
|
711
712
|
"cache": { "enabled": true },
|
|
713
|
+
"version_metadata": { "binding": "CF_VERSION_METADATA" },
|
|
712
714
|
}
|
|
713
715
|
```
|
|
714
716
|
|
|
717
|
+
The version metadata binding is required for staged discovery and warming to
|
|
718
|
+
verify the uploaded Worker version. Wrangler named environments do not inherit
|
|
719
|
+
`version_metadata`, so repeat it inside each `env.<name>` used for warming.
|
|
720
|
+
|
|
721
|
+
`vinext-cloudflare deploy --experimental-warm-cdn-cache` performs the two-stage
|
|
722
|
+
upload and makes one final cache-fill request per admitted identity by default.
|
|
723
|
+
Add `--warm-cdn-certify` only to opt into a second, header-only request that
|
|
724
|
+
must prove every planned entry reusable before promotion.
|
|
725
|
+
|
|
715
726
|
While the data adapter can store entries and serve HIT/STALE itself, the CDN adapter delegates serving to Cloudflare's edge: the origin renders fresh responses and tags them with `Cache-Tag`, and `revalidateTag()` / `revalidatePath()` purge the edge through `ctx.cache.purge({ tags })`. See [examples/workers-cache](examples/workers-cache) for both adapters wired up together.
|
|
716
727
|
|
|
728
|
+
Keep Cloudflare's incoming cache key query-sensitive when using `cdnAdapter()`.
|
|
729
|
+
The two-stage cacheability manifest authorizes exact pathname + query
|
|
730
|
+
identities, and a Cache Rule that ignores or normalizes query strings can serve
|
|
731
|
+
an edge HIT before the Worker has a chance to enforce that identity.
|
|
732
|
+
|
|
717
733
|
Each builder returns a plain, serializable `{ adapter, options }` descriptor — **it never touches the Workers runtime**, so nothing throws at build or dev time when bindings aren't available. The actual adapter (and its `env` binding lookup) is instantiated lazily on the first request.
|
|
718
734
|
|
|
719
735
|
Registration is wired into **every router and runtime** — App Router and Pages Router, on Cloudflare Workers as well as the Node.js server (`vinext start`) and dev. It self-guards (instantiated once per isolate) and is resilient: if an adapter can't initialize on a given runtime (e.g. a KV binding doesn't exist on the Node server), vinext logs a warning and falls back to the default handler instead of failing requests.
|
|
@@ -1,13 +1,51 @@
|
|
|
1
1
|
import { ResolvedNextConfig } from "../config/next-config.js";
|
|
2
|
+
import { CdnCacheAdapterCapabilities } from "../cache/cache-adapters-virtual.js";
|
|
2
3
|
import { VinextRouteRootConfig } from "../config/prerender.js";
|
|
3
4
|
//#region src/build/prerender-paths.d.ts
|
|
5
|
+
type PrerenderRoutePattern = {
|
|
6
|
+
kind: "app-page" | "app-route" | "pages-page";
|
|
7
|
+
pattern: string;
|
|
8
|
+
/** Closed-world safety facts for probe coordinator optimizations. */
|
|
9
|
+
cacheabilityProbe?: {
|
|
10
|
+
canPrunePattern: boolean;
|
|
11
|
+
/** HTML pathname shared by alternate representations of this route. */
|
|
12
|
+
concretePathname?: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
4
15
|
type PrerenderPathManifest = {
|
|
16
|
+
/** App Page HTML paths after hybrid route ownership has been resolved. */
|
|
17
|
+
appPaths?: string[];
|
|
18
|
+
basePath?: string;
|
|
5
19
|
buildId?: string;
|
|
20
|
+
/** Opaque per-build identity emitted by CDN adapter page responses. */
|
|
21
|
+
buildIdentity?: string;
|
|
22
|
+
deploymentId?: string;
|
|
23
|
+
/** Opaque per-build identity emitted by RSC responses. */
|
|
24
|
+
rscBuildId?: string;
|
|
25
|
+
responseVary?: CdnCacheAdapterCapabilities["responseVary"];
|
|
26
|
+
/** App Router paths discovered without rendering their page responses. */
|
|
27
|
+
rscPaths?: string[];
|
|
28
|
+
/** Statically eligible App Route Handler request paths. */
|
|
29
|
+
routeHandlerPaths?: string[];
|
|
30
|
+
/** App Router paths with an ordinary main-tree loading boundary. */
|
|
31
|
+
loadingShellPaths?: string[];
|
|
32
|
+
/** Pages Router paths selected by the existing HTML warm discovery pass. */
|
|
33
|
+
pagesPaths?: string[];
|
|
34
|
+
/** Pages Router JSON data identities corresponding to discovered static paths. */
|
|
35
|
+
pagesDataPaths?: string[];
|
|
36
|
+
/** Public paths omitted because configured routes can replace their page response. */
|
|
37
|
+
excludedWarmPaths?: string[];
|
|
38
|
+
/** Static dynamic-route patterns with no build-discovered concrete path. */
|
|
39
|
+
fallbackRoutePatterns?: PrerenderRoutePattern[];
|
|
40
|
+
/** Resolved route ownership for grouping cacheability probes without re-matching paths. */
|
|
41
|
+
routePatterns?: Record<string, PrerenderRoutePattern>;
|
|
6
42
|
trailingSlash?: boolean;
|
|
7
43
|
paths: string[];
|
|
8
44
|
};
|
|
9
45
|
declare const PRERENDER_PATH_DISCOVERY_ENV = "__VINEXT_PRERENDER_PATH_DISCOVERY";
|
|
10
46
|
declare const PRERENDER_PATHS_MANIFEST = "vinext-prerender-paths.json";
|
|
47
|
+
declare const DEFAULT_REMOTE_PATH_DISCOVERY_RETRY_DELAY_MS = 1000;
|
|
48
|
+
declare const DEFAULT_REMOTE_PATH_DISCOVERY_PHASE_TIMEOUT_MS = 120000;
|
|
11
49
|
type EmitPrerenderPathManifestOptions = {
|
|
12
50
|
root: string;
|
|
13
51
|
/** Fully resolved Next.js config. Loaded from disk when omitted. */
|
|
@@ -17,7 +55,18 @@ type EmitPrerenderPathManifestOptions = {
|
|
|
17
55
|
routeRootConfig?: VinextRouteRootConfig | null;
|
|
18
56
|
pagesBundlePath?: string;
|
|
19
57
|
rscBundlePath?: string;
|
|
58
|
+
buildIdentity?: CdnCacheAdapterCapabilities["buildIdentity"];
|
|
59
|
+
responseVary?: CdnCacheAdapterCapabilities["responseVary"];
|
|
60
|
+
/** Execute dynamic path hooks against an already-uploaded Worker. */
|
|
61
|
+
pathDiscoveryTarget?: {
|
|
62
|
+
baseUrl: string;
|
|
63
|
+
headers?: HeadersInit;
|
|
64
|
+
/** Retry transient staged-version routing responses before failing discovery. */
|
|
65
|
+
phaseTimeoutMs?: number;
|
|
66
|
+
retries?: number;
|
|
67
|
+
retryDelayMs?: number;
|
|
68
|
+
};
|
|
20
69
|
};
|
|
21
70
|
declare function emitPrerenderPathManifest(options: EmitPrerenderPathManifestOptions): Promise<PrerenderPathManifest | null>;
|
|
22
71
|
//#endregion
|
|
23
|
-
export { PRERENDER_PATHS_MANIFEST, PRERENDER_PATH_DISCOVERY_ENV, PrerenderPathManifest, emitPrerenderPathManifest };
|
|
72
|
+
export { DEFAULT_REMOTE_PATH_DISCOVERY_PHASE_TIMEOUT_MS, DEFAULT_REMOTE_PATH_DISCOVERY_RETRY_DELAY_MS, PRERENDER_PATHS_MANIFEST, PRERENDER_PATH_DISCOVERY_ENV, PrerenderPathManifest, PrerenderRoutePattern, emitPrerenderPathManifest };
|