vinext 0.0.40 → 0.0.41

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 (70) hide show
  1. package/README.md +1 -1
  2. package/dist/check.js +2 -2
  3. package/dist/check.js.map +1 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/entries/app-rsc-entry.js +54 -19
  6. package/dist/entries/app-rsc-entry.js.map +1 -1
  7. package/dist/entries/pages-server-entry.js +205 -199
  8. package/dist/entries/pages-server-entry.js.map +1 -1
  9. package/dist/index.js +1 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/init.d.ts +1 -1
  12. package/dist/init.js +2 -2
  13. package/dist/init.js.map +1 -1
  14. package/dist/plugins/fonts.js +1 -0
  15. package/dist/plugins/fonts.js.map +1 -1
  16. package/dist/server/app-page-boundary-render.d.ts +1 -0
  17. package/dist/server/app-page-boundary-render.js +1 -0
  18. package/dist/server/app-page-boundary-render.js.map +1 -1
  19. package/dist/server/app-page-render.d.ts +1 -0
  20. package/dist/server/app-page-render.js +2 -0
  21. package/dist/server/app-page-render.js.map +1 -1
  22. package/dist/server/app-page-response.d.ts +3 -11
  23. package/dist/server/app-page-response.js +6 -19
  24. package/dist/server/app-page-response.js.map +1 -1
  25. package/dist/server/app-page-route-wiring.js +4 -2
  26. package/dist/server/app-page-route-wiring.js.map +1 -1
  27. package/dist/server/app-page-stream.d.ts +4 -1
  28. package/dist/server/app-page-stream.js +2 -1
  29. package/dist/server/app-page-stream.js.map +1 -1
  30. package/dist/server/app-route-handler-response.js +2 -1
  31. package/dist/server/app-route-handler-response.js.map +1 -1
  32. package/dist/server/app-ssr-entry.d.ts +3 -1
  33. package/dist/server/app-ssr-entry.js +17 -17
  34. package/dist/server/app-ssr-entry.js.map +1 -1
  35. package/dist/server/app-ssr-stream.d.ts +1 -1
  36. package/dist/server/app-ssr-stream.js +4 -4
  37. package/dist/server/app-ssr-stream.js.map +1 -1
  38. package/dist/server/csp.d.ts +12 -0
  39. package/dist/server/csp.js +46 -0
  40. package/dist/server/csp.js.map +1 -0
  41. package/dist/server/dev-server.js +20 -14
  42. package/dist/server/dev-server.js.map +1 -1
  43. package/dist/server/html.d.ts +4 -1
  44. package/dist/server/html.js +11 -1
  45. package/dist/server/html.js.map +1 -1
  46. package/dist/server/middleware-response-headers.d.ts +12 -0
  47. package/dist/server/middleware-response-headers.js +23 -0
  48. package/dist/server/middleware-response-headers.js.map +1 -0
  49. package/dist/server/pages-page-data.d.ts +1 -0
  50. package/dist/server/pages-page-data.js +2 -2
  51. package/dist/server/pages-page-data.js.map +1 -1
  52. package/dist/server/pages-page-response.d.ts +2 -1
  53. package/dist/server/pages-page-response.js +16 -14
  54. package/dist/server/pages-page-response.js.map +1 -1
  55. package/dist/server/prod-server.js +4 -3
  56. package/dist/server/prod-server.js.map +1 -1
  57. package/dist/server/request-pipeline.d.ts +14 -1
  58. package/dist/server/request-pipeline.js +55 -1
  59. package/dist/server/request-pipeline.js.map +1 -1
  60. package/dist/shims/error-boundary.d.ts +1 -1
  61. package/dist/shims/script-nonce-context.d.ts +12 -0
  62. package/dist/shims/script-nonce-context.js +17 -0
  63. package/dist/shims/script-nonce-context.js.map +1 -0
  64. package/dist/shims/script.js +41 -10
  65. package/dist/shims/script.js.map +1 -1
  66. package/dist/shims/server.js +6 -1
  67. package/dist/shims/server.js.map +1 -1
  68. package/dist/shims/url-safety.js +25 -4
  69. package/dist/shims/url-safety.js.map +1 -1
  70. package/package.json +7 -7
