@wular/pnext 0.0.4 → 0.0.7

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 (395) hide show
  1. package/README.md +22 -16
  2. package/bin/pnext +6 -1
  3. package/config/lint/base.js +7 -7
  4. package/config/ts/base.json +2 -4
  5. package/config/ts/react.json +2 -6
  6. package/package.json +23 -2
  7. package/reference/compat.md +87 -22
  8. package/reference/config.md +40 -93
  9. package/reference/css.md +42 -33
  10. package/reference/dev.md +26 -33
  11. package/reference/env.md +18 -20
  12. package/reference/getting-started.md +132 -0
  13. package/reference/metadata.md +31 -46
  14. package/reference/navigation.md +65 -105
  15. package/reference/performance.md +21 -142
  16. package/reference/rendering.md +78 -75
  17. package/reference/routing.md +97 -107
  18. package/reference/typegen.md +27 -29
  19. package/src/api/cache.ts +36 -37
  20. package/src/api/client-cache.ts +2 -2
  21. package/src/api/client-navigation.ts +121 -114
  22. package/src/api/dynamic.tsx +58 -55
  23. package/src/api/link.tsx +52 -53
  24. package/src/api/navigation.ts +59 -58
  25. package/src/api/server.ts +152 -144
  26. package/src/api/suspense.ts +4 -4
  27. package/src/cli/adapters/vercel-warm.ts +126 -121
  28. package/src/cli/adapters/vercel.ts +437 -443
  29. package/src/cli/analyze.ts +333 -144
  30. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  31. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  32. package/src/cli/build.ts +976 -978
  33. package/src/cli/create.ts +72 -64
  34. package/src/cli/dev.ts +116 -116
  35. package/src/cli/index.ts +94 -85
  36. package/src/cli/migrate/package-json.ts +73 -71
  37. package/src/cli/migrate/report.ts +32 -33
  38. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  39. package/src/cli/migrate/scan.ts +46 -46
  40. package/src/cli/migrate/spinner.ts +9 -9
  41. package/src/cli/migrate/tsconfig.ts +35 -35
  42. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  43. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  44. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  45. package/src/cli/start.ts +65 -66
  46. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  47. package/src/client/build.ts +802 -768
  48. package/src/client/chunk-fold.ts +245 -240
  49. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  50. package/src/client/entry.ts +162 -147
  51. package/src/client/prebuilt.ts +231 -223
  52. package/src/client/profile.ts +29 -29
  53. package/src/client/react-compiler.ts +20 -15
  54. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  55. package/src/client/reference-stub.ts +51 -51
  56. package/src/client/reference.ts +19 -19
  57. package/src/{api → client}/router/events.ts +32 -17
  58. package/src/{api → client}/router/history.ts +16 -16
  59. package/src/{api → client}/router/hub.ts +52 -53
  60. package/src/{api/router.ts → client/router/index.ts} +61 -60
  61. package/src/{api → client}/router/policies.ts +24 -24
  62. package/src/{api → client}/router/runtime.ts +2022 -1995
  63. package/src/{api → client}/router/types.ts +98 -98
  64. package/src/compat/actions/client-plugin.ts +42 -43
  65. package/src/compat/actions/client-stub.ts +14 -14
  66. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  67. package/src/compat/actions/config.ts +63 -64
  68. package/src/compat/actions/detect.ts +68 -68
  69. package/src/compat/actions/discovery.ts +105 -105
  70. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  71. package/src/compat/actions/early-submit.ts +1 -1
  72. package/src/compat/actions/endpoint.ts +198 -198
  73. package/src/compat/actions/extensions.ts +811 -0
  74. package/src/compat/actions/flight.ts +23 -23
  75. package/src/compat/actions/form-state.ts +34 -34
  76. package/src/compat/actions/hoist.ts +382 -236
  77. package/src/compat/actions/ids.ts +7 -12
  78. package/src/compat/actions/index.ts +8 -8
  79. package/src/compat/actions/instances.ts +46 -46
  80. package/src/compat/actions/origin.ts +47 -48
  81. package/src/compat/actions/protocol.ts +22 -22
  82. package/src/compat/actions/registry.ts +19 -19
  83. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  84. package/src/compat/actions/rewrite.ts +125 -125
  85. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  86. package/src/compat/actions/serve.ts +132 -136
  87. package/src/compat/actions/server-tag.ts +4 -4
  88. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  89. package/src/compat/actions/unrecognized-error.ts +4 -4
  90. package/src/compat/{index.ts → aliases.ts} +112 -109
  91. package/src/compat/bundler/bun-externals.ts +18 -18
  92. package/src/compat/bundler/cjs-exports.ts +271 -223
  93. package/src/compat/bundler/config.ts +116 -111
  94. package/src/compat/bundler/externals.ts +12 -12
  95. package/src/compat/bundler/import-meta-url.ts +19 -19
  96. package/src/compat/bundler/modularize-imports.ts +36 -33
  97. package/src/compat/bundler/new-url-asset.ts +22 -24
  98. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  99. package/src/compat/bundler/polyfill.ts +28 -28
  100. package/src/compat/bundler/react-compiler.ts +35 -29
  101. package/src/compat/bundler/react-profiler.tsx +11 -11
  102. package/src/compat/bundler/relay-transform.ts +48 -47
  103. package/src/compat/bundler/require-context.ts +119 -113
  104. package/src/compat/bundler/resolve-extensions.ts +19 -19
  105. package/src/compat/bundler/source-cache.ts +25 -25
  106. package/src/compat/bundler/static-imports.ts +7 -7
  107. package/src/compat/bundler/symlink-imports.ts +46 -46
  108. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  109. package/src/compat/bundler/wasm.ts +58 -60
  110. package/src/compat/bundler/webpack-loaders.ts +254 -241
  111. package/src/compat/bundler/worker.ts +101 -104
  112. package/src/compat/cache/build-flags.ts +29 -29
  113. package/src/compat/cache/build-prerender-errors.ts +40 -44
  114. package/src/compat/cache/custom-handler.ts +60 -53
  115. package/src/compat/cache/fetch-patch.ts +240 -240
  116. package/src/compat/cache/handler.ts +27 -31
  117. package/src/compat/cache/modern-handler.ts +148 -126
  118. package/src/compat/cache/resume-data-cache.ts +47 -45
  119. package/src/compat/cache/revalidate.ts +233 -232
  120. package/src/compat/cache/runtime-error.ts +35 -35
  121. package/src/compat/cache/use-cache-transform.ts +442 -417
  122. package/src/compat/cache/use-cache.ts +650 -614
  123. package/src/compat/cache-control.ts +140 -142
  124. package/src/compat/client/base-path.ts +21 -20
  125. package/src/compat/client/css-order.ts +18 -18
  126. package/src/compat/client/errors/bare-boundary.ts +11 -11
  127. package/src/compat/client/errors/control-flow.ts +23 -23
  128. package/src/compat/client/errors/error-boundary.ts +61 -61
  129. package/src/compat/client/errors/global-error.ts +101 -91
  130. package/src/compat/client/errors/install.ts +71 -72
  131. package/src/compat/client/errors/lazy.ts +23 -23
  132. package/src/compat/client/errors/primitive-throw.ts +47 -45
  133. package/src/compat/client/errors/soft-refresh.ts +4 -4
  134. package/src/compat/client/link-status.ts +33 -33
  135. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  136. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  137. package/src/compat/client/navigation-scroll.ts +63 -63
  138. package/src/compat/client/optimistic-routing.ts +93 -88
  139. package/src/compat/client/prefetch-cache.ts +23 -24
  140. package/src/compat/client/route-announcer.ts +35 -35
  141. package/src/compat/client/segment-cache-policy.ts +20 -20
  142. package/src/compat/client/segment-cache.ts +309 -315
  143. package/src/compat/client/segment-prefetch.ts +127 -132
  144. package/src/compat/client/trailing-slash.ts +5 -4
  145. package/src/compat/css/chunking.ts +113 -116
  146. package/src/compat/css/inline-css.ts +21 -21
  147. package/src/compat/css/lightningcss.ts +37 -38
  148. package/src/compat/css/modules.ts +161 -175
  149. package/src/compat/css/nonce.ts +7 -7
  150. package/src/compat/css/sass-plugin.ts +18 -21
  151. package/src/compat/css/sass.ts +150 -152
  152. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  153. package/src/compat/css/styled-jsx.ts +21 -21
  154. package/src/compat/edge-runtime.ts +27 -27
  155. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  156. package/src/compat/export/client.ts +29 -31
  157. package/src/compat/export/{index.ts → emit.ts} +111 -110
  158. package/src/compat/export/standalone.ts +62 -54
  159. package/src/compat/image-optimizer/cache.ts +51 -49
  160. package/src/compat/image-optimizer/detect.ts +52 -52
  161. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  162. package/src/compat/image-optimizer/source.ts +77 -80
  163. package/src/compat/lifecycle/after-scope.ts +26 -26
  164. package/src/compat/lifecycle/after.ts +48 -45
  165. package/src/compat/lifecycle/error-funnel.ts +98 -102
  166. package/src/compat/lifecycle/error-serialize.ts +30 -26
  167. package/src/compat/lifecycle/error-ui.ts +67 -32
  168. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  169. package/src/compat/lifecycle/instrumentation.ts +85 -85
  170. package/src/compat/lifecycle/node-console.ts +11 -11
  171. package/src/compat/lifecycle/testmode.ts +160 -132
  172. package/src/compat/mdx/compile.ts +60 -57
  173. package/src/compat/mdx/plugin.ts +11 -11
  174. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  175. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  176. package/src/compat/metadata.ts +75 -81
  177. package/src/compat/next/cache.ts +68 -69
  178. package/src/compat/next/canonical-url.ts +9 -9
  179. package/src/compat/next/client-cache.ts +19 -19
  180. package/src/compat/next/client-navigation.ts +112 -116
  181. package/src/compat/next/client-only.ts +1 -1
  182. package/src/compat/next/client-script.tsx +99 -93
  183. package/src/compat/next/client-server.ts +10 -10
  184. package/src/compat/next/config-loader.ts +176 -173
  185. package/src/compat/next/config.ts +7 -7
  186. package/src/compat/next/constants.cjs +6 -6
  187. package/src/compat/next/constants.ts +6 -6
  188. package/src/compat/next/custom-server.ts +26 -24
  189. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  190. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  191. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  192. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  193. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  194. package/src/compat/next/dynamic.tsx +21 -18
  195. package/src/compat/next/error.tsx +52 -52
  196. package/src/compat/next/font/cache.ts +74 -74
  197. package/src/compat/next/font/google.ts +2 -2
  198. package/src/compat/next/font/index.ts +1 -1
  199. package/src/compat/next/font/local.ts +3 -3
  200. package/src/compat/next/font/runtime-client.ts +17 -15
  201. package/src/compat/next/font/runtime.ts +443 -408
  202. package/src/compat/next/font/shared.ts +120 -108
  203. package/src/compat/next/form.tsx +63 -63
  204. package/src/compat/next/head.tsx +2 -2
  205. package/src/compat/next/headers.ts +103 -95
  206. package/src/compat/next/image/client.tsx +220 -0
  207. package/src/compat/next/image/config.ts +56 -58
  208. package/src/compat/next/image/optimizer.ts +40 -36
  209. package/src/compat/next/image/patterns.ts +37 -40
  210. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  211. package/src/compat/next/image/shared.ts +65 -57
  212. package/src/compat/next/image/static-metadata.ts +98 -107
  213. package/src/compat/next/image/validate.ts +79 -88
  214. package/src/compat/next/image.tsx +19 -23
  215. package/src/compat/next/index.ts +1 -1
  216. package/src/compat/next/legacy-image.tsx +59 -60
  217. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  218. package/src/compat/next/link.tsx +158 -158
  219. package/src/compat/next/navigation.cjs +12 -3
  220. package/src/compat/next/navigation.ts +48 -50
  221. package/src/compat/next/offline.ts +27 -27
  222. package/src/compat/next/og.ts +121 -124
  223. package/src/compat/next/preferred-region.ts +13 -14
  224. package/src/compat/next/redirects.ts +58 -56
  225. package/src/compat/next/resource-hints.ts +73 -76
  226. package/src/compat/next/rewrites.ts +130 -133
  227. package/src/compat/next/root-params.ts +45 -45
  228. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  229. package/src/compat/next/router.cjs +4 -2
  230. package/src/compat/next/router.ts +58 -61
  231. package/src/compat/next/script.tsx +108 -108
  232. package/src/compat/next/server-only.ts +1 -1
  233. package/src/compat/next/server.ts +19 -19
  234. package/src/compat/next/svgr.ts +18 -17
  235. package/src/compat/next/telemetry.ts +24 -24
  236. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  237. package/src/compat/next/user-agent.ts +53 -49
  238. package/src/compat/next/web-vitals.ts +22 -24
  239. package/src/compat/otel/api.ts +41 -41
  240. package/src/compat/otel/client-trace-metadata.ts +25 -27
  241. package/src/compat/otel/fetch-span.ts +29 -29
  242. package/src/compat/otel/tracer.ts +331 -331
  243. package/src/compat/pages/api.ts +456 -0
  244. package/src/compat/pages/client-plugin.ts +36 -36
  245. package/src/compat/pages/router-state.ts +34 -34
  246. package/src/compat/pages/{index.ts → router.ts} +130 -135
  247. package/src/compat/ppr/io.ts +12 -12
  248. package/src/compat/ppr/missing-root-params.ts +34 -38
  249. package/src/compat/ppr/root-params-scan.ts +66 -66
  250. package/src/compat/ppr/root-params-transform.ts +24 -26
  251. package/src/compat/ppr/root-params.ts +30 -30
  252. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  253. package/src/compat/protocol.ts +71 -70
  254. package/src/compat/react/action-state.ts +47 -48
  255. package/src/compat/react/client-lite.ts +15 -15
  256. package/src/compat/react/client.ts +4 -4
  257. package/src/compat/react/compiler-runtime.ts +11 -11
  258. package/src/compat/react/dom-client.ts +44 -44
  259. package/src/compat/react/dom-react-server.ts +10 -16
  260. package/src/compat/react/dom-server.ts +10 -10
  261. package/src/compat/react/dom.ts +52 -52
  262. package/src/compat/react/hooks-extra.ts +34 -35
  263. package/src/compat/react/parity.ts +64 -61
  264. package/src/compat/react/preact.ts +81 -82
  265. package/src/compat/react/react-server.ts +28 -28
  266. package/src/compat/react/router-shim.ts +1 -1
  267. package/src/compat/react/server-component-use.ts +8 -8
  268. package/src/compat/react/server-inserted-html.ts +30 -31
  269. package/src/compat/react/server.ts +53 -55
  270. package/src/compat/react/use.ts +32 -32
  271. package/src/compat/react/view-transition.ts +20 -20
  272. package/src/compat/register/actions.ts +35 -824
  273. package/src/compat/register/boot.ts +41 -41
  274. package/src/compat/register/build-tier.ts +5 -5
  275. package/src/compat/register/build.ts +74 -70
  276. package/src/compat/register/bundler.ts +161 -156
  277. package/src/compat/register/cache.ts +20 -20
  278. package/src/compat/register/client-errors.ts +3 -3
  279. package/src/compat/register/config.ts +6 -6
  280. package/src/compat/register/css-extras.ts +30 -34
  281. package/src/compat/register/edge-runtime.ts +3 -3
  282. package/src/compat/register/errors.ts +10 -12
  283. package/src/compat/register/export.ts +16 -16
  284. package/src/compat/register/font.ts +11 -11
  285. package/src/compat/register/hooks.ts +2 -2
  286. package/src/compat/register/image.ts +40 -40
  287. package/src/compat/register/index.ts +59 -62
  288. package/src/compat/register/instrumentation-client.ts +10 -10
  289. package/src/compat/register/lifecycle.ts +25 -28
  290. package/src/compat/register/mdx.ts +10 -10
  291. package/src/compat/register/middleware.ts +226 -16
  292. package/src/compat/register/otel.ts +80 -88
  293. package/src/compat/register/pages-api.ts +10 -463
  294. package/src/compat/register/ppr.ts +16 -16
  295. package/src/compat/register/protocol.ts +17 -18
  296. package/src/compat/register/proxy.ts +49 -51
  297. package/src/compat/register/render.ts +79 -76
  298. package/src/compat/register/routing.ts +162 -159
  299. package/src/compat/register/segment.ts +24 -1897
  300. package/src/compat/register/static-image.ts +3 -3
  301. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  302. package/src/compat/register/typed-routes.ts +14 -14
  303. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  304. package/src/compat/register/validation.ts +18 -18
  305. package/src/compat/segment/loading-boundary.ts +43 -45
  306. package/src/compat/segment/page-slot.ts +69 -69
  307. package/src/compat/segment/serve.ts +1884 -0
  308. package/src/compat/segment/tree.ts +113 -112
  309. package/src/compat/segment/vary-key.ts +38 -38
  310. package/src/compat/segment/vary-params.ts +138 -142
  311. package/src/compat/static-params.ts +14 -12
  312. package/src/compat/tsconfig-defaults.ts +87 -91
  313. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  314. package/src/compat/typecheck/worker.ts +15 -12
  315. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  316. package/src/compat/typed-routes/manifest.ts +174 -170
  317. package/src/compat/typed-routes/typegen.ts +127 -110
  318. package/src/compat/validation/errors.ts +16 -19
  319. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  320. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  321. package/src/compat-bootstrap.ts +16 -16
  322. package/src/config.ts +86 -69
  323. package/src/css/build.ts +230 -227
  324. package/src/css/postcss.ts +79 -80
  325. package/src/css/worker.ts +14 -15
  326. package/src/dev/client-actions.ts +10 -10
  327. package/src/dev/client-chunk-store.ts +27 -27
  328. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  329. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  330. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  331. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  332. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  333. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  334. package/src/dev/server.ts +804 -820
  335. package/src/env.ts +46 -43
  336. package/src/extensions.ts +491 -478
  337. package/src/index.ts +8 -8
  338. package/src/internal.ts +20 -23
  339. package/src/{islands → render}/boundary-error.ts +3 -3
  340. package/src/render/hooks.ts +71 -71
  341. package/src/render/island-context.ts +14 -14
  342. package/src/render/metadata.ts +310 -310
  343. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  344. package/src/{ppr.ts → render/ppr.ts} +244 -245
  345. package/src/render/renderer.ts +2087 -2082
  346. package/src/render/resource-hints.ts +16 -17
  347. package/src/render/slots.tsx +224 -235
  348. package/src/{islands → render}/static-children.ts +9 -12
  349. package/src/{islands → render}/static-slots.ts +37 -37
  350. package/src/{cache/context.ts → request/cache.ts} +20 -20
  351. package/src/request/context.ts +107 -107
  352. package/src/{dynamic/source.ts → resolve/dynamic.ts} +139 -139
  353. package/src/resolve/engine.ts +90 -77
  354. package/src/resolve/imports.ts +475 -463
  355. package/src/resolve/scan-facts.ts +318 -296
  356. package/src/resolve/source-text.ts +37 -37
  357. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  358. package/src/routing/forwarded.ts +19 -19
  359. package/src/routing/handler.ts +84 -91
  360. package/src/routing/href.ts +87 -70
  361. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  362. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  363. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  364. package/src/routing/routes.ts +827 -815
  365. package/src/routing/slots.ts +164 -160
  366. package/src/runtime/loader.ts +954 -0
  367. package/src/{dev → runtime}/module-cache.ts +309 -287
  368. package/src/{dev → runtime}/module-generations.ts +9 -9
  369. package/src/{dev → runtime}/module-transform.ts +81 -72
  370. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  371. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  372. package/src/runtime/vendor.ts +428 -406
  373. package/src/styles.d.ts +9 -0
  374. package/src/types.ts +324 -335
  375. package/src/utils/ansi.ts +5 -5
  376. package/src/utils/{source.ts → code.ts} +15 -12
  377. package/src/utils/content-type.ts +3 -3
  378. package/src/utils/decode.ts +2 -2
  379. package/src/utils/dev-profile.ts +13 -13
  380. package/src/utils/error-log.ts +6 -6
  381. package/src/utils/esbuild.ts +18 -18
  382. package/src/utils/fs-cache.ts +13 -13
  383. package/src/utils/fs.ts +57 -49
  384. package/src/utils/html.ts +20 -24
  385. package/src/utils/native-require.ts +8 -8
  386. package/src/utils/serialize.ts +139 -146
  387. package/src/utils/verbose.ts +18 -18
  388. package/reference/overview.md +0 -35
  389. package/src/cli/analyze-print.ts +0 -181
  390. package/src/compat/middleware/manifest.ts +0 -210
  391. package/src/compat/next/image-client.tsx +0 -215
  392. package/src/compat/next/link-usage.ts +0 -29
  393. package/src/css/index.ts +0 -2
  394. package/src/render/index.ts +0 -1
  395. package/src/style-modules.d.ts +0 -9
