vinext 0.0.26 → 0.0.27

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.
Files changed (196) hide show
  1. package/README.md +89 -85
  2. package/dist/build/static-export.d.ts.map +1 -1
  3. package/dist/build/static-export.js +3 -8
  4. package/dist/build/static-export.js.map +1 -1
  5. package/dist/check.d.ts.map +1 -1
  6. package/dist/check.js +152 -48
  7. package/dist/check.js.map +1 -1
  8. package/dist/cli.js +10 -11
  9. package/dist/cli.js.map +1 -1
  10. package/dist/cloudflare/kv-cache-handler.d.ts +32 -1
  11. package/dist/cloudflare/kv-cache-handler.d.ts.map +1 -1
  12. package/dist/cloudflare/kv-cache-handler.js +47 -21
  13. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  14. package/dist/cloudflare/tpr.d.ts.map +1 -1
  15. package/dist/cloudflare/tpr.js +15 -4
  16. package/dist/cloudflare/tpr.js.map +1 -1
  17. package/dist/config/config-matchers.d.ts +27 -0
  18. package/dist/config/config-matchers.d.ts.map +1 -1
  19. package/dist/config/config-matchers.js +306 -60
  20. package/dist/config/config-matchers.js.map +1 -1
  21. package/dist/config/dotenv.d.ts.map +1 -1
  22. package/dist/config/dotenv.js +1 -6
  23. package/dist/config/dotenv.js.map +1 -1
  24. package/dist/config/next-config.d.ts +7 -0
  25. package/dist/config/next-config.d.ts.map +1 -1
  26. package/dist/config/next-config.js +44 -19
  27. package/dist/config/next-config.js.map +1 -1
  28. package/dist/deploy.d.ts.map +1 -1
  29. package/dist/deploy.js +36 -19
  30. package/dist/deploy.js.map +1 -1
  31. package/dist/entries/app-rsc-entry.d.ts.map +1 -1
  32. package/dist/entries/app-rsc-entry.js +89 -38
  33. package/dist/entries/app-rsc-entry.js.map +1 -1
  34. package/dist/entries/pages-client-entry.d.ts.map +1 -1
  35. package/dist/entries/pages-client-entry.js +5 -3
  36. package/dist/entries/pages-client-entry.js.map +1 -1
  37. package/dist/entries/pages-server-entry.d.ts.map +1 -1
  38. package/dist/entries/pages-server-entry.js +32 -10
  39. package/dist/entries/pages-server-entry.js.map +1 -1
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +204 -118
  43. package/dist/index.js.map +1 -1
  44. package/dist/init.d.ts.map +1 -1
  45. package/dist/init.js +6 -5
  46. package/dist/init.js.map +1 -1
  47. package/dist/routing/app-router.d.ts +2 -0
  48. package/dist/routing/app-router.d.ts.map +1 -1
  49. package/dist/routing/app-router.js +10 -18
  50. package/dist/routing/app-router.js.map +1 -1
  51. package/dist/routing/file-matcher.d.ts.map +1 -1
  52. package/dist/routing/file-matcher.js.map +1 -1
  53. package/dist/routing/pages-router.d.ts +2 -0
  54. package/dist/routing/pages-router.d.ts.map +1 -1
  55. package/dist/routing/pages-router.js +8 -5
  56. package/dist/routing/pages-router.js.map +1 -1
  57. package/dist/routing/utils.d.ts.map +1 -1
  58. package/dist/routing/utils.js.map +1 -1
  59. package/dist/server/api-handler.d.ts.map +1 -1
  60. package/dist/server/api-handler.js +7 -2
  61. package/dist/server/api-handler.js.map +1 -1
  62. package/dist/server/app-router-entry.d.ts +3 -2
  63. package/dist/server/app-router-entry.d.ts.map +1 -1
  64. package/dist/server/app-router-entry.js +8 -4
  65. package/dist/server/app-router-entry.js.map +1 -1
  66. package/dist/server/dev-module-runner.d.ts.map +1 -1
  67. package/dist/server/dev-module-runner.js +1 -1
  68. package/dist/server/dev-module-runner.js.map +1 -1
  69. package/dist/server/dev-origin-check.d.ts.map +1 -1
  70. package/dist/server/dev-origin-check.js.map +1 -1
  71. package/dist/server/dev-server.d.ts.map +1 -1
  72. package/dist/server/dev-server.js +30 -18
  73. package/dist/server/dev-server.js.map +1 -1
  74. package/dist/server/image-optimization.d.ts.map +1 -1
  75. package/dist/server/image-optimization.js.map +1 -1
  76. package/dist/server/instrumentation.js +1 -1
  77. package/dist/server/instrumentation.js.map +1 -1
  78. package/dist/server/isr-cache.d.ts +13 -1
  79. package/dist/server/isr-cache.d.ts.map +1 -1
  80. package/dist/server/isr-cache.js +10 -1
  81. package/dist/server/isr-cache.js.map +1 -1
  82. package/dist/server/metadata-routes.d.ts.map +1 -1
  83. package/dist/server/metadata-routes.js +6 -18
  84. package/dist/server/metadata-routes.js.map +1 -1
  85. package/dist/server/middleware-codegen.d.ts.map +1 -1
  86. package/dist/server/middleware-codegen.js +12 -10
  87. package/dist/server/middleware-codegen.js.map +1 -1
  88. package/dist/server/middleware-request-headers.d.ts +9 -0
  89. package/dist/server/middleware-request-headers.d.ts.map +1 -0
  90. package/dist/server/middleware-request-headers.js +77 -0
  91. package/dist/server/middleware-request-headers.js.map +1 -0
  92. package/dist/server/middleware.d.ts.map +1 -1
  93. package/dist/server/middleware.js +38 -19
  94. package/dist/server/middleware.js.map +1 -1
  95. package/dist/server/normalize-path.js.map +1 -1
  96. package/dist/server/prod-server.d.ts +1 -1
  97. package/dist/server/prod-server.d.ts.map +1 -1
  98. package/dist/server/prod-server.js +53 -38
  99. package/dist/server/prod-server.js.map +1 -1
  100. package/dist/server/request-pipeline.d.ts +2 -1
  101. package/dist/server/request-pipeline.d.ts.map +1 -1
  102. package/dist/server/request-pipeline.js +5 -7
  103. package/dist/server/request-pipeline.js.map +1 -1
  104. package/dist/shims/cache-runtime.d.ts.map +1 -1
  105. package/dist/shims/cache-runtime.js +21 -16
  106. package/dist/shims/cache-runtime.js.map +1 -1
  107. package/dist/shims/cache.d.ts.map +1 -1
  108. package/dist/shims/cache.js +18 -17
  109. package/dist/shims/cache.js.map +1 -1
  110. package/dist/shims/constants.d.ts.map +1 -1
  111. package/dist/shims/constants.js +1 -6
  112. package/dist/shims/constants.js.map +1 -1
  113. package/dist/shims/dynamic.d.ts.map +1 -1
  114. package/dist/shims/dynamic.js +1 -1
  115. package/dist/shims/dynamic.js.map +1 -1
  116. package/dist/shims/error-boundary.d.ts.map +1 -1
  117. package/dist/shims/error-boundary.js +2 -3
  118. package/dist/shims/error-boundary.js.map +1 -1
  119. package/dist/shims/error.d.ts.map +1 -1
  120. package/dist/shims/error.js +1 -3
  121. package/dist/shims/error.js.map +1 -1
  122. package/dist/shims/fetch-cache.d.ts.map +1 -1
  123. package/dist/shims/fetch-cache.js +53 -29
  124. package/dist/shims/fetch-cache.js.map +1 -1
  125. package/dist/shims/font-google-base.d.ts.map +1 -1
  126. package/dist/shims/font-google-base.js +16 -4
  127. package/dist/shims/font-google-base.js.map +1 -1
  128. package/dist/shims/font-google.d.ts +1 -1
  129. package/dist/shims/font-google.d.ts.map +1 -1
  130. package/dist/shims/font-google.generated.d.ts.map +1 -1
  131. package/dist/shims/font-google.generated.js +412 -206
  132. package/dist/shims/font-google.generated.js.map +1 -1
  133. package/dist/shims/font-google.js +1 -1
  134. package/dist/shims/font-google.js.map +1 -1
  135. package/dist/shims/font-local.d.ts.map +1 -1
  136. package/dist/shims/font-local.js +13 -3
  137. package/dist/shims/font-local.js.map +1 -1
  138. package/dist/shims/form.d.ts.map +1 -1
  139. package/dist/shims/form.js +2 -2
  140. package/dist/shims/form.js.map +1 -1
  141. package/dist/shims/head.d.ts.map +1 -1
  142. package/dist/shims/head.js +10 -8
  143. package/dist/shims/head.js.map +1 -1
  144. package/dist/shims/headers.d.ts +23 -5
  145. package/dist/shims/headers.d.ts.map +1 -1
  146. package/dist/shims/headers.js +97 -37
  147. package/dist/shims/headers.js.map +1 -1
  148. package/dist/shims/image.d.ts.map +1 -1
  149. package/dist/shims/image.js +35 -8
  150. package/dist/shims/image.js.map +1 -1
  151. package/dist/shims/legacy-image.d.ts.map +1 -1
  152. package/dist/shims/legacy-image.js +1 -1
  153. package/dist/shims/legacy-image.js.map +1 -1
  154. package/dist/shims/link.d.ts.map +1 -1
  155. package/dist/shims/link.js +29 -15
  156. package/dist/shims/link.js.map +1 -1
  157. package/dist/shims/metadata.d.ts +12 -2
  158. package/dist/shims/metadata.d.ts.map +1 -1
  159. package/dist/shims/metadata.js +10 -8
  160. package/dist/shims/metadata.js.map +1 -1
  161. package/dist/shims/navigation-state.d.ts.map +1 -1
  162. package/dist/shims/navigation-state.js +3 -2
  163. package/dist/shims/navigation-state.js.map +1 -1
  164. package/dist/shims/navigation.d.ts.map +1 -1
  165. package/dist/shims/navigation.js +26 -19
  166. package/dist/shims/navigation.js.map +1 -1
  167. package/dist/shims/request-context.d.ts +50 -0
  168. package/dist/shims/request-context.d.ts.map +1 -0
  169. package/dist/shims/request-context.js +59 -0
  170. package/dist/shims/request-context.js.map +1 -0
  171. package/dist/shims/router-state.d.ts.map +1 -1
  172. package/dist/shims/router-state.js +2 -1
  173. package/dist/shims/router-state.js.map +1 -1
  174. package/dist/shims/router.d.ts.map +1 -1
  175. package/dist/shims/router.js +18 -25
  176. package/dist/shims/router.js.map +1 -1
  177. package/dist/shims/script.d.ts.map +1 -1
  178. package/dist/shims/script.js.map +1 -1
  179. package/dist/shims/server.d.ts +13 -0
  180. package/dist/shims/server.d.ts.map +1 -1
  181. package/dist/shims/server.js +100 -34
  182. package/dist/shims/server.js.map +1 -1
  183. package/dist/shims/url-utils.d.ts.map +1 -1
  184. package/dist/shims/url-utils.js +1 -3
  185. package/dist/shims/url-utils.js.map +1 -1
  186. package/dist/utils/base-path.d.ts +17 -0
  187. package/dist/utils/base-path.d.ts.map +1 -0
  188. package/dist/utils/base-path.js +25 -0
  189. package/dist/utils/base-path.js.map +1 -0
  190. package/dist/utils/project.d.ts.map +1 -1
  191. package/dist/utils/project.js +2 -4
  192. package/dist/utils/project.js.map +1 -1
  193. package/dist/utils/query.d.ts.map +1 -1
  194. package/dist/utils/query.js +3 -1
  195. package/dist/utils/query.js.map +1 -1
  196. package/package.json +47 -33