@@ -27,6 +27,7 @@ const appPageBoundaryRenderPath = resolveEntryPath("../server/app-page-boundary-
27
27
  const appPageRouteWiringPath = resolveEntryPath("../server/app-page-route-wiring.js", import.meta.url);
28
28
  const appPageRenderPath = resolveEntryPath("../server/app-page-render.js", import.meta.url);
29
29
  const appPageResponsePath = resolveEntryPath("../server/app-page-response.js", import.meta.url);
30
+ const cspPath = resolveEntryPath("../server/csp.js", import.meta.url);
30
31
  const appPageRequestPath = resolveEntryPath("../server/app-page-request.js", import.meta.url);
31
32
  const appRouteHandlerResponsePath = resolveEntryPath("../server/app-route-handler-response.js", import.meta.url);
32
33
  const routeTriePath = resolveEntryPath("../routing/route-trie.js", import.meta.url);
@@ -218,7 +219,7 @@ ${instrumentationPath ? `import * as _instrumentation from ${JSON.stringify(inst
218
219
  ${effectiveMetaRoutes.length > 0 ? `import { sitemapToXml, robotsToText, manifestToJson } from ${JSON.stringify(metadataRoutesPath)};` : ""}
219
220
  import { requestContextFromRequest, normalizeHost, matchRedirect, matchRewrite, matchHeaders, isExternalUrl, proxyExternalRequest, sanitizeDestination } from ${JSON.stringify(configMatchersPath)};
220
221
  import { decodePathParams as __decodePathParams } from ${JSON.stringify(normalizePathModulePath)};
221
- import { validateCsrfOrigin, validateImageUrl, guardProtocolRelativeUrl, hasBasePath, stripBasePath, normalizeTrailingSlash, processMiddlewareHeaders } from ${JSON.stringify(requestPipelinePath)};
222
+ import { validateCsrfOrigin, validateServerActionPayload, validateImageUrl, guardProtocolRelativeUrl, hasBasePath, stripBasePath, normalizeTrailingSlash, processMiddlewareHeaders } from ${JSON.stringify(requestPipelinePath)};
222
223
  import {
223
224
  isKnownDynamicAppRoute as __isKnownDynamicAppRoute,
224
225
  } from ${JSON.stringify(appRouteHandlerRuntimePath)};
@@ -254,6 +255,7 @@ import {
254
255
  import {
255
256
  mergeMiddlewareResponseHeaders as __mergeMiddlewareResponseHeaders,
256
257
  } from ${JSON.stringify(appPageResponsePath)};
258
+ import { getScriptNonceFromHeaderSources as __getScriptNonceFromHeaderSources } from ${JSON.stringify(cspPath)};
257
259
  import {
258
260
  buildAppPageElement as __buildAppPageElement,
259
261
  resolveAppPageIntercept as __resolveAppPageIntercept,
@@ -593,7 +595,7 @@ const rootLayouts = [${rootLayoutVars.join(", ")}];
593
595
  * @param opts.boundaryComponent - Override the boundary component (for layout-level notFound)
594
596
  * @param opts.layouts - Override the layouts to wrap with (for layout-level notFound, excludes the throwing layout)
595
597
  */
596
- async function renderHTTPAccessFallbackPage(route, statusCode, isRscRequest, request, opts) {
598
+ async function renderHTTPAccessFallbackPage(route, statusCode, isRscRequest, request, opts, scriptNonce) {
597
599
  return __renderAppPageHttpAccessFallback({
598
600
  boundaryComponent: opts?.boundaryComponent ?? null,
599
601
  buildFontLinkHeader: __buildAppPageFontLinkHeader,
@@ -624,13 +626,14 @@ async function renderHTTPAccessFallbackPage(route, statusCode, isRscRequest, req
624
626
  rootUnauthorizedModule: rootUnauthorizedModule,
625
627
  route,
626
628
  renderToReadableStream,
629
+ scriptNonce,
627
630
  statusCode,
628
631
  });
629
632
  }
630
633
 
631
634
  /** Convenience: render a not-found page (404) */
632
- async function renderNotFoundPage(route, isRscRequest, request, matchedParams) {
633
- return renderHTTPAccessFallbackPage(route, 404, isRscRequest, request, { matchedParams });
635
+ async function renderNotFoundPage(route, isRscRequest, request, matchedParams, scriptNonce) {
636
+ return renderHTTPAccessFallbackPage(route, 404, isRscRequest, request, { matchedParams }, scriptNonce);
634
637
  }
635
638
 
636
639
  /**
@@ -640,7 +643,7 @@ async function renderNotFoundPage(route, isRscRequest, request, matchedParams) {
640
643
  * Next.js returns HTTP 200 when error.tsx catches an error (the error is "handled"
641
644
  * by the boundary). This matches that behavior intentionally.
642
645
  */
643
- async function renderErrorBoundaryPage(route, error, isRscRequest, request, matchedParams) {
646
+ async function renderErrorBoundaryPage(route, error, isRscRequest, request, matchedParams, scriptNonce) {
644
647
  return __renderAppPageErrorBoundary({
645
648
  buildFontLinkHeader: __buildAppPageFontLinkHeader,
646
649
  clearRequestContext() {
@@ -668,6 +671,7 @@ async function renderErrorBoundaryPage(route, error, isRscRequest, request, matc
668
671
  route,
669
672
  renderToReadableStream,
670
673
  sanitizeErrorForClient: __sanitizeErrorForClient,
674
+ scriptNonce,
671
675
  });
672
676
  }
673
677
 
@@ -1337,6 +1341,8 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
1337
1341
  }
1338
1342
  ` : ""}
1339
1343
 
1344
+ const _scriptNonce = __getScriptNonceFromHeaderSources(request.headers, _mwCtx.headers);
1345
+
1340
1346
  // Build post-middleware request context for afterFiles/fallback rewrites.
1341
1347
  // These run after middleware in the App Router execution order and should
1342
1348
  // evaluate has/missing conditions against middleware-modified headers.
@@ -1496,6 +1502,12 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
1496
1502
  }