@@ -14,13 +14,13 @@
14
14
  // Ownership boundary: the CLIENT-side `compiler.define` merge lives in client/build.ts, not here - this
15
15
  // file only handles the SERVER graph.
16
16
 
17
- import { realpathSync } from 'node:fs';
18
- import { readFile } from 'node:fs/promises';
19
- import path from 'node:path';
20
- import type { OnLoadResult, Plugin } from 'esbuild';
21
- import type { ResolvedConfig } from '../../config';
22
- import type { ServerEsbuildPluginOptions } from '../../extensions';
23
- import { compatAliases, nextCompatEnabled, rewriteNextFontSource } from '../../compat';
17
+ import { realpathSync } from 'node:fs'
18
+ import { readFile } from 'node:fs/promises'
19
+ import path from 'node:path'
20
+ import type { OnLoadResult, Plugin } from 'esbuild'
21
+ import type { ResolvedConfig } from '../../config'
22
+ import type { ServerEsbuildPluginOptions } from '../../extensions'
23
+ import { compatAliases, nextCompatEnabled, rewriteNextFontSource } from '../../compat/aliases'
24
24
  import {
25
25
  getBundlerExtensions,
26
26
  getCompatModeExtensions,
@@ -32,7 +32,7 @@ import {
32
32
  setBundlerExtensions,
33
33
  setCompatModeExtensions,
34
34
  withSniff,
35
- } from '../../extensions';
35
+ } from '../../extensions'
36
36
  import {
37
37
  isEsmModuleFile,
38
38
  isWorkspacePackage,
@@ -44,9 +44,9 @@ import {
44
44
  setExternalPackagePolicy,
45
45
  setResolveExtensions,
46
46
  setTsConfigPath,
47
- } from '../../resolve/imports';
48
- import { setServerBundleConditions } from '../../runtime/server';
49
- import { escapeRegex, specifierSniffTokens } from '../../utils/source';
47
+ } from '../../resolve/imports'
48
+ import { setServerBundleConditions } from '../../runtime/loader'
49
+ import { escapeRegex, specifierSniffTokens } from '../../utils/code'
50
50
  import {
51
51
  cacheComponentsEnabled,
52
52
  compilerDefines,
@@ -63,21 +63,21 @@ import {
63
63
  tsconfigPath,
64
64
  transpilePackages,
65
65
  turbopackResolveAlias,
66
- } from '../bundler/config';
67
- import { createModularizeImportsTransform } from '../bundler/modularize-imports';
66
+ } from '../bundler/config'
67
+ import { createModularizeImportsTransform } from '../bundler/modularize-imports'
68
68
  import {
69
69
  createOptimizePackageImportsTransform,
70
70
  optimizedPackageSet,
71
- } from '../bundler/optimize-package-imports';
72
- import { createRelayTransform } from '../bundler/relay-transform';
71
+ } from '../bundler/optimize-package-imports'
72
+ import { createRelayTransform } from '../bundler/relay-transform'
73
73
  import {
74
74
  polyfillsChunkFileName,
75
75
  POLYFILLS_NOMODULE_SOURCE,
76
76
  POLYFILL_USAGE_TOKENS,
77
77
  rewriteUsagePolyfillImports,
78
- } from '../bundler/polyfill';
79
- import { rewriteBunBuiltinExternals } from '../bundler/bun-externals';
80
- import { clientExternalPackageResolvePlugin } from '../bundler/externals';
78
+ } from '../bundler/polyfill'
79
+ import { rewriteBunBuiltinExternals } from '../bundler/bun-externals'
80
+ import { clientExternalPackageResolvePlugin } from '../bundler/externals'
81
81
  import {
82
82
  clientDynamicCommonJsImportsPlugin,
83
83
  clientReferenceLoad,
@@ -86,63 +86,59 @@ import {
86
86
  recoverCommonJsNamedExportsPlugin,
87
87
  rewriteClientDynamicImportPromises,
88
88
  rewriteStaticCommonJsNamespaceImports,
89
- } from '../bundler/cjs-exports';
90
- import { rewriteImportMetaUrlSource } from '../bundler/import-meta-url';
91
- import {
92
- rewriteNewUrlAssetClientSource,
93
- rewriteNewUrlAssetSource,
94
- } from '../bundler/new-url-asset';
95
- import { rewriteReactProfilerImport } from '../bundler/react-compiler';
96
- import { rewriteRequireContextSource } from '../bundler/require-context';
97
- import { clientResolveExtensionsPlugin } from '../bundler/resolve-extensions';
98
- import { tsconfigPathsPlugin } from '../bundler/tsconfig-paths';
99
- import { fileMemoAsync } from '../bundler/source-cache';
100
- import { serverSymlinkImportPlugin, symlinkedImportsPossible } from '../bundler/symlink-imports';
101
- import { registerWasmModuleRuntime, wasmModulePlugin } from '../bundler/wasm';
89
+ } from '../bundler/cjs-exports'
90
+ import { rewriteImportMetaUrlSource } from '../bundler/import-meta-url'
91
+ import { rewriteNewUrlAssetClientSource, rewriteNewUrlAssetSource } from '../bundler/new-url-asset'
92
+ import { rewriteReactProfilerImport } from '../bundler/react-compiler'
93
+ import { rewriteRequireContextSource } from '../bundler/require-context'
94
+ import { clientResolveExtensionsPlugin } from '../bundler/resolve-extensions'
95
+ import { tsconfigPathsPlugin } from '../bundler/tsconfig-paths'
96
+ import { fileMemoAsync } from '../bundler/source-cache'
97
+ import { serverSymlinkImportPlugin, symlinkedImportsPossible } from '../bundler/symlink-imports'
98
+ import { registerWasmModuleRuntime, wasmModulePlugin } from '../bundler/wasm'
102
99
  import {
103
100
  hasWebpackLoaderRuleFor,
104
101
  registerWebpackLoaderRuleRuntime,
105
102
  rewriteResolveAliasImports,
106
103
  webpackLoaderRuleModule,
107
104
  webpackLoaderRulesPlugin,
108
- } from '../bundler/webpack-loaders';
109
- import { rewriteStaticCompatImports } from '../bundler/static-imports';
110
- import { createClientWorkerTransform } from '../bundler/worker';
111
- import { rewriteStyledJsxSource } from '../css/styled-jsx';
112
- import { getImagesConfig } from '../next/image/config';
113
- import { appUsesBlurPlaceholder } from '../next/image-usage';
114
- import { appUsesLegacyLink } from '../next/link-usage';
115
- import { rewriteLegacyLinkValidation } from '../next/link-validation-transform';
116
- import { pagesClientModulePlugin } from '../pages/client-plugin';
105
+ } from '../bundler/webpack-loaders'
106
+ import { rewriteStaticCompatImports } from '../bundler/static-imports'
107
+ import { createClientWorkerTransform } from '../bundler/worker'
108
+ import { rewriteStyledJsxSource } from '../css/styled-jsx'
109
+ import { getImagesConfig } from '../next/image/config'
110
+ import { appUsesBlurPlaceholder, appUsesLegacyLink } from '../next/usage'
111
+ import { rewriteLegacyLinkValidation } from '../next/link-transform'
112
+ import { pagesClientModulePlugin } from '../pages/client-plugin'
117
113
 
