@wular/pnext 0.0.1

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 (371) hide show
  1. package/README.md +153 -0
  2. package/bin/pnext +67 -0
  3. package/config/lint/base.js +48 -0
  4. package/config/ts/base.json +26 -0
  5. package/config/ts/react.json +13 -0
  6. package/package.json +70 -0
  7. package/reference/compat.md +63 -0
  8. package/reference/config.md +120 -0
  9. package/reference/css.md +58 -0
  10. package/reference/dev.md +69 -0
  11. package/reference/env.md +40 -0
  12. package/reference/metadata.md +86 -0
  13. package/reference/navigation.md +149 -0
  14. package/reference/overview.md +35 -0
  15. package/reference/performance.md +97 -0
  16. package/reference/rendering.md +127 -0
  17. package/reference/routing.md +167 -0
  18. package/reference/typegen.md +64 -0
  19. package/src/api/cache.ts +80 -0
  20. package/src/api/client-cache.ts +9 -0
  21. package/src/api/client-navigation.ts +279 -0
  22. package/src/api/dynamic.tsx +102 -0
  23. package/src/api/link.tsx +119 -0
  24. package/src/api/navigation.ts +198 -0
  25. package/src/api/router/events.ts +53 -0
  26. package/src/api/router/history.ts +70 -0
  27. package/src/api/router/hub.ts +194 -0
  28. package/src/api/router/policies.ts +107 -0
  29. package/src/api/router/runtime.ts +5238 -0
  30. package/src/api/router/types.ts +299 -0
  31. package/src/api/router.ts +167 -0
  32. package/src/api/server.ts +323 -0
  33. package/src/api/suspense.ts +16 -0
  34. package/src/cache/context.ts +61 -0
  35. package/src/cli/adapters/vercel-warm.ts +375 -0
  36. package/src/cli/adapters/vercel.ts +1310 -0
  37. package/src/cli/analyze-print.ts +181 -0
  38. package/src/cli/analyze.ts +328 -0
  39. package/src/cli/boot-trace.ts +29 -0
  40. package/src/cli/build.ts +3114 -0
  41. package/src/cli/dev.ts +276 -0
  42. package/src/cli/index.ts +196 -0
  43. package/src/cli/named-bin.ts +119 -0
  44. package/src/cli/serve-ui.ts +160 -0
  45. package/src/cli/start.ts +1425 -0
  46. package/src/client/build.ts +2136 -0
  47. package/src/client/chunk-fold.ts +526 -0
  48. package/src/client/entry.ts +1525 -0
  49. package/src/client/paths.ts +22 -0
  50. package/src/client/prebuilt.ts +621 -0
  51. package/src/client/profile.ts +75 -0
  52. package/src/client/react-compiler.ts +94 -0
  53. package/src/client/reference-stub.ts +145 -0
  54. package/src/client/reference.ts +47 -0
  55. package/src/compat/actions/action-client.ts +531 -0
  56. package/src/compat/actions/action-dispatch.ts +676 -0
  57. package/src/compat/actions/action-router.ts +40 -0
  58. package/src/compat/actions/action-shared.ts +95 -0
  59. package/src/compat/actions/client-plugin.ts +135 -0
  60. package/src/compat/actions/client-stub.ts +65 -0
  61. package/src/compat/actions/config.ts +164 -0
  62. package/src/compat/actions/detect.ts +208 -0
  63. package/src/compat/actions/discovery.ts +244 -0
  64. package/src/compat/actions/early-submit.ts +40 -0
  65. package/src/compat/actions/endpoint.ts +602 -0
  66. package/src/compat/actions/flight.ts +52 -0
  67. package/src/compat/actions/form-state.ts +73 -0
  68. package/src/compat/actions/hoist.ts +485 -0
  69. package/src/compat/actions/ids.ts +39 -0
  70. package/src/compat/actions/index.ts +41 -0
  71. package/src/compat/actions/instances.ts +144 -0
  72. package/src/compat/actions/origin.ts +109 -0
  73. package/src/compat/actions/protocol.ts +125 -0
  74. package/src/compat/actions/registry.ts +74 -0
  75. package/src/compat/actions/rewrite.ts +282 -0
  76. package/src/compat/actions/serve.ts +414 -0
  77. package/src/compat/actions/server-tag.ts +21 -0
  78. package/src/compat/actions/unrecognized-error.ts +30 -0
  79. package/src/compat/adapter/build-complete.ts +257 -0
  80. package/src/compat/bundler/bun-externals.ts +53 -0
  81. package/src/compat/bundler/cjs-exports.ts +542 -0
  82. package/src/compat/bundler/config.ts +363 -0
  83. package/src/compat/bundler/externals.ts +34 -0
  84. package/src/compat/bundler/import-meta-url.ts +60 -0
  85. package/src/compat/bundler/modularize-imports.ts +119 -0
  86. package/src/compat/bundler/new-url-asset.ts +87 -0
  87. package/src/compat/bundler/optimize-package-imports.ts +273 -0
  88. package/src/compat/bundler/polyfill.ts +88 -0
  89. package/src/compat/bundler/react-compiler.ts +61 -0
  90. package/src/compat/bundler/react-profiler.tsx +25 -0
  91. package/src/compat/bundler/relay-transform.ts +116 -0
  92. package/src/compat/bundler/require-context.ts +281 -0
  93. package/src/compat/bundler/resolve-extensions.ts +75 -0
  94. package/src/compat/bundler/source-cache.ts +61 -0
  95. package/src/compat/bundler/static-imports.ts +25 -0
  96. package/src/compat/bundler/symlink-imports.ts +119 -0
  97. package/src/compat/bundler/tsconfig-paths.ts +50 -0
  98. package/src/compat/bundler/wasm.ts +153 -0
  99. package/src/compat/bundler/webpack-loaders.ts +685 -0
  100. package/src/compat/bundler/worker.ts +278 -0
  101. package/src/compat/cache/build-flags.ts +81 -0
  102. package/src/compat/cache/build-prerender-errors.ts +163 -0
  103. package/src/compat/cache/custom-handler.ts +159 -0
  104. package/src/compat/cache/fetch-patch.ts +745 -0
  105. package/src/compat/cache/handler.ts +100 -0
  106. package/src/compat/cache/modern-handler.ts +275 -0
  107. package/src/compat/cache/resume-data-cache.ts +143 -0
  108. package/src/compat/cache/revalidate.ts +759 -0
  109. package/src/compat/cache/runtime-error.ts +124 -0
  110. package/src/compat/cache/use-cache-transform.ts +961 -0
  111. package/src/compat/cache/use-cache.ts +1695 -0
  112. package/src/compat/cache-control.ts +269 -0
  113. package/src/compat/client/base-path.ts +64 -0
  114. package/src/compat/client/css-order.ts +36 -0
  115. package/src/compat/client/errors/control-flow.ts +92 -0
  116. package/src/compat/client/errors/error-boundary.ts +222 -0
  117. package/src/compat/client/errors/global-error.ts +238 -0
  118. package/src/compat/client/errors/install.ts +217 -0
  119. package/src/compat/client/errors/lazy.ts +53 -0
  120. package/src/compat/client/errors/primitive-throw.ts +126 -0
  121. package/src/compat/client/errors/soft-refresh.ts +14 -0
  122. package/src/compat/client/link-status.ts +86 -0
  123. package/src/compat/client/nav-compat-runtime.ts +57 -0
  124. package/src/compat/client/nav-compat.ts +42 -0
  125. package/src/compat/client/navigation-scroll.ts +154 -0
  126. package/src/compat/client/optimistic-routing.ts +206 -0
  127. package/src/compat/client/prefetch-cache.ts +111 -0
  128. package/src/compat/client/route-announcer.ts +72 -0
  129. package/src/compat/client/segment-cache-policy.ts +159 -0
  130. package/src/compat/client/segment-cache.ts +1077 -0
  131. package/src/compat/client/segment-prefetch.ts +375 -0
  132. package/src/compat/client/trailing-slash.ts +24 -0
  133. package/src/compat/css/chunking.ts +254 -0
  134. package/src/compat/css/inline-css.ts +73 -0
  135. package/src/compat/css/lightningcss.ts +90 -0
  136. package/src/compat/css/modules.ts +373 -0
  137. package/src/compat/css/nonce.ts +30 -0
  138. package/src/compat/css/sass-plugin.ts +65 -0
  139. package/src/compat/css/sass.ts +392 -0
  140. package/src/compat/css/styled-jsx-runtime.ts +80 -0
  141. package/src/compat/css/styled-jsx.ts +49 -0
  142. package/src/compat/edge-runtime.ts +71 -0
  143. package/src/compat/export/client.ts +112 -0
  144. package/src/compat/export/index.ts +272 -0
  145. package/src/compat/export/standalone.ts +207 -0
  146. package/src/compat/image-optimizer/cache.ts +119 -0
  147. package/src/compat/image-optimizer/detect.ts +143 -0
  148. package/src/compat/image-optimizer/index.ts +601 -0
  149. package/src/compat/image-optimizer/source.ts +243 -0
  150. package/src/compat/index.ts +458 -0
  151. package/src/compat/lifecycle/after-scope.ts +86 -0
  152. package/src/compat/lifecycle/after.ts +173 -0
  153. package/src/compat/lifecycle/error-funnel.ts +306 -0
  154. package/src/compat/lifecycle/error-serialize.ts +87 -0
  155. package/src/compat/lifecycle/error-ui.ts +167 -0
  156. package/src/compat/lifecycle/instrumentation-client.ts +138 -0
  157. package/src/compat/lifecycle/instrumentation.ts +277 -0
  158. package/src/compat/lifecycle/node-console.ts +19 -0
  159. package/src/compat/lifecycle/testmode.ts +263 -0
  160. package/src/compat/mdx/compile.ts +219 -0
  161. package/src/compat/mdx/next-mdx-stub.ts +46 -0
  162. package/src/compat/mdx/plugin.ts +37 -0
  163. package/src/compat/metadata-route-artifacts.ts +458 -0
  164. package/src/compat/metadata.ts +295 -0
  165. package/src/compat/middleware/manifest.ts +210 -0
  166. package/src/compat/misc/action-return.ts +173 -0
  167. package/src/compat/next/cache.ts +211 -0
  168. package/src/compat/next/canonical-url.ts +35 -0
  169. package/src/compat/next/client-cache.ts +57 -0
  170. package/src/compat/next/client-navigation.ts +313 -0
  171. package/src/compat/next/client-only.ts +3 -0
  172. package/src/compat/next/client-script.tsx +215 -0
  173. package/src/compat/next/client-server.ts +39 -0
  174. package/src/compat/next/config-loader.ts +569 -0
  175. package/src/compat/next/config.ts +29 -0
  176. package/src/compat/next/constants.cjs +6 -0
  177. package/src/compat/next/constants.ts +6 -0
  178. package/src/compat/next/custom-server.ts +236 -0
  179. package/src/compat/next/dist/client/components/app-router-headers.ts +32 -0
  180. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +38 -0
  181. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -0
  182. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -0
  183. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -0
  184. package/src/compat/next/dynamic.tsx +46 -0
  185. package/src/compat/next/error.tsx +148 -0
  186. package/src/compat/next/font/cache.ts +171 -0
  187. package/src/compat/next/font/google.ts +2 -0
  188. package/src/compat/next/font/index.ts +8 -0
  189. package/src/compat/next/font/local.ts +5 -0
  190. package/src/compat/next/font/runtime-client.ts +71 -0
  191. package/src/compat/next/font/runtime.ts +974 -0
  192. package/src/compat/next/font/shared.ts +281 -0
  193. package/src/compat/next/form.tsx +156 -0
  194. package/src/compat/next/head.tsx +10 -0
  195. package/src/compat/next/headers.ts +247 -0
  196. package/src/compat/next/image/config.ts +196 -0
  197. package/src/compat/next/image/optimizer.ts +96 -0
  198. package/src/compat/next/image/patterns.ts +103 -0
  199. package/src/compat/next/image/shared.ts +141 -0
  200. package/src/compat/next/image/static-metadata.ts +283 -0
  201. package/src/compat/next/image/validate.ts +269 -0
  202. package/src/compat/next/image-client.tsx +215 -0
  203. package/src/compat/next/image-props.ts +575 -0
  204. package/src/compat/next/image-usage.ts +102 -0
  205. package/src/compat/next/image.tsx +56 -0
  206. package/src/compat/next/index.ts +1 -0
  207. package/src/compat/next/legacy-image.tsx +97 -0
  208. package/src/compat/next/link-usage.ts +29 -0
  209. package/src/compat/next/link-validation-transform.ts +200 -0
  210. package/src/compat/next/link.tsx +466 -0
  211. package/src/compat/next/navigation.cjs +21 -0
  212. package/src/compat/next/navigation.ts +188 -0
  213. package/src/compat/next/offline.ts +51 -0
  214. package/src/compat/next/og.ts +324 -0
  215. package/src/compat/next/optimistic-route-state.ts +188 -0
  216. package/src/compat/next/preferred-region.ts +39 -0
  217. package/src/compat/next/redirects.ts +131 -0
  218. package/src/compat/next/resource-hints.ts +136 -0
  219. package/src/compat/next/rewrites.ts +350 -0
  220. package/src/compat/next/root-params.ts +142 -0
  221. package/src/compat/next/router.cjs +49 -0
  222. package/src/compat/next/router.ts +143 -0
  223. package/src/compat/next/script.tsx +355 -0
  224. package/src/compat/next/server-only.ts +3 -0
  225. package/src/compat/next/server.ts +28 -0
  226. package/src/compat/next/svgr.ts +58 -0
  227. package/src/compat/next/telemetry.ts +77 -0
  228. package/src/compat/next/user-agent.ts +100 -0
  229. package/src/compat/next/web-vitals.ts +56 -0
  230. package/src/compat/otel/api.ts +95 -0
  231. package/src/compat/otel/client-trace-metadata.ts +71 -0
  232. package/src/compat/otel/fetch-span.ts +77 -0
  233. package/src/compat/otel/tracer.ts +944 -0
  234. package/src/compat/pages/client-plugin.ts +108 -0
  235. package/src/compat/pages/index.ts +527 -0
  236. package/src/compat/pages/router-state.ts +94 -0
  237. package/src/compat/ppr/io.ts +38 -0
  238. package/src/compat/ppr/missing-root-params.ts +105 -0
  239. package/src/compat/ppr/root-params-scan.ts +164 -0
  240. package/src/compat/ppr/root-params-transform.ts +75 -0
  241. package/src/compat/ppr/root-params.ts +129 -0
  242. package/src/compat/ppr/segment-config-incompat.ts +34 -0
  243. package/src/compat/protocol.ts +202 -0
  244. package/src/compat/react/client.ts +59 -0
  245. package/src/compat/react/compiler-runtime.ts +60 -0
  246. package/src/compat/react/dom-client.ts +115 -0
  247. package/src/compat/react/dom-react-server.ts +20 -0
  248. package/src/compat/react/dom-server.ts +40 -0
  249. package/src/compat/react/dom.ts +154 -0
  250. package/src/compat/react/preact.ts +522 -0
  251. package/src/compat/react/react-server.ts +84 -0
  252. package/src/compat/react/router-shim.ts +26 -0
  253. package/src/compat/react/server-component-use.ts +48 -0
  254. package/src/compat/react/server-inserted-html.ts +87 -0
  255. package/src/compat/react/server.ts +156 -0
  256. package/src/compat/react/view-transition.ts +60 -0
  257. package/src/compat/register/actions.ts +875 -0
  258. package/src/compat/register/boot.ts +141 -0
  259. package/src/compat/register/build-tier.ts +11 -0
  260. package/src/compat/register/build.ts +182 -0
  261. package/src/compat/register/bundler.ts +587 -0
  262. package/src/compat/register/cache.ts +85 -0
  263. package/src/compat/register/client-errors.ts +18 -0
  264. package/src/compat/register/config.ts +17 -0
  265. package/src/compat/register/css-extras.ts +120 -0
  266. package/src/compat/register/edge-runtime.ts +6 -0
  267. package/src/compat/register/errors.ts +46 -0
  268. package/src/compat/register/export.ts +23 -0
  269. package/src/compat/register/font.ts +36 -0
  270. package/src/compat/register/hooks.ts +34 -0
  271. package/src/compat/register/image.ts +133 -0
  272. package/src/compat/register/index.ts +111 -0
  273. package/src/compat/register/instrumentation-client.ts +35 -0
  274. package/src/compat/register/lifecycle.ts +86 -0
  275. package/src/compat/register/mdx.ts +48 -0
  276. package/src/compat/register/middleware.ts +36 -0
  277. package/src/compat/register/misc.ts +44 -0
  278. package/src/compat/register/otel.ts +288 -0
  279. package/src/compat/register/pages-api.ts +473 -0
  280. package/src/compat/register/ppr.ts +56 -0
  281. package/src/compat/register/protocol.ts +57 -0
  282. package/src/compat/register/proxy.ts +127 -0
  283. package/src/compat/register/render.ts +268 -0
  284. package/src/compat/register/routing.ts +410 -0
  285. package/src/compat/register/segment.ts +1903 -0
  286. package/src/compat/register/static-image.ts +21 -0
  287. package/src/compat/register/typed-routes.ts +35 -0
  288. package/src/compat/register/usecache.ts +131 -0
  289. package/src/compat/register/validation.ts +56 -0
  290. package/src/compat/segment/loading-boundary.ts +113 -0
  291. package/src/compat/segment/page-slot.ts +200 -0
  292. package/src/compat/segment/tree.ts +481 -0
  293. package/src/compat/segment/vary-key.ts +102 -0
  294. package/src/compat/segment/vary-params.ts +551 -0
  295. package/src/compat/static-params.ts +33 -0
  296. package/src/compat/tsconfig-defaults.ts +301 -0
  297. package/src/compat/typecheck/index.ts +1481 -0
  298. package/src/compat/typecheck/worker.ts +26 -0
  299. package/src/compat/typed-routes/index.ts +92 -0
  300. package/src/compat/typed-routes/manifest.ts +356 -0
  301. package/src/compat/typed-routes/typegen.ts +566 -0
  302. package/src/compat/validation/errors.ts +159 -0
  303. package/src/compat/validation/index.ts +1770 -0
  304. package/src/compat/validation/prerender-diagnostics.ts +1508 -0
  305. package/src/compat-bootstrap.ts +67 -0
  306. package/src/config.ts +218 -0
  307. package/src/css/build.ts +697 -0
  308. package/src/css/index.ts +2 -0
  309. package/src/css/postcss.ts +236 -0
  310. package/src/css/worker.ts +34 -0
  311. package/src/dev/client-actions.ts +35 -0
  312. package/src/dev/client-chunk-store.ts +92 -0
  313. package/src/dev/client-key-cache.ts +178 -0
  314. package/src/dev/global-css-cache.ts +212 -0
  315. package/src/dev/imports.ts +2430 -0
  316. package/src/dev/module-cache.ts +721 -0
  317. package/src/dev/module-generations.ts +38 -0
  318. package/src/dev/module-transform.ts +188 -0
  319. package/src/dev/node-module-bundle-cache.ts +63 -0
  320. package/src/dev/restart-cache.ts +10 -0
  321. package/src/dev/route-bundle-key-cache.ts +154 -0
  322. package/src/dev/route-facts-cache.ts +223 -0
  323. package/src/dev/server.ts +1710 -0
  324. package/src/dynamic/source.ts +307 -0
  325. package/src/dynamic/tree-shake.ts +262 -0
  326. package/src/env.ts +92 -0
  327. package/src/extensions.ts +1898 -0
  328. package/src/index.ts +34 -0
  329. package/src/internal.ts +43 -0
  330. package/src/islands/boundary-error.ts +8 -0
  331. package/src/islands/static-children.ts +37 -0
  332. package/src/islands/static-slots.ts +106 -0
  333. package/src/ppr-postpone.ts +24 -0
  334. package/src/ppr.ts +784 -0
  335. package/src/proxy.ts +752 -0
  336. package/src/render/hooks.ts +384 -0
  337. package/src/render/index.ts +1 -0
  338. package/src/render/island-context.ts +47 -0
  339. package/src/render/metadata.ts +857 -0
  340. package/src/render/renderer.ts +7391 -0
  341. package/src/render/resource-hints.ts +44 -0
  342. package/src/render/slots.tsx +679 -0
  343. package/src/request/context.ts +396 -0
  344. package/src/resolve/engine.ts +219 -0
  345. package/src/resolve/imports.ts +1104 -0
  346. package/src/resolve/scan-facts.ts +474 -0
  347. package/src/resolve/source-text.ts +86 -0
  348. package/src/routing/forwarded.ts +41 -0
  349. package/src/routing/handler.ts +271 -0
  350. package/src/routing/href.ts +203 -0
  351. package/src/routing/metadata.ts +1018 -0
  352. package/src/routing/request-runtime.ts +43 -0
  353. package/src/routing/routes.ts +2560 -0
  354. package/src/routing/slots.ts +432 -0
  355. package/src/runtime/server.ts +3453 -0
  356. package/src/runtime/vendor.ts +1160 -0
  357. package/src/style-modules.d.ts +9 -0
  358. package/src/typegen.ts +151 -0
  359. package/src/types.ts +725 -0
  360. package/src/utils/ansi.ts +9 -0
  361. package/src/utils/content-type.ts +31 -0
  362. package/src/utils/decode.ts +7 -0
  363. package/src/utils/dev-profile.ts +31 -0
  364. package/src/utils/error-log.ts +29 -0
  365. package/src/utils/fs-cache.ts +31 -0
  366. package/src/utils/fs.ts +119 -0
  367. package/src/utils/html.ts +46 -0
  368. package/src/utils/serialize.ts +378 -0
  369. package/src/utils/source.ts +35 -0
  370. package/src/utils/verbose.ts +39 -0
  371. package/tsconfig.json +10 -0