1497
1503
  throw sizeErr;
1498
1504
  }
1505
+ const payloadResponse = await validateServerActionPayload(body);
1506
+ if (payloadResponse) {
1507
+ setHeadersContext(null);
1508
+ setNavigationContext(null);
1509
+ return payloadResponse;
1510
+ }
1499
1511
  const temporaryReferences = createTemporaryReferenceSet();
1500
1512
  const args = await decodeReply(body, { temporaryReferences });
1501
1513
  const action = await loadServerAction(actionId);
@@ -1692,7 +1704,7 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
1692
1704
  }
1693
1705
  ` : ""}
1694
1706
  // Render custom not-found page if available, otherwise plain 404
1695
- const notFoundResponse = await renderNotFoundPage(null, isRscRequest, request);
1707
+ const notFoundResponse = await renderNotFoundPage(null, isRscRequest, request, undefined, _scriptNonce);
1696
1708
  if (notFoundResponse) return notFoundResponse;
1697
1709
  setHeadersContext(null);
1698
1710
  setNavigationContext(null);
@@ -1905,6 +1917,7 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
1905
1917
  if (
1906
1918
  process.env.NODE_ENV === "production" &&
1907
1919
  !isForceDynamic &&
1920
+ (isRscRequest || !_scriptNonce) &&
1908
1921
  revalidateSeconds !== null && revalidateSeconds > 0 && revalidateSeconds !== Infinity
1909
1922
  ) {
1910
1923
  const __cachedPageResponse = await __readAppPageCacheResponse({
@@ -2060,7 +2073,7 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
2060
2073
  return buildPageElement(route, params, interceptOpts, url.searchParams);
2061
2074
  },
2062
2075
  renderErrorBoundaryPage(buildErr) {
2063
- return renderErrorBoundaryPage(route, buildErr, isRscRequest, request, params);
2076
+ return renderErrorBoundaryPage(route, buildErr, isRscRequest, request, params, _scriptNonce);
2064
2077
  },
2065
2078
  renderSpecialError(__buildSpecialError) {
2066
2079
  return __buildAppPageSpecialErrorResponse({
@@ -2069,9 +2082,16 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
2069
2082
  setNavigationContext(null);
2070
2083
  },
2071
2084
  renderFallbackPage(statusCode) {
2072
- return renderHTTPAccessFallbackPage(route, statusCode, isRscRequest, request, {
2073
- matchedParams: params,
2074
- });
2085
+ return renderHTTPAccessFallbackPage(
2086
+ route,
2087
+ statusCode,
2088
+ isRscRequest,
2089
+ request,
2090
+ {
2091
+ matchedParams: params,
2092
+ },
2093
+ _scriptNonce,
2094
+ );
2075
2095
  },
2076
2096
  requestUrl: request.url,
2077
2097
  specialError: __buildSpecialError,
@@ -2150,7 +2170,7 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
2150
2170
  },
2151
2171
  revalidateSeconds,
2152
2172
  renderErrorBoundaryResponse(renderErr) {
2153
- return renderErrorBoundaryPage(route, renderErr, isRscRequest, request, params);
2173
+ return renderErrorBoundaryPage(route, renderErr, isRscRequest, request, params, _scriptNonce);
2154
2174
  },
2155
2175
  async renderLayoutSpecialError(__layoutSpecialError, li) {
2156
2176
  return __buildAppPageSpecialErrorResponse({
@@ -2173,11 +2193,18 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
2173
2193
  }
2174
2194
  if (!parentNotFound) parentNotFound = ${rootNotFoundVar ? `${rootNotFoundVar}?.default` : "null"};
2175
2195
  const parentLayouts = route.layouts.slice(0, li);
2176
- return renderHTTPAccessFallbackPage(route, statusCode, isRscRequest, request, {
2177
- boundaryComponent: parentNotFound,
2178
- layouts: parentLayouts,
2179
- matchedParams: params,
2180
- });
2196
+ return renderHTTPAccessFallbackPage(
2197
+ route,
2198
+ statusCode,
2199
+ isRscRequest,
2200
+ request,
2201
+ {
2202
+ boundaryComponent: parentNotFound,
2203
+ layouts: parentLayouts,
2204
+ matchedParams: params,
2205
+ },
2206
+ _scriptNonce,
2207
+ );
2181
2208
  },
2182
2209
  requestUrl: request.url,
2183
2210
  specialError: __layoutSpecialError,
@@ -2190,9 +2217,16 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
2190
2217
  setNavigationContext(null);
2191
2218
  },
2192
2219
  renderFallbackPage(statusCode) {
2193
- return renderHTTPAccessFallbackPage(route, statusCode, isRscRequest, request, {
2194
- matchedParams: params,
2195
- });
2220
+ return renderHTTPAccessFallbackPage(
2221
+ route,
2222
+ statusCode,
2223
+ isRscRequest,
2224
+ request,
2225
+ {
2226
+ matchedParams: params,
2227
+ },
2228
+ _scriptNonce,
2229
+ );
2196
2230
  },
2197
2231
  requestUrl: request.url,
2198
2232
  specialError,
@@ -2207,6 +2241,7 @@ async function _handleRequest(request, __reqCtx, _mwCtx) {
2207
2241
  // each have their own ALS store and are unaffected.
2208
2242
  return _suppressHookWarningAls.run(true, probe);
2209
2243
  },
2244
+ scriptNonce: _scriptNonce,
2210
2245
  waitUntil(__cachePromise) {
2211
2246
  _getRequestExecutionContext()?.waitUntil(__cachePromise);
2212
2247
  },