118
114
  export function registerBundlerExtensions(config: ResolvedConfig): void {
119
115
  // The alias registries (setImportAliasExtensions + setModuleAliases) are boot
120
116
  // facts — the route scanner and the server runtime latch them before the
121
117
  // first compile, so register-boot.ts owns them.
122
- if (!nextCompatEnabled(config)) return;
118
+ if (!nextCompatEnabled(config)) return
123
119
 
124
120
  // B3: user-configured resolver extension order (empty -> core default). The
125
121
  // server resolver consumes it via setResolveExtensions; the client esbuild
126
122
  // graph gets a probe plugin applying the same order (registered further down
127
123
  // with the other client plugins, only when configured).
128
- const configuredExtensions = resolveExtensions();
129
- setResolveExtensions(configuredExtensions);
124
+ const configuredExtensions = resolveExtensions()
125
+ setResolveExtensions(configuredExtensions)
130
126
  // A custom `typescript.tsconfigPath` keeps compiler `paths` in a
131
127
  // non-default file esbuild never discovers; the client build then needs an
132
128
  // explicit resolver plugin (server graph consults setTsConfigPath directly).
133
- const customTsconfigPath = tsconfigPath();
134
- setTsConfigPath(customTsconfigPath ? path.resolve(config.root, customTsconfigPath) : undefined);
129
+ const customTsconfigPath = tsconfigPath()
130
+ setTsConfigPath(customTsconfigPath ? path.resolve(config.root, customTsconfigPath) : undefined)
135
131
 
136
132
  // `turbopack.rules` loader chains: the esbuild-plugin form (webpackLoaderPlugins
137
133
  // below) only covers the vendor/client build() passes. The server runtime's
138
134
  // per-file SSR loading goes through Bun's own require hooks instead, so a
139
135
  // configured rule extension without other pnext handling (e.g. `*.txt`) needs
140
136
  // its own registration to preempt Bun's native fallback loader.
141
- registerWebpackLoaderRuleRuntime(config);
137
+ registerWebpackLoaderRuleRuntime(config)
142
138
  // Same story for a bare `.wasm` import the server runtime loads directly (a
143
139
  // `this.importModule()` target's graph): Bun's native loader has no named
144
140
  // exports, so the runtime needs its own instantiating hook.
145
- registerWasmModuleRuntime(config);
141
+ registerWasmModuleRuntime(config)
146
142
  // A configured loader rule for an image/asset extension must preempt core's generic image/asset
147
143
  // resolver so the loader chain runs; core consults `hasLoaderRuleFor` before claiming the extension for
148
144
  // its own pipeline, then pulls the chain's output through `loaderRuleModule` - the server graph compiles
@@ -150,11 +146,11 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
150
146
  setAssetExtensions({
151
147
  hasLoaderRuleFor: hasWebpackLoaderRuleFor,
152
148
  loaderRuleModule: (specifier, importer) => webpackLoaderRuleModule(config, specifier, importer),
153
- });
149
+ })
154
150
 
155
151
  // B7: external/transpile package policy consulted by the server compile sites.
156
- const externals = serverExternalPackages();
157
- const transpile = new Set(transpilePackages());
152
+ const externals = serverExternalPackages()
153
+ const transpile = new Set(transpilePackages())
158
154
  setExternalPackagePolicy({
159
155
  external: name => externals.has(name),
160
156
  transpile: name =>
@@ -163,108 +159,111 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
163
159
  // symlinks to real paths, so they never reach a filter as node_modules.
164
160
  transpiled: () => [...transpile].filter(name => !externals.has(name)),
165
161
  esmExternals,
166
- });
162
+ })
167
163
  setExternalLoadResolver(({ root, fromFile, specifier, target }) => {
168
164
  const packageName = specifier.startsWith('#')
169
165
  ? packageNameForFile(fromFile)
170
- : packageNameOfSpecifier(specifier);
171
- if (!packageName || !externals.has(packageName)) return undefined;
166
+ : packageNameOfSpecifier(specifier)
167
+ if (!packageName || !externals.has(packageName)) return undefined
172
168
 
173
169
  const conditions =
174
170
  target === 'client'
175
171
  ? ['import', 'browser', 'require', 'default']
176
172
  : target === 'edge'
177
173
  ? ['react-server', 'edge-light', 'browser', 'module', 'import', 'default']
178
- : ['node', 'import', 'default'];
174
+ : ['node', 'import', 'default']
179
175
  if (specifier.startsWith('#')) {
180
- return resolvePackageImportSpecifier(root, fromFile, specifier, conditions);
176
+ return resolvePackageImportSpecifier(root, fromFile, specifier, conditions)
181
177
  }
182
178
 
183
- const imported = resolvePackageSpecifier(root, fromFile, specifier, conditions);
179
+ const imported = resolvePackageSpecifier(root, fromFile, specifier, conditions)
184
180
  if (target === 'client' || !imported || esmExternals() !== true || isEsmModuleFile(imported)) {
185
- return imported;
181
+ return imported
186
182
  }
187
183
  const requireConditions =
188
184
  target === 'edge'
189
185
  ? ['react-server', 'edge-light', 'browser', 'module', 'require', 'import', 'default']
190
- : ['node', 'require', 'default'];
191
- return resolvePackageSpecifier(root, fromFile, specifier, requireConditions) ?? imported;
192
- });
186
+ : ['node', 'require', 'default']
187
+ return resolvePackageSpecifier(root, fromFile, specifier, requireConditions) ?? imported
188
+ })
193
189
  // B4/B5(next-js): rendering follows it only with Cache Components; core
