vinext 0.0.22 → 0.0.24
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/dist/build/static-export.d.ts.map +1 -1
- package/dist/build/static-export.js +9 -7
- package/dist/build/static-export.js.map +1 -1
- package/dist/config/config-matchers.d.ts.map +1 -1
- package/dist/config/config-matchers.js +13 -3
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/next-config.d.ts +4 -1
- package/dist/config/next-config.d.ts.map +1 -1
- package/dist/config/next-config.js +10 -5
- package/dist/config/next-config.js.map +1 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +83 -24
- package/dist/deploy.js.map +1 -1
- package/dist/index.d.ts +36 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +230 -40
- package/dist/index.js.map +1 -1
- package/dist/routing/app-router.d.ts +2 -1
- package/dist/routing/app-router.d.ts.map +1 -1
- package/dist/routing/app-router.js +73 -66
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/file-matcher.d.ts +24 -0
- package/dist/routing/file-matcher.d.ts.map +1 -0
- package/dist/routing/file-matcher.js +75 -0
- package/dist/routing/file-matcher.js.map +1 -0
- package/dist/routing/pages-router.d.ts +3 -2
- package/dist/routing/pages-router.d.ts.map +1 -1
- package/dist/routing/pages-router.js +24 -17
- package/dist/routing/pages-router.js.map +1 -1
- package/dist/server/app-dev-server.d.ts.map +1 -1
- package/dist/server/app-dev-server.js +110 -64
- package/dist/server/app-dev-server.js.map +1 -1
- package/dist/server/dev-server.d.ts +2 -1
- package/dist/server/dev-server.d.ts.map +1 -1
- package/dist/server/dev-server.js +16 -14
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/prod-server.d.ts +8 -2
- package/dist/server/prod-server.d.ts.map +1 -1
- package/dist/server/prod-server.js +71 -16
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/worker-utils.d.ts +15 -0
- package/dist/server/worker-utils.d.ts.map +1 -0
- package/dist/server/worker-utils.js +41 -0
- package/dist/server/worker-utils.js.map +1 -0
- package/dist/shims/cache.d.ts +1 -1
- package/dist/shims/cache.d.ts.map +1 -1
- package/dist/shims/cache.js +8 -3
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/headers.d.ts +6 -0
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/headers.js +8 -0
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/metadata.d.ts +1 -0
- package/dist/shims/metadata.d.ts.map +1 -1
- package/dist/shims/metadata.js +5 -1
- package/dist/shims/metadata.js.map +1 -1
- package/dist/utils/project.d.ts +13 -1
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +63 -13
- package/dist/utils/project.js.map +1 -1
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/shims/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IACtE,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAErF;AAOD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACrC;AAED,gDAAgD;AAChD,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,gBAAgB,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/shims/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/shims/cache.js
CHANGED
|
@@ -400,12 +400,13 @@ export function unstable_cache(fn, keyParts, options) {
|
|
|
400
400
|
const cachedFn = async (...args) => {
|
|
401
401
|
const argsKey = JSON.stringify(args);
|
|
402
402
|
const cacheKey = `unstable_cache:${baseKey}:${argsKey}`;
|
|
403
|
-
// Try to get from cache
|
|
403
|
+
// Try to get from cache. Check cacheState so time-expired entries
|
|
404
|
+
// trigger a re-fetch instead of being served indefinitely.
|
|
404
405
|
const existing = await activeHandler.get(cacheKey, {
|
|
405
406
|
kind: "FETCH",
|
|
406
407
|
tags,
|
|
407
408
|
});
|
|
408
|
-
if (existing?.value && existing.value.kind === "FETCH") {
|
|
409
|
+
if (existing?.value && existing.value.kind === "FETCH" && existing.cacheState !== "stale") {
|
|
409
410
|
try {
|
|
410
411
|
return JSON.parse(existing.value.data.body);
|
|
411
412
|
}
|
|
@@ -426,7 +427,11 @@ export function unstable_cache(fn, keyParts, options) {
|
|
|
426
427
|
url: cacheKey,
|
|
427
428
|
},
|
|
428
429
|
tags,
|
|
429
|
-
revalidate:
|
|
430
|
+
// revalidate: false means "cache indefinitely" (no time-based expiry).
|
|
431
|
+
// A positive number means time-based revalidation in seconds.
|
|
432
|
+
// When unset (undefined), default to false (indefinite) matching
|
|
433
|
+
// Next.js behavior for unstable_cache without explicit revalidate.
|
|
434
|
+
revalidate: typeof revalidateSeconds === "number" ? revalidateSeconds : false,
|
|
430
435
|
};
|
|
431
436
|
await activeHandler.set(cacheKey, cacheValue, {
|
|
432
437
|
fetchCache: true,
|
package/dist/shims/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/shims/cache.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/cache shim\n *\n * Provides the Next.js caching API surface: revalidateTag, revalidatePath,\n * unstable_cache. Backed by a pluggable CacheHandler that defaults to\n * in-memory but can be swapped for Cloudflare KV, Redis, DynamoDB, etc.\n *\n * The CacheHandler interface matches Next.js 16's CacheHandler class, so\n * existing community adapters (@neshca/cache-handler, @opennextjs/aws, etc.)\n * can be used directly.\n *\n * Configuration (in vite.config.ts or next.config.js):\n * vinext({ cacheHandler: './my-cache-handler.ts' })\n *\n * Or set at runtime:\n * import { setCacheHandler } from 'next/cache';\n * setCacheHandler(new MyCacheHandler());\n */\n\nimport { markDynamicUsage as _markDynamic } from \"./headers.js\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { fnv1a64 } from \"../utils/hash.js\";\n\n// ---------------------------------------------------------------------------\n// Lazy accessor for cache context — avoids circular imports with cache-runtime.\n// The cache-runtime module sets this on load.\n// ---------------------------------------------------------------------------\n\ninterface CacheContextLike {\n tags: string[];\n lifeConfigs: import(\"./cache-runtime.js\").CacheContext[\"lifeConfigs\"];\n variant: string;\n}\n\n/** @internal Set by cache-runtime.ts on import to avoid circular dependency */\nlet _getCacheContextFn: (() => CacheContextLike | null) | null = null;\n\n/**\n * Register the cache context accessor. Called by cache-runtime.ts on load.\n * @internal\n */\nexport function _registerCacheContextAccessor(fn: () => CacheContextLike | null): void {\n _getCacheContextFn = fn;\n}\n\n// ---------------------------------------------------------------------------\n// CacheHandler interface — matches Next.js 16's CacheHandler class shape.\n// Implement this to provide a custom cache backend.\n// ---------------------------------------------------------------------------\n\nexport interface CacheHandlerValue {\n lastModified: number;\n age?: number;\n cacheState?: string;\n value: IncrementalCacheValue | null;\n}\n\n/** Discriminated union of cache value types. */\nexport type IncrementalCacheValue =\n | CachedFetchValue\n | CachedAppPageValue\n | CachedPagesValue\n | CachedRouteValue\n | CachedRedirectValue\n | CachedImageValue;\n\nexport interface CachedFetchValue {\n kind: \"FETCH\";\n data: {\n headers: Record<string, string>;\n body: string;\n url: string;\n status?: number;\n };\n tags?: string[];\n revalidate: number;\n}\n\nexport interface CachedAppPageValue {\n kind: \"APP_PAGE\";\n html: string;\n rscData: ArrayBuffer | undefined;\n headers: Record<string, string | string[]> | undefined;\n postponed: string | undefined;\n status: number | undefined;\n}\n\nexport interface CachedPagesValue {\n kind: \"PAGES\";\n html: string;\n pageData: object;\n headers: Record<string, string | string[]> | undefined;\n status: number | undefined;\n}\n\nexport interface CachedRouteValue {\n kind: \"APP_ROUTE\";\n body: ArrayBuffer;\n status: number;\n headers: Record<string, string | string[]>;\n}\n\nexport interface CachedRedirectValue {\n kind: \"REDIRECT\";\n props: object;\n}\n\nexport interface CachedImageValue {\n kind: \"IMAGE\";\n etag: string;\n buffer: ArrayBuffer;\n extension: string;\n revalidate?: number;\n}\n\nexport interface CacheHandlerContext {\n dev?: boolean;\n maxMemoryCacheSize?: number;\n revalidatedTags?: string[];\n [key: string]: unknown;\n}\n\nexport interface CacheHandler {\n get(\n key: string,\n ctx?: Record<string, unknown>,\n ): Promise<CacheHandlerValue | null>;\n\n set(\n key: string,\n data: IncrementalCacheValue | null,\n ctx?: Record<string, unknown>,\n ): Promise<void>;\n\n revalidateTag(\n tags: string | string[],\n durations?: { expire?: number },\n ): Promise<void>;\n\n resetRequestCache?(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Default in-memory adapter — works everywhere, suitable for dev and\n// single-process production. Not shared across workers/instances.\n// ---------------------------------------------------------------------------\n\ninterface MemoryEntry {\n value: IncrementalCacheValue | null;\n tags: string[];\n lastModified: number;\n revalidateAt: number | null;\n}\n\nexport class MemoryCacheHandler implements CacheHandler {\n private store = new Map<string, MemoryEntry>();\n private tagRevalidatedAt = new Map<string, number>();\n\n async get(\n key: string,\n _ctx?: Record<string, unknown>,\n ): Promise<CacheHandlerValue | null> {\n const entry = this.store.get(key);\n if (!entry) return null;\n\n // Check tag-based invalidation first — if tag was invalidated, treat as hard miss\n for (const tag of entry.tags) {\n const revalidatedAt = this.tagRevalidatedAt.get(tag);\n if (revalidatedAt && revalidatedAt >= entry.lastModified) {\n this.store.delete(key);\n return null;\n }\n }\n\n // Check time-based expiry — return stale entry with cacheState=\"stale\"\n // instead of deleting, so ISR can serve stale-while-revalidate\n if (entry.revalidateAt !== null && Date.now() > entry.revalidateAt) {\n return {\n lastModified: entry.lastModified,\n value: entry.value,\n cacheState: \"stale\",\n };\n }\n\n return {\n lastModified: entry.lastModified,\n value: entry.value,\n };\n }\n\n async set(\n key: string,\n data: IncrementalCacheValue | null,\n ctx?: Record<string, unknown>,\n ): Promise<void> {\n const tags: string[] = [];\n if (data && \"tags\" in data && Array.isArray(data.tags)) {\n tags.push(...data.tags);\n }\n if (ctx && \"tags\" in ctx && Array.isArray(ctx.tags)) {\n tags.push(...(ctx.tags as string[]));\n }\n\n let revalidateAt: number | null = null;\n if (ctx) {\n // Handle both old-style { revalidate } and new-style { cacheControl: { revalidate } }\n const revalidate =\n (ctx as any).cacheControl?.revalidate ?? (ctx as any).revalidate;\n if (typeof revalidate === \"number\" && revalidate > 0) {\n revalidateAt = Date.now() + revalidate * 1000;\n }\n }\n if (data && \"revalidate\" in data && typeof data.revalidate === \"number\") {\n revalidateAt = Date.now() + data.revalidate * 1000;\n }\n\n this.store.set(key, {\n value: data,\n tags,\n lastModified: Date.now(),\n revalidateAt,\n });\n }\n\n async revalidateTag(\n tags: string | string[],\n _durations?: { expire?: number },\n ): Promise<void> {\n const tagList = Array.isArray(tags) ? tags : [tags];\n const now = Date.now();\n for (const tag of tagList) {\n this.tagRevalidatedAt.set(tag, now);\n }\n }\n\n resetRequestCache(): void {\n // No-op for the simple memory cache. In a production adapter,\n // this would clear per-request caches (e.g., dedup fetch calls).\n }\n}\n\n// ---------------------------------------------------------------------------\n// Active cache handler — the singleton used by next/cache API functions.\n// Defaults to MemoryCacheHandler, can be swapped at runtime.\n// ---------------------------------------------------------------------------\n\nlet activeHandler: CacheHandler = new MemoryCacheHandler();\n\n/**\n * Set a custom CacheHandler. Call this during server startup to\n * plug in Cloudflare KV, Redis, DynamoDB, or any other backend.\n *\n * The handler must implement the CacheHandler interface (same shape\n * as Next.js 16's CacheHandler class).\n */\nexport function setCacheHandler(handler: CacheHandler): void {\n activeHandler = handler;\n}\n\n/**\n * Get the active CacheHandler (for internal use or testing).\n */\nexport function getCacheHandler(): CacheHandler {\n return activeHandler;\n}\n\n// ---------------------------------------------------------------------------\n// Public API — what app code imports from 'next/cache'\n// ---------------------------------------------------------------------------\n\n/**\n * Revalidate cached data associated with a specific cache tag.\n *\n * Works with both `fetch(..., { next: { tags: ['myTag'] } })` and\n * `unstable_cache(fn, keys, { tags: ['myTag'] })`.\n */\n/**\n * Revalidate cached data associated with a specific cache tag.\n *\n * Next.js 16 updated signature: requires a cacheLife profile as second argument\n * for stale-while-revalidate (SWR) behavior. The single-argument form is\n * deprecated but still supported for backward compatibility.\n *\n * @param tag - Cache tag to revalidate\n * @param profile - cacheLife profile name (e.g. 'max', 'hours') or inline { expire: number }\n */\nexport async function revalidateTag(\n tag: string,\n profile?: string | { expire?: number },\n): Promise<void> {\n // Resolve the profile to durations for the handler\n let durations: { expire?: number } | undefined;\n if (typeof profile === \"string\") {\n const resolved = cacheLifeProfiles[profile];\n if (resolved) {\n durations = { expire: resolved.expire };\n }\n } else if (profile && typeof profile === \"object\") {\n durations = profile;\n }\n await activeHandler.revalidateTag(tag, durations);\n}\n\n/**\n * Revalidate cached data associated with a specific path.\n *\n * Under the hood, Next.js converts paths to internal tags.\n * We use a `_N_T_/path` prefix convention for path-based tags.\n */\nexport async function revalidatePath(\n path: string,\n _type?: \"page\" | \"layout\",\n): Promise<void> {\n // Next.js internally converts paths to tags with a prefix\n const pathTag = `_N_T_${path}`;\n await activeHandler.revalidateTag([path, pathTag]);\n}\n\n/**\n * Expire and immediately refresh cached data for a tag (Next.js 16).\n *\n * Server Actions-only API that provides read-your-writes semantics:\n * the cache entry is expired and fresh data is read within the same request,\n * so the user immediately sees their changes.\n *\n * Use this for interactive features (forms, user settings) where users\n * expect to see their updates instantly.\n *\n * @param tag - Cache tag to expire and refresh\n */\nexport async function updateTag(tag: string): Promise<void> {\n // Expire the tag immediately (same as revalidateTag without SWR)\n await activeHandler.revalidateTag(tag);\n}\n\n/**\n * Refresh uncached data on the page (Next.js 16).\n *\n * Server Actions-only API that signals the client to re-fetch dynamic\n * (uncached) data without touching the cache. Complementary to the\n * client-side router.refresh().\n *\n * Use this when you need to refresh data like notification counts,\n * live metrics, or status indicators after performing a server action.\n */\nexport function refresh(): void {\n // In our implementation, this is a signal that the client should\n // refresh dynamic data. The actual refresh happens on the client side\n // via the RSC protocol — the server action response triggers a\n // client-side navigation refresh.\n // For now, this is a no-op on the server; the Server Action response\n // mechanism already handles re-rendering the affected RSC tree.\n}\n\n/**\n * Opt out of static rendering and indicate a particular component should not be cached.\n *\n * In Next.js, calling noStore() inside a Server Component ensures the component\n * is dynamically rendered. In our implementation, this is a no-op since we don't\n * have the same static/dynamic rendering split — all server rendering is on-demand.\n * It's provided for API compatibility so apps importing it don't break.\n */\nexport function unstable_noStore(): void {\n // Signal dynamic usage so ISR-configured routes bypass the cache\n _markDynamic();\n}\n\n// Also export as `noStore` (Next.js 15+ naming)\nexport { unstable_noStore as noStore };\n\n// ---------------------------------------------------------------------------\n// Request-scoped cacheLife for page-level \"use cache\" directives.\n// When cacheLife() is called outside a \"use cache\" function context (e.g.,\n// in a page component with file-level \"use cache\"), the resolved config is\n// stored here so the server can read it after rendering and apply ISR caching.\n//\n// Uses AsyncLocalStorage for request isolation on concurrent workers.\n// ---------------------------------------------------------------------------\ninterface CacheState {\n requestScopedCacheLife: CacheLifeConfig | null;\n}\n\nconst _ALS_KEY = Symbol.for(\"vinext.cache.als\");\nconst _FALLBACK_KEY = Symbol.for(\"vinext.cache.fallback\");\nconst _g = globalThis as unknown as Record<PropertyKey, unknown>;\nconst _cacheAls = (_g[_ALS_KEY] ??= new AsyncLocalStorage<CacheState>()) as AsyncLocalStorage<CacheState>;\n\nconst _cacheFallbackState = (_g[_FALLBACK_KEY] ??= {\n requestScopedCacheLife: null,\n} satisfies CacheState) as CacheState;\n\nfunction _getCacheState(): CacheState {\n return _cacheAls.getStore() ?? _cacheFallbackState;\n}\n\n/**\n * Run a function within a cache state ALS scope.\n * Ensures per-request isolation for request-scoped cacheLife config\n * on concurrent runtimes.\n * @internal\n */\nexport function _runWithCacheState<T>(fn: () => T | Promise<T>): T | Promise<T> {\n const state: CacheState = {\n requestScopedCacheLife: null,\n };\n return _cacheAls.run(state, fn);\n}\n\n/**\n * Initialize cache ALS for a new request. Call at request entry.\n * Only needed when not using _runWithCacheState() (legacy path).\n * @internal\n */\nexport function _initRequestScopedCacheState(): void {\n const state = _cacheAls.getStore();\n if (state) {\n state.requestScopedCacheLife = null;\n } else {\n _cacheFallbackState.requestScopedCacheLife = null;\n }\n}\n\n/**\n * Set a request-scoped cache life config. Called by cacheLife() when outside\n * a \"use cache\" function context.\n * @internal\n */\nexport function _setRequestScopedCacheLife(config: CacheLifeConfig): void {\n const state = _getCacheState();\n if (state.requestScopedCacheLife === null) {\n state.requestScopedCacheLife = { ...config };\n } else {\n // Minimum-wins rule\n if (config.stale !== undefined) {\n state.requestScopedCacheLife.stale = state.requestScopedCacheLife.stale !== undefined\n ? Math.min(state.requestScopedCacheLife.stale, config.stale)\n : config.stale;\n }\n if (config.revalidate !== undefined) {\n state.requestScopedCacheLife.revalidate = state.requestScopedCacheLife.revalidate !== undefined\n ? Math.min(state.requestScopedCacheLife.revalidate, config.revalidate)\n : config.revalidate;\n }\n if (config.expire !== undefined) {\n state.requestScopedCacheLife.expire = state.requestScopedCacheLife.expire !== undefined\n ? Math.min(state.requestScopedCacheLife.expire, config.expire)\n : config.expire;\n }\n }\n}\n\n/**\n * Consume and reset the request-scoped cache life. Returns null if none was set.\n * @internal\n */\nexport function _consumeRequestScopedCacheLife(): CacheLifeConfig | null {\n const state = _getCacheState();\n const config = state.requestScopedCacheLife;\n state.requestScopedCacheLife = null;\n return config;\n}\n\n// ---------------------------------------------------------------------------\n// cacheLife / cacheTag — Next.js 15+ \"use cache\" APIs\n// ---------------------------------------------------------------------------\n\n/**\n * Cache life configuration. Controls stale-while-revalidate behavior.\n */\nexport interface CacheLifeConfig {\n /** How long (seconds) the client can cache without checking the server */\n stale?: number;\n /** How frequently (seconds) the server cache refreshes */\n revalidate?: number;\n /** Max staleness (seconds) before deoptimizing to dynamic */\n expire?: number;\n}\n\n/**\n * Built-in cache life profiles matching Next.js 16.\n */\nexport const cacheLifeProfiles: Record<string, CacheLifeConfig> = {\n default: { revalidate: 900, expire: 4294967294 },\n seconds: { stale: 30, revalidate: 1, expire: 60 },\n minutes: { stale: 300, revalidate: 60, expire: 3600 },\n hours: { stale: 300, revalidate: 3600, expire: 86400 },\n days: { stale: 300, revalidate: 86400, expire: 604800 },\n weeks: { stale: 300, revalidate: 604800, expire: 2592000 },\n max: { stale: 300, revalidate: 2592000, expire: 31536000 },\n};\n\n/**\n * Set the cache lifetime for a \"use cache\" function.\n *\n * Accepts either a built-in profile name (e.g., \"hours\", \"days\") or a custom\n * configuration object. In Next.js, this only works inside \"use cache\" functions.\n *\n * When called inside a \"use cache\" function, this sets the cache TTL.\n * The \"minimum-wins\" rule applies: if called multiple times, the shortest\n * duration for each field wins.\n *\n * When called outside a \"use cache\" context, this is a validated no-op.\n */\nexport function cacheLife(profile: string | CacheLifeConfig): void {\n let resolvedConfig: CacheLifeConfig;\n\n if (typeof profile === \"string\") {\n // Validate the profile name exists\n if (!cacheLifeProfiles[profile]) {\n console.warn(\n `[vinext] cacheLife: unknown profile \"${profile}\". ` +\n `Available profiles: ${Object.keys(cacheLifeProfiles).join(\", \")}`,\n );\n return;\n }\n resolvedConfig = { ...cacheLifeProfiles[profile] };\n } else if (typeof profile === \"object\" && profile !== null) {\n // Validate the config shape\n if (\n profile.expire !== undefined &&\n profile.revalidate !== undefined &&\n profile.expire < profile.revalidate\n ) {\n console.warn(\n \"[vinext] cacheLife: expire must be >= revalidate\",\n );\n }\n resolvedConfig = { ...profile };\n } else {\n return;\n }\n\n // If we're inside a \"use cache\" context, push the config\n try {\n const ctx = _getCacheContextFn?.();\n if (ctx) {\n ctx.lifeConfigs.push(resolvedConfig);\n return;\n }\n } catch {\n // Fall through to request-scoped\n }\n\n // Outside a \"use cache\" context (e.g., page component with file-level \"use cache\"):\n // store as request-scoped so the server can read it after rendering.\n _setRequestScopedCacheLife(resolvedConfig);\n}\n\n/**\n * Tag a \"use cache\" function's cached result for on-demand revalidation.\n *\n * Tags set here can be invalidated via revalidateTag(). In Next.js, this only\n * works inside \"use cache\" functions.\n *\n * When called inside a \"use cache\" function, tags are attached to the cached\n * entry. They can later be invalidated via revalidateTag().\n *\n * When called outside a \"use cache\" context, this is a no-op.\n */\nexport function cacheTag(...tags: string[]): void {\n try {\n const ctx = _getCacheContextFn?.();\n if (ctx) {\n ctx.tags.push(...tags);\n }\n } catch {\n // Not in a cache context — no-op\n }\n}\n\n// ---------------------------------------------------------------------------\n// unstable_cache — the older caching API\n// ---------------------------------------------------------------------------\n\n/**\n * AsyncLocalStorage to track whether we're inside an unstable_cache() callback.\n * Stored on globalThis via Symbol so headers.ts can detect the scope without\n * a direct import (avoiding circular dependencies).\n */\nconst _UNSTABLE_CACHE_ALS_KEY = Symbol.for(\"vinext.unstableCache.als\");\nconst _unstableCacheAls = (\n (_g[_UNSTABLE_CACHE_ALS_KEY] ??= new AsyncLocalStorage<boolean>()) as AsyncLocalStorage<boolean>\n);\n\n/**\n * Check if the current execution context is inside an unstable_cache() callback.\n * Used by headers(), cookies(), and connection() to throw errors when\n * dynamic request APIs are called inside a cache scope.\n */\nexport function isInsideUnstableCacheScope(): boolean {\n return _unstableCacheAls.getStore() === true;\n}\n\ninterface UnstableCacheOptions {\n revalidate?: number | false;\n tags?: string[];\n}\n\n/**\n * Wrap an async function with caching.\n *\n * Returns a new function that caches results. The cache key is derived\n * from keyParts + serialized arguments.\n */\nexport function unstable_cache<T extends (...args: any[]) => Promise<any>>(\n fn: T,\n keyParts?: string[],\n options?: UnstableCacheOptions,\n): T {\n const baseKey = keyParts\n ? keyParts.join(\":\")\n : fnv1a64(fn.toString());\n const tags = options?.tags ?? [];\n const revalidateSeconds = options?.revalidate;\n\n const cachedFn = async (...args: any[]): Promise<any> => {\n const argsKey = JSON.stringify(args);\n const cacheKey = `unstable_cache:${baseKey}:${argsKey}`;\n\n // Try to get from cache\n const existing = await activeHandler.get(cacheKey, {\n kind: \"FETCH\",\n tags,\n });\n if (existing?.value && existing.value.kind === \"FETCH\") {\n try {\n return JSON.parse(existing.value.data.body);\n } catch {\n // Corrupted entry, fall through to re-fetch\n }\n }\n\n // Cache miss — call the function inside the unstable_cache ALS scope\n // so that headers()/cookies()/connection() can detect they're in a\n // cache scope and throw an appropriate error.\n const result = await _unstableCacheAls.run(true, () => fn(...args));\n\n // Store in cache using the FETCH kind\n const cacheValue: CachedFetchValue = {\n kind: \"FETCH\",\n data: {\n headers: {},\n body: JSON.stringify(result),\n url: cacheKey,\n },\n tags,\n revalidate: typeof revalidateSeconds === \"number\" ? revalidateSeconds : 0,\n };\n\n await activeHandler.set(cacheKey, cacheValue, {\n fetchCache: true,\n tags,\n revalidate: revalidateSeconds,\n });\n\n return result;\n };\n\n return cachedFn as T;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/shims/cache.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/cache shim\n *\n * Provides the Next.js caching API surface: revalidateTag, revalidatePath,\n * unstable_cache. Backed by a pluggable CacheHandler that defaults to\n * in-memory but can be swapped for Cloudflare KV, Redis, DynamoDB, etc.\n *\n * The CacheHandler interface matches Next.js 16's CacheHandler class, so\n * existing community adapters (@neshca/cache-handler, @opennextjs/aws, etc.)\n * can be used directly.\n *\n * Configuration (in vite.config.ts or next.config.js):\n * vinext({ cacheHandler: './my-cache-handler.ts' })\n *\n * Or set at runtime:\n * import { setCacheHandler } from 'next/cache';\n * setCacheHandler(new MyCacheHandler());\n */\n\nimport { markDynamicUsage as _markDynamic } from \"./headers.js\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { fnv1a64 } from \"../utils/hash.js\";\n\n// ---------------------------------------------------------------------------\n// Lazy accessor for cache context — avoids circular imports with cache-runtime.\n// The cache-runtime module sets this on load.\n// ---------------------------------------------------------------------------\n\ninterface CacheContextLike {\n tags: string[];\n lifeConfigs: import(\"./cache-runtime.js\").CacheContext[\"lifeConfigs\"];\n variant: string;\n}\n\n/** @internal Set by cache-runtime.ts on import to avoid circular dependency */\nlet _getCacheContextFn: (() => CacheContextLike | null) | null = null;\n\n/**\n * Register the cache context accessor. Called by cache-runtime.ts on load.\n * @internal\n */\nexport function _registerCacheContextAccessor(fn: () => CacheContextLike | null): void {\n _getCacheContextFn = fn;\n}\n\n// ---------------------------------------------------------------------------\n// CacheHandler interface — matches Next.js 16's CacheHandler class shape.\n// Implement this to provide a custom cache backend.\n// ---------------------------------------------------------------------------\n\nexport interface CacheHandlerValue {\n lastModified: number;\n age?: number;\n cacheState?: string;\n value: IncrementalCacheValue | null;\n}\n\n/** Discriminated union of cache value types. */\nexport type IncrementalCacheValue =\n | CachedFetchValue\n | CachedAppPageValue\n | CachedPagesValue\n | CachedRouteValue\n | CachedRedirectValue\n | CachedImageValue;\n\nexport interface CachedFetchValue {\n kind: \"FETCH\";\n data: {\n headers: Record<string, string>;\n body: string;\n url: string;\n status?: number;\n };\n tags?: string[];\n revalidate: number | false;\n}\n\nexport interface CachedAppPageValue {\n kind: \"APP_PAGE\";\n html: string;\n rscData: ArrayBuffer | undefined;\n headers: Record<string, string | string[]> | undefined;\n postponed: string | undefined;\n status: number | undefined;\n}\n\nexport interface CachedPagesValue {\n kind: \"PAGES\";\n html: string;\n pageData: object;\n headers: Record<string, string | string[]> | undefined;\n status: number | undefined;\n}\n\nexport interface CachedRouteValue {\n kind: \"APP_ROUTE\";\n body: ArrayBuffer;\n status: number;\n headers: Record<string, string | string[]>;\n}\n\nexport interface CachedRedirectValue {\n kind: \"REDIRECT\";\n props: object;\n}\n\nexport interface CachedImageValue {\n kind: \"IMAGE\";\n etag: string;\n buffer: ArrayBuffer;\n extension: string;\n revalidate?: number;\n}\n\nexport interface CacheHandlerContext {\n dev?: boolean;\n maxMemoryCacheSize?: number;\n revalidatedTags?: string[];\n [key: string]: unknown;\n}\n\nexport interface CacheHandler {\n get(\n key: string,\n ctx?: Record<string, unknown>,\n ): Promise<CacheHandlerValue | null>;\n\n set(\n key: string,\n data: IncrementalCacheValue | null,\n ctx?: Record<string, unknown>,\n ): Promise<void>;\n\n revalidateTag(\n tags: string | string[],\n durations?: { expire?: number },\n ): Promise<void>;\n\n resetRequestCache?(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Default in-memory adapter — works everywhere, suitable for dev and\n// single-process production. Not shared across workers/instances.\n// ---------------------------------------------------------------------------\n\ninterface MemoryEntry {\n value: IncrementalCacheValue | null;\n tags: string[];\n lastModified: number;\n revalidateAt: number | null;\n}\n\nexport class MemoryCacheHandler implements CacheHandler {\n private store = new Map<string, MemoryEntry>();\n private tagRevalidatedAt = new Map<string, number>();\n\n async get(\n key: string,\n _ctx?: Record<string, unknown>,\n ): Promise<CacheHandlerValue | null> {\n const entry = this.store.get(key);\n if (!entry) return null;\n\n // Check tag-based invalidation first — if tag was invalidated, treat as hard miss\n for (const tag of entry.tags) {\n const revalidatedAt = this.tagRevalidatedAt.get(tag);\n if (revalidatedAt && revalidatedAt >= entry.lastModified) {\n this.store.delete(key);\n return null;\n }\n }\n\n // Check time-based expiry — return stale entry with cacheState=\"stale\"\n // instead of deleting, so ISR can serve stale-while-revalidate\n if (entry.revalidateAt !== null && Date.now() > entry.revalidateAt) {\n return {\n lastModified: entry.lastModified,\n value: entry.value,\n cacheState: \"stale\",\n };\n }\n\n return {\n lastModified: entry.lastModified,\n value: entry.value,\n };\n }\n\n async set(\n key: string,\n data: IncrementalCacheValue | null,\n ctx?: Record<string, unknown>,\n ): Promise<void> {\n const tags: string[] = [];\n if (data && \"tags\" in data && Array.isArray(data.tags)) {\n tags.push(...data.tags);\n }\n if (ctx && \"tags\" in ctx && Array.isArray(ctx.tags)) {\n tags.push(...(ctx.tags as string[]));\n }\n\n let revalidateAt: number | null = null;\n if (ctx) {\n // Handle both old-style { revalidate } and new-style { cacheControl: { revalidate } }\n const revalidate =\n (ctx as any).cacheControl?.revalidate ?? (ctx as any).revalidate;\n if (typeof revalidate === \"number\" && revalidate > 0) {\n revalidateAt = Date.now() + revalidate * 1000;\n }\n }\n if (data && \"revalidate\" in data && typeof data.revalidate === \"number\") {\n revalidateAt = Date.now() + data.revalidate * 1000;\n }\n\n this.store.set(key, {\n value: data,\n tags,\n lastModified: Date.now(),\n revalidateAt,\n });\n }\n\n async revalidateTag(\n tags: string | string[],\n _durations?: { expire?: number },\n ): Promise<void> {\n const tagList = Array.isArray(tags) ? tags : [tags];\n const now = Date.now();\n for (const tag of tagList) {\n this.tagRevalidatedAt.set(tag, now);\n }\n }\n\n resetRequestCache(): void {\n // No-op for the simple memory cache. In a production adapter,\n // this would clear per-request caches (e.g., dedup fetch calls).\n }\n}\n\n// ---------------------------------------------------------------------------\n// Active cache handler — the singleton used by next/cache API functions.\n// Defaults to MemoryCacheHandler, can be swapped at runtime.\n// ---------------------------------------------------------------------------\n\nlet activeHandler: CacheHandler = new MemoryCacheHandler();\n\n/**\n * Set a custom CacheHandler. Call this during server startup to\n * plug in Cloudflare KV, Redis, DynamoDB, or any other backend.\n *\n * The handler must implement the CacheHandler interface (same shape\n * as Next.js 16's CacheHandler class).\n */\nexport function setCacheHandler(handler: CacheHandler): void {\n activeHandler = handler;\n}\n\n/**\n * Get the active CacheHandler (for internal use or testing).\n */\nexport function getCacheHandler(): CacheHandler {\n return activeHandler;\n}\n\n// ---------------------------------------------------------------------------\n// Public API — what app code imports from 'next/cache'\n// ---------------------------------------------------------------------------\n\n/**\n * Revalidate cached data associated with a specific cache tag.\n *\n * Works with both `fetch(..., { next: { tags: ['myTag'] } })` and\n * `unstable_cache(fn, keys, { tags: ['myTag'] })`.\n */\n/**\n * Revalidate cached data associated with a specific cache tag.\n *\n * Next.js 16 updated signature: requires a cacheLife profile as second argument\n * for stale-while-revalidate (SWR) behavior. The single-argument form is\n * deprecated but still supported for backward compatibility.\n *\n * @param tag - Cache tag to revalidate\n * @param profile - cacheLife profile name (e.g. 'max', 'hours') or inline { expire: number }\n */\nexport async function revalidateTag(\n tag: string,\n profile?: string | { expire?: number },\n): Promise<void> {\n // Resolve the profile to durations for the handler\n let durations: { expire?: number } | undefined;\n if (typeof profile === \"string\") {\n const resolved = cacheLifeProfiles[profile];\n if (resolved) {\n durations = { expire: resolved.expire };\n }\n } else if (profile && typeof profile === \"object\") {\n durations = profile;\n }\n await activeHandler.revalidateTag(tag, durations);\n}\n\n/**\n * Revalidate cached data associated with a specific path.\n *\n * Under the hood, Next.js converts paths to internal tags.\n * We use a `_N_T_/path` prefix convention for path-based tags.\n */\nexport async function revalidatePath(\n path: string,\n _type?: \"page\" | \"layout\",\n): Promise<void> {\n // Next.js internally converts paths to tags with a prefix\n const pathTag = `_N_T_${path}`;\n await activeHandler.revalidateTag([path, pathTag]);\n}\n\n/**\n * Expire and immediately refresh cached data for a tag (Next.js 16).\n *\n * Server Actions-only API that provides read-your-writes semantics:\n * the cache entry is expired and fresh data is read within the same request,\n * so the user immediately sees their changes.\n *\n * Use this for interactive features (forms, user settings) where users\n * expect to see their updates instantly.\n *\n * @param tag - Cache tag to expire and refresh\n */\nexport async function updateTag(tag: string): Promise<void> {\n // Expire the tag immediately (same as revalidateTag without SWR)\n await activeHandler.revalidateTag(tag);\n}\n\n/**\n * Refresh uncached data on the page (Next.js 16).\n *\n * Server Actions-only API that signals the client to re-fetch dynamic\n * (uncached) data without touching the cache. Complementary to the\n * client-side router.refresh().\n *\n * Use this when you need to refresh data like notification counts,\n * live metrics, or status indicators after performing a server action.\n */\nexport function refresh(): void {\n // In our implementation, this is a signal that the client should\n // refresh dynamic data. The actual refresh happens on the client side\n // via the RSC protocol — the server action response triggers a\n // client-side navigation refresh.\n // For now, this is a no-op on the server; the Server Action response\n // mechanism already handles re-rendering the affected RSC tree.\n}\n\n/**\n * Opt out of static rendering and indicate a particular component should not be cached.\n *\n * In Next.js, calling noStore() inside a Server Component ensures the component\n * is dynamically rendered. In our implementation, this is a no-op since we don't\n * have the same static/dynamic rendering split — all server rendering is on-demand.\n * It's provided for API compatibility so apps importing it don't break.\n */\nexport function unstable_noStore(): void {\n // Signal dynamic usage so ISR-configured routes bypass the cache\n _markDynamic();\n}\n\n// Also export as `noStore` (Next.js 15+ naming)\nexport { unstable_noStore as noStore };\n\n// ---------------------------------------------------------------------------\n// Request-scoped cacheLife for page-level \"use cache\" directives.\n// When cacheLife() is called outside a \"use cache\" function context (e.g.,\n// in a page component with file-level \"use cache\"), the resolved config is\n// stored here so the server can read it after rendering and apply ISR caching.\n//\n// Uses AsyncLocalStorage for request isolation on concurrent workers.\n// ---------------------------------------------------------------------------\ninterface CacheState {\n requestScopedCacheLife: CacheLifeConfig | null;\n}\n\nconst _ALS_KEY = Symbol.for(\"vinext.cache.als\");\nconst _FALLBACK_KEY = Symbol.for(\"vinext.cache.fallback\");\nconst _g = globalThis as unknown as Record<PropertyKey, unknown>;\nconst _cacheAls = (_g[_ALS_KEY] ??= new AsyncLocalStorage<CacheState>()) as AsyncLocalStorage<CacheState>;\n\nconst _cacheFallbackState = (_g[_FALLBACK_KEY] ??= {\n requestScopedCacheLife: null,\n} satisfies CacheState) as CacheState;\n\nfunction _getCacheState(): CacheState {\n return _cacheAls.getStore() ?? _cacheFallbackState;\n}\n\n/**\n * Run a function within a cache state ALS scope.\n * Ensures per-request isolation for request-scoped cacheLife config\n * on concurrent runtimes.\n * @internal\n */\nexport function _runWithCacheState<T>(fn: () => T | Promise<T>): T | Promise<T> {\n const state: CacheState = {\n requestScopedCacheLife: null,\n };\n return _cacheAls.run(state, fn);\n}\n\n/**\n * Initialize cache ALS for a new request. Call at request entry.\n * Only needed when not using _runWithCacheState() (legacy path).\n * @internal\n */\nexport function _initRequestScopedCacheState(): void {\n const state = _cacheAls.getStore();\n if (state) {\n state.requestScopedCacheLife = null;\n } else {\n _cacheFallbackState.requestScopedCacheLife = null;\n }\n}\n\n/**\n * Set a request-scoped cache life config. Called by cacheLife() when outside\n * a \"use cache\" function context.\n * @internal\n */\nexport function _setRequestScopedCacheLife(config: CacheLifeConfig): void {\n const state = _getCacheState();\n if (state.requestScopedCacheLife === null) {\n state.requestScopedCacheLife = { ...config };\n } else {\n // Minimum-wins rule\n if (config.stale !== undefined) {\n state.requestScopedCacheLife.stale = state.requestScopedCacheLife.stale !== undefined\n ? Math.min(state.requestScopedCacheLife.stale, config.stale)\n : config.stale;\n }\n if (config.revalidate !== undefined) {\n state.requestScopedCacheLife.revalidate = state.requestScopedCacheLife.revalidate !== undefined\n ? Math.min(state.requestScopedCacheLife.revalidate, config.revalidate)\n : config.revalidate;\n }\n if (config.expire !== undefined) {\n state.requestScopedCacheLife.expire = state.requestScopedCacheLife.expire !== undefined\n ? Math.min(state.requestScopedCacheLife.expire, config.expire)\n : config.expire;\n }\n }\n}\n\n/**\n * Consume and reset the request-scoped cache life. Returns null if none was set.\n * @internal\n */\nexport function _consumeRequestScopedCacheLife(): CacheLifeConfig | null {\n const state = _getCacheState();\n const config = state.requestScopedCacheLife;\n state.requestScopedCacheLife = null;\n return config;\n}\n\n// ---------------------------------------------------------------------------\n// cacheLife / cacheTag — Next.js 15+ \"use cache\" APIs\n// ---------------------------------------------------------------------------\n\n/**\n * Cache life configuration. Controls stale-while-revalidate behavior.\n */\nexport interface CacheLifeConfig {\n /** How long (seconds) the client can cache without checking the server */\n stale?: number;\n /** How frequently (seconds) the server cache refreshes */\n revalidate?: number;\n /** Max staleness (seconds) before deoptimizing to dynamic */\n expire?: number;\n}\n\n/**\n * Built-in cache life profiles matching Next.js 16.\n */\nexport const cacheLifeProfiles: Record<string, CacheLifeConfig> = {\n default: { revalidate: 900, expire: 4294967294 },\n seconds: { stale: 30, revalidate: 1, expire: 60 },\n minutes: { stale: 300, revalidate: 60, expire: 3600 },\n hours: { stale: 300, revalidate: 3600, expire: 86400 },\n days: { stale: 300, revalidate: 86400, expire: 604800 },\n weeks: { stale: 300, revalidate: 604800, expire: 2592000 },\n max: { stale: 300, revalidate: 2592000, expire: 31536000 },\n};\n\n/**\n * Set the cache lifetime for a \"use cache\" function.\n *\n * Accepts either a built-in profile name (e.g., \"hours\", \"days\") or a custom\n * configuration object. In Next.js, this only works inside \"use cache\" functions.\n *\n * When called inside a \"use cache\" function, this sets the cache TTL.\n * The \"minimum-wins\" rule applies: if called multiple times, the shortest\n * duration for each field wins.\n *\n * When called outside a \"use cache\" context, this is a validated no-op.\n */\nexport function cacheLife(profile: string | CacheLifeConfig): void {\n let resolvedConfig: CacheLifeConfig;\n\n if (typeof profile === \"string\") {\n // Validate the profile name exists\n if (!cacheLifeProfiles[profile]) {\n console.warn(\n `[vinext] cacheLife: unknown profile \"${profile}\". ` +\n `Available profiles: ${Object.keys(cacheLifeProfiles).join(\", \")}`,\n );\n return;\n }\n resolvedConfig = { ...cacheLifeProfiles[profile] };\n } else if (typeof profile === \"object\" && profile !== null) {\n // Validate the config shape\n if (\n profile.expire !== undefined &&\n profile.revalidate !== undefined &&\n profile.expire < profile.revalidate\n ) {\n console.warn(\n \"[vinext] cacheLife: expire must be >= revalidate\",\n );\n }\n resolvedConfig = { ...profile };\n } else {\n return;\n }\n\n // If we're inside a \"use cache\" context, push the config\n try {\n const ctx = _getCacheContextFn?.();\n if (ctx) {\n ctx.lifeConfigs.push(resolvedConfig);\n return;\n }\n } catch {\n // Fall through to request-scoped\n }\n\n // Outside a \"use cache\" context (e.g., page component with file-level \"use cache\"):\n // store as request-scoped so the server can read it after rendering.\n _setRequestScopedCacheLife(resolvedConfig);\n}\n\n/**\n * Tag a \"use cache\" function's cached result for on-demand revalidation.\n *\n * Tags set here can be invalidated via revalidateTag(). In Next.js, this only\n * works inside \"use cache\" functions.\n *\n * When called inside a \"use cache\" function, tags are attached to the cached\n * entry. They can later be invalidated via revalidateTag().\n *\n * When called outside a \"use cache\" context, this is a no-op.\n */\nexport function cacheTag(...tags: string[]): void {\n try {\n const ctx = _getCacheContextFn?.();\n if (ctx) {\n ctx.tags.push(...tags);\n }\n } catch {\n // Not in a cache context — no-op\n }\n}\n\n// ---------------------------------------------------------------------------\n// unstable_cache — the older caching API\n// ---------------------------------------------------------------------------\n\n/**\n * AsyncLocalStorage to track whether we're inside an unstable_cache() callback.\n * Stored on globalThis via Symbol so headers.ts can detect the scope without\n * a direct import (avoiding circular dependencies).\n */\nconst _UNSTABLE_CACHE_ALS_KEY = Symbol.for(\"vinext.unstableCache.als\");\nconst _unstableCacheAls = (\n (_g[_UNSTABLE_CACHE_ALS_KEY] ??= new AsyncLocalStorage<boolean>()) as AsyncLocalStorage<boolean>\n);\n\n/**\n * Check if the current execution context is inside an unstable_cache() callback.\n * Used by headers(), cookies(), and connection() to throw errors when\n * dynamic request APIs are called inside a cache scope.\n */\nexport function isInsideUnstableCacheScope(): boolean {\n return _unstableCacheAls.getStore() === true;\n}\n\ninterface UnstableCacheOptions {\n revalidate?: number | false;\n tags?: string[];\n}\n\n/**\n * Wrap an async function with caching.\n *\n * Returns a new function that caches results. The cache key is derived\n * from keyParts + serialized arguments.\n */\nexport function unstable_cache<T extends (...args: any[]) => Promise<any>>(\n fn: T,\n keyParts?: string[],\n options?: UnstableCacheOptions,\n): T {\n const baseKey = keyParts\n ? keyParts.join(\":\")\n : fnv1a64(fn.toString());\n const tags = options?.tags ?? [];\n const revalidateSeconds = options?.revalidate;\n\n const cachedFn = async (...args: any[]): Promise<any> => {\n const argsKey = JSON.stringify(args);\n const cacheKey = `unstable_cache:${baseKey}:${argsKey}`;\n\n // Try to get from cache. Check cacheState so time-expired entries\n // trigger a re-fetch instead of being served indefinitely.\n const existing = await activeHandler.get(cacheKey, {\n kind: \"FETCH\",\n tags,\n });\n if (existing?.value && existing.value.kind === \"FETCH\" && existing.cacheState !== \"stale\") {\n try {\n return JSON.parse(existing.value.data.body);\n } catch {\n // Corrupted entry, fall through to re-fetch\n }\n }\n\n // Cache miss — call the function inside the unstable_cache ALS scope\n // so that headers()/cookies()/connection() can detect they're in a\n // cache scope and throw an appropriate error.\n const result = await _unstableCacheAls.run(true, () => fn(...args));\n\n // Store in cache using the FETCH kind\n const cacheValue: CachedFetchValue = {\n kind: \"FETCH\",\n data: {\n headers: {},\n body: JSON.stringify(result),\n url: cacheKey,\n },\n tags,\n // revalidate: false means \"cache indefinitely\" (no time-based expiry).\n // A positive number means time-based revalidation in seconds.\n // When unset (undefined), default to false (indefinite) matching\n // Next.js behavior for unstable_cache without explicit revalidate.\n revalidate: typeof revalidateSeconds === \"number\" ? revalidateSeconds : false,\n };\n\n await activeHandler.set(cacheKey, cacheValue, {\n fetchCache: true,\n tags,\n revalidate: revalidateSeconds,\n });\n\n return result;\n };\n\n return cachedFn as T;\n}\n"]}
|
package/dist/shims/headers.d.ts
CHANGED
|
@@ -43,6 +43,12 @@ export declare function consumeDynamicUsage(): boolean;
|
|
|
43
43
|
* in-place and is only safe for cleanup (ctx=null) within an existing
|
|
44
44
|
* als.run() scope.
|
|
45
45
|
*/
|
|
46
|
+
/**
|
|
47
|
+
* Returns the current live HeadersContext from ALS (or the fallback).
|
|
48
|
+
* Used after applyMiddlewareRequestHeaders() to build a post-middleware
|
|
49
|
+
* request context for afterFiles/fallback rewrite has/missing evaluation.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getHeadersContext(): HeadersContext | null;
|
|
46
52
|
export declare function setHeadersContext(ctx: HeadersContext | null): void;
|
|
47
53
|
/**
|
|
48
54
|
* Run a function with headers context, ensuring the context propagates
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/shims/headers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/shims/headers.ts"],"names":[],"mappings":"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"}
|
package/dist/shims/headers.js
CHANGED
|
@@ -99,6 +99,14 @@ export function consumeDynamicUsage() {
|
|
|
99
99
|
* in-place and is only safe for cleanup (ctx=null) within an existing
|
|
100
100
|
* als.run() scope.
|
|
101
101
|
*/
|
|
102
|
+
/**
|
|
103
|
+
* Returns the current live HeadersContext from ALS (or the fallback).
|
|
104
|
+
* Used after applyMiddlewareRequestHeaders() to build a post-middleware
|
|
105
|
+
* request context for afterFiles/fallback rewrite has/missing evaluation.
|
|
106
|
+
*/
|
|
107
|
+
export function getHeadersContext() {
|
|
108
|
+
return _getState().headersContext;
|
|
109
|
+
}
|
|
102
110
|
export function setHeadersContext(ctx) {
|
|
103
111
|
if (ctx !== null) {
|
|
104
112
|
// For backward compatibility, set context on the current ALS store
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/shims/headers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/headers shim\n *\n * Provides cookies() and headers() functions for App Router Server Components.\n * These read from a request context set by the RSC handler before rendering.\n *\n * In Next.js 15+, cookies() and headers() return Promises (async).\n * We support both the sync (legacy) and async patterns.\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\n// ---------------------------------------------------------------------------\n// Request context\n// ---------------------------------------------------------------------------\n\ninterface HeadersContext {\n headers: Headers;\n cookies: Map<string, string>;\n}\n\ntype VinextHeadersShimState = {\n headersContext: HeadersContext | null;\n dynamicUsageDetected: boolean;\n pendingSetCookies: string[];\n draftModeCookieHeader: string | null;\n};\n\n// NOTE:\n// - This shim can be loaded under multiple module specifiers in Vite's\n// multi-environment setup (RSC/SSR). Store the AsyncLocalStorage on\n// globalThis so `connection()` (next/server) and `consumeDynamicUsage()`\n// (next/headers) always share it.\n// - We use AsyncLocalStorage so concurrent requests don't stomp each other's\n// headers/cookies/dynamic-usage state.\nconst _ALS_KEY = Symbol.for(\"vinext.nextHeadersShim.als\");\nconst _FALLBACK_KEY = Symbol.for(\"vinext.nextHeadersShim.fallback\");\nconst _g = globalThis as unknown as Record<PropertyKey, unknown>;\nconst _als = (_g[_ALS_KEY] ??= new AsyncLocalStorage<VinextHeadersShimState>()) as AsyncLocalStorage<VinextHeadersShimState>;\n\nconst _fallbackState = (_g[_FALLBACK_KEY] ??= {\n headersContext: null,\n dynamicUsageDetected: false,\n pendingSetCookies: [],\n draftModeCookieHeader: null,\n} satisfies VinextHeadersShimState) as VinextHeadersShimState;\n\nfunction _getState(): VinextHeadersShimState {\n const state = _als.getStore();\n return state ?? _fallbackState;\n}\n\n/**\n * Dynamic usage flag — set when a component calls connection(), cookies(),\n * headers(), or noStore() during rendering. When true, ISR caching is\n * bypassed and the response gets Cache-Control: no-store.\n */\n// (stored on _state)\n\n/**\n * Mark the current render as requiring dynamic (uncached) rendering.\n * Called by connection(), cookies(), headers(), and noStore().\n */\nexport function markDynamicUsage(): void {\n _getState().dynamicUsageDetected = true;\n}\n\n// ---------------------------------------------------------------------------\n// Cache scope detection — checks whether we're inside \"use cache\" or\n// unstable_cache() by reading ALS instances stored on globalThis via Symbols.\n// This avoids circular imports between headers.ts, cache.ts, and cache-runtime.ts.\n// The ALS instances are registered by cache-runtime.ts and cache.ts respectively.\n// ---------------------------------------------------------------------------\n\n/** Symbol used by cache-runtime.ts to store the \"use cache\" ALS on globalThis */\nconst _USE_CACHE_ALS_KEY = Symbol.for(\"vinext.cacheRuntime.contextAls\");\n/** Symbol used by cache.ts to store the unstable_cache ALS on globalThis */\nconst _UNSTABLE_CACHE_ALS_KEY = Symbol.for(\"vinext.unstableCache.als\");\nconst _gHeaders = globalThis as unknown as Record<PropertyKey, unknown>;\n\nfunction _isInsideUseCache(): boolean {\n const als = _gHeaders[_USE_CACHE_ALS_KEY] as AsyncLocalStorage<unknown> | undefined;\n return als?.getStore() != null;\n}\n\nfunction _isInsideUnstableCache(): boolean {\n const als = _gHeaders[_UNSTABLE_CACHE_ALS_KEY] as AsyncLocalStorage<unknown> | undefined;\n return als?.getStore() === true;\n}\n\n/**\n * Throw if the current execution is inside a \"use cache\" or unstable_cache()\n * scope. Called by dynamic request APIs (headers, cookies, connection) to\n * prevent request-specific data from being frozen into cached results.\n *\n * @param apiName - The name of the API being called (e.g. \"connection()\")\n */\nexport function throwIfInsideCacheScope(apiName: string): void {\n if (_isInsideUseCache()) {\n throw new Error(\n `\\`${apiName}\\` cannot be called inside \"use cache\". ` +\n `If you need this data inside a cached function, call \\`${apiName}\\` ` +\n \"outside and pass the required data as an argument.\",\n );\n }\n if (_isInsideUnstableCache()) {\n throw new Error(\n `\\`${apiName}\\` cannot be called inside a function cached with \\`unstable_cache()\\`. ` +\n `If you need this data inside a cached function, call \\`${apiName}\\` ` +\n \"outside and pass the required data as an argument.\",\n );\n }\n}\n\n/**\n * Check and reset the dynamic usage flag.\n * Called by the server after rendering to decide on caching.\n */\nexport function consumeDynamicUsage(): boolean {\n const state = _getState();\n const used = state.dynamicUsageDetected;\n state.dynamicUsageDetected = false;\n return used;\n}\n\n/**\n * Set the headers/cookies context for the current RSC render.\n * Called by the framework's RSC entry before rendering each request.\n *\n * @deprecated Prefer runWithHeadersContext() which uses als.run() for\n * proper per-request isolation. This function mutates the ALS store\n * in-place and is only safe for cleanup (ctx=null) within an existing\n * als.run() scope.\n */\nexport function setHeadersContext(ctx: HeadersContext | null): void {\n if (ctx !== null) {\n // For backward compatibility, set context on the current ALS store\n // if one exists, otherwise update the fallback. Callers should\n // migrate to runWithHeadersContext() for new-request setup.\n const existing = _als.getStore();\n if (existing) {\n existing.headersContext = ctx;\n existing.dynamicUsageDetected = false;\n existing.pendingSetCookies = [];\n existing.draftModeCookieHeader = null;\n } else {\n _fallbackState.headersContext = ctx;\n _fallbackState.dynamicUsageDetected = false;\n _fallbackState.pendingSetCookies = [];\n _fallbackState.draftModeCookieHeader = null;\n }\n return;\n }\n\n // End of request cleanup: keep the store (so consumeDynamicUsage and\n // cookie flushing can still run), but clear the request headers/cookies.\n const state = _als.getStore();\n if (state) {\n state.headersContext = null;\n } else {\n _fallbackState.headersContext = null;\n }\n}\n\n/**\n * Run a function with headers context, ensuring the context propagates\n * through all async operations (including RSC streaming).\n *\n * Uses AsyncLocalStorage.run() to guarantee per-request isolation.\n * The ALS store propagates through all async continuations including\n * ReadableStream consumption, setTimeout callbacks, and Promise chains,\n * so RSC streaming works correctly — components that render when the\n * stream is consumed still see the correct request's context.\n */\nexport function runWithHeadersContext<T>(\n ctx: HeadersContext,\n fn: () => T | Promise<T>,\n): T | Promise<T> {\n const state: VinextHeadersShimState = {\n headersContext: ctx,\n dynamicUsageDetected: false,\n pendingSetCookies: [],\n draftModeCookieHeader: null,\n };\n\n return _als.run(state, fn);\n}\n\n/**\n * Apply middleware-forwarded request headers to the current headers context.\n *\n * When Next.js middleware calls `NextResponse.next({ request: { headers } })`,\n * the modified headers are encoded as `x-middleware-request-<name>` on the\n * middleware response. This function unpacks those prefixed headers and\n * replaces the corresponding entries on the live `HeadersContext` so that\n * subsequent calls to `headers()` / `cookies()` see the middleware changes.\n */\nexport function applyMiddlewareRequestHeaders(\n middlewareResponseHeaders: Headers,\n): void {\n const state = _getState();\n if (!state.headersContext) return;\n\n const ctx = state.headersContext;\n const PREFIX = \"x-middleware-request-\";\n\n for (const [key, value] of middlewareResponseHeaders) {\n if (key.startsWith(PREFIX)) {\n const realName = key.slice(PREFIX.length);\n ctx.headers.set(realName, value);\n }\n }\n\n // If middleware modified the cookie header, rebuild the cookies map.\n const newCookieHeader = ctx.headers.get(\"cookie\");\n if (newCookieHeader !== null) {\n ctx.cookies.clear();\n for (const part of newCookieHeader.split(\";\")) {\n const [k, ...rest] = part.split(\"=\");\n if (k) {\n ctx.cookies.set(k.trim(), rest.join(\"=\").trim());\n }\n }\n }\n}\n\n/**\n * Create a HeadersContext from a standard Request object.\n */\nexport function headersContextFromRequest(request: Request): HeadersContext {\n const cookies = new Map<string, string>();\n const cookieHeader = request.headers.get(\"cookie\") || \"\";\n for (const part of cookieHeader.split(\";\")) {\n const [key, ...rest] = part.split(\"=\");\n if (key) {\n cookies.set(key.trim(), rest.join(\"=\").trim());\n }\n }\n return {\n // Copy into a mutable Headers instance. In Cloudflare Workers the original\n // Request.headers is immutable; applyMiddlewareRequestHeaders() needs to\n // call .set() on this object after middleware runs.\n headers: new Headers(request.headers),\n cookies,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Read-only Headers instance from the incoming request.\n * Returns a Promise in Next.js 15+ style (but resolves synchronously since\n * the context is already available).\n */\nexport async function headers(): Promise<Headers> {\n throwIfInsideCacheScope(\"headers()\");\n\n const state = _getState();\n if (!state.headersContext) {\n throw new Error(\n \"headers() can only be called from a Server Component, Route Handler, \" +\n \"or Server Action. Make sure you're not calling it from a Client Component.\",\n );\n }\n markDynamicUsage();\n return state.headersContext.headers;\n}\n\n/**\n * Cookie jar from the incoming request.\n * Returns a ReadonlyRequestCookies-like object.\n */\nexport async function cookies(): Promise<RequestCookies> {\n throwIfInsideCacheScope(\"cookies()\");\n\n const state = _getState();\n if (!state.headersContext) {\n throw new Error(\n \"cookies() can only be called from a Server Component, Route Handler, \" +\n \"or Server Action.\",\n );\n }\n markDynamicUsage();\n return new RequestCookies(state.headersContext.cookies);\n}\n\n// ---------------------------------------------------------------------------\n// Writable cookie accumulator for Route Handlers / Server Actions\n// ---------------------------------------------------------------------------\n\n/** Accumulated Set-Cookie headers from cookies().set() / .delete() calls */\n// (stored on _state)\n\n/**\n * Get and clear all pending Set-Cookie headers generated by cookies().set()/delete().\n * Called by the framework after rendering to attach headers to the response.\n */\nexport function getAndClearPendingCookies(): string[] {\n const state = _getState();\n const cookies = state.pendingSetCookies;\n state.pendingSetCookies = [];\n return cookies;\n}\n\n// Draft mode cookie name (matches Next.js convention)\nconst DRAFT_MODE_COOKIE = \"__prerender_bypass\";\n\n// Draft mode secret — generated once at build time via Vite `define` so the\n// __prerender_bypass cookie is consistent across all server instances (e.g.\n// multiple Cloudflare Workers isolates).\nfunction getDraftSecret(): string {\n const secret = process.env.__VINEXT_DRAFT_SECRET;\n if (!secret) {\n throw new Error(\n \"[vinext] __VINEXT_DRAFT_SECRET is not defined. \" +\n \"This should be set by the Vite plugin at build time.\",\n );\n }\n return secret;\n}\n\n// Store for Set-Cookie headers generated by draftMode().enable()/disable()\n// (stored on _state)\n\n/**\n * Get any Set-Cookie header generated by draftMode().enable()/disable().\n * Called by the framework after rendering to attach the header to the response.\n */\nexport function getDraftModeCookieHeader(): string | null {\n const state = _getState();\n const header = state.draftModeCookieHeader;\n state.draftModeCookieHeader = null;\n return header;\n}\n\ninterface DraftModeResult {\n isEnabled: boolean;\n enable(): void;\n disable(): void;\n}\n\n/**\n * Draft mode — check/toggle via a `__prerender_bypass` cookie.\n *\n * - `isEnabled`: true if the bypass cookie is present in the request\n * - `enable()`: sets the bypass cookie (for Route Handlers)\n * - `disable()`: clears the bypass cookie\n */\nexport async function draftMode(): Promise<DraftModeResult> {\n throwIfInsideCacheScope(\"draftMode()\");\n\n const state = _getState();\n const secret = getDraftSecret();\n const isEnabled = state.headersContext\n ? state.headersContext.cookies.get(DRAFT_MODE_COOKIE) === secret\n : false;\n\n return {\n isEnabled,\n enable(): void {\n if (state.headersContext) {\n state.headersContext.cookies.set(DRAFT_MODE_COOKIE, secret);\n }\n const secure = typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\" ? \"; Secure\" : \"\";\n state.draftModeCookieHeader =\n `${DRAFT_MODE_COOKIE}=${secret}; Path=/; HttpOnly; SameSite=Lax${secure}`;\n },\n disable(): void {\n if (state.headersContext) {\n state.headersContext.cookies.delete(DRAFT_MODE_COOKIE);\n }\n const secure = typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\" ? \"; Secure\" : \"\";\n state.draftModeCookieHeader =\n `${DRAFT_MODE_COOKIE}=; Path=/; HttpOnly; SameSite=Lax${secure}; Max-Age=0`;\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Cookie name/value validation (RFC 6265)\n// ---------------------------------------------------------------------------\n\n/**\n * RFC 6265 §4.1.1: cookie-name is a token (RFC 2616 §2.2).\n * Allowed: any visible ASCII (0x21-0x7E) except separators: ()<>@,;:\\\"/[]?={}\n */\nconst VALID_COOKIE_NAME_RE = /^[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2E\\x30-\\x39\\x41-\\x5A\\x5E-\\x7A\\x7C\\x7E]+$/;\n\nfunction validateCookieName(name: string): void {\n if (!name || !VALID_COOKIE_NAME_RE.test(name)) {\n throw new Error(`Invalid cookie name: ${JSON.stringify(name)}`);\n }\n}\n\n/**\n * Validate cookie attribute values (path, domain) to prevent injection\n * via semicolons, newlines, or other control characters.\n */\nfunction validateCookieAttributeValue(value: string, attributeName: string): void {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if (code <= 0x1F || code === 0x7F || value[i] === \";\") {\n throw new Error(`Invalid cookie ${attributeName} value: ${JSON.stringify(value)}`);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// RequestCookies implementation\n// ---------------------------------------------------------------------------\n\nclass RequestCookies {\n private _cookies: Map<string, string>;\n\n constructor(cookies: Map<string, string>) {\n this._cookies = cookies;\n }\n\n get(name: string): { name: string; value: string } | undefined {\n const value = this._cookies.get(name);\n if (value === undefined) return undefined;\n return { name, value };\n }\n\n getAll(): Array<{ name: string; value: string }> {\n const result: Array<{ name: string; value: string }> = [];\n for (const [name, value] of this._cookies) {\n result.push({ name, value });\n }\n return result;\n }\n\n has(name: string): boolean {\n return this._cookies.has(name);\n }\n\n /**\n * Set a cookie. In Route Handlers and Server Actions, this produces\n * a Set-Cookie header on the response.\n */\n set(\n nameOrOptions: string | { name: string; value: string; path?: string; domain?: string; maxAge?: number; expires?: Date; httpOnly?: boolean; secure?: boolean; sameSite?: \"Strict\" | \"Lax\" | \"None\" },\n value?: string,\n options?: { path?: string; domain?: string; maxAge?: number; expires?: Date; httpOnly?: boolean; secure?: boolean; sameSite?: \"Strict\" | \"Lax\" | \"None\" },\n ): this {\n let cookieName: string;\n let cookieValue: string;\n let opts: typeof options;\n\n if (typeof nameOrOptions === \"string\") {\n cookieName = nameOrOptions;\n cookieValue = value ?? \"\";\n opts = options;\n } else {\n cookieName = nameOrOptions.name;\n cookieValue = nameOrOptions.value;\n opts = nameOrOptions;\n }\n\n validateCookieName(cookieName);\n\n // Update the local cookie map\n this._cookies.set(cookieName, cookieValue);\n\n // Build Set-Cookie header string\n const parts = [`${cookieName}=${encodeURIComponent(cookieValue)}`];\n if (opts?.path) {\n validateCookieAttributeValue(opts.path, \"Path\");\n parts.push(`Path=${opts.path}`);\n }\n if (opts?.domain) {\n validateCookieAttributeValue(opts.domain, \"Domain\");\n parts.push(`Domain=${opts.domain}`);\n }\n if (opts?.maxAge !== undefined) parts.push(`Max-Age=${opts.maxAge}`);\n if (opts?.expires) parts.push(`Expires=${opts.expires.toUTCString()}`);\n if (opts?.httpOnly) parts.push(\"HttpOnly\");\n if (opts?.secure) parts.push(\"Secure\");\n if (opts?.sameSite) parts.push(`SameSite=${opts.sameSite}`);\n\n _getState().pendingSetCookies.push(parts.join(\"; \"));\n return this;\n }\n\n /**\n * Delete a cookie by setting it with Max-Age=0.\n */\n delete(name: string): this {\n validateCookieName(name);\n this._cookies.delete(name);\n _getState().pendingSetCookies.push(`${name}=; Path=/; Max-Age=0`);\n return this;\n }\n\n get size(): number {\n return this._cookies.size;\n }\n\n [Symbol.iterator](): IterableIterator<[string, { name: string; value: string }]> {\n const entries = this._cookies.entries();\n const iter: IterableIterator<[string, { name: string; value: string }]> = {\n [Symbol.iterator]() { return iter; },\n next() {\n const { value, done } = entries.next();\n if (done) return { value: undefined, done: true };\n const [name, val] = value;\n return { value: [name, { name, value: val }], done: false };\n },\n };\n return iter;\n }\n\n toString(): string {\n const parts: string[] = [];\n for (const [name, value] of this._cookies) {\n parts.push(`${name}=${value}`);\n }\n return parts.join(\"; \");\n }\n}\n\n// Re-export types\nexport type { RequestCookies };\n"]}
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/shims/headers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/headers shim\n *\n * Provides cookies() and headers() functions for App Router Server Components.\n * These read from a request context set by the RSC handler before rendering.\n *\n * In Next.js 15+, cookies() and headers() return Promises (async).\n * We support both the sync (legacy) and async patterns.\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\n// ---------------------------------------------------------------------------\n// Request context\n// ---------------------------------------------------------------------------\n\ninterface HeadersContext {\n headers: Headers;\n cookies: Map<string, string>;\n}\n\ntype VinextHeadersShimState = {\n headersContext: HeadersContext | null;\n dynamicUsageDetected: boolean;\n pendingSetCookies: string[];\n draftModeCookieHeader: string | null;\n};\n\n// NOTE:\n// - This shim can be loaded under multiple module specifiers in Vite's\n// multi-environment setup (RSC/SSR). Store the AsyncLocalStorage on\n// globalThis so `connection()` (next/server) and `consumeDynamicUsage()`\n// (next/headers) always share it.\n// - We use AsyncLocalStorage so concurrent requests don't stomp each other's\n// headers/cookies/dynamic-usage state.\nconst _ALS_KEY = Symbol.for(\"vinext.nextHeadersShim.als\");\nconst _FALLBACK_KEY = Symbol.for(\"vinext.nextHeadersShim.fallback\");\nconst _g = globalThis as unknown as Record<PropertyKey, unknown>;\nconst _als = (_g[_ALS_KEY] ??= new AsyncLocalStorage<VinextHeadersShimState>()) as AsyncLocalStorage<VinextHeadersShimState>;\n\nconst _fallbackState = (_g[_FALLBACK_KEY] ??= {\n headersContext: null,\n dynamicUsageDetected: false,\n pendingSetCookies: [],\n draftModeCookieHeader: null,\n} satisfies VinextHeadersShimState) as VinextHeadersShimState;\n\nfunction _getState(): VinextHeadersShimState {\n const state = _als.getStore();\n return state ?? _fallbackState;\n}\n\n/**\n * Dynamic usage flag — set when a component calls connection(), cookies(),\n * headers(), or noStore() during rendering. When true, ISR caching is\n * bypassed and the response gets Cache-Control: no-store.\n */\n// (stored on _state)\n\n/**\n * Mark the current render as requiring dynamic (uncached) rendering.\n * Called by connection(), cookies(), headers(), and noStore().\n */\nexport function markDynamicUsage(): void {\n _getState().dynamicUsageDetected = true;\n}\n\n// ---------------------------------------------------------------------------\n// Cache scope detection — checks whether we're inside \"use cache\" or\n// unstable_cache() by reading ALS instances stored on globalThis via Symbols.\n// This avoids circular imports between headers.ts, cache.ts, and cache-runtime.ts.\n// The ALS instances are registered by cache-runtime.ts and cache.ts respectively.\n// ---------------------------------------------------------------------------\n\n/** Symbol used by cache-runtime.ts to store the \"use cache\" ALS on globalThis */\nconst _USE_CACHE_ALS_KEY = Symbol.for(\"vinext.cacheRuntime.contextAls\");\n/** Symbol used by cache.ts to store the unstable_cache ALS on globalThis */\nconst _UNSTABLE_CACHE_ALS_KEY = Symbol.for(\"vinext.unstableCache.als\");\nconst _gHeaders = globalThis as unknown as Record<PropertyKey, unknown>;\n\nfunction _isInsideUseCache(): boolean {\n const als = _gHeaders[_USE_CACHE_ALS_KEY] as AsyncLocalStorage<unknown> | undefined;\n return als?.getStore() != null;\n}\n\nfunction _isInsideUnstableCache(): boolean {\n const als = _gHeaders[_UNSTABLE_CACHE_ALS_KEY] as AsyncLocalStorage<unknown> | undefined;\n return als?.getStore() === true;\n}\n\n/**\n * Throw if the current execution is inside a \"use cache\" or unstable_cache()\n * scope. Called by dynamic request APIs (headers, cookies, connection) to\n * prevent request-specific data from being frozen into cached results.\n *\n * @param apiName - The name of the API being called (e.g. \"connection()\")\n */\nexport function throwIfInsideCacheScope(apiName: string): void {\n if (_isInsideUseCache()) {\n throw new Error(\n `\\`${apiName}\\` cannot be called inside \"use cache\". ` +\n `If you need this data inside a cached function, call \\`${apiName}\\` ` +\n \"outside and pass the required data as an argument.\",\n );\n }\n if (_isInsideUnstableCache()) {\n throw new Error(\n `\\`${apiName}\\` cannot be called inside a function cached with \\`unstable_cache()\\`. ` +\n `If you need this data inside a cached function, call \\`${apiName}\\` ` +\n \"outside and pass the required data as an argument.\",\n );\n }\n}\n\n/**\n * Check and reset the dynamic usage flag.\n * Called by the server after rendering to decide on caching.\n */\nexport function consumeDynamicUsage(): boolean {\n const state = _getState();\n const used = state.dynamicUsageDetected;\n state.dynamicUsageDetected = false;\n return used;\n}\n\n/**\n * Set the headers/cookies context for the current RSC render.\n * Called by the framework's RSC entry before rendering each request.\n *\n * @deprecated Prefer runWithHeadersContext() which uses als.run() for\n * proper per-request isolation. This function mutates the ALS store\n * in-place and is only safe for cleanup (ctx=null) within an existing\n * als.run() scope.\n */\n/**\n * Returns the current live HeadersContext from ALS (or the fallback).\n * Used after applyMiddlewareRequestHeaders() to build a post-middleware\n * request context for afterFiles/fallback rewrite has/missing evaluation.\n */\nexport function getHeadersContext(): HeadersContext | null {\n return _getState().headersContext;\n}\n\nexport function setHeadersContext(ctx: HeadersContext | null): void {\n if (ctx !== null) {\n // For backward compatibility, set context on the current ALS store\n // if one exists, otherwise update the fallback. Callers should\n // migrate to runWithHeadersContext() for new-request setup.\n const existing = _als.getStore();\n if (existing) {\n existing.headersContext = ctx;\n existing.dynamicUsageDetected = false;\n existing.pendingSetCookies = [];\n existing.draftModeCookieHeader = null;\n } else {\n _fallbackState.headersContext = ctx;\n _fallbackState.dynamicUsageDetected = false;\n _fallbackState.pendingSetCookies = [];\n _fallbackState.draftModeCookieHeader = null;\n }\n return;\n }\n\n // End of request cleanup: keep the store (so consumeDynamicUsage and\n // cookie flushing can still run), but clear the request headers/cookies.\n const state = _als.getStore();\n if (state) {\n state.headersContext = null;\n } else {\n _fallbackState.headersContext = null;\n }\n}\n\n/**\n * Run a function with headers context, ensuring the context propagates\n * through all async operations (including RSC streaming).\n *\n * Uses AsyncLocalStorage.run() to guarantee per-request isolation.\n * The ALS store propagates through all async continuations including\n * ReadableStream consumption, setTimeout callbacks, and Promise chains,\n * so RSC streaming works correctly — components that render when the\n * stream is consumed still see the correct request's context.\n */\nexport function runWithHeadersContext<T>(\n ctx: HeadersContext,\n fn: () => T | Promise<T>,\n): T | Promise<T> {\n const state: VinextHeadersShimState = {\n headersContext: ctx,\n dynamicUsageDetected: false,\n pendingSetCookies: [],\n draftModeCookieHeader: null,\n };\n\n return _als.run(state, fn);\n}\n\n/**\n * Apply middleware-forwarded request headers to the current headers context.\n *\n * When Next.js middleware calls `NextResponse.next({ request: { headers } })`,\n * the modified headers are encoded as `x-middleware-request-<name>` on the\n * middleware response. This function unpacks those prefixed headers and\n * replaces the corresponding entries on the live `HeadersContext` so that\n * subsequent calls to `headers()` / `cookies()` see the middleware changes.\n */\nexport function applyMiddlewareRequestHeaders(\n middlewareResponseHeaders: Headers,\n): void {\n const state = _getState();\n if (!state.headersContext) return;\n\n const ctx = state.headersContext;\n const PREFIX = \"x-middleware-request-\";\n\n for (const [key, value] of middlewareResponseHeaders) {\n if (key.startsWith(PREFIX)) {\n const realName = key.slice(PREFIX.length);\n ctx.headers.set(realName, value);\n }\n }\n\n // If middleware modified the cookie header, rebuild the cookies map.\n const newCookieHeader = ctx.headers.get(\"cookie\");\n if (newCookieHeader !== null) {\n ctx.cookies.clear();\n for (const part of newCookieHeader.split(\";\")) {\n const [k, ...rest] = part.split(\"=\");\n if (k) {\n ctx.cookies.set(k.trim(), rest.join(\"=\").trim());\n }\n }\n }\n}\n\n/**\n * Create a HeadersContext from a standard Request object.\n */\nexport function headersContextFromRequest(request: Request): HeadersContext {\n const cookies = new Map<string, string>();\n const cookieHeader = request.headers.get(\"cookie\") || \"\";\n for (const part of cookieHeader.split(\";\")) {\n const [key, ...rest] = part.split(\"=\");\n if (key) {\n cookies.set(key.trim(), rest.join(\"=\").trim());\n }\n }\n return {\n // Copy into a mutable Headers instance. In Cloudflare Workers the original\n // Request.headers is immutable; applyMiddlewareRequestHeaders() needs to\n // call .set() on this object after middleware runs.\n headers: new Headers(request.headers),\n cookies,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Read-only Headers instance from the incoming request.\n * Returns a Promise in Next.js 15+ style (but resolves synchronously since\n * the context is already available).\n */\nexport async function headers(): Promise<Headers> {\n throwIfInsideCacheScope(\"headers()\");\n\n const state = _getState();\n if (!state.headersContext) {\n throw new Error(\n \"headers() can only be called from a Server Component, Route Handler, \" +\n \"or Server Action. Make sure you're not calling it from a Client Component.\",\n );\n }\n markDynamicUsage();\n return state.headersContext.headers;\n}\n\n/**\n * Cookie jar from the incoming request.\n * Returns a ReadonlyRequestCookies-like object.\n */\nexport async function cookies(): Promise<RequestCookies> {\n throwIfInsideCacheScope(\"cookies()\");\n\n const state = _getState();\n if (!state.headersContext) {\n throw new Error(\n \"cookies() can only be called from a Server Component, Route Handler, \" +\n \"or Server Action.\",\n );\n }\n markDynamicUsage();\n return new RequestCookies(state.headersContext.cookies);\n}\n\n// ---------------------------------------------------------------------------\n// Writable cookie accumulator for Route Handlers / Server Actions\n// ---------------------------------------------------------------------------\n\n/** Accumulated Set-Cookie headers from cookies().set() / .delete() calls */\n// (stored on _state)\n\n/**\n * Get and clear all pending Set-Cookie headers generated by cookies().set()/delete().\n * Called by the framework after rendering to attach headers to the response.\n */\nexport function getAndClearPendingCookies(): string[] {\n const state = _getState();\n const cookies = state.pendingSetCookies;\n state.pendingSetCookies = [];\n return cookies;\n}\n\n// Draft mode cookie name (matches Next.js convention)\nconst DRAFT_MODE_COOKIE = \"__prerender_bypass\";\n\n// Draft mode secret — generated once at build time via Vite `define` so the\n// __prerender_bypass cookie is consistent across all server instances (e.g.\n// multiple Cloudflare Workers isolates).\nfunction getDraftSecret(): string {\n const secret = process.env.__VINEXT_DRAFT_SECRET;\n if (!secret) {\n throw new Error(\n \"[vinext] __VINEXT_DRAFT_SECRET is not defined. \" +\n \"This should be set by the Vite plugin at build time.\",\n );\n }\n return secret;\n}\n\n// Store for Set-Cookie headers generated by draftMode().enable()/disable()\n// (stored on _state)\n\n/**\n * Get any Set-Cookie header generated by draftMode().enable()/disable().\n * Called by the framework after rendering to attach the header to the response.\n */\nexport function getDraftModeCookieHeader(): string | null {\n const state = _getState();\n const header = state.draftModeCookieHeader;\n state.draftModeCookieHeader = null;\n return header;\n}\n\ninterface DraftModeResult {\n isEnabled: boolean;\n enable(): void;\n disable(): void;\n}\n\n/**\n * Draft mode — check/toggle via a `__prerender_bypass` cookie.\n *\n * - `isEnabled`: true if the bypass cookie is present in the request\n * - `enable()`: sets the bypass cookie (for Route Handlers)\n * - `disable()`: clears the bypass cookie\n */\nexport async function draftMode(): Promise<DraftModeResult> {\n throwIfInsideCacheScope(\"draftMode()\");\n\n const state = _getState();\n const secret = getDraftSecret();\n const isEnabled = state.headersContext\n ? state.headersContext.cookies.get(DRAFT_MODE_COOKIE) === secret\n : false;\n\n return {\n isEnabled,\n enable(): void {\n if (state.headersContext) {\n state.headersContext.cookies.set(DRAFT_MODE_COOKIE, secret);\n }\n const secure = typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\" ? \"; Secure\" : \"\";\n state.draftModeCookieHeader =\n `${DRAFT_MODE_COOKIE}=${secret}; Path=/; HttpOnly; SameSite=Lax${secure}`;\n },\n disable(): void {\n if (state.headersContext) {\n state.headersContext.cookies.delete(DRAFT_MODE_COOKIE);\n }\n const secure = typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\" ? \"; Secure\" : \"\";\n state.draftModeCookieHeader =\n `${DRAFT_MODE_COOKIE}=; Path=/; HttpOnly; SameSite=Lax${secure}; Max-Age=0`;\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Cookie name/value validation (RFC 6265)\n// ---------------------------------------------------------------------------\n\n/**\n * RFC 6265 §4.1.1: cookie-name is a token (RFC 2616 §2.2).\n * Allowed: any visible ASCII (0x21-0x7E) except separators: ()<>@,;:\\\"/[]?={}\n */\nconst VALID_COOKIE_NAME_RE = /^[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2E\\x30-\\x39\\x41-\\x5A\\x5E-\\x7A\\x7C\\x7E]+$/;\n\nfunction validateCookieName(name: string): void {\n if (!name || !VALID_COOKIE_NAME_RE.test(name)) {\n throw new Error(`Invalid cookie name: ${JSON.stringify(name)}`);\n }\n}\n\n/**\n * Validate cookie attribute values (path, domain) to prevent injection\n * via semicolons, newlines, or other control characters.\n */\nfunction validateCookieAttributeValue(value: string, attributeName: string): void {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if (code <= 0x1F || code === 0x7F || value[i] === \";\") {\n throw new Error(`Invalid cookie ${attributeName} value: ${JSON.stringify(value)}`);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// RequestCookies implementation\n// ---------------------------------------------------------------------------\n\nclass RequestCookies {\n private _cookies: Map<string, string>;\n\n constructor(cookies: Map<string, string>) {\n this._cookies = cookies;\n }\n\n get(name: string): { name: string; value: string } | undefined {\n const value = this._cookies.get(name);\n if (value === undefined) return undefined;\n return { name, value };\n }\n\n getAll(): Array<{ name: string; value: string }> {\n const result: Array<{ name: string; value: string }> = [];\n for (const [name, value] of this._cookies) {\n result.push({ name, value });\n }\n return result;\n }\n\n has(name: string): boolean {\n return this._cookies.has(name);\n }\n\n /**\n * Set a cookie. In Route Handlers and Server Actions, this produces\n * a Set-Cookie header on the response.\n */\n set(\n nameOrOptions: string | { name: string; value: string; path?: string; domain?: string; maxAge?: number; expires?: Date; httpOnly?: boolean; secure?: boolean; sameSite?: \"Strict\" | \"Lax\" | \"None\" },\n value?: string,\n options?: { path?: string; domain?: string; maxAge?: number; expires?: Date; httpOnly?: boolean; secure?: boolean; sameSite?: \"Strict\" | \"Lax\" | \"None\" },\n ): this {\n let cookieName: string;\n let cookieValue: string;\n let opts: typeof options;\n\n if (typeof nameOrOptions === \"string\") {\n cookieName = nameOrOptions;\n cookieValue = value ?? \"\";\n opts = options;\n } else {\n cookieName = nameOrOptions.name;\n cookieValue = nameOrOptions.value;\n opts = nameOrOptions;\n }\n\n validateCookieName(cookieName);\n\n // Update the local cookie map\n this._cookies.set(cookieName, cookieValue);\n\n // Build Set-Cookie header string\n const parts = [`${cookieName}=${encodeURIComponent(cookieValue)}`];\n if (opts?.path) {\n validateCookieAttributeValue(opts.path, \"Path\");\n parts.push(`Path=${opts.path}`);\n }\n if (opts?.domain) {\n validateCookieAttributeValue(opts.domain, \"Domain\");\n parts.push(`Domain=${opts.domain}`);\n }\n if (opts?.maxAge !== undefined) parts.push(`Max-Age=${opts.maxAge}`);\n if (opts?.expires) parts.push(`Expires=${opts.expires.toUTCString()}`);\n if (opts?.httpOnly) parts.push(\"HttpOnly\");\n if (opts?.secure) parts.push(\"Secure\");\n if (opts?.sameSite) parts.push(`SameSite=${opts.sameSite}`);\n\n _getState().pendingSetCookies.push(parts.join(\"; \"));\n return this;\n }\n\n /**\n * Delete a cookie by setting it with Max-Age=0.\n */\n delete(name: string): this {\n validateCookieName(name);\n this._cookies.delete(name);\n _getState().pendingSetCookies.push(`${name}=; Path=/; Max-Age=0`);\n return this;\n }\n\n get size(): number {\n return this._cookies.size;\n }\n\n [Symbol.iterator](): IterableIterator<[string, { name: string; value: string }]> {\n const entries = this._cookies.entries();\n const iter: IterableIterator<[string, { name: string; value: string }]> = {\n [Symbol.iterator]() { return iter; },\n next() {\n const { value, done } = entries.next();\n if (done) return { value: undefined, done: true };\n const [name, val] = value;\n return { value: [name, { name, value: val }], done: false };\n },\n };\n return iter;\n }\n\n toString(): string {\n const parts: string[] = [];\n for (const [name, value] of this._cookies) {\n parts.push(`${name}=${value}`);\n }\n return parts.join(\"; \");\n }\n}\n\n// Re-export types\nexport type { RequestCookies };\n"]}
|
package/dist/shims/metadata.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export declare function resolveModuleViewport(mod: Record<string, unknown>, para
|
|
|
28
28
|
* Merge viewport configs from multiple sources (layouts + page).
|
|
29
29
|
* Later entries override earlier ones.
|
|
30
30
|
*/
|
|
31
|
+
export declare const DEFAULT_VIEWPORT: Viewport;
|
|
31
32
|
export declare function mergeViewport(viewportList: Viewport[]): Viewport;
|
|
32
33
|
/**
|
|
33
34
|
* React component that renders viewport meta tags into <head>.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/shims/metadata.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/shims/metadata.tsx"],"names":[],"mappings":"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"}
|
package/dist/shims/metadata.js
CHANGED
|
@@ -28,8 +28,12 @@ export async function resolveModuleViewport(mod, params) {
|
|
|
28
28
|
* Merge viewport configs from multiple sources (layouts + page).
|
|
29
29
|
* Later entries override earlier ones.
|
|
30
30
|
*/
|
|
31
|
+
export const DEFAULT_VIEWPORT = {
|
|
32
|
+
width: "device-width",
|
|
33
|
+
initialScale: 1,
|
|
34
|
+
};
|
|
31
35
|
export function mergeViewport(viewportList) {
|
|
32
|
-
const merged = {};
|
|
36
|
+
const merged = { ...DEFAULT_VIEWPORT };
|
|
33
37
|
for (const vp of viewportList) {
|
|
34
38
|
Object.assign(merged, vp);
|
|
35
39
|
}
|