@@ -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 */\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 markDynamicUsage();\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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,yCAAyC,EAAE,MAAM,yCAAyC,CAAC;AAkBpG,QAAQ;AACR,uEAAuE;AACvE,sEAAsE;AACtE,2EAA2E;AAC3E,oCAAoC;AACpC,6EAA6E;AAC7E,yCAAyC;AACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AACpE,MAAM,EAAE,GAAG,UAAqD,CAAC;AACjE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;IACxB,IAAI,iBAAiB,EAA0B,CAA8C,CAAC;AAEhG,MAAM,cAAc,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK;IAC5C,cAAc,EAAE,IAAI;IACpB,oBAAoB,EAAE,KAAK;IAC3B,iBAAiB,EAAE,EAAE;IACrB,qBAAqB,EAAE,IAAI;CACK,CAA2B,CAAC;AAE9D,SAAS,SAAS;IAChB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,OAAO,KAAK,IAAI,cAAc,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,qBAAqB;AAErB;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,SAAS,EAAE,CAAC,oBAAoB,GAAG,IAAI,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAC9E,mFAAmF;AACnF,kFAAkF;AAClF,8EAA8E;AAE9E,iFAAiF;AACjF,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AACxE,4EAA4E;AAC5E,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AACvE,MAAM,SAAS,GAAG,UAAqD,CAAC;AAExE,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,SAAS,CAAC,kBAAkB,CAA2C,CAAC;IACpF,OAAO,GAAG,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,sBAAsB;IAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,uBAAuB,CAA2C,CAAC;IACzF,OAAO,GAAG,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,KAAK,OAAO,0CAA0C;YACpD,0DAA0D,OAAO,KAAK;YACtE,oDAAoD,CACvD,CAAC;IACJ,CAAC;IACD,IAAI,sBAAsB,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,KAAK,OAAO,0EAA0E;YACpF,0DAA0D,OAAO,KAAK;YACtE,oDAAoD,CACvD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC;IACxC,KAAK,CAAC,oBAAoB,GAAG,KAAK,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,SAAS,EAAE,CAAC,cAAc,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAA0B;IAC1D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,mEAAmE;QACnE,+DAA+D;QAC/D,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC;YAC9B,QAAQ,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACtC,QAAQ,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAChC,QAAQ,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,cAAc,GAAG,GAAG,CAAC;YACpC,cAAc,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAC5C,cAAc,CAAC,iBAAiB,GAAG,EAAE,CAAC;YACtC,cAAc,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAC9C,CAAC;QACD,OAAO;IACT,CAAC;IAED,qEAAqE;IACrE,yEAAyE;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,cAAc,GAAG,IAAI,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAmB,EACnB,EAAwB;IAExB,MAAM,KAAK,GAA2B;QACpC,cAAc,EAAE,GAAG;QACnB,oBAAoB,EAAE,KAAK;QAC3B,iBAAiB,EAAE,EAAE;QACrB,qBAAqB,EAAE,IAAI;KAC5B,CAAC;IAEF,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,6BAA6B,CAAC,yBAAkC;IAC9E,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,cAAc;QAAE,OAAO;IAElC,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC;IACjC,MAAM,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,yCAAyC,CAC3D,GAAG,CAAC,OAAO,EACX,yBAAyB,CAC1B,CAAC;IAEF,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,GAAG,CAAC,OAAO,GAAG,WAAW,CAAC;IAC1B,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,oBAAoB,KAAK,gBAAgB;QAAE,OAAO;IAEtD,qEAAqE;IACrE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACpB,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,8EAA8E;IAC9E,6BAA6B;IAC7B,8EAA8E;IAC9E,iEAAiE;IACjE,IAAI,QAAQ,GAAmB,IAAI,CAAC;IAEpC,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QAC9C,GAAG,CAAC,MAAM,EAAE,IAAqB,EAAE,QAAQ;YACzC,+CAA+C;YAC/C,MAAM,GAAG,GAAG,QAAQ,IAAI,MAAM,CAAC;YAE/B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,0DAA0D;YAC1D,IAAI,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;oBAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,QAAQ,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;oBACjC,CAAC;oBACD,OAAQ,QAAQ,CAAC,IAAmC,CAAkC,CACpF,GAAG,IAAI,CACR,CAAC;gBACJ,CAAC,CAAC;YACJ,CAAC;YAED,2DAA2D;YAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC1C,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,CAAC;KACF,CAAY,CAAC;IAEd,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAC9E,wEAAwE;IACxE,8EAA8E;IAC9E,IAAI,QAAQ,GAA+B,IAAI,CAAC;IAEhD,SAAS,UAAU;QACjB,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrC,2EAA2E;QAC3E,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,GAAG,EAAE,CAAC;gBACR,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,iEAAiE;IACjE,MAAM,GAAG,GAAG;QACV,OAAO,EAAE,YAAY;QACrB,IAAI,OAAO;YACT,OAAO,UAAU,EAAE,CAAC;QACtB,CAAC;KACuB,CAAC;IAE3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,uEAAuE;YACrE,4EAA4E,CAC/E,CAAC;IACJ,CAAC;IACD,gBAAgB,EAAE,CAAC;IACnB,OAAO,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,uEAAuE,GAAG,mBAAmB,CAC9F,CAAC;IACJ,CAAC;IACD,gBAAgB,EAAE,CAAC;IACnB,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E,4EAA4E;AAC5E,qBAAqB;AAErB;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACxC,KAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sDAAsD;AACtD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAE/C,4EAA4E;AAC5E,4EAA4E;AAC5E,yCAAyC;AACzC,SAAS,cAAc;IACrB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,iDAAiD;YAC/C,sDAAsD,CACzD,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2EAA2E;AAC3E,qBAAqB;AAErB;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC;IAC3C,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACvC,gBAAgB,EAAE,CAAC;IAEnB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc;QACpC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,MAAM;QAChE,CAAC,CAAC,KAAK,CAAC;IAEV,OAAO;QACL,SAAS;QACT,MAAM;YACJ,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,MAAM,GACV,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,KAAK,CAAC,qBAAqB,GAAG,GAAG,iBAAiB,IAAI,MAAM,mCAAmC,MAAM,EAAE,CAAC;QAC1G,CAAC;QACD,OAAO;YACL,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,MAAM,GACV,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,KAAK,CAAC,qBAAqB,GAAG,GAAG,iBAAiB,oCAAoC,MAAM,aAAa,CAAC;QAC5G,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,oBAAoB,GACxB,uEAAuE,CAAC;AAE1E,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,4BAA4B,CAAC,KAAa,EAAE,aAAqB;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,kBAAkB,aAAa,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,MAAM,cAAc;IACV,QAAQ,CAAsB;IAEtC,YAAY,OAA4B;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAA2C,EAAE,CAAC;QAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,GAAG,CACD,aAYK,EACL,KAAc,EACd,OAQC;QAED,IAAI,UAAkB,CAAC;QACvB,IAAI,WAAmB,CAAC;QACxB,IAAI,IAAoB,CAAC;QAEzB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtC,UAAU,GAAG,aAAa,CAAC;YAC3B,WAAW,GAAG,KAAK,IAAI,EAAE,CAAC;YAC1B,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC;YAChC,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC;YAClC,IAAI,GAAG,aAAa,CAAC;QACvB,CAAC;QAED,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAE/B,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAE3C,iCAAiC;QACjC,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACf,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;YACjB,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,IAAI,IAAI,EAAE,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,IAAI,EAAE,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,IAAI,EAAE,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,IAAI,EAAE,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5D,SAAS,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY;QACjB,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,SAAS,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,IAAI,GAAgE;YACxE,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI;gBACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBACvC,IAAI,IAAI;oBAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1B,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAC9D,CAAC;SACF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF","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\";\nimport { buildRequestHeadersFromMiddlewareResponse } from \"../server/middleware-request-headers.js\";\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] ??=\n 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()` or `NextResponse.rewrite()`\n * with `{ request: { headers } }`, the modified headers are encoded on the\n * middleware response. This function decodes that protocol and applies the\n * resulting request header set to the live `HeadersContext`. When an override\n * list is present, omitted headers are deleted as part of the rebuild.\n */\nexport function applyMiddlewareRequestHeaders(middlewareResponseHeaders: Headers): void {\n const state = _getState();\n if (!state.headersContext) return;\n\n const ctx = state.headersContext;\n const previousCookieHeader = ctx.headers.get(\"cookie\");\n const nextHeaders = buildRequestHeadersFromMiddlewareResponse(\n ctx.headers,\n middlewareResponseHeaders,\n );\n\n if (!nextHeaders) return;\n\n ctx.headers = nextHeaders;\n const nextCookieHeader = nextHeaders.get(\"cookie\");\n if (previousCookieHeader === nextCookieHeader) return;\n\n // If middleware modified the cookie header, rebuild the cookies map.\n ctx.cookies.clear();\n if (nextCookieHeader !== null) {\n for (const part of nextCookieHeader.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/** Methods on `Headers` that mutate state. Hoisted to module scope — static. */\nconst _HEADERS_MUTATING_METHODS = new Set([\"set\", \"delete\", \"append\"]);\n\n/**\n * Create a HeadersContext from a standard Request object.\n *\n * Performance note: In Workerd (Cloudflare Workers), `new Headers(request.headers)`\n * copies the entire header map across the V8/C++ boundary, which shows up as\n * ~815 ms self-time in production profiles when requests carry many headers.\n * We defer this copy with a lazy proxy:\n *\n * - Reads (`get`, `has`, `entries`, …) are forwarded directly to the original\n * immutable `request.headers` — zero copy cost on the hot path.\n * - The first mutating call (`set`, `delete`, `append`) materialises\n * `new Headers(request.headers)` once, then applies the mutation to the copy.\n * All subsequent operations go to the copy.\n *\n * This means the ~815 ms copy only occurs when middleware actually rewrites\n * request headers via `NextResponse.next({ request: { headers } })`, which is\n * uncommon. Pure read requests (the vast majority) pay zero copy cost.\n *\n * Cookie parsing is also deferred: the `cookie` header string is not split\n * until the first call to `cookies()` or `draftMode()`.\n */\nexport function headersContextFromRequest(request: Request): HeadersContext {\n // ---------------------------------------------------------------------------\n // Lazy mutable Headers proxy\n // ---------------------------------------------------------------------------\n // `_mutable` holds the materialised copy once a write is needed.\n let _mutable: Headers | null = null;\n\n const headersProxy = new Proxy(request.headers, {\n get(target, prop: string | symbol, receiver) {\n // Route to the materialised copy if it exists.\n const src = _mutable ?? target;\n\n if (typeof prop !== \"string\") {\n return Reflect.get(src, prop, receiver);\n }\n\n // Intercept mutating methods: materialise on first write.\n if (_HEADERS_MUTATING_METHODS.has(prop)) {\n return (...args: unknown[]) => {\n if (!_mutable) {\n _mutable = new Headers(target);\n }\n return (_mutable[prop as \"set\" | \"delete\" | \"append\"] as (...a: unknown[]) => unknown)(\n ...args,\n );\n };\n }\n\n // Non-mutating method or property: bind to current source.\n const value = Reflect.get(src, prop, src);\n return typeof value === \"function\" ? value.bind(src) : value;\n },\n }) as Headers;\n\n // ---------------------------------------------------------------------------\n // Lazy cookie map\n // ---------------------------------------------------------------------------\n // Parsing cookies requires splitting on `;` and `=`, which is cheap but\n // still unnecessary overhead if `cookies()` is never called for this request.\n let _cookies: Map<string, string> | null = null;\n\n function getCookies(): Map<string, string> {\n if (_cookies) return _cookies;\n _cookies = new Map<string, string>();\n // Read from the proxy so middleware-modified cookie headers are respected.\n const cookieHeader = headersProxy.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 _cookies;\n }\n\n // Expose cookies as a lazy getter that memoises on first access.\n const ctx = {\n headers: headersProxy,\n get cookies(): Map<string, string> {\n return getCookies();\n },\n } satisfies HeadersContext;\n\n return ctx;\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, \" + \"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 markDynamicUsage();\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 =\n typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\" ? \"; Secure\" : \"\";\n state.draftModeCookieHeader = `${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 =\n typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\" ? \"; Secure\" : \"\";\n state.draftModeCookieHeader = `${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 =\n /^[\\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:\n | string\n | {\n name: string;\n value: string;\n path?: string;\n domain?: string;\n maxAge?: number;\n expires?: Date;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n },\n value?: string,\n options?: {\n path?: string;\n domain?: string;\n maxAge?: number;\n expires?: Date;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n },\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]() {\n return iter;\n },\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 +1 @@
1
- {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/shims/image.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAI1C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuED,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AA2CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,MAAM,CAE7F;AAeD,QAAA,MAAM,KAAK,qFAuKT,CAAC;AAEH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG;IAChD,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;CAClD,CA8FA;AAED,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/shims/image.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAI1C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAyED,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AA2CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,MAAM,CAE7F;AAgBD,QAAA,MAAM,KAAK,qFAwLT,CAAC;AAEH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG;IAChD,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;CAClD,CA8GA;AAED,eAAe,KAAK,CAAC"}
@@ -156,7 +156,14 @@ const Image = forwardRef(function Image({ src: srcProp, alt, width, height, fill
156
156
  if (loader) {
157
157
  const resolvedSrc = loader({ src, width: imgWidth ?? 0, quality: quality ?? 75 });
158
158
  return (_jsx("img", { ref: ref, src: resolvedSrc, alt: alt, width: fill ? undefined : imgWidth, height: fill ? undefined : imgHeight, loading: priority ? "eager" : (loading ?? "lazy"), decoding: "async", sizes: sizes, className: className, style: fill
159
- ? { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", ...style }
159
+ ? {
160
+ position: "absolute",
161
+ inset: 0,
162
+ width: "100%",
163
+ height: "100%",
164
+ objectFit: "cover",
165
+ ...style,
166
+ }
160
167
  : style, ...rest }));
161
168
  }
162
169
  // For remote URLs, validate against remotePatterns then use @unpic/react
@@ -174,9 +181,7 @@ const Image = forwardRef(function Image({ src: srcProp, alt, width, height, fill
174
181
  }
175
182
  }
176
183
  const sanitizedBlur = imgBlurDataURL ? sanitizeBlurDataURL(imgBlurDataURL) : undefined;
177
- const bg = placeholder === "blur" && sanitizedBlur
178
- ? `url(${sanitizedBlur})`
179
- : undefined;
184
+ const bg = placeholder === "blur" && sanitizedBlur ? `url(${sanitizedBlur})` : undefined;
180
185
  if (fill) {
181
186
  return (_jsx(UnpicImage, { src: src, alt: alt, layout: "fullWidth", priority: priority, sizes: sizes, className: className, background: bg }));
182
187
  }
@@ -201,7 +206,9 @@ const Image = forwardRef(function Image({ src: srcProp, alt, width, height, fill
201
206
  const srcSet = imgWidth && !fill && !skipOptimization
202
207
  ? generateSrcSet(src, imgWidth, imgQuality)
203
208
  : imgWidth && !fill
204
- ? RESPONSIVE_WIDTHS.filter((w) => w <= imgWidth * 2).map((w) => `${src} ${w}w`).join(", ") || `${src} ${imgWidth}w`
209
+ ? RESPONSIVE_WIDTHS.filter((w) => w <= imgWidth * 2)
210
+ .map((w) => `${src} ${w}w`)
211
+ .join(", ") || `${src} ${imgWidth}w`
205
212
  : undefined;
206
213
  // The main `src` also goes through the optimization endpoint. Use the
207
214
  // declared width (or the first responsive width as fallback).
@@ -224,7 +231,15 @@ const Image = forwardRef(function Image({ src: srcProp, alt, width, height, fill
224
231
  // For local images, render a standard <img> tag with srcSet and blur support.
225
232
  // The src and srcSet point to the /_vinext/image optimization endpoint.
226
233
  return (_jsx("img", { ref: ref, src: optimizedSrc, alt: alt, width: fill ? undefined : imgWidth, height: fill ? undefined : imgHeight, loading: priority ? "eager" : (loading ?? "lazy"), fetchPriority: priority ? "high" : undefined, decoding: "async", srcSet: srcSet, sizes: sizes ?? (fill ? "100vw" : undefined), className: className, "data-nimg": fill ? "fill" : "1", style: fill
227
- ? { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", ...blurStyle, ...style }
234
+ ? {
235
+ position: "absolute",
236
+ inset: 0,
237
+ width: "100%",
238
+ height: "100%",
239
+ objectFit: "cover",
240
+ ...blurStyle,
241
+ ...style,
242
+ }
228
243
  : { ...blurStyle, ...style }, ...rest }));
229
244
  });
230
245
  /**
@@ -262,7 +277,11 @@ export function getImageProps(props) {
262
277
  // When `unoptimized` is true, bypass the endpoint entirely (Next.js compat).
263
278
  // SVG sources auto-skip unless dangerouslyAllowSVG is enabled.
264
279
  const isSvg = resolvedSrc.endsWith(".svg");
265
- const skipOpt = _unoptimized === true || (isSvg && !__dangerouslyAllowSVG) || blockedInProd || !!loader || isRemoteUrl(resolvedSrc);
280
+ const skipOpt = _unoptimized === true ||
281
+ (isSvg && !__dangerouslyAllowSVG) ||
282
+ blockedInProd ||
283
+ !!loader ||
284
+ isRemoteUrl(resolvedSrc);
266
285
  const optimizedSrc = skipOpt
267
286
  ? resolvedSrc
268
287
  : imgWidth
@@ -296,7 +315,15 @@ export function getImageProps(props) {
296
315
  className,
297
316
  "data-nimg": fill ? "fill" : "1",
298
317
  style: fill
299
- ? { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", ...blurStyle, ...style }
318
+ ? {
319
+ position: "absolute",
320
+ inset: 0,
321
+ width: "100%",
322
+ height: "100%",
323
+ objectFit: "cover",
324
+ ...blurStyle,
325
+ ...style,
326
+ }
300
327
  : { ...blurStyle, ...style },
301
328
  ...rest,
302
329
  },
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/shims/image.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/image shim\n *\n * Translates Next.js Image props to @unpic/react Image component.\n * @unpic/react auto-detects CDN from URL and uses native transforms.\n * For local images (relative paths), routes through `/_vinext/image`\n * for server-side optimization (resize, format negotiation, quality).\n *\n * Remote images are validated against `images.remotePatterns` and\n * `images.domains` from next.config.js. Unmatched URLs are blocked\n * in production and warn in development, matching Next.js behavior.\n */\nimport React, { forwardRef } from \"react\";\nimport { Image as UnpicImage } from \"@unpic/react\";\nimport { hasRemoteMatch, type RemotePattern } from \"./image-config.js\";\n\nexport interface StaticImageData {\n src: string;\n height: number;\n width: number;\n blurDataURL?: string;\n}\n\n/**\n * Image config injected at build time via Vite define.\n * Serialized as JSON — parsed once at module level.\n */\nconst __imageRemotePatterns: RemotePattern[] = (() => {\n try {\n return JSON.parse(process.env.__VINEXT_IMAGE_REMOTE_PATTERNS ?? \"[]\");\n } catch {\n return [];\n }\n})();\nconst __imageDomains: string[] = (() => {\n try {\n return JSON.parse(process.env.__VINEXT_IMAGE_DOMAINS ?? \"[]\");\n } catch {\n return [];\n }\n})();\nconst __hasImageConfig = __imageRemotePatterns.length > 0 || __imageDomains.length > 0;\nconst __isDev = process.env.NODE_ENV !== \"production\";\nconst __imageDeviceSizes: number[] = (() => {\n try {\n return JSON.parse(process.env.__VINEXT_IMAGE_DEVICE_SIZES ?? \"[640,750,828,1080,1200,1920,2048,3840]\");\n } catch {\n return [640, 750, 828, 1080, 1200, 1920, 2048, 3840];\n }\n})();\n/**\n * Whether dangerouslyAllowSVG is enabled in next.config.js.\n * When false (default), .svg sources auto-skip the optimization endpoint\n * and are served directly, matching Next.js behavior.\n * When true, .svg sources are routed through the optimizer (served as-is\n * with security headers).\n */\nconst __dangerouslyAllowSVG = process.env.__VINEXT_IMAGE_DANGEROUSLY_ALLOW_SVG === \"true\";\n/**\n * Validate that a remote URL is allowed by the configured remote patterns.\n * Returns true if the URL is allowed, false otherwise.\n *\n * When no remotePatterns/domains are configured, all remote URLs are allowed\n * (backwards-compatible — user hasn't opted into restriction).\n *\n * When patterns ARE configured, only matching URLs are allowed.\n * In development, non-matching URLs produce a console warning.\n * In production, non-matching URLs are blocked (src replaced with empty string).\n */\nfunction validateRemoteUrl(src: string): { allowed: boolean; reason?: string } {\n if (!__hasImageConfig) {\n // No image config — allow everything (backwards-compatible)\n return { allowed: true };\n }\n\n let url: URL;\n try {\n url = new URL(src, \"http://n\");\n } catch {\n return { allowed: false, reason: `Invalid URL: ${src}` };\n }\n\n if (hasRemoteMatch(__imageDomains, __imageRemotePatterns, url)) {\n return { allowed: true };\n }\n\n return {\n allowed: false,\n reason: `Image URL \"${src}\" is not configured in images.remotePatterns or images.domains in next.config.js. See: https://nextjs.org/docs/messages/next-image-unconfigured-host`,\n };\n}\n\ninterface ImageProps {\n src: string | StaticImageData;\n alt: string;\n width?: number;\n height?: number;\n fill?: boolean;\n priority?: boolean;\n quality?: number;\n placeholder?: \"blur\" | \"empty\";\n blurDataURL?: string;\n loader?: (params: { src: string; width: number; quality?: number }) => string;\n sizes?: string;\n className?: string;\n style?: React.CSSProperties;\n onLoad?: React.ReactEventHandler<HTMLImageElement>;\n onError?: React.ReactEventHandler<HTMLImageElement>;\n onClick?: React.MouseEventHandler<HTMLImageElement>;\n id?: string;\n // Accept and ignore Next.js-specific props that don't apply\n unoptimized?: boolean;\n overrideSrc?: string;\n loading?: \"lazy\" | \"eager\";\n}\n\n/**\n * Sanitize a blurDataURL to prevent CSS injection.\n *\n * A crafted data URL containing `)` can break out of the `url()` CSS function,\n * allowing injection of arbitrary CSS properties or rules. Characters like `{`,\n * `}`, and `\\` can also assist in crafting injection payloads.\n *\n * This validates the URL starts with `data:image/` and rejects characters that\n * could escape the `url()` context. Semicolons are allowed since they're part\n * of valid data URLs (`data:image/png;base64,...`) and harmless inside `url()`.\n *\n * Returns undefined for invalid URLs, which causes the blur placeholder to be\n * skipped gracefully.\n */\nfunction sanitizeBlurDataURL(url: string): string | undefined {\n // Must be a data: image URL\n if (!url.startsWith(\"data:image/\")) return undefined;\n // Reject characters that can break out of CSS url():\n // ) - closes url()\n // ( - could open nested functions\n // { } - CSS rule boundaries\n // \\ - CSS escape sequences\n // newlines - break CSS parsing\n if (/[)(}{\\\\'\"\\n\\r]/.test(url)) return undefined;\n return url;\n}\n\n/**\n * Determine if a src is a remote URL (CDN-optimizable) or local.\n */\nfunction isRemoteUrl(src: string): boolean {\n return src.startsWith(\"http://\") || src.startsWith(\"https://\") || src.startsWith(\"//\");\n}\n\n/**\n * Responsive image widths matching Next.js's device sizes config.\n * These are the breakpoints used for srcSet generation.\n * Configurable via `images.deviceSizes` in next.config.js.\n */\nconst RESPONSIVE_WIDTHS = __imageDeviceSizes;\n\n/**\n * Build a `/_vinext/image` optimization URL.\n *\n * In production (Cloudflare Workers), the worker intercepts this path and uses\n * the Images binding to resize/transcode on the fly. In dev, the Vite dev\n * server handles it as a passthrough (serves the original file).\n */\nexport function imageOptimizationUrl(src: string, width: number, quality: number = 75): string {\n return `/_vinext/image?url=${encodeURIComponent(src)}&w=${width}&q=${quality}`;\n}\n\n/**\n * Generate a srcSet string for responsive images.\n *\n * Each width points to the `/_vinext/image` optimization endpoint so the\n * server can resize and transcode the image. Only includes widths that are\n * <= 2x the original image width to avoid pointless upscaling.\n */\nfunction generateSrcSet(src: string, originalWidth: number, quality: number = 75): string {\n const widths = RESPONSIVE_WIDTHS.filter((w) => w <= originalWidth * 2);\n if (widths.length === 0) return `${imageOptimizationUrl(src, originalWidth, quality)} ${originalWidth}w`;\n return widths.map((w) => `${imageOptimizationUrl(src, w, quality)} ${w}w`).join(\", \");\n}\n\nconst Image = forwardRef<HTMLImageElement, ImageProps>(function Image(\n {\n src: srcProp,\n alt,\n width,\n height,\n fill,\n priority,\n quality,\n placeholder,\n blurDataURL,\n loader,\n sizes,\n className,\n style,\n unoptimized: _unoptimized,\n overrideSrc: _overrideSrc,\n loading,\n ...rest\n },\n ref,\n) {\n // Handle StaticImageData (import result)\n const src = typeof srcProp === \"string\" ? srcProp : srcProp.src;\n const imgWidth = width ?? (typeof srcProp === \"object\" ? srcProp.width : undefined);\n const imgHeight = height ?? (typeof srcProp === \"object\" ? srcProp.height : undefined);\n const imgBlurDataURL = blurDataURL ?? (typeof srcProp === \"object\" ? srcProp.blurDataURL : undefined);\n\n // If a custom loader is provided, use basic img with loader URL\n if (loader) {\n const resolvedSrc = loader({ src, width: imgWidth ?? 0, quality: quality ?? 75 });\n return (\n <img\n ref={ref}\n src={resolvedSrc}\n alt={alt}\n width={fill ? undefined : imgWidth}\n height={fill ? undefined : imgHeight}\n loading={priority ? \"eager\" : (loading ?? \"lazy\")}\n decoding=\"async\"\n sizes={sizes}\n className={className}\n style={\n fill\n ? { position: \"absolute\", inset: 0, width: \"100%\", height: \"100%\", objectFit: \"cover\", ...style }\n : style\n }\n {...rest}\n />\n );\n }\n\n // For remote URLs, validate against remotePatterns then use @unpic/react\n if (isRemoteUrl(src)) {\n const validation = validateRemoteUrl(src);\n if (!validation.allowed) {\n if (__isDev) {\n console.warn(`[next/image] ${validation.reason}`);\n // In dev, render the image but with a warning — matches Next.js dev behavior\n } else {\n // In production, block the image entirely\n console.error(`[next/image] ${validation.reason}`);\n return null;\n }\n }\n\n const sanitizedBlur = imgBlurDataURL ? sanitizeBlurDataURL(imgBlurDataURL) : undefined;\n const bg =\n placeholder === \"blur\" && sanitizedBlur\n ? `url(${sanitizedBlur})`\n : undefined;\n\n if (fill) {\n return (\n <UnpicImage\n src={src}\n alt={alt}\n layout=\"fullWidth\"\n priority={priority}\n sizes={sizes}\n className={className}\n background={bg}\n />\n );\n }\n // constrained layout requires width+height or aspectRatio\n if (imgWidth && imgHeight) {\n return (\n <UnpicImage\n src={src}\n alt={alt}\n width={imgWidth}\n height={imgHeight}\n layout=\"constrained\"\n priority={priority}\n sizes={sizes}\n className={className}\n background={bg}\n />\n );\n }\n // Fall through to basic <img> if dimensions not provided\n // (unpic requires them for constrained layout)\n }\n\n // Route local images through the /_vinext/image optimization endpoint.\n // In production on Cloudflare Workers, this resizes and transcodes via\n // the Images binding. In dev, it serves the original file as a passthrough.\n // When `unoptimized` is true, bypass the endpoint entirely (Next.js compat).\n // SVG sources auto-skip unless dangerouslyAllowSVG is enabled, matching\n // Next.js behavior where .svg triggers unoptimized=true by default.\n const imgQuality = quality ?? 75;\n const isSvg = src.endsWith(\".svg\");\n const skipOptimization = _unoptimized === true || (isSvg && !__dangerouslyAllowSVG);\n\n // Build srcSet for responsive local images (common breakpoints).\n // Each entry points to /_vinext/image with the appropriate width.\n const srcSet = imgWidth && !fill && !skipOptimization\n ? generateSrcSet(src, imgWidth, imgQuality)\n : imgWidth && !fill\n ? RESPONSIVE_WIDTHS.filter((w) => w <= imgWidth * 2).map((w) => `${src} ${w}w`).join(\", \") || `${src} ${imgWidth}w`\n : undefined;\n\n // The main `src` also goes through the optimization endpoint. Use the\n // declared width (or the first responsive width as fallback).\n const optimizedSrc = skipOptimization\n ? src\n : imgWidth\n ? imageOptimizationUrl(src, imgWidth, imgQuality)\n : imageOptimizationUrl(src, RESPONSIVE_WIDTHS[0], imgQuality);\n\n // Blur placeholder: show a low-quality background while the image loads.\n // Sanitize blurDataURL to prevent CSS injection via crafted data URLs.\n const sanitizedLocalBlur = imgBlurDataURL ? sanitizeBlurDataURL(imgBlurDataURL) : undefined;\n const blurStyle = placeholder === \"blur\" && sanitizedLocalBlur\n ? {\n backgroundImage: `url(${sanitizedLocalBlur})`,\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n }\n : undefined;\n\n // For local images, render a standard <img> tag with srcSet and blur support.\n // The src and srcSet point to the /_vinext/image optimization endpoint.\n return (\n <img\n ref={ref}\n src={optimizedSrc}\n alt={alt}\n width={fill ? undefined : imgWidth}\n height={fill ? undefined : imgHeight}\n loading={priority ? \"eager\" : (loading ?? \"lazy\")}\n fetchPriority={priority ? \"high\" : undefined}\n decoding=\"async\"\n srcSet={srcSet}\n sizes={sizes ?? (fill ? \"100vw\" : undefined)}\n className={className}\n data-nimg={fill ? \"fill\" : \"1\"}\n style={\n fill\n ? { position: \"absolute\", inset: 0, width: \"100%\", height: \"100%\", objectFit: \"cover\", ...blurStyle, ...style }\n : { ...blurStyle, ...style }\n }\n {...rest}\n />\n );\n});\n\n/**\n * getImageProps — for advanced use cases (picture elements, background images).\n * Returns the props that would be passed to the underlying <img> element.\n */\nexport function getImageProps(props: ImageProps): {\n props: React.ImgHTMLAttributes<HTMLImageElement>;\n} {\n const {\n src: srcProp,\n alt,\n width,\n height,\n fill,\n priority,\n quality: _quality,\n placeholder,\n blurDataURL: blurDataURLProp,\n loader,\n sizes,\n className,\n style,\n unoptimized: _unoptimized,\n overrideSrc: _overrideSrc,\n loading,\n ...rest\n } = props;\n\n const src = typeof srcProp === \"string\" ? srcProp : srcProp.src;\n const imgWidth = width ?? (typeof srcProp === \"object\" ? srcProp.width : undefined);\n const imgHeight = height ?? (typeof srcProp === \"object\" ? srcProp.height : undefined);\n const imgBlurDataURL = blurDataURLProp ?? (typeof srcProp === \"object\" ? srcProp.blurDataURL : undefined);\n\n // Validate remote URLs against configured patterns\n let blockedInProd = false;\n if (isRemoteUrl(src)) {\n const validation = validateRemoteUrl(src);\n if (!validation.allowed) {\n if (__isDev) {\n console.warn(`[next/image] ${validation.reason}`);\n } else {\n console.error(`[next/image] ${validation.reason}`);\n blockedInProd = true;\n }\n }\n }\n\n // Resolve src through custom loader if provided\n const imgQuality = _quality ?? 75;\n const resolvedSrc = blockedInProd\n ? \"\"\n : loader\n ? loader({ src, width: imgWidth ?? 0, quality: imgQuality })\n : src;\n\n // For local images (no loader, not remote), route through optimization endpoint.\n // When `unoptimized` is true, bypass the endpoint entirely (Next.js compat).\n // SVG sources auto-skip unless dangerouslyAllowSVG is enabled.\n const isSvg = resolvedSrc.endsWith(\".svg\");\n const skipOpt = _unoptimized === true || (isSvg && !__dangerouslyAllowSVG) || blockedInProd || !!loader || isRemoteUrl(resolvedSrc);\n const optimizedSrc = skipOpt\n ? resolvedSrc\n : imgWidth\n ? imageOptimizationUrl(resolvedSrc, imgWidth, imgQuality)\n : imageOptimizationUrl(resolvedSrc, RESPONSIVE_WIDTHS[0], imgQuality);\n\n // Build srcSet for local images — each width points to /_vinext/image\n const srcSet = imgWidth && !fill && !isRemoteUrl(resolvedSrc) && !loader && !skipOpt\n ? generateSrcSet(resolvedSrc, imgWidth, imgQuality)\n : undefined;\n\n // Blur placeholder styles — sanitize to prevent CSS injection\n const sanitizedBlurURL = imgBlurDataURL ? sanitizeBlurDataURL(imgBlurDataURL) : undefined;\n const blurStyle = placeholder === \"blur\" && sanitizedBlurURL\n ? {\n backgroundImage: `url(${sanitizedBlurURL})`,\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\" as const,\n backgroundPosition: \"center\" as const,\n }\n : undefined;\n\n return {\n props: {\n src: optimizedSrc,\n alt,\n width: fill ? undefined : imgWidth,\n height: fill ? undefined : imgHeight,\n loading: priority ? \"eager\" : (loading ?? \"lazy\"),\n fetchPriority: priority ? (\"high\" as const) : undefined,\n decoding: \"async\" as const,\n srcSet,\n sizes: sizes ?? (fill ? \"100vw\" : undefined),\n className,\n \"data-nimg\": fill ? \"fill\" : \"1\",\n style: fill\n ? { position: \"absolute\" as const, inset: 0, width: \"100%\", height: \"100%\", objectFit: \"cover\" as const, ...blurStyle, ...style }\n : { ...blurStyle, ...style },\n ...rest,\n } as React.ImgHTMLAttributes<HTMLImageElement>,\n };\n}\n\nexport default Image;\n"]}
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/shims/image.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/image shim\n *\n * Translates Next.js Image props to @unpic/react Image component.\n * @unpic/react auto-detects CDN from URL and uses native transforms.\n * For local images (relative paths), routes through `/_vinext/image`\n * for server-side optimization (resize, format negotiation, quality).\n *\n * Remote images are validated against `images.remotePatterns` and\n * `images.domains` from next.config.js. Unmatched URLs are blocked\n * in production and warn in development, matching Next.js behavior.\n */\nimport React, { forwardRef } from \"react\";\nimport { Image as UnpicImage } from \"@unpic/react\";\nimport { hasRemoteMatch, type RemotePattern } from \"./image-config.js\";\n\nexport interface StaticImageData {\n src: string;\n height: number;\n width: number;\n blurDataURL?: string;\n}\n\n/**\n * Image config injected at build time via Vite define.\n * Serialized as JSON — parsed once at module level.\n */\nconst __imageRemotePatterns: RemotePattern[] = (() => {\n try {\n return JSON.parse(process.env.__VINEXT_IMAGE_REMOTE_PATTERNS ?? \"[]\");\n } catch {\n return [];\n }\n})();\nconst __imageDomains: string[] = (() => {\n try {\n return JSON.parse(process.env.__VINEXT_IMAGE_DOMAINS ?? \"[]\");\n } catch {\n return [];\n }\n})();\nconst __hasImageConfig = __imageRemotePatterns.length > 0 || __imageDomains.length > 0;\nconst __isDev = process.env.NODE_ENV !== \"production\";\nconst __imageDeviceSizes: number[] = (() => {\n try {\n return JSON.parse(\n process.env.__VINEXT_IMAGE_DEVICE_SIZES ?? \"[640,750,828,1080,1200,1920,2048,3840]\",\n );\n } catch {\n return [640, 750, 828, 1080, 1200, 1920, 2048, 3840];\n }\n})();\n/**\n * Whether dangerouslyAllowSVG is enabled in next.config.js.\n * When false (default), .svg sources auto-skip the optimization endpoint\n * and are served directly, matching Next.js behavior.\n * When true, .svg sources are routed through the optimizer (served as-is\n * with security headers).\n */\nconst __dangerouslyAllowSVG = process.env.__VINEXT_IMAGE_DANGEROUSLY_ALLOW_SVG === \"true\";\n/**\n * Validate that a remote URL is allowed by the configured remote patterns.\n * Returns true if the URL is allowed, false otherwise.\n *\n * When no remotePatterns/domains are configured, all remote URLs are allowed\n * (backwards-compatible — user hasn't opted into restriction).\n *\n * When patterns ARE configured, only matching URLs are allowed.\n * In development, non-matching URLs produce a console warning.\n * In production, non-matching URLs are blocked (src replaced with empty string).\n */\nfunction validateRemoteUrl(src: string): { allowed: boolean; reason?: string } {\n if (!__hasImageConfig) {\n // No image config — allow everything (backwards-compatible)\n return { allowed: true };\n }\n\n let url: URL;\n try {\n url = new URL(src, \"http://n\");\n } catch {\n return { allowed: false, reason: `Invalid URL: ${src}` };\n }\n\n if (hasRemoteMatch(__imageDomains, __imageRemotePatterns, url)) {\n return { allowed: true };\n }\n\n return {\n allowed: false,\n reason: `Image URL \"${src}\" is not configured in images.remotePatterns or images.domains in next.config.js. See: https://nextjs.org/docs/messages/next-image-unconfigured-host`,\n };\n}\n\ninterface ImageProps {\n src: string | StaticImageData;\n alt: string;\n width?: number;\n height?: number;\n fill?: boolean;\n priority?: boolean;\n quality?: number;\n placeholder?: \"blur\" | \"empty\";\n blurDataURL?: string;\n loader?: (params: { src: string; width: number; quality?: number }) => string;\n sizes?: string;\n className?: string;\n style?: React.CSSProperties;\n onLoad?: React.ReactEventHandler<HTMLImageElement>;\n onError?: React.ReactEventHandler<HTMLImageElement>;\n onClick?: React.MouseEventHandler<HTMLImageElement>;\n id?: string;\n // Accept and ignore Next.js-specific props that don't apply\n unoptimized?: boolean;\n overrideSrc?: string;\n loading?: \"lazy\" | \"eager\";\n}\n\n/**\n * Sanitize a blurDataURL to prevent CSS injection.\n *\n * A crafted data URL containing `)` can break out of the `url()` CSS function,\n * allowing injection of arbitrary CSS properties or rules. Characters like `{`,\n * `}`, and `\\` can also assist in crafting injection payloads.\n *\n * This validates the URL starts with `data:image/` and rejects characters that\n * could escape the `url()` context. Semicolons are allowed since they're part\n * of valid data URLs (`data:image/png;base64,...`) and harmless inside `url()`.\n *\n * Returns undefined for invalid URLs, which causes the blur placeholder to be\n * skipped gracefully.\n */\nfunction sanitizeBlurDataURL(url: string): string | undefined {\n // Must be a data: image URL\n if (!url.startsWith(\"data:image/\")) return undefined;\n // Reject characters that can break out of CSS url():\n // ) - closes url()\n // ( - could open nested functions\n // { } - CSS rule boundaries\n // \\ - CSS escape sequences\n // newlines - break CSS parsing\n if (/[)(}{\\\\'\"\\n\\r]/.test(url)) return undefined;\n return url;\n}\n\n/**\n * Determine if a src is a remote URL (CDN-optimizable) or local.\n */\nfunction isRemoteUrl(src: string): boolean {\n return src.startsWith(\"http://\") || src.startsWith(\"https://\") || src.startsWith(\"//\");\n}\n\n/**\n * Responsive image widths matching Next.js's device sizes config.\n * These are the breakpoints used for srcSet generation.\n * Configurable via `images.deviceSizes` in next.config.js.\n */\nconst RESPONSIVE_WIDTHS = __imageDeviceSizes;\n\n/**\n * Build a `/_vinext/image` optimization URL.\n *\n * In production (Cloudflare Workers), the worker intercepts this path and uses\n * the Images binding to resize/transcode on the fly. In dev, the Vite dev\n * server handles it as a passthrough (serves the original file).\n */\nexport function imageOptimizationUrl(src: string, width: number, quality: number = 75): string {\n return `/_vinext/image?url=${encodeURIComponent(src)}&w=${width}&q=${quality}`;\n}\n\n/**\n * Generate a srcSet string for responsive images.\n *\n * Each width points to the `/_vinext/image` optimization endpoint so the\n * server can resize and transcode the image. Only includes widths that are\n * <= 2x the original image width to avoid pointless upscaling.\n */\nfunction generateSrcSet(src: string, originalWidth: number, quality: number = 75): string {\n const widths = RESPONSIVE_WIDTHS.filter((w) => w <= originalWidth * 2);\n if (widths.length === 0)\n return `${imageOptimizationUrl(src, originalWidth, quality)} ${originalWidth}w`;\n return widths.map((w) => `${imageOptimizationUrl(src, w, quality)} ${w}w`).join(\", \");\n}\n\nconst Image = forwardRef<HTMLImageElement, ImageProps>(function Image(\n {\n src: srcProp,\n alt,\n width,\n height,\n fill,\n priority,\n quality,\n placeholder,\n blurDataURL,\n loader,\n sizes,\n className,\n style,\n unoptimized: _unoptimized,\n overrideSrc: _overrideSrc,\n loading,\n ...rest\n },\n ref,\n) {\n // Handle StaticImageData (import result)\n const src = typeof srcProp === \"string\" ? srcProp : srcProp.src;\n const imgWidth = width ?? (typeof srcProp === \"object\" ? srcProp.width : undefined);\n const imgHeight = height ?? (typeof srcProp === \"object\" ? srcProp.height : undefined);\n const imgBlurDataURL =\n blurDataURL ?? (typeof srcProp === \"object\" ? srcProp.blurDataURL : undefined);\n\n // If a custom loader is provided, use basic img with loader URL\n if (loader) {\n const resolvedSrc = loader({ src, width: imgWidth ?? 0, quality: quality ?? 75 });\n return (\n <img\n ref={ref}\n src={resolvedSrc}\n alt={alt}\n width={fill ? undefined : imgWidth}\n height={fill ? undefined : imgHeight}\n loading={priority ? \"eager\" : (loading ?? \"lazy\")}\n decoding=\"async\"\n sizes={sizes}\n className={className}\n style={\n fill\n ? {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n ...style,\n }\n : style\n }\n {...rest}\n />\n );\n }\n\n // For remote URLs, validate against remotePatterns then use @unpic/react\n if (isRemoteUrl(src)) {\n const validation = validateRemoteUrl(src);\n if (!validation.allowed) {\n if (__isDev) {\n console.warn(`[next/image] ${validation.reason}`);\n // In dev, render the image but with a warning — matches Next.js dev behavior\n } else {\n // In production, block the image entirely\n console.error(`[next/image] ${validation.reason}`);\n return null;\n }\n }\n\n const sanitizedBlur = imgBlurDataURL ? sanitizeBlurDataURL(imgBlurDataURL) : undefined;\n const bg = placeholder === \"blur\" && sanitizedBlur ? `url(${sanitizedBlur})` : undefined;\n\n if (fill) {\n return (\n <UnpicImage\n src={src}\n alt={alt}\n layout=\"fullWidth\"\n priority={priority}\n sizes={sizes}\n className={className}\n background={bg}\n />\n );\n }\n // constrained layout requires width+height or aspectRatio\n if (imgWidth && imgHeight) {\n return (\n <UnpicImage\n src={src}\n alt={alt}\n width={imgWidth}\n height={imgHeight}\n layout=\"constrained\"\n priority={priority}\n sizes={sizes}\n className={className}\n background={bg}\n />\n );\n }\n // Fall through to basic <img> if dimensions not provided\n // (unpic requires them for constrained layout)\n }\n\n // Route local images through the /_vinext/image optimization endpoint.\n // In production on Cloudflare Workers, this resizes and transcodes via\n // the Images binding. In dev, it serves the original file as a passthrough.\n // When `unoptimized` is true, bypass the endpoint entirely (Next.js compat).\n // SVG sources auto-skip unless dangerouslyAllowSVG is enabled, matching\n // Next.js behavior where .svg triggers unoptimized=true by default.\n const imgQuality = quality ?? 75;\n const isSvg = src.endsWith(\".svg\");\n const skipOptimization = _unoptimized === true || (isSvg && !__dangerouslyAllowSVG);\n\n // Build srcSet for responsive local images (common breakpoints).\n // Each entry points to /_vinext/image with the appropriate width.\n const srcSet =\n imgWidth && !fill && !skipOptimization\n ? generateSrcSet(src, imgWidth, imgQuality)\n : imgWidth && !fill\n ? RESPONSIVE_WIDTHS.filter((w) => w <= imgWidth * 2)\n .map((w) => `${src} ${w}w`)\n .join(\", \") || `${src} ${imgWidth}w`\n : undefined;\n\n // The main `src` also goes through the optimization endpoint. Use the\n // declared width (or the first responsive width as fallback).\n const optimizedSrc = skipOptimization\n ? src\n : imgWidth\n ? imageOptimizationUrl(src, imgWidth, imgQuality)\n : imageOptimizationUrl(src, RESPONSIVE_WIDTHS[0], imgQuality);\n\n // Blur placeholder: show a low-quality background while the image loads.\n // Sanitize blurDataURL to prevent CSS injection via crafted data URLs.\n const sanitizedLocalBlur = imgBlurDataURL ? sanitizeBlurDataURL(imgBlurDataURL) : undefined;\n const blurStyle =\n placeholder === \"blur\" && sanitizedLocalBlur\n ? {\n backgroundImage: `url(${sanitizedLocalBlur})`,\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n }\n : undefined;\n\n // For local images, render a standard <img> tag with srcSet and blur support.\n // The src and srcSet point to the /_vinext/image optimization endpoint.\n return (\n <img\n ref={ref}\n src={optimizedSrc}\n alt={alt}\n width={fill ? undefined : imgWidth}\n height={fill ? undefined : imgHeight}\n loading={priority ? \"eager\" : (loading ?? \"lazy\")}\n fetchPriority={priority ? \"high\" : undefined}\n decoding=\"async\"\n srcSet={srcSet}\n sizes={sizes ?? (fill ? \"100vw\" : undefined)}\n className={className}\n data-nimg={fill ? \"fill\" : \"1\"}\n style={\n fill\n ? {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n ...blurStyle,\n ...style,\n }\n : { ...blurStyle, ...style }\n }\n {...rest}\n />\n );\n});\n\n/**\n * getImageProps — for advanced use cases (picture elements, background images).\n * Returns the props that would be passed to the underlying <img> element.\n */\nexport function getImageProps(props: ImageProps): {\n props: React.ImgHTMLAttributes<HTMLImageElement>;\n} {\n const {\n src: srcProp,\n alt,\n width,\n height,\n fill,\n priority,\n quality: _quality,\n placeholder,\n blurDataURL: blurDataURLProp,\n loader,\n sizes,\n className,\n style,\n unoptimized: _unoptimized,\n overrideSrc: _overrideSrc,\n loading,\n ...rest\n } = props;\n\n const src = typeof srcProp === \"string\" ? srcProp : srcProp.src;\n const imgWidth = width ?? (typeof srcProp === \"object\" ? srcProp.width : undefined);\n const imgHeight = height ?? (typeof srcProp === \"object\" ? srcProp.height : undefined);\n const imgBlurDataURL =\n blurDataURLProp ?? (typeof srcProp === \"object\" ? srcProp.blurDataURL : undefined);\n\n // Validate remote URLs against configured patterns\n let blockedInProd = false;\n if (isRemoteUrl(src)) {\n const validation = validateRemoteUrl(src);\n if (!validation.allowed) {\n if (__isDev) {\n console.warn(`[next/image] ${validation.reason}`);\n } else {\n console.error(`[next/image] ${validation.reason}`);\n blockedInProd = true;\n }\n }\n }\n\n // Resolve src through custom loader if provided\n const imgQuality = _quality ?? 75;\n const resolvedSrc = blockedInProd\n ? \"\"\n : loader\n ? loader({ src, width: imgWidth ?? 0, quality: imgQuality })\n : src;\n\n // For local images (no loader, not remote), route through optimization endpoint.\n // When `unoptimized` is true, bypass the endpoint entirely (Next.js compat).\n // SVG sources auto-skip unless dangerouslyAllowSVG is enabled.\n const isSvg = resolvedSrc.endsWith(\".svg\");\n const skipOpt =\n _unoptimized === true ||\n (isSvg && !__dangerouslyAllowSVG) ||\n blockedInProd ||\n !!loader ||\n isRemoteUrl(resolvedSrc);\n const optimizedSrc = skipOpt\n ? resolvedSrc\n : imgWidth\n ? imageOptimizationUrl(resolvedSrc, imgWidth, imgQuality)\n : imageOptimizationUrl(resolvedSrc, RESPONSIVE_WIDTHS[0], imgQuality);\n\n // Build srcSet for local images — each width points to /_vinext/image\n const srcSet =\n imgWidth && !fill && !isRemoteUrl(resolvedSrc) && !loader && !skipOpt\n ? generateSrcSet(resolvedSrc, imgWidth, imgQuality)\n : undefined;\n\n // Blur placeholder styles — sanitize to prevent CSS injection\n const sanitizedBlurURL = imgBlurDataURL ? sanitizeBlurDataURL(imgBlurDataURL) : undefined;\n const blurStyle =\n placeholder === \"blur\" && sanitizedBlurURL\n ? {\n backgroundImage: `url(${sanitizedBlurURL})`,\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\" as const,\n backgroundPosition: \"center\" as const,\n }\n : undefined;\n\n return {\n props: {\n src: optimizedSrc,\n alt,\n width: fill ? undefined : imgWidth,\n height: fill ? undefined : imgHeight,\n loading: priority ? \"eager\" : (loading ?? \"lazy\"),\n fetchPriority: priority ? (\"high\" as const) : undefined,\n decoding: \"async\" as const,\n srcSet,\n sizes: sizes ?? (fill ? \"100vw\" : undefined),\n className,\n \"data-nimg\": fill ? \"fill\" : \"1\",\n style: fill\n ? {\n position: \"absolute\" as const,\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\" as const,\n ...blurStyle,\n ...style,\n }\n : { ...blurStyle, ...style },\n ...rest,\n } as React.ImgHTMLAttributes<HTMLImageElement>,\n };\n}\n\nexport default Image;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-image.d.ts","sourceRoot":"","sources":["../../src/shims/legacy-image.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,yBAAyB;IACzB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,CAAC;IACvD,+CAA+C;IAC/C,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtF,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,QAAA,MAAM,WAAW,2FAgEhB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"legacy-image.d.ts","sourceRoot":"","sources":["../../src/shims/legacy-image.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,yBAAyB;IACzB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,CAAC;IACvD,+CAA+C;IAC/C,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtF,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,QAAA,MAAM,WAAW,2FAiDhB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -30,7 +30,7 @@ const LegacyImage = forwardRef(function LegacyImage(props, ref) {
30
30
  }
31
31
  : onLoad;
32
32
  if (layout === "fill") {
33
- return (_jsx(Image, { ref: ref, fill: true, style: modernStyle, onLoad: handleLoad, ...rest }));
33
+ return _jsx(Image, { ref: ref, fill: true, style: modernStyle, onLoad: handleLoad, ...rest });
34
34
  }
35
35
  if (layout === "responsive") {
36
36
  // Responsive: takes full width, maintains aspect ratio
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-image.js","sourceRoot":"","sources":["../../src/shims/legacy-image.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AACH,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,MAAM,YAAY,CAAC;AA6B/B,MAAM,WAAW,GAAG,UAAU,CAC5B,SAAS,WAAW,CAAC,KAAK,EAAE,GAAG;IAC7B,MAAM,EACJ,MAAM,GAAG,WAAW,EACpB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,EACL,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,+CAA+C;IAC/C,MAAM,WAAW,GAAwB,EAAE,GAAG,KAAK,EAAE,CAAC;IAEtD,IAAI,SAAS;QAAE,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;IACjD,IAAI,cAAc;QAAE,WAAW,CAAC,cAAc,GAAG,cAAc,CAAC;IAEhE,MAAM,UAAU,GAAG,iBAAiB;QAClC,CAAC,CAAC,CAAC,CAAyC,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC;YAC5B,iBAAiB,CAAC;gBAChB,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC,CAAC,CAAC;YACH,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACH,CAAC,CAAC,MAAM,CAAC;IAEX,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CACL,KAAC,KAAK,IACJ,GAAG,EAAE,GAAG,EACR,IAAI,QACJ,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,KACd,IAAI,GACR,CACH,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,uDAAuD;QACvD,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC;QAC3B,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,0DAA0D;IAC1D,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAErE,OAAO,CACL,KAAC,KAAK,IACJ,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,KACd,IAAI,GACR,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["/**\n * next/legacy/image shim\n *\n * Provides the pre-Next.js 13 Image component API with layout prop.\n * Translates legacy props (layout, objectFit, objectPosition) to the\n * modern Image component's fill/style props.\n *\n * This module is used by apps that ran the `next-image-to-legacy-image`\n * codemod when upgrading from Next.js 12.\n */\nimport React, { forwardRef } from \"react\";\nimport Image from \"./image.js\";\n\ninterface LegacyImageProps {\n src: string | { src: string; width: number; height: number; blurDataURL?: string };\n alt: string;\n width?: number | string;\n height?: number | string;\n /** Legacy layout mode */\n layout?: \"fixed\" | \"intrinsic\" | \"responsive\" | \"fill\";\n /** CSS object-fit (used with layout=\"fill\") */\n objectFit?: React.CSSProperties[\"objectFit\"];\n /** CSS object-position (used with layout=\"fill\") */\n objectPosition?: string;\n priority?: boolean;\n quality?: number;\n placeholder?: \"blur\" | \"empty\";\n blurDataURL?: string;\n loader?: (params: { src: string; width: number; quality?: number }) => string;\n sizes?: string;\n className?: string;\n style?: React.CSSProperties;\n onLoad?: React.ReactEventHandler<HTMLImageElement>;\n onLoadingComplete?: (result: { naturalWidth: number; naturalHeight: number }) => void;\n onError?: React.ReactEventHandler<HTMLImageElement>;\n loading?: \"lazy\" | \"eager\";\n unoptimized?: boolean;\n id?: string;\n}\n\nconst LegacyImage = forwardRef<HTMLImageElement, LegacyImageProps>(\n function LegacyImage(props, ref) {\n const {\n layout = \"intrinsic\",\n objectFit,\n objectPosition,\n onLoadingComplete,\n onLoad,\n width,\n height,\n style,\n ...rest\n } = props;\n\n // Translate legacy props to modern Image props\n const modernStyle: React.CSSProperties = { ...style };\n\n if (objectFit) modernStyle.objectFit = objectFit;\n if (objectPosition) modernStyle.objectPosition = objectPosition;\n\n const handleLoad = onLoadingComplete\n ? (e: React.SyntheticEvent<HTMLImageElement>) => {\n const img = e.currentTarget;\n onLoadingComplete({\n naturalWidth: img.naturalWidth,\n naturalHeight: img.naturalHeight,\n });\n onLoad?.(e);\n }\n : onLoad;\n\n if (layout === \"fill\") {\n return (\n <Image\n ref={ref}\n fill\n style={modernStyle}\n onLoad={handleLoad}\n {...rest}\n />\n );\n }\n\n if (layout === \"responsive\") {\n // Responsive: takes full width, maintains aspect ratio\n modernStyle.width = \"100%\";\n modernStyle.height = \"auto\";\n }\n\n // For \"fixed\" and \"intrinsic\", pass width/height directly\n const w = typeof width === \"string\" ? parseInt(width, 10) : width;\n const h = typeof height === \"string\" ? parseInt(height, 10) : height;\n\n return (\n <Image\n ref={ref}\n width={w}\n height={h}\n style={modernStyle}\n onLoad={handleLoad}\n {...rest}\n />\n );\n },\n);\n\nexport default LegacyImage;\n"]}
1
+ {"version":3,"file":"legacy-image.js","sourceRoot":"","sources":["../../src/shims/legacy-image.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AACH,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,MAAM,YAAY,CAAC;AA6B/B,MAAM,WAAW,GAAG,UAAU,CAC5B,SAAS,WAAW,CAAC,KAAK,EAAE,GAAG;IAC7B,MAAM,EACJ,MAAM,GAAG,WAAW,EACpB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,EACL,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,+CAA+C;IAC/C,MAAM,WAAW,GAAwB,EAAE,GAAG,KAAK,EAAE,CAAC;IAEtD,IAAI,SAAS;QAAE,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;IACjD,IAAI,cAAc;QAAE,WAAW,CAAC,cAAc,GAAG,cAAc,CAAC;IAEhE,MAAM,UAAU,GAAG,iBAAiB;QAClC,CAAC,CAAC,CAAC,CAAyC,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC;YAC5B,iBAAiB,CAAC;gBAChB,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC,CAAC,CAAC;YACH,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACH,CAAC,CAAC,MAAM,CAAC;IAEX,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,KAAC,KAAK,IAAC,GAAG,EAAE,GAAG,EAAE,IAAI,QAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,KAAM,IAAI,GAAI,CAAC;IACpF,CAAC;IAED,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,uDAAuD;QACvD,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC;QAC3B,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,0DAA0D;IAC1D,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAErE,OAAO,CACL,KAAC,KAAK,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,KAAM,IAAI,GAAI,CAC3F,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["/**\n * next/legacy/image shim\n *\n * Provides the pre-Next.js 13 Image component API with layout prop.\n * Translates legacy props (layout, objectFit, objectPosition) to the\n * modern Image component's fill/style props.\n *\n * This module is used by apps that ran the `next-image-to-legacy-image`\n * codemod when upgrading from Next.js 12.\n */\nimport React, { forwardRef } from \"react\";\nimport Image from \"./image.js\";\n\ninterface LegacyImageProps {\n src: string | { src: string; width: number; height: number; blurDataURL?: string };\n alt: string;\n width?: number | string;\n height?: number | string;\n /** Legacy layout mode */\n layout?: \"fixed\" | \"intrinsic\" | \"responsive\" | \"fill\";\n /** CSS object-fit (used with layout=\"fill\") */\n objectFit?: React.CSSProperties[\"objectFit\"];\n /** CSS object-position (used with layout=\"fill\") */\n objectPosition?: string;\n priority?: boolean;\n quality?: number;\n placeholder?: \"blur\" | \"empty\";\n blurDataURL?: string;\n loader?: (params: { src: string; width: number; quality?: number }) => string;\n sizes?: string;\n className?: string;\n style?: React.CSSProperties;\n onLoad?: React.ReactEventHandler<HTMLImageElement>;\n onLoadingComplete?: (result: { naturalWidth: number; naturalHeight: number }) => void;\n onError?: React.ReactEventHandler<HTMLImageElement>;\n loading?: \"lazy\" | \"eager\";\n unoptimized?: boolean;\n id?: string;\n}\n\nconst LegacyImage = forwardRef<HTMLImageElement, LegacyImageProps>(\n function LegacyImage(props, ref) {\n const {\n layout = \"intrinsic\",\n objectFit,\n objectPosition,\n onLoadingComplete,\n onLoad,\n width,\n height,\n style,\n ...rest\n } = props;\n\n // Translate legacy props to modern Image props\n const modernStyle: React.CSSProperties = { ...style };\n\n if (objectFit) modernStyle.objectFit = objectFit;\n if (objectPosition) modernStyle.objectPosition = objectPosition;\n\n const handleLoad = onLoadingComplete\n ? (e: React.SyntheticEvent<HTMLImageElement>) => {\n const img = e.currentTarget;\n onLoadingComplete({\n naturalWidth: img.naturalWidth,\n naturalHeight: img.naturalHeight,\n });\n onLoad?.(e);\n }\n : onLoad;\n\n if (layout === \"fill\") {\n return <Image ref={ref} fill style={modernStyle} onLoad={handleLoad} {...rest} />;\n }\n\n if (layout === \"responsive\") {\n // Responsive: takes full width, maintains aspect ratio\n modernStyle.width = \"100%\";\n modernStyle.height = \"auto\";\n }\n\n // For \"fixed\" and \"intrinsic\", pass width/height directly\n const w = typeof width === \"string\" ? parseInt(width, 10) : width;\n const h = typeof height === \"string\" ? parseInt(height, 10) : height;\n\n return (\n <Image ref={ref} width={w} height={h} style={modernStyle} onLoad={handleLoad} {...rest} />\n );\n },\n);\n\nexport default LegacyImage;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/shims/link.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,EAAmF,KAAK,oBAAoB,EAAmB,MAAM,OAAO,CAAC;AAQ3J,UAAU,aAAa;IACrB,GAAG,EAAE,GAAG,CAAC;IACT,iFAAiF;IACjF,cAAc,IAAI,IAAI,CAAC;IACvB,gDAAgD;IAChD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,SAAU,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC/E,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IACrE,kFAAkF;IAClF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAMD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,sBAAsB,CAEtD;AAwND,QAAA,MAAM,IAAI,qFAoOR,CAAC;AAEH,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/shims/link.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,EAQZ,KAAK,oBAAoB,EAE1B,MAAM,OAAO,CAAC;AAQf,UAAU,aAAa;IACrB,GAAG,EAAE,GAAG,CAAC;IACT,iFAAiF;IACjF,cAAc,IAAI,IAAI,CAAC;IACvB,gDAAgD;IAChD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,SAAU,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC/E,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IACrE,kFAAkF;IAClF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAMD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,sBAAsB,CAEtD;AAoOD,QAAA,MAAM,IAAI,qFAiPR,CAAC;AAEH,eAAe,IAAI,CAAC"}
@@ -7,7 +7,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
7
7
  * On click, prevents full page reload and triggers client-side
8
8
  * page swap via the router's navigation system.
9
9
  */
10
- import React, { forwardRef, useRef, useEffect, useCallback, useContext, createContext, useState } from "react";
10
+ import React, { forwardRef, useRef, useEffect, useCallback, useContext, createContext, useState, } from "react";
11
11
  // Import shared RSC prefetch utilities from navigation shim (relative path
12
12
  // so this resolves both via the Vite plugin and in direct vitest imports)
13
13
  import { toRscUrl, getPrefetchedUrls, storePrefetchResponse } from "./navigation.js";
@@ -36,7 +36,10 @@ function resolveHref(href) {
36
36
  }
37
37
  /** Prepend basePath to an internal path for browser URLs / fetches */
38
38
  function withBasePath(path) {
39
- if (!__basePath || path.startsWith("http://") || path.startsWith("https://") || path.startsWith("//")) {
39
+ if (!__basePath ||
40
+ path.startsWith("http://") ||
41
+ path.startsWith("https://") ||
42
+ path.startsWith("//")) {
40
43
  return path;
41
44
  }
42
45
  return __basePath + path;
@@ -65,7 +68,10 @@ function resolveRelativeHref(href) {
65
68
  if (typeof window === "undefined")
66
69
  return href;
67
70
  // Already absolute
68
- if (href.startsWith("/") || href.startsWith("http://") || href.startsWith("https://") || href.startsWith("//")) {
71
+ if (href.startsWith("/") ||
72
+ href.startsWith("http://") ||
73
+ href.startsWith("https://") ||
74
+ href.startsWith("//")) {
69
75
  return href;
70
76
  }
71
77
  // Relative: resolve against current location
@@ -133,7 +139,8 @@ function prefetchUrl(href) {
133
139
  priority: "low",
134
140
  // @ts-expect-error — purpose is a valid fetch option in some browsers
135
141
  purpose: "prefetch",
136
- }).then((response) => {
142
+ })
143
+ .then((response) => {
137
144
  if (response.ok) {
138
145
  storePrefetchResponse(rscUrl, response);
139
146
  }
@@ -141,7 +148,8 @@ function prefetchUrl(href) {
141
148
  // Non-ok response: allow retry on next viewport intersection
142
149
  prefetched.delete(rscUrl);
143
150
  }
144
- }).catch(() => {
151
+ })
152
+ .catch(() => {
145
153
  // Network error: allow retry on next viewport intersection
146
154
  prefetched.delete(rscUrl);
147
155
  });
@@ -239,7 +247,9 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
239
247
  const mountedRef = useRef(true);
240
248
  useEffect(() => {
241
249
  mountedRef.current = true;
242
- return () => { mountedRef.current = false; };
250
+ return () => {
251
+ mountedRef.current = false;
252
+ };
243
253
  }, []);
244
254
  // Prefetching: observe the element when it enters the viewport.
245
255
  // prefetch={false} disables, prefetch={true} or undefined/null (default) enables.
@@ -260,7 +270,9 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
260
270
  return;
261
271
  // Normalize same-origin absolute URLs; skip truly external ones
262
272
  let hrefToPrefetch = localizedHref;
263
- if (localizedHref.startsWith("http://") || localizedHref.startsWith("https://") || localizedHref.startsWith("//")) {
273
+ if (localizedHref.startsWith("http://") ||
274
+ localizedHref.startsWith("https://") ||
275
+ localizedHref.startsWith("//")) {
264
276
  const localPath = toSameOriginPath(localizedHref);
265
277
  if (localPath == null)
266
278
  return; // truly external
@@ -282,11 +294,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
282
294
  if (e.defaultPrevented)
283
295
  return;
284
296
  // Only intercept left clicks without modifiers (standard link behavior)
285
- if (e.button !== 0 ||
286
- e.metaKey ||
287
- e.ctrlKey ||
288
- e.shiftKey ||
289
- e.altKey) {
297
+ if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {
290
298
  return;
291
299
  }
292
300
  // Don't intercept links with target (e.g. target="_blank")
@@ -313,8 +321,12 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
313
321
  let prevented = false;
314
322
  const navEvent = {
315
323
  url: navUrl,
316
- preventDefault() { prevented = true; },
317
- get defaultPrevented() { return prevented; },
324
+ preventDefault() {
325
+ prevented = true;
326
+ },
327
+ get defaultPrevented() {
328
+ return prevented;
329
+ },
318
330
  };
319
331
  onNavigate(navEvent);
320
332
  // If the callback called preventDefault(), skip Link's default navigation.
@@ -337,7 +349,9 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
337
349
  const absoluteFullHref = withBasePath(absoluteHref);
338
350
  // Hash-only change: update URL and scroll to target, skip RSC fetch
339
351
  if (typeof window !== "undefined" && isHashOnlyChange(absoluteFullHref)) {
340
- const hash = absoluteFullHref.includes("#") ? absoluteFullHref.slice(absoluteFullHref.indexOf("#")) : "";
352
+ const hash = absoluteFullHref.includes("#")
353
+ ? absoluteFullHref.slice(absoluteFullHref.indexOf("#"))
354
+ : "";
341
355
  if (replace) {
342
356
  window.history.replaceState(null, "", absoluteFullHref);
343
357
  }