194
190
  // adds react-server for server vendor bundles.
195
- setServerBundleConditions(() => (cacheComponentsEnabled() ? ['next-js'] : []));
191
+ setServerBundleConditions(() => (cacheComponentsEnabled() ? ['next-js'] : []))
196
192
 
197
193
  // modularizeImports: split barrel `import { A, B } from '<spec>'` into
198
194
  // per-member imports BEFORE path-alias resolution, so the emitted specifiers
199
195
  // still flow through tsconfig `paths`. Registered as a server pre-transform
200
196
  // (runs ahead of the static-compat alias rewrites below) and a client
201
197
  // transform; a no-op when unconfigured.
202
- const modularize = modularizeImports();
198
+ const modularize = modularizeImports()
203
199
  if (Object.keys(modularize).length > 0) {
204
- const modularizeTransform = createModularizeImportsTransform(modularize);
205
- registerServerSourcePreTransforms(modularizeTransform);
206
- registerClientSourceTransforms(modularizeTransform);
200
+ const modularizeTransform = createModularizeImportsTransform(modularize)
201
+ registerServerSourcePreTransforms(modularizeTransform)
202
+ registerClientSourceTransforms(modularizeTransform)
207
203
  }
208
204
 
209
205
  // optimizePackageImports: rewrite a barrel package's named imports to the leaf modules its entry
210
206
  // re-exports them from, so the vendor pipeline compiles - and the server evaluates - only what the
211
207
  // route named. Same chain position as modularizeImports, so the emitted leaf specifiers still flow
212
208
  // through alias/path resolution.