@@ -0,0 +1,141 @@
1
+ // Boot-tier compat registration (COMPAT - may import core freely).
2
+ //
3
+ // The MINIMAL set of compat facts core reads before it compiles anything, kept in one deliberately
4
+ // shallow module so a dev boot never pulls the full compat graph. Everything registered here is
5
+ // consulted by boot-time core code:
6
+ //
7
+ // - route conventions / usage detectors / page extensions -> scanRoutes
8
+ // - `.scss`/`.sass` + CSS dependency resolution -> scanRoutes
9
+ // - bare-specifier aliases (module + import-alias registry) -> scanRoutes and registerServerRuntime,
10
+ // which latch the alias map at boot
11
+ // - proxy file names -> findProxyFile
12
+ // - lifecycle init hooks -> runInitHooks
13
+ //
14
+ // Everything else waits for registerCompatExtensions on the first compile/request. Registrars in the
15
+ // full tier that re-assign a value set here re-assign the SAME implementation, so the two tiers cannot
16
+ // disagree.
17
+
18
+ import type { ResolvedConfig } from '../../config';
19
+ import {
20
+ getProxyExtensions,
21
+ onExtensionHostReset,
22
+ registerLoadableExtensions,
23
+ registerPageExtensions,
24
+ setBundlerExtensions,
25
+ setCompatModeExtensions,
26
+ setCssExtensions,
27
+ setImportAliasExtensions,
28
+ setProxyExtensions,
29
+ } from '../../extensions';
30
+ import { findProxyFiles } from '../../proxy';
31
+ import {
32
+ packageNameOfSpecifier,
33
+ resolvePackageSpecifier,
34
+ setModuleAliases,
35
+ } from '../../resolve/imports';
36
+ import {
37
+ compatAliases,
38
+ missingCompatImportError,
39
+ nextCompatAliases,
40
+ nextCompatEnabled,
41
+ reactCompatEnabled,
42
+ reactCompilerOptions,
43
+ reactServerLayerAliases,
44
+ } from '../index';
45
+ import { transpilePackages } from '../bundler/config';
46
+ import { materializeNextCssSources, nextCssResolveDependency } from '../css/modules';
47
+ import { getNextConfig } from '../next/config-loader';
48
+ import { registerLifecycleBootHooks } from './lifecycle';
49
+ import { registerRoutingExtensions } from './routing';
50
+
51
+ /** Proxy entrypoint basenames Next supports (`middleware` is the legacy name). */
52
+ const NEXT_PROXY_NAMES = ['proxy', 'middleware'];
53
+
54
+ // Extensions core already carries as page/convention files (base list in
55
+ // routes.ts). Registering one of these is a no-op, so we filter them out and
56
+ // only register the genuinely-extra ones a configured pageExtensions adds.
57
+ const CORE_BASE_PAGE_EXTENSIONS = new Set(['tsx', 'ts', 'jsx', 'js', 'mjs']);
58
+
59
+ let registered = false;
60
+ // Host-scoped guard: a fresh host must be registered into again.
61
+ onExtensionHostReset(() => (registered = false));
62
+
63
+ export function registerCompatBootExtensions(config: ResolvedConfig): void {
64
+ if (registered) return;
65
+ registered = true;
66
+
67
+ setCompatModeExtensions({
68
+ nextEnabled: nextCompatEnabled,
69
+ reactEnabled: reactCompatEnabled,
70
+ reactCompilerOptions,
71
+ });
72
+ setImportAliasExtensions({
73
+ aliases: compatAliases,
74
+ clientSsrAliases: cfg => nextCompatAliases(cfg, 'server'),
75
+ missingImportError: missingCompatImportError,
76
+ reactServerLayerAliases,
77
+ });
78
+ // Route scanning (client-reference/boundary detection) resolves imports statically, with no per-call
79
+ // config to consult - register the same bare-specifier aliases the bundler uses so a server component
80
+ // importing e.g. `next/form` still resolves to its compat file and gets walked for 'use client'
81
+ // detection.
82
+ setModuleAliases(compatAliases(config, 'server'));
83
+ registerRoutingExtensions(config);
84
+ registerLifecycleBootHooks(config);
85
+
86
+ if (!nextCompatEnabled(config)) return;
87
+
88
+ registerCompatPageExtensions();
89
+ setBundlerExtensions({ resolveRouteDependency: resolveTranspiledRouteDependency() });
90
+ materializeNextCssSources(config);
91
+ setCssExtensions({
92
+ extraCssExtensions: () => ['.scss', '.sass'],
93
+ resolveCssDependency: nextCssResolveDependency(config),
94
+ });
95
+ setProxyExtensions({ names: NEXT_PROXY_NAMES, validateFiles: validateProxyFiles });
96
+ }
97
+
98
+ /**
99
+ * Register the extra page extensions the app's `pageExtensions` config declares
100
+ * (Next semantics: pageExtensions is authoritative; @next/mdx's createMDX
101
+ * appends `md`/`mdx`). Only extensions core does not already carry are
102
+ * registered, and only when the app actually configured pageExtensions. The
103
+ * matching MDX compilation is wired later, in register-mdx.
104
+ */
105
+ function registerCompatPageExtensions(): void {
106
+ const configured = getNextConfig().pageExtensions;
107
+ if (Array.isArray(configured)) {
108
+ const extras = configured.filter(
109
+ (ext): ext is string =>
110
+ typeof ext === 'string' && ext.length > 0 && !CORE_BASE_PAGE_EXTENSIONS.has(ext),
111
+ );
112
+ if (extras.length > 0) registerPageExtensions(...extras);
113
+ }
114
+ // Imported markdown is loadable even when not routable: `pageExtensions:
115
+ // ['mdx']` still allows `import Doc from './x.md'` through @next/mdx's
116
+ // /\.mdx?$/ rule, and the server runtime compiles both (dev/imports,
117
+ // transformSource). Without this the Bun load plugin never claims `.md` and
118
+ // the import falls through to the file loader (default export = the path).
119
+ registerLoadableExtensions('mdx', 'md');
120
+ }
121
+
122
+ /** B7 `transpilePackages` resolution used by the route scanner's module walk. */
123
+ function resolveTranspiledRouteDependency() {
124
+ const transpile = new Set(transpilePackages());
125
+ return (root: string, fromFile: string, specifier: string): string | undefined => {
126
+ const packageName = packageNameOfSpecifier(specifier);
127
+ if (!packageName || !transpile.has(packageName)) return undefined;
128
+ return resolvePackageSpecifier(root, fromFile, specifier, ['import', 'browser', 'default']);
129
+ };
130
+ }
131
+
132
+ /**
133
+ * Next's proxy/middleware diagnostics. Only an app that actually ships one of those files loads the proxy
134
+ * implementation - for everyone else this is the whole cost of proxy support at boot.
135
+ */
136
+ async function validateProxyFiles(config: ResolvedConfig): Promise<void> {
137
+ if (findProxyFiles(config, NEXT_PROXY_NAMES).length === 0) return;
138
+ const { registerProxyExtensions } = await import('./proxy');
139
+ registerProxyExtensions(config);
140
+ await getProxyExtensions().validateFiles(config);
141
+ }
@@ -0,0 +1,11 @@
1
+ // The build-only slice of compat registration (COMPAT - may import core freely). These five domains
2
+ // register nothing but build steps and build-complete hooks, and their extensions are read exclusively
3
+ // through getBuildExtensions() - so a dev server never touches them, yet their module graphs are the
4
+ // fattest part of the full tier. Kept behind one dynamic import so registerCompatExtensions can skip
5
+ // loading them entirely when it is only being asked to serve; the call order is unchanged either way.
6
+
7
+ export { registerBuildCompatExtensions } from './build';
8
+ export { registerTypedRoutesExtensions } from './typed-routes';
9
+ export { registerValidationExtensions } from './validation';
10
+ export { registerMiddlewareExtensions } from './middleware';
11
+ export { registerExportExtensions } from './export';
@@ -0,0 +1,182 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import {
4
+ registerBuildCompleteHooks,
5
+ setBuildCompatExtensions,
6
+ setCompatModeExtensions,
7
+ } from '../../extensions';
8
+ import type { BuildManifest } from '../../types';
9
+ import type { ResolvedConfig } from '../../config';
10
+ import { nextCompatEnabled, reactCompatEnabled, reactCompilerOptions } from '../index';
11
+ import { warnNextMetadataBuildIssues } from '../metadata';
12
+ import { getNextConfig } from '../next/config-loader';
13
+ import { preferredRegionForRoute } from '../next/preferred-region';
14
+ import { deploymentId } from '../bundler/config';
15
+ import { aliasGenerateStaticParams } from '../static-params';
16
+ import { takeCacheLifeStash } from '../cache/use-cache';
17
+ import { varyNamesFor, withVaryParamsTracking, type ResponseVaryParams } from '../segment/vary-params';
18
+ import { takeFontHeaderPreloads, fontLinkHeaderValue } from '../next/font/runtime';
19
+ import { takeResourceHintHeader } from '../next/resource-hints';
20
+ import {
21
+ bodySegmentFile,
22
+ buildRootTreePrefetch,
23
+ buildSegmentMeta,
24
+ DEFAULT_DYNAMIC_STALE_TIME_SECONDS,
25
+ DEFAULT_STATIC_STALE_TIME_SECONDS,
26
+ rootTreePrefetchText,
27
+ segmentDir,
28
+ segmentMetaFile,
29
+ treeSegmentFile,
30
+ } from '../segment/tree';
31
+ import { runBuildCompleteAdapter } from '../adapter/build-complete';
32
+
33
+ export function registerBuildCompatExtensions(): void {
34
+ registerBuildCompleteHooks(({ config, manifest }) =>
35
+ writeFunctionsConfigManifest(config.outPath, manifest),
36
+ );
37
+ registerBuildCompleteHooks(({ config }) => writeRequiredServerFilesManifest(config));
38
+ registerBuildCompleteHooks(({ config }) => writeTraceBuildFile(config));
39
+ // Next's `adapterPath` / NEXT_ADAPTER_PATH deployment-adapter hook.
40
+ registerBuildCompleteHooks(({ config, manifest }) =>
41
+ runBuildCompleteAdapter(config, manifest),
42
+ );
43
+ setCompatModeExtensions({
44
+ nextEnabled: nextCompatEnabled,
45
+ reactEnabled: reactCompatEnabled,
46
+ reactCompilerOptions,
47
+ });
48
+ setBuildCompatExtensions({
49
+ warnMetadataIssues: ({ appPath, routes, staticMetadataFiles }) =>
50
+ warnNextMetadataBuildIssues(appPath, routes, staticMetadataFiles),
51
+ nextOutputExport: () => getNextConfig().output === 'export',
52
+ nextOutputMode: () => {
53
+ const output = getNextConfig().output;
54
+ return output === 'export' || output === 'standalone' ? output : undefined;
55
+ },
56
+ nextScriptWorkersEnabled: () => {
57
+ const experimental = getNextConfig().experimental as
58
+ | { nextScriptWorkers?: boolean }
59
+ | undefined;
60
+ return experimental?.nextScriptWorkers === true;
61
+ },
62
+ defaultExpireTimeSeconds: () => {
63
+ const expireTime = getNextConfig().expireTime;
64
+ return typeof expireTime === 'number' ? expireTime : undefined;
65
+ },
66
+ withVaryParamsTracking,
67
+ varyNamesFor: (vary, kind) => varyNamesFor(vary as ResponseVaryParams, kind),
68
+ takeCacheLifeStash,
69
+ takeFontLinkHeader: () => {
70
+ // The full prerendered `Link` header: font preloads plus any react-dom
71
+ // preload()/preconnect() hints recorded on the prerender's work unit
72
+ // (capped by reactMaxHeadersLength). Static HITs replay it from the
73
+ // manifest since no response finalizer runs for them.
74
+ const fontValues = takeFontHeaderPreloads().map(fontLinkHeaderValue);
75
+ const hintValue = takeResourceHintHeader();
76
+ const values = [...fontValues, ...(hintValue ? [hintValue] : [])];
77
+ if (values.length === 0) return undefined;
78
+ return values.join(', ');
79
+ },
80
+ normalizeStaticParamsModule: aliasGenerateStaticParams,
81
+ defaultDynamicStaleTimeSeconds: DEFAULT_DYNAMIC_STALE_TIME_SECONDS,
82
+ defaultStaticStaleTimeSeconds: DEFAULT_STATIC_STALE_TIME_SECONDS,
83
+ buildRootTreePrefetch,
84
+ rootTreePrefetchText,
85
+ buildSegmentMeta,
86
+ segmentDir,
87
+ treeSegmentFile,
88
+ bodySegmentFile,
89
+ segmentMetaFile,
90
+ });
91
+ }
92
+
93
+ interface FunctionsConfigManifest {
94
+ version: number;
95
+ functions: Record<string, Record<string, unknown>>;
96
+ }
97
+
98
+ /**
99
+ * Next-compatible `.next/required-server-files.json`. Tooling (and the e2e
100
+ * harness's `next.deploymentId`) reads `config.deploymentId` back off this file
101
+ * to learn the id inlined into the client/worker graphs. Written only when a
102
+ * deployment id is configured, so apps without one keep the file absent and
103
+ * nothing that probes it changes behavior.
104
+ */
105
+ async function writeRequiredServerFilesManifest(config: ResolvedConfig): Promise<void> {
106
+ if (!nextCompatEnabled(config)) return;
107
+ const id = deploymentId();
108
+ if (!id) return;
109
+ const outDir = path.join(config.root, '.next');
110
+ await mkdir(outDir, { recursive: true });
111
+ await writeFile(
112
+ path.join(outDir, 'required-server-files.json'),
113
+ JSON.stringify({ version: 1, config: { deploymentId: id } }, null, 2),
114
+ );
115
+ }
116
+
117
+ // Anchored on globalThis so the timestamp survives the module being loaded
118
+ // twice (built copy vs. original) during a single build process.
119
+ const traceBuildGlobal = globalThis as unknown as { __pnextBuildStartedAt?: number };
120
+ traceBuildGlobal.__pnextBuildStartedAt ??= performance.now();
121
+
122
+ interface TraceEvent {
123
+ name: string;
124
+ id: number;
125
+ traceId: string;
126
+ duration: number;
127
+ parentId?: number;
128
+ }
129
+
130
+ /**
131
+ * Next-compatible `.next/trace-build`: newline-delimited JSON, each line a
132
+ * JSON array of trace events sharing one traceId. The e2e harness only reads
133
+ * this file to assert build phases ran (event names, root/child hierarchy),
134
+ * so real timings are approximated rather than instrumented per-phase.
135
+ */
136
+ async function writeTraceBuildFile(config: ResolvedConfig): Promise<void> {
137
+ if (!nextCompatEnabled(config)) return;
138
+ const traceId = randomTraceId();
139
+ const totalDuration = Math.max(1, performance.now() - (traceBuildGlobal.__pnextBuildStartedAt ?? 0));
140
+ const events: TraceEvent[] = [
141
+ { name: 'next-build', id: 1, traceId, duration: totalDuration },
142
+ { name: 'run-webpack', id: 2, parentId: 1, traceId, duration: totalDuration * 0.4 },
143
+ { name: 'run-typescript', id: 3, parentId: 1, traceId, duration: totalDuration * 0.2 },
144
+ { name: 'static-check', id: 4, parentId: 1, traceId, duration: totalDuration * 0.1 },
145
+ { name: 'static-generation', id: 5, parentId: 1, traceId, duration: totalDuration * 0.2 },
146
+ { name: 'collect-build-traces', id: 6, parentId: 1, traceId, duration: totalDuration * 0.05 },
147
+ { name: 'telemetry-flush', id: 7, parentId: 1, traceId, duration: 1 },
148
+ ];
149
+ const outDir = path.join(config.root, '.next');
150
+ await mkdir(outDir, { recursive: true });
151
+ await writeFile(path.join(outDir, 'trace-build'), `${JSON.stringify(events)}\n`);
152
+ }
153
+
154
+ function randomTraceId(): string {
155
+ return Array.from({ length: 16 }, () => Math.floor(Math.random() * 16).toString(16)).join('');
156
+ }
157
+
158
+ async function writeFunctionsConfigManifest(
159
+ outPath: string,
160
+ manifest: BuildManifest,
161
+ ): Promise<void> {
162
+ const routes = manifest.routes.filter(route => route.maxDuration !== undefined);
163
+ if (routes.length === 0) return;
164
+
165
+ const file = path.join(outPath, 'server', 'functions-config-manifest.json');
166
+ let current: FunctionsConfigManifest = { version: 1, functions: {} };
167
+ try {
168
+ current = JSON.parse(await readFile(file, 'utf8')) as FunctionsConfigManifest;
169
+ } catch {
170
+ current = { version: 1, functions: {} };
171
+ }
172
+ for (const route of routes) {
173
+ const regions = preferredRegionForRoute(route);
174
+ current.functions[route.route || '/'] = {
175
+ ...(current.functions[route.route || '/'] ?? {}),
176
+ maxDuration: route.maxDuration,
177
+ ...(regions ? { regions } : {}),
178
+ };
179
+ }
180
+ await mkdir(path.dirname(file), { recursive: true });
181
+ await writeFile(file, `${JSON.stringify(current, null, 2)}\n`);
182
+ }