213
- const optimizedPackages = optimizedPackageSet(optimizePackageImports());
214
- const optimizeTransform = createOptimizePackageImportsTransform(optimizedPackages, config.root);
215
- registerServerSourcePreTransforms(optimizeTransform);
216
- registerClientSourceTransforms(optimizeTransform);
209
+ const optimizedPackages = optimizedPackageSet(optimizePackageImports())
210
+ const optimizeTransform = createOptimizePackageImportsTransform(optimizedPackages, config.root)
211
+ registerServerSourcePreTransforms(optimizeTransform)
212
+ registerClientSourceTransforms(optimizeTransform)
217
213
 
218
214
  // compiler.relay: replace `graphql`...`` tagged templates with the artifact
219
215
  // relay-compiler generated for the operation. Registered as a pre-transform
220
216
  // for the same reason modularizeImports is — the injected artifact imports
221
217
  // must still flow through alias/path resolution.
222
- const relay = relayCompilerConfig();
218
+ const relay = relayCompilerConfig()
223
219
  if (relay) {
224
- const relayTransform = createRelayTransform(relay);
225
- registerServerSourcePreTransforms(relayTransform);
226
- registerClientSourceTransforms(relayTransform);
220
+ const relayTransform = createRelayTransform(relay)
221
+ registerServerSourcePreTransforms(relayTransform)
222
+ registerClientSourceTransforms(relayTransform)
227
223
  }
228
224
 
229
225
  // Next font/root-params rewrites must precede generic server transforms.
230
- const fontSniff = ['next/font', 'next/root-params'];
226
+ const fontSniff = ['next/font', 'next/root-params']
231
227
  registerServerSourcePreTransforms(
232
228
  withSniff(fontSniff, (source, file, root) =>
233
229
  rewriteNextFontSource(source, file, 'server', root),
234
230
  ),
235
- );
231
+ )
236
232
  registerClientSourceTransforms(
237
233
  withSniff(fontSniff, (source, file, root) =>
238
234
  rewriteNextFontSource(source, file, 'client', root),
239
235
  ),
240
- );
241
- const linkSniff = ['Link', 'legacyBehavior'];
242
- registerServerSourcePreTransforms(withSniff(linkSniff, rewriteLegacyLinkValidation));
243
- registerClientSourceTransforms(withSniff(linkSniff, rewriteLegacyLinkValidation));
244
- registerServerSourcePreTransforms(withSniff(['<style'], rewriteStyledJsxSource));
245
- registerClientSourceTransforms(withSniff(['<style'], rewriteStyledJsxSource));
246
- registerServerSourceTransforms(withSniff(["'bun", '"bun'], rewriteBunBuiltinExternals));
236
+ )
237
+ const linkSniff = ['Link', 'legacyBehavior']
238
+ registerServerSourcePreTransforms(withSniff(linkSniff, rewriteLegacyLinkValidation))
239
+ registerClientSourceTransforms(withSniff(linkSniff, rewriteLegacyLinkValidation))
240
+ registerServerSourcePreTransforms(withSniff(['<style'], rewriteStyledJsxSource))
241
+ registerClientSourceTransforms(withSniff(['<style'], rewriteStyledJsxSource))
242
+ registerServerSourceTransforms(withSniff(["'bun", '"bun'], rewriteBunBuiltinExternals))
247
243
  // Materialized fixtures can re-import original sources outside esbuild's
248
244
  // alias graph. Keep their static compat imports on the registered facades.
249
245
  // Leave React entrypoints for the resolver: RSC/proxy/middleware needs the
250
246
  // stricter react-server-layer overrides instead of the ordinary shims.
251
- const staticServerAliases = compatAliases(config, 'server');
252
- delete staticServerAliases.react;
253
- delete staticServerAliases['react-dom'];
247
+ const staticServerAliases = compatAliases(config, 'server')
248
+ delete staticServerAliases.react
249
+ delete staticServerAliases['react-dom']
254
250
  // The CJS facades live in compat/next, one level up from this register dir.
255
- const nextRoot = path.resolve(import.meta.dirname, '..', 'next');
251
+ const nextRoot = path.resolve(import.meta.dirname, '..', 'next')
256
252
  const requireAliases = {
257
253
  'next/navigation': path.join(nextRoot, 'navigation.cjs'),
258
254
  'next/router': path.join(nextRoot, 'router.cjs'),
259
- };
255
+ }
260
256
  registerServerSourceTransforms(
261
257
  withSniff(
262
258
  specifierSniffTokens([...Object.keys(staticServerAliases), ...Object.keys(requireAliases)]),
263
- (source, file) => rewriteStaticCompatImports(source, file, staticServerAliases, requireAliases),
259
+ (source, file) =>
260
+ rewriteStaticCompatImports(source, file, staticServerAliases, requireAliases),
264
261
  ),
265
- );
266
- const namespaceImportSniff = [/import\s+\*/];
267
- registerServerSourceTransforms(withSniff(namespaceImportSniff, rewriteStaticCommonJsNamespaceImports));
262
+ )
263
+ const namespaceImportSniff = [/import\s+\*/]
264
+ registerServerSourceTransforms(
265
+ withSniff(namespaceImportSniff, rewriteStaticCommonJsNamespaceImports),
266
+ )
268
267
  // `turbopack.resolveAlias` bare specifiers: the esbuild/Bun onResolve hooks
269
268
  // cover the graphs they own, but Bun's runtime resolver rejects an unknown
270
269
  // bare package before plugins run, so modules the server runtime loads
@@ -274,24 +273,26 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
274
273
  withSniff(specifierSniffTokens(Object.keys(turbopackResolveAlias())), (source, file) =>
275
274
  rewriteResolveAliasImports(source, file, config.root),
276
275
  ),
277
- );
278
- registerClientSourceTransforms(withSniff(namespaceImportSniff, rewriteStaticCommonJsNamespaceImports));
276
+ )
277
+ registerClientSourceTransforms(
278
+ withSniff(namespaceImportSniff, rewriteStaticCommonJsNamespaceImports),
279
+ )
279
280
 
280
281
  // B5: compiler.define + compiler.defineServer, both graphs, through the
281
282
  // bundler's own `define`. The server graph inlines both; the client graph
282
283
  // inlines `define` and folds `defineServer` keys to `undefined` so client
283
284
  // fallback branches stay reachable. `define` wins a key present in both.
284
- const { define, defineServer } = compilerDefines();
285
- const serverDefines = { ...define, ...defineServer };
285
+ const { define, defineServer } = compilerDefines()
286
+ const serverDefines = { ...define, ...defineServer }
286
287
  const clientDefines = {
287
288
  ...Object.fromEntries(Object.keys(defineServer).map(key => [key, 'undefined'])),
288
289
  ...define,
289
- };
290
+ }
290
291
 
291
292
  // B5: compiler.removeConsole — strip console.* calls from the client graph
292
293
  // via esbuild's `pure` option (unused-result calls are dropped in the
293
294
  // minified production build).
294
- const removeConsole = removeConsoleTargets();
295
+ const removeConsole = removeConsoleTargets()
295
296
 
296
297
  // experimental.swcEnvOptions: core-js polyfills for the targeted features, on
297
298
  // the client graph only — the server graph runs on the current Node/Bun and
@@ -301,7 +302,7 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
301
302
  withSniff(POLYFILL_USAGE_TOKENS, (source, file) =>
302
303
  rewriteUsagePolyfillImports(source, file, config),
303
304
  ),
304
- );
305
+ )
305
306
  }
306
307
 
307
308
  // B: `new URL('./asset.png', import.meta.url)` -> emitted /_next/static/media
@@ -313,8 +314,8 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
313
314
  withSniff(['import.meta.url', 'Profiler'], (source, file) =>
314
315
  rewriteNewUrlAssetSource(source, file),
315
316
  ),
316
- );
317
- registerServerSourceTransforms(withSniff(['import.meta.url'], rewriteImportMetaUrlSource));
317
+ )
318
+ registerServerSourceTransforms(withSniff(['import.meta.url'], rewriteImportMetaUrlSource))
318
319
  // Client order is load-bearing: the worker pass (async, registered below) and
319
320
  // the new-URL asset pass both read `import.meta.url`, which this one inlines.
320
321
  registerClientSourceTransforms(
@@ -322,49 +323,51 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
322
323
  withSniff(['Profiler'], rewriteReactProfilerImport),
323
324
  withSniff([/\.then\s*\(/], source => rewriteClientDynamicImportPromises(source)),
324
325
  withSniff(['import.meta.url'], rewriteImportMetaUrlSource),
325
- );
326
+ )
326
327
  // webpack's `require.context(dir, recursive, regExp)`: expanded on disk into static imports plus a
327
328
  // synthesized context object. Registered as a source transform, not an esbuild onLoad plugin, so it
328
329
  // reaches every consumer of the compiled source without preempting the extension-specific loaders -
329
330
  // the server graph through `rewriteServerSource` and the client graph through
330
331
  // `applyClientSourceTransforms`.
331
- const requireContextPaths = { outPath: config.outPath, workspaceRoot: config.workspaceRoot };
332
+ const requireContextPaths = { outPath: config.outPath, workspaceRoot: config.workspaceRoot }
332
333
  registerServerSourceTransforms(
333
334
  withSniff(['.context('], (source, file) =>
334
335
  rewriteRequireContextSource(source, file, requireContextPaths),
335
336
  ),
336
- );
337
+ )
337
338
  registerClientSourceTransforms(
338
339
  withSniff(['.context('], (source, file) =>
339
340
  rewriteRequireContextSource(source, file, requireContextPaths),
340
341
  ),
341
- );
342
+ )
342
343
  // Web Worker bundling: an async pre-transform, so it sees `import.meta.url`
343
344
  // before the sync chain above inlines it. The rest of the chain then runs on
344
345
  // its output — no companion re-application needed.
345
- const workerTransform = createClientWorkerTransform(config, configuredExtensions);
346
+ const workerTransform = createClientWorkerTransform(config, configuredExtensions)
346
347
  registerClientSourceAsyncPreTransforms(
347
- withSniff(['new Worker(', 'new SharedWorker('], (source, file) => workerTransform(source, file)),
348
- );
348
+ withSniff(['new Worker(', 'new SharedWorker('], (source, file) =>
349
+ workerTransform(source, file),
350
+ ),
351
+ )
349
352
 
350
353
  // next.config's `reactCompiler` is the same switch as pnext's own
351
354
  // `compat.reactCompiler`: fold it into the compat-mode options so the single
352
355
  // compiler pass (core's client-source loader) sees one answer.
353
- const priorReactCompilerOptions = getCompatModeExtensions().reactCompilerOptions;
356
+ const priorReactCompilerOptions = getCompatModeExtensions().reactCompilerOptions
354
357
  setCompatModeExtensions({
355
358
  reactCompilerOptions: cfg =>
356
359
  priorReactCompilerOptions(cfg) ?? (reactCompilerEnabled() ? { target: '18' } : undefined),
357
- });
360
+ })
358
361
 
359
362
  // Created once, not per build: the memo spans the hundreds of server builds
360
363
  // a vendor pass runs over the same workspace sources.
361
364
  const firstPartyRewrite = createFirstPartySourceRewrite(config, {
362
365
  transform: optimizeTransform,
363
366
  sniff: specifierSniffTokens(optimizedPackages),
364
- });
365
- const priorClient = getBundlerExtensions().clientEsbuildPlugins;
366
- const priorServer = getBundlerExtensions().serverEsbuildPlugins;
367
- const priorPure = getBundlerExtensions().clientPureFunctions;
367
+ })
368
+ const priorClient = getBundlerExtensions().clientEsbuildPlugins
369
+ const priorServer = getBundlerExtensions().serverEsbuildPlugins
370
+ const priorPure = getBundlerExtensions().clientPureFunctions
368
371
  setBundlerExtensions({
369
372
  clientPureFunctions: cfg => [...priorPure(cfg), ...(removeConsole ?? [])],
370
373
  serverDefines: () => serverDefines,
@@ -374,7 +377,7 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
374
377
  clientDefines: () => ({
375
378
  ...clientDefines,
376
379
  __PNEXT_IMAGE_BLUR__: String(appUsesBlurPlaceholder(config.root)),
377
- // Same one-sided source scan for `<Link legacyBehavior>` (link-usage.ts).
380
+ // Same one-sided source scan for `<Link legacyBehavior>` (usage.ts).
378
381
  __PNEXT_LINK_LEGACY__: String(appUsesLegacyLink(config.root)),
379
382
  // next.config `images` only ever reached the server global, so the client
380
383
  // fell back to the defaults — config-dependent props (path, qualities,
@@ -429,17 +432,17 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
429
432
  ...priorServer(cfg, opts),
430
433
  ],
431
434
  serverBundleEntry: commonJsInteropEntry,
432
- });
435
+ })
433
436
  }
434
437
 
435
438
  /** Spread helper for the plugins that skip registration when unconfigured. */
436
439
  function optional(plugin: Plugin | undefined): Plugin[] {
437
- return plugin ? [plugin] : [];
440
+ return plugin ? [plugin] : []
438
441
  }
439
442
 
440
443
  function webpackLoaderPlugins(cfg: ResolvedConfig, target: 'client' | 'server'): Plugin[] {
441
- const plugin = webpackLoaderRulesPlugin(cfg, target);
442
- return plugin ? [plugin] : [];
444
+ const plugin = webpackLoaderRulesPlugin(cfg, target)
445
+ return plugin ? [plugin] : []
443
446
  }
444
447
 
445
448
  // Source rewrites a bundle has to get BEFORE resolution, applied where esbuild reads the file:
@@ -451,44 +454,46 @@ function webpackLoaderPlugins(cfg: ResolvedConfig, target: 'client' | 'server'):
451
454
  // rewrite and the whole catalogue was compiled and evaluated.
452
455
  // Both are idempotent: re-running either on already-rewritten source is a no-op.
453
456
  interface FirstPartySourceRewrite {
454
- rewrite: (file: string) => Promise<OnLoadResult | undefined>;
457
+ rewrite: (file: string) => Promise<OnLoadResult | undefined>
455
458
  /** node_modules dirs transpilePackages opts back into the rewrite. */
456
- transpiledFilter?: RegExp;
459
+ transpiledFilter?: RegExp
457
460
  }
458
461
 
459
462
  function createFirstPartySourceRewrite(
460
463
  config: ResolvedConfig,
461
464
  optimize: { transform: (source: string, file: string) => string; sniff: readonly string[] },
462
465
  ): FirstPartySourceRewrite {
463
- const transpiled = transpilePackages();
466
+ const transpiled = transpilePackages()
464
467
  const rewrite = fileMemoAsync(async (file: string): Promise<OnLoadResult | undefined> => {
465
- let source: string;
468
+ let source: string
466
469
  try {
467
- source = await readFile(file, 'utf8');
470
+ source = await readFile(file, 'utf8')
468
471
  } catch {
469
- return undefined;
472
+ return undefined
470
473
  }
471
- let contents = source;
474
+ let contents = source
472
475
  if (contents.includes('next/font/')) {
473
- contents = rewriteNextFontSource(contents, file, 'server', config.root);
476
+ contents = rewriteNextFontSource(contents, file, 'server', config.root)
474
477
  }
475
478
  // TS only: what reaches this hook is first-party or transpiled source, and
476
479
  // both ship .ts/.tsx. The sniff keeps the parse off everything else.
477
480
  if (/\.tsx?$/.test(file) && optimize.sniff.some(token => contents.includes(token))) {
478
- contents = optimize.transform(contents, file);
481
+ contents = optimize.transform(contents, file)
479
482
  }
480
- if (contents === source) return undefined;
483
+ if (contents === source) return undefined
481
484
  // Keep the file's own syntax: `.ts` must not parse as `.tsx` (`<T>`
482
485
  // casts), and .js/.mjs/.cjs app source may legitimately contain JSX.
483
- return { contents, loader: file.endsWith('.ts') ? 'ts' : 'tsx' };
484
- });
486
+ return { contents, loader: file.endsWith('.ts') ? 'ts' : 'tsx' }
487
+ })
485
488
  return {
486
489
  rewrite,
487
490
  transpiledFilter:
488
491
  transpiled.length > 0
489
- ? new RegExp(`[\\\\/]node_modules[\\\\/](?:${transpiled.map(escapeRegex).join('|')})[\\\\/]`)
492
+ ? new RegExp(
493
+ `[\\\\/]node_modules[\\\\/](?:${transpiled.map(escapeRegex).join('|')})[\\\\/]`,
494
+ )
490
495
  : undefined,
491
- };
496
+ }
492
497
  }
493
498
 
494
499
  /**
@@ -508,8 +513,8 @@ function serverSourceLoadPlugin(
508
513
  build.onLoad({ filter: /\.[cm]?[jt]sx?$/, namespace: 'file' }, async args => {
509
514
  // `use client` in a CommonJS file -> tag its exports as references.
510
515
  if (/\.c?js$/.test(args.path)) {
511
- const references = await clientReferenceLoad(args.path);
512
- if (references) return references;
516
+ const references = await clientReferenceLoad(args.path)
517
+ if (references) return references
513
518
  }
514
519
  // First-party (or transpilePackages-opted) source: font/OPI rewrites.
515
520
  // Everything else under node_modules keeps esbuild's native load path.
@@ -517,13 +522,13 @@ function serverSourceLoadPlugin(
517
522
  !args.path.includes(`${path.sep}node_modules${path.sep}`) ||
518
523
  firstParty.transpiledFilter?.test(args.path)
519
524
  ) {
520
- const rewritten = await firstParty.rewrite(args.path);
521
- if (rewritten) return rewritten;
525
+ const rewritten = await firstParty.rewrite(args.path)
526
+ if (rewritten) return rewritten
522
527
  }
523
- return vendorClientBoundary?.(args.path);
524
- });
528
+ return vendorClientBoundary?.(args.path)
529
+ })
525
530
  },
526
- };
531
+ }
527
532
  }
528
533
 
529
534
  // Client twin of firstPartySourceLoadPlugin, OPI rewrite only (the client pipeline handles next/font
@@ -537,19 +542,19 @@ function firstPartyClientOptimizeImportsLoadPlugin(
537
542
  transform: (source: string, file: string) => string,
538
543
  sniff: readonly string[],
539
544
  ): Plugin {
540
- const roots = clientSourceRootPrefixes(config);
545
+ const roots = clientSourceRootPrefixes(config)
541
546
  const rewriteFile = fileMemoAsync(async (file: string) => {
542
- let source: string;
547
+ let source: string
543
548
  try {
544
- source = await readFile(file, 'utf8');
549
+ source = await readFile(file, 'utf8')
545
550
  } catch {
546
- return undefined;
551
+ return undefined
547
552
  }
548
- if (!/\.tsx?$/.test(file) || !sniff.some(token => source.includes(token))) return undefined;
549
- const contents = transform(source, file);
550
- if (contents === source) return undefined;
551
- return { contents, loader: file.endsWith('.ts') ? ('ts' as const) : ('tsx' as const) };
552
- });
553
+ if (!/\.tsx?$/.test(file) || !sniff.some(token => source.includes(token))) return undefined
554
+ const contents = transform(source, file)
555
+ if (contents === source) return undefined
556
+ return { contents, loader: file.endsWith('.ts') ? ('ts' as const) : ('tsx' as const) }
557
+ })
553
558
  return {
554
559
  name: 'pnext-first-party-client-optimize-imports-load',
555
560
  setup(build) {
@@ -558,30 +563,30 @@ function firstPartyClientOptimizeImportsLoadPlugin(
558
563
  roots.some(root => args.path.startsWith(root))
559
564
  ? undefined
560
565
  : rewriteFile(args.path),
561
- );
566
+ )
562
567
  },
563
- };
568
+ }
564
569
  }
565
570
 
566
571
  // The roots core's client-source loader claims under (client/build.ts
567
572
  // `clientSourceRoots`), each with a trailing separator so a sibling directory
568
573
  // sharing the prefix is not swallowed.
569
574
  function clientSourceRootPrefixes(config: ResolvedConfig): string[] {
570
- const roots = new Set<string>();
575
+ const roots = new Set<string>()
571
576
  for (const root of [config.root, config.workspaceRoot]) {
572
- const resolved = path.resolve(root);
573
- roots.add(resolved + path.sep);
577
+ const resolved = path.resolve(root)
578
+ roots.add(resolved + path.sep)
574
579
  try {
575
- roots.add(realpathSync.native(resolved) + path.sep);
580
+ roots.add(realpathSync.native(resolved) + path.sep)
576
581
  } catch {
577
582
  // Unresolvable root: its literal form already covers the files under it.
578
583
  }
579
584
  }
580
- return [...roots];
585
+ return [...roots]
581
586
  }
582
587
 
583
588
  // First-party workspace source is implicitly transpiled. Hoisting puts the
584
589
  // package only in the workspace root's node_modules, so both roots are asked.
585
590
  function isLinkedWorkspacePackage(config: ResolvedConfig, name: string) {
586
- return isWorkspacePackage(config.root, name) || isWorkspacePackage(config.workspaceRoot, name);
591
+ return isWorkspacePackage(config.root, name) || isWorkspacePackage(config.workspaceRoot, name)
587
592
  }