@wular/pnext 0.0.4 → 0.0.6

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 (392) hide show
  1. package/README.md +11 -11
  2. package/bin/pnext +1 -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 +1 -1
  8. package/reference/config.md +2 -2
  9. package/reference/css.md +13 -9
  10. package/reference/dev.md +1 -1
  11. package/reference/metadata.md +7 -7
  12. package/reference/navigation.md +35 -28
  13. package/reference/performance.md +70 -70
  14. package/reference/rendering.md +17 -17
  15. package/reference/routing.md +17 -17
  16. package/reference/typegen.md +12 -8
  17. package/src/api/cache.ts +36 -37
  18. package/src/api/client-cache.ts +2 -2
  19. package/src/api/client-navigation.ts +113 -109
  20. package/src/api/dynamic.tsx +58 -55
  21. package/src/api/link.tsx +49 -52
  22. package/src/api/navigation.ts +59 -58
  23. package/src/api/server.ts +152 -144
  24. package/src/api/suspense.ts +4 -4
  25. package/src/cli/adapters/vercel-warm.ts +126 -121
  26. package/src/cli/adapters/vercel.ts +437 -443
  27. package/src/cli/analyze.ts +333 -144
  28. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  29. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  30. package/src/cli/build.ts +976 -978
  31. package/src/cli/create.ts +71 -63
  32. package/src/cli/dev.ts +116 -116
  33. package/src/cli/index.ts +88 -85
  34. package/src/cli/migrate/package-json.ts +73 -71
  35. package/src/cli/migrate/report.ts +32 -33
  36. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  37. package/src/cli/migrate/scan.ts +46 -46
  38. package/src/cli/migrate/spinner.ts +9 -9
  39. package/src/cli/migrate/tsconfig.ts +35 -35
  40. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  41. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  42. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  43. package/src/cli/start.ts +65 -66
  44. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  45. package/src/client/build.ts +794 -768
  46. package/src/client/chunk-fold.ts +245 -240
  47. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  48. package/src/client/entry.ts +162 -147
  49. package/src/client/prebuilt.ts +231 -223
  50. package/src/client/profile.ts +29 -29
  51. package/src/client/react-compiler.ts +20 -15
  52. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  53. package/src/client/reference-stub.ts +51 -51
  54. package/src/client/reference.ts +19 -19
  55. package/src/{api → client}/router/events.ts +17 -17
  56. package/src/{api → client}/router/history.ts +16 -16
  57. package/src/{api → client}/router/hub.ts +52 -53
  58. package/src/{api/router.ts → client/router/index.ts} +61 -60
  59. package/src/{api → client}/router/policies.ts +24 -24
  60. package/src/{api → client}/router/runtime.ts +1988 -1992
  61. package/src/{api → client}/router/types.ts +93 -98
  62. package/src/compat/actions/client-plugin.ts +42 -43
  63. package/src/compat/actions/client-stub.ts +14 -14
  64. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  65. package/src/compat/actions/config.ts +63 -64
  66. package/src/compat/actions/detect.ts +68 -68
  67. package/src/compat/actions/discovery.ts +105 -105
  68. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  69. package/src/compat/actions/early-submit.ts +1 -1
  70. package/src/compat/actions/endpoint.ts +198 -198
  71. package/src/compat/actions/extensions.ts +811 -0
  72. package/src/compat/actions/flight.ts +23 -23
  73. package/src/compat/actions/form-state.ts +34 -34
  74. package/src/compat/actions/hoist.ts +382 -236
  75. package/src/compat/actions/ids.ts +7 -12
  76. package/src/compat/actions/index.ts +8 -8
  77. package/src/compat/actions/instances.ts +46 -46
  78. package/src/compat/actions/origin.ts +47 -48
  79. package/src/compat/actions/protocol.ts +22 -22
  80. package/src/compat/actions/registry.ts +19 -19
  81. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  82. package/src/compat/actions/rewrite.ts +125 -125
  83. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  84. package/src/compat/actions/serve.ts +132 -136
  85. package/src/compat/actions/server-tag.ts +4 -4
  86. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  87. package/src/compat/actions/unrecognized-error.ts +4 -4
  88. package/src/compat/{index.ts → aliases.ts} +112 -109
  89. package/src/compat/bundler/bun-externals.ts +18 -18
  90. package/src/compat/bundler/cjs-exports.ts +271 -223
  91. package/src/compat/bundler/config.ts +116 -111
  92. package/src/compat/bundler/externals.ts +12 -12
  93. package/src/compat/bundler/import-meta-url.ts +19 -19
  94. package/src/compat/bundler/modularize-imports.ts +36 -33
  95. package/src/compat/bundler/new-url-asset.ts +22 -24
  96. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  97. package/src/compat/bundler/polyfill.ts +28 -28
  98. package/src/compat/bundler/react-compiler.ts +35 -29
  99. package/src/compat/bundler/react-profiler.tsx +11 -11
  100. package/src/compat/bundler/relay-transform.ts +48 -47
  101. package/src/compat/bundler/require-context.ts +119 -113
  102. package/src/compat/bundler/resolve-extensions.ts +19 -19
  103. package/src/compat/bundler/source-cache.ts +25 -25
  104. package/src/compat/bundler/static-imports.ts +7 -7
  105. package/src/compat/bundler/symlink-imports.ts +46 -46
  106. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  107. package/src/compat/bundler/wasm.ts +58 -60
  108. package/src/compat/bundler/webpack-loaders.ts +254 -241
  109. package/src/compat/bundler/worker.ts +101 -104
  110. package/src/compat/cache/build-flags.ts +29 -29
  111. package/src/compat/cache/build-prerender-errors.ts +40 -44
  112. package/src/compat/cache/custom-handler.ts +60 -53
  113. package/src/compat/cache/fetch-patch.ts +240 -240
  114. package/src/compat/cache/handler.ts +27 -31
  115. package/src/compat/cache/modern-handler.ts +148 -126
  116. package/src/compat/cache/resume-data-cache.ts +47 -45
  117. package/src/compat/cache/revalidate.ts +233 -232
  118. package/src/compat/cache/runtime-error.ts +35 -35
  119. package/src/compat/cache/use-cache-transform.ts +442 -417
  120. package/src/compat/cache/use-cache.ts +650 -614
  121. package/src/compat/cache-control.ts +140 -142
  122. package/src/compat/client/base-path.ts +21 -20
  123. package/src/compat/client/css-order.ts +18 -18
  124. package/src/compat/client/errors/bare-boundary.ts +11 -11
  125. package/src/compat/client/errors/control-flow.ts +23 -23
  126. package/src/compat/client/errors/error-boundary.ts +61 -61
  127. package/src/compat/client/errors/global-error.ts +101 -91
  128. package/src/compat/client/errors/install.ts +71 -72
  129. package/src/compat/client/errors/lazy.ts +23 -23
  130. package/src/compat/client/errors/primitive-throw.ts +47 -45
  131. package/src/compat/client/errors/soft-refresh.ts +4 -4
  132. package/src/compat/client/link-status.ts +33 -33
  133. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  134. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  135. package/src/compat/client/navigation-scroll.ts +63 -63
  136. package/src/compat/client/optimistic-routing.ts +93 -88
  137. package/src/compat/client/prefetch-cache.ts +23 -24
  138. package/src/compat/client/route-announcer.ts +35 -35
  139. package/src/compat/client/segment-cache-policy.ts +20 -20
  140. package/src/compat/client/segment-cache.ts +309 -315
  141. package/src/compat/client/segment-prefetch.ts +127 -132
  142. package/src/compat/client/trailing-slash.ts +5 -4
  143. package/src/compat/css/chunking.ts +113 -116
  144. package/src/compat/css/inline-css.ts +21 -21
  145. package/src/compat/css/lightningcss.ts +37 -38
  146. package/src/compat/css/modules.ts +161 -175
  147. package/src/compat/css/nonce.ts +7 -7
  148. package/src/compat/css/sass-plugin.ts +18 -21
  149. package/src/compat/css/sass.ts +150 -152
  150. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  151. package/src/compat/css/styled-jsx.ts +21 -21
  152. package/src/compat/edge-runtime.ts +27 -27
  153. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  154. package/src/compat/export/client.ts +29 -31
  155. package/src/compat/export/{index.ts → emit.ts} +111 -110
  156. package/src/compat/export/standalone.ts +62 -54
  157. package/src/compat/image-optimizer/cache.ts +51 -49
  158. package/src/compat/image-optimizer/detect.ts +52 -52
  159. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  160. package/src/compat/image-optimizer/source.ts +77 -80
  161. package/src/compat/lifecycle/after-scope.ts +26 -26
  162. package/src/compat/lifecycle/after.ts +48 -45
  163. package/src/compat/lifecycle/error-funnel.ts +98 -102
  164. package/src/compat/lifecycle/error-serialize.ts +30 -26
  165. package/src/compat/lifecycle/error-ui.ts +67 -32
  166. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  167. package/src/compat/lifecycle/instrumentation.ts +85 -85
  168. package/src/compat/lifecycle/node-console.ts +11 -11
  169. package/src/compat/lifecycle/testmode.ts +160 -132
  170. package/src/compat/mdx/compile.ts +60 -57
  171. package/src/compat/mdx/plugin.ts +11 -11
  172. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  173. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  174. package/src/compat/metadata.ts +75 -81
  175. package/src/compat/next/cache.ts +68 -69
  176. package/src/compat/next/canonical-url.ts +9 -9
  177. package/src/compat/next/client-cache.ts +19 -19
  178. package/src/compat/next/client-navigation.ts +112 -116
  179. package/src/compat/next/client-only.ts +1 -1
  180. package/src/compat/next/client-script.tsx +99 -93
  181. package/src/compat/next/client-server.ts +10 -10
  182. package/src/compat/next/config-loader.ts +176 -173
  183. package/src/compat/next/config.ts +7 -7
  184. package/src/compat/next/constants.cjs +6 -6
  185. package/src/compat/next/constants.ts +6 -6
  186. package/src/compat/next/custom-server.ts +26 -24
  187. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  188. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  189. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  190. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  191. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  192. package/src/compat/next/dynamic.tsx +21 -18
  193. package/src/compat/next/error.tsx +52 -52
  194. package/src/compat/next/font/cache.ts +74 -74
  195. package/src/compat/next/font/google.ts +2 -2
  196. package/src/compat/next/font/index.ts +1 -1
  197. package/src/compat/next/font/local.ts +3 -3
  198. package/src/compat/next/font/runtime-client.ts +17 -15
  199. package/src/compat/next/font/runtime.ts +443 -408
  200. package/src/compat/next/font/shared.ts +120 -108
  201. package/src/compat/next/form.tsx +63 -63
  202. package/src/compat/next/head.tsx +2 -2
  203. package/src/compat/next/headers.ts +103 -95
  204. package/src/compat/next/image/client.tsx +220 -0
  205. package/src/compat/next/image/config.ts +56 -58
  206. package/src/compat/next/image/optimizer.ts +40 -36
  207. package/src/compat/next/image/patterns.ts +37 -40
  208. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  209. package/src/compat/next/image/shared.ts +65 -57
  210. package/src/compat/next/image/static-metadata.ts +98 -107
  211. package/src/compat/next/image/validate.ts +79 -88
  212. package/src/compat/next/image.tsx +19 -23
  213. package/src/compat/next/index.ts +1 -1
  214. package/src/compat/next/legacy-image.tsx +59 -60
  215. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  216. package/src/compat/next/link.tsx +158 -158
  217. package/src/compat/next/navigation.cjs +12 -3
  218. package/src/compat/next/navigation.ts +48 -50
  219. package/src/compat/next/offline.ts +27 -27
  220. package/src/compat/next/og.ts +121 -124
  221. package/src/compat/next/preferred-region.ts +13 -14
  222. package/src/compat/next/redirects.ts +58 -56
  223. package/src/compat/next/resource-hints.ts +73 -76
  224. package/src/compat/next/rewrites.ts +130 -133
  225. package/src/compat/next/root-params.ts +45 -45
  226. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  227. package/src/compat/next/router.cjs +4 -2
  228. package/src/compat/next/router.ts +58 -61
  229. package/src/compat/next/script.tsx +108 -108
  230. package/src/compat/next/server-only.ts +1 -1
  231. package/src/compat/next/server.ts +19 -19
  232. package/src/compat/next/svgr.ts +18 -17
  233. package/src/compat/next/telemetry.ts +24 -24
  234. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  235. package/src/compat/next/user-agent.ts +53 -49
  236. package/src/compat/next/web-vitals.ts +22 -24
  237. package/src/compat/otel/api.ts +41 -41
  238. package/src/compat/otel/client-trace-metadata.ts +25 -27
  239. package/src/compat/otel/fetch-span.ts +29 -29
  240. package/src/compat/otel/tracer.ts +331 -331
  241. package/src/compat/pages/api.ts +456 -0
  242. package/src/compat/pages/client-plugin.ts +36 -36
  243. package/src/compat/pages/router-state.ts +34 -34
  244. package/src/compat/pages/{index.ts → router.ts} +130 -135
  245. package/src/compat/ppr/io.ts +12 -12
  246. package/src/compat/ppr/missing-root-params.ts +34 -38
  247. package/src/compat/ppr/root-params-scan.ts +66 -66
  248. package/src/compat/ppr/root-params-transform.ts +24 -26
  249. package/src/compat/ppr/root-params.ts +30 -30
  250. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  251. package/src/compat/protocol.ts +71 -70
  252. package/src/compat/react/action-state.ts +47 -48
  253. package/src/compat/react/client-lite.ts +15 -15
  254. package/src/compat/react/client.ts +4 -4
  255. package/src/compat/react/compiler-runtime.ts +11 -11
  256. package/src/compat/react/dom-client.ts +44 -44
  257. package/src/compat/react/dom-react-server.ts +10 -16
  258. package/src/compat/react/dom-server.ts +10 -10
  259. package/src/compat/react/dom.ts +52 -52
  260. package/src/compat/react/hooks-extra.ts +34 -35
  261. package/src/compat/react/parity.ts +64 -61
  262. package/src/compat/react/preact.ts +81 -82
  263. package/src/compat/react/react-server.ts +28 -28
  264. package/src/compat/react/router-shim.ts +1 -1
  265. package/src/compat/react/server-component-use.ts +8 -8
  266. package/src/compat/react/server-inserted-html.ts +30 -31
  267. package/src/compat/react/server.ts +53 -55
  268. package/src/compat/react/use.ts +32 -32
  269. package/src/compat/react/view-transition.ts +20 -20
  270. package/src/compat/register/actions.ts +35 -824
  271. package/src/compat/register/boot.ts +41 -41
  272. package/src/compat/register/build-tier.ts +5 -5
  273. package/src/compat/register/build.ts +74 -70
  274. package/src/compat/register/bundler.ts +161 -156
  275. package/src/compat/register/cache.ts +20 -20
  276. package/src/compat/register/client-errors.ts +3 -3
  277. package/src/compat/register/config.ts +6 -6
  278. package/src/compat/register/css-extras.ts +30 -34
  279. package/src/compat/register/edge-runtime.ts +3 -3
  280. package/src/compat/register/errors.ts +10 -12
  281. package/src/compat/register/export.ts +16 -16
  282. package/src/compat/register/font.ts +11 -11
  283. package/src/compat/register/hooks.ts +2 -2
  284. package/src/compat/register/image.ts +40 -40
  285. package/src/compat/register/index.ts +59 -62
  286. package/src/compat/register/instrumentation-client.ts +10 -10
  287. package/src/compat/register/lifecycle.ts +25 -28
  288. package/src/compat/register/mdx.ts +10 -10
  289. package/src/compat/register/middleware.ts +226 -16
  290. package/src/compat/register/otel.ts +80 -88
  291. package/src/compat/register/pages-api.ts +10 -463
  292. package/src/compat/register/ppr.ts +16 -16
  293. package/src/compat/register/protocol.ts +17 -18
  294. package/src/compat/register/proxy.ts +49 -51
  295. package/src/compat/register/render.ts +79 -76
  296. package/src/compat/register/routing.ts +162 -159
  297. package/src/compat/register/segment.ts +24 -1897
  298. package/src/compat/register/static-image.ts +3 -3
  299. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  300. package/src/compat/register/typed-routes.ts +14 -14
  301. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  302. package/src/compat/register/validation.ts +18 -18
  303. package/src/compat/segment/loading-boundary.ts +43 -45
  304. package/src/compat/segment/page-slot.ts +69 -69
  305. package/src/compat/segment/serve.ts +1884 -0
  306. package/src/compat/segment/tree.ts +113 -112
  307. package/src/compat/segment/vary-key.ts +38 -38
  308. package/src/compat/segment/vary-params.ts +138 -142
  309. package/src/compat/static-params.ts +14 -12
  310. package/src/compat/tsconfig-defaults.ts +87 -91
  311. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  312. package/src/compat/typecheck/worker.ts +15 -12
  313. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  314. package/src/compat/typed-routes/manifest.ts +174 -170
  315. package/src/compat/typed-routes/typegen.ts +127 -110
  316. package/src/compat/validation/errors.ts +16 -19
  317. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  318. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  319. package/src/compat-bootstrap.ts +16 -16
  320. package/src/config.ts +69 -69
  321. package/src/css/build.ts +230 -227
  322. package/src/css/postcss.ts +79 -80
  323. package/src/css/worker.ts +14 -15
  324. package/src/dev/client-actions.ts +10 -10
  325. package/src/dev/client-chunk-store.ts +27 -27
  326. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  327. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  328. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  329. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  330. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  331. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  332. package/src/dev/server.ts +804 -820
  333. package/src/env.ts +46 -43
  334. package/src/extensions.ts +491 -478
  335. package/src/index.ts +8 -8
  336. package/src/internal.ts +20 -23
  337. package/src/{islands → render}/boundary-error.ts +3 -3
  338. package/src/render/hooks.ts +71 -71
  339. package/src/render/island-context.ts +14 -14
  340. package/src/render/metadata.ts +310 -310
  341. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  342. package/src/{ppr.ts → render/ppr.ts} +244 -245
  343. package/src/render/renderer.ts +2076 -2082
  344. package/src/render/resource-hints.ts +16 -17
  345. package/src/render/slots.tsx +224 -235
  346. package/src/{islands → render}/static-children.ts +9 -12
  347. package/src/{islands → render}/static-slots.ts +37 -37
  348. package/src/{cache/context.ts → request/cache.ts} +20 -20
  349. package/src/request/context.ts +107 -107
  350. package/src/{dynamic/source.ts → resolve/dynamic.ts} +139 -139
  351. package/src/resolve/engine.ts +90 -77
  352. package/src/resolve/imports.ts +475 -463
  353. package/src/resolve/scan-facts.ts +318 -296
  354. package/src/resolve/source-text.ts +37 -37
  355. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  356. package/src/routing/forwarded.ts +19 -19
  357. package/src/routing/handler.ts +84 -91
  358. package/src/routing/href.ts +69 -70
  359. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  360. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  361. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  362. package/src/routing/routes.ts +827 -815
  363. package/src/routing/slots.ts +164 -160
  364. package/src/runtime/loader.ts +952 -0
  365. package/src/{dev → runtime}/module-cache.ts +309 -287
  366. package/src/{dev → runtime}/module-generations.ts +9 -9
  367. package/src/{dev → runtime}/module-transform.ts +81 -72
  368. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  369. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  370. package/src/runtime/vendor.ts +425 -404
  371. package/src/styles.d.ts +9 -0
  372. package/src/types.ts +320 -335
  373. package/src/utils/ansi.ts +5 -5
  374. package/src/utils/{source.ts → code.ts} +15 -12
  375. package/src/utils/content-type.ts +3 -3
  376. package/src/utils/decode.ts +2 -2
  377. package/src/utils/dev-profile.ts +13 -13
  378. package/src/utils/error-log.ts +6 -6
  379. package/src/utils/esbuild.ts +18 -18
  380. package/src/utils/fs-cache.ts +13 -13
  381. package/src/utils/fs.ts +57 -49
  382. package/src/utils/html.ts +20 -24
  383. package/src/utils/native-require.ts +8 -8
  384. package/src/utils/serialize.ts +139 -146
  385. package/src/utils/verbose.ts +18 -18
  386. package/src/cli/analyze-print.ts +0 -181
  387. package/src/compat/middleware/manifest.ts +0 -210
  388. package/src/compat/next/image-client.tsx +0 -215
  389. package/src/compat/next/link-usage.ts +0 -29
  390. package/src/css/index.ts +0 -2
  391. package/src/render/index.ts +0 -1
  392. package/src/style-modules.d.ts +0 -9
@@ -6,10 +6,10 @@
6
6
  // same placement SWC's usage mode picks, so the polyfill runs ahead of that module and ships in its
7
7
  // chunk. Gated on swcEnvOptions being configured, so a pure app pays nothing.
8
8
 
9
- import { createHash } from 'node:crypto';
10
- import { createRequire } from 'node:module';
11
- import path from 'node:path';
12
- import type { ResolvedConfig } from '../../config';
9
+ import { createHash } from 'node:crypto'
10
+ import { createRequire } from 'node:module'
11
+ import path from 'node:path'
12
+ import type { ResolvedConfig } from '../../config'
13
13
 
14
14
  // No-module polyfills chunk (COMPAT - Next parity).
15
15
  //
@@ -19,41 +19,41 @@ import type { ResolvedConfig } from '../../config';
19
19
  // carries the same `noModule` script tag Next emits, which some suites assert on.
20
20
 
21
21
  /** Inert body for the no-module polyfills chunk (never runs in module browsers). */
22
- export const POLYFILLS_NOMODULE_SOURCE = '!function(){"use strict"}();\n';
22
+ export const POLYFILLS_NOMODULE_SOURCE = '!function(){"use strict"}();\n'
23
23
 
24
- let cachedPolyfillsFileName: string | undefined;
24
+ let cachedPolyfillsFileName: string | undefined
25
25
 
26
26
  /** Content-hashed filename for the emitted no-module polyfills chunk. */
27
27
  export function polyfillsChunkFileName(): string {
28
- if (cachedPolyfillsFileName) return cachedPolyfillsFileName;
29
- const hash = createHash('sha256').update(POLYFILLS_NOMODULE_SOURCE).digest('hex').slice(0, 16);
30
- return (cachedPolyfillsFileName = `polyfills-${hash}.js`);
28
+ if (cachedPolyfillsFileName) return cachedPolyfillsFileName
29
+ const hash = createHash('sha256').update(POLYFILLS_NOMODULE_SOURCE).digest('hex').slice(0, 16)
30
+ return (cachedPolyfillsFileName = `polyfills-${hash}.js`)
31
31
  }
32
32
 
33
33
  /** App-absolute served path of the polyfills chunk (before assetPrefix). */
34
34
  export function polyfillsChunkPath(): string {
35
- return `/_next/static/chunks/${polyfillsChunkFileName()}`;
35
+ return `/_next/static/chunks/${polyfillsChunkFileName()}`
36
36
  }
37
37
 
38
38
  // The core-js module SWC's usage mode emits per feature, keyed by the syntax
39
39
  // that pulls it in. Extend as more features are needed.
40
40
  const POLYFILL_FEATURES: { usage: RegExp; module: string }[] = [
41
41
  { usage: /\.replaceAll\s*\(/, module: 'core-js/modules/es.string.replace-all.js' },
42
- ];
42
+ ]
43
43
 
44
44
  /** Sniff tokens for the client transform below (one per feature usage). */
45
- export const POLYFILL_USAGE_TOKENS = POLYFILL_FEATURES.map(feature => feature.usage);
45
+ export const POLYFILL_USAGE_TOKENS = POLYFILL_FEATURES.map(feature => feature.usage)
46
46
 
47
47
  // core-js resolves from the app, not from pnext. One require per root, reused
48
48
  // across the transform's per-module calls.
49
- const polyfillRequires = new Map<string, NodeJS.Require>();
49
+ const polyfillRequires = new Map<string, NodeJS.Require>()
50
50
 
51
51
  function polyfillRequire(config: ResolvedConfig) {
52
- const existing = polyfillRequires.get(config.root);
53
- if (existing) return existing;
54
- const created = createRequire(path.join(config.root, 'pnext-polyfill-resolve.cjs'));
55
- polyfillRequires.set(config.root, created);
56
- return created;
52
+ const existing = polyfillRequires.get(config.root)
53
+ if (existing) return existing
54
+ const created = createRequire(path.join(config.root, 'pnext-polyfill-resolve.cjs'))
55
+ polyfillRequires.set(config.root, created)
56
+ return created
57
57
  }
58
58
 
59
59
  /**
@@ -70,19 +70,19 @@ export function rewriteUsagePolyfillImports(
70
70
  file: string,
71
71
  config: ResolvedConfig,
72
72
  ): string {
73
- const inApp = file.startsWith(`${config.root}${path.sep}`);
74
- if (!inApp || file.includes(`${path.sep}node_modules${path.sep}`)) return source;
75
- const require = polyfillRequire(config);
73
+ const inApp = file.startsWith(`${config.root}${path.sep}`)
74
+ if (!inApp || file.includes(`${path.sep}node_modules${path.sep}`)) return source
75
+ const require = polyfillRequire(config)
76
76
  const imports = POLYFILL_FEATURES.flatMap(feature => {
77
- if (!feature.usage.test(source)) return [];
77
+ if (!feature.usage.test(source)) return []
78
78
  try {
79
- return [`import ${JSON.stringify(require.resolve(feature.module))};`];
79
+ return [`import ${JSON.stringify(require.resolve(feature.module))};`]
80
80
  } catch {
81
- return [];
81
+ return []
82
82
  }
83
- });
84
- if (imports.length === 0) return source;
83
+ })
84
+ if (imports.length === 0) return source
85
85
  // After the directive prologue: a `'use client'` module must keep it first.
86
- const directive = /^(?:\s*['"][^'"]+['"];?\s*)*/.exec(source)?.[0] ?? '';
87
- return `${directive}${imports.join('\n')}\n${source.slice(directive.length)}`;
86
+ const directive = /^(?:\s*['"][^'"]+['"];?\s*)*/.exec(source)?.[0] ?? ''
87
+ return `${directive}${imports.join('\n')}\n${source.slice(directive.length)}`
88
88
  }
@@ -4,11 +4,11 @@
4
4
  // `reactCompiler` flag reaches it through the compat-mode options seam.
5
5
  // ---------------------------------------------------------------------------
6
6
 
7
- import path from 'node:path';
8
- import { rewriteFacts } from '../../resolve/scan-facts';
9
- import { spliceSource } from '../../dev/module-transform';
7
+ import path from 'node:path'
8
+ import { rewriteFacts } from '../../resolve/scan-facts'
9
+ import { spliceSource } from '../../runtime/module-transform'
10
10
 
11
- const profilerRuntimePath = path.join(import.meta.dirname, 'react-profiler.tsx');
11
+ const profilerRuntimePath = path.join(import.meta.dirname, 'react-profiler.tsx')
12
12
 
13
13
  /**
14
14
  * Split `Profiler` out of a `react` named import onto pnext's own Profiler
@@ -16,46 +16,52 @@ const profilerRuntimePath = path.join(import.meta.dirname, 'react-profiler.tsx')
16
16
  * matched by shape rather than by a line-anchored regex.
17
17
  */
18
18
  export function rewriteReactProfilerImport(source: string, file = 'module.tsx'): string {
19
- if (!source.includes('Profiler')) return source;
20
- const edits: { start: number; end: number; value: string }[] = [];
19
+ if (!source.includes('Profiler')) return source
20
+ const edits: { start: number; end: number; value: string }[] = []
21
21
  for (const statement of rewriteFacts(file, source).imports) {
22
- if (statement.specifier !== 'react') continue;
23
- const profilers = statement.bindings.filter(binding => binding.imported === 'Profiler');
24
- if (profilers.length === 0) continue;
22
+ if (statement.specifier !== 'react') continue
23
+ const profilers = statement.bindings.filter(binding => binding.imported === 'Profiler')
24
+ if (profilers.length === 0) continue
25
25
 
26
- const rest = statement.bindings.filter(binding => binding.imported !== 'Profiler');
27
- const named = rest.filter(binding => binding.imported !== 'default' && binding.imported !== '*');
28
- const other = rest.filter(binding => binding.imported === 'default' || binding.imported === '*');
29
- const indent = importIndent(source, statement.start);
30
- const clause = named.map(printBinding).join(', ');
31
- const prefix = other.map(binding => (binding.imported === '*' ? `* as ${binding.local}` : binding.local)).join(', ');
32
- const lines: string[] = [];
33
- if (prefix && clause) lines.push(`${indent}import ${prefix}, { ${clause} } from 'react';`);
34
- else if (prefix) lines.push(`${indent}import ${prefix} from 'react';`);
35
- else if (clause) lines.push(`${indent}import { ${clause} } from 'react';`);
26
+ const rest = statement.bindings.filter(binding => binding.imported !== 'Profiler')
27
+ const named = rest.filter(binding => binding.imported !== 'default' && binding.imported !== '*')
28
+ const other = rest.filter(binding => binding.imported === 'default' || binding.imported === '*')
29
+ const indent = importIndent(source, statement.start)
30
+ const clause = named.map(printBinding).join(', ')
31
+ const prefix = other
32
+ .map(binding => (binding.imported === '*' ? `* as ${binding.local}` : binding.local))
33
+ .join(', ')
34
+ const lines: string[] = []
35
+ if (prefix && clause) lines.push(`${indent}import ${prefix}, { ${clause} } from 'react';`)
36
+ else if (prefix) lines.push(`${indent}import ${prefix} from 'react';`)
37
+ else if (clause) lines.push(`${indent}import { ${clause} } from 'react';`)
36
38
  for (const profiler of profilers) {
37
39
  lines.push(
38
40
  `${indent}import { Profiler as ${profiler.local} } from ${JSON.stringify(profilerRuntimePath)};`,
39
- );
41
+ )
40
42
  }
41
- edits.push({ start: statement.start, end: statement.end, value: lines.join('\n').slice(indent.length) });
43
+ edits.push({
44
+ start: statement.start,
45
+ end: statement.end,
46
+ value: lines.join('\n').slice(indent.length),
47
+ })
42
48
  }
43
- return edits.length > 0 ? spliceSource(source, edits) : source;
49
+ return edits.length > 0 ? spliceSource(source, edits) : source
44
50
  }
45
51
 
46
52
  function printBinding(binding: { imported: string; local: string; type: boolean }) {
47
- const name = binding.imported === binding.local ? binding.local : `${binding.imported} as ${binding.local}`;
48
- return binding.type ? `type ${name}` : name;
53
+ const name =
54
+ binding.imported === binding.local ? binding.local : `${binding.imported} as ${binding.local}`
55
+ return binding.type ? `type ${name}` : name
49
56
  }
50
57
 
51
58
  /** Leading whitespace of the statement's own line (the splice keeps the first one). */
52
59
  function importIndent(source: string, start: number) {
53
- const lineStart = source.lastIndexOf('\n', start - 1) + 1;
54
- const indent = source.slice(lineStart, start);
55
- return /^[ \t]*$/.test(indent) ? indent : '';
60
+ const lineStart = source.lastIndexOf('\n', start - 1) + 1
61
+ const indent = source.slice(lineStart, start)
62
+ return /^[ \t]*$/.test(indent) ? indent : ''
56
63
  }
57
64
 
58
65
  export function rewriteReactProfilerServerSource(source: string, file?: string): string {
59
- return rewriteReactProfilerImport(source, file);
66
+ return rewriteReactProfilerImport(source, file)
60
67
  }
61
-
@@ -1,9 +1,9 @@
1
- import { Fragment, type ComponentChildren } from 'preact';
2
- import { useLayoutEffect, useRef } from 'preact/hooks';
1
+ import { Fragment, type ComponentChildren } from 'preact'
2
+ import { useLayoutEffect, useRef } from 'preact/hooks'
3
3
 
4
4
  export interface ProfilerProps {
5
- id: string;
6
- children?: ComponentChildren;
5
+ id: string
6
+ children?: ComponentChildren
7
7
  onRender?: (
8
8
  id: string,
9
9
  phase: 'mount' | 'update',
@@ -11,15 +11,15 @@ export interface ProfilerProps {
11
11
  baseDuration: number,
12
12
  startTime: number,
13
13
  commitTime: number,
14
- ) => void;
14
+ ) => void
15
15
  }
16
16
 
17
17
  export function Profiler({ id, children, onRender }: ProfilerProps) {
18
- const phase = useRef<'mount' | 'update'>('mount');
18
+ const phase = useRef<'mount' | 'update'>('mount')
19
19
  useLayoutEffect(() => {
20
- const now = typeof performance === 'undefined' ? 0 : performance.now();
21
- onRender?.(id, phase.current, 0, 0, now, now);
22
- phase.current = 'update';
23
- });
24
- return <Fragment>{children}</Fragment>;
20
+ const now = typeof performance === 'undefined' ? 0 : performance.now()
21
+ onRender?.(id, phase.current, 0, 0, now, now)
22
+ phase.current = 'update'
23
+ })
24
+ return <Fragment>{children}</Fragment>
25
25
  }
@@ -14,10 +14,10 @@
14
14
  // Everything is resolved relative to `process.cwd()`, matching the SWC transform's root. That is what
15
15
  // makes the multi-project fixture work: each sub-project is built with its own cwd.
16
16
 
17
- import { existsSync } from 'node:fs';
18
- import path from 'node:path';
19
- import { withSniff, type ServerSourceTransform } from '../../extensions';
20
- import type { RelayCompilerConfig } from './config';
17
+ import { existsSync } from 'node:fs'
18
+ import path from 'node:path'
19
+ import { withSniff, type ServerSourceTransform } from '../../extensions'
20
+ import type { RelayCompilerConfig } from './config'
21
21
 
22
22
  /** The artifact extension relay-compiler emits for each `language` setting. */
23
23
  function artifactExtensions(language: RelayCompilerConfig['language']): string[] {
@@ -25,92 +25,93 @@ function artifactExtensions(language: RelayCompilerConfig['language']): string[]
25
25
  // project can point `artifactDirectory` at output generated with a different
26
26
  // `language` than next.config declares (the multi-project fixture reads its
27
27
  // `language` from a sibling project's relay config).
28
- return language === 'typescript' ? ['.ts', '.js'] : ['.js', '.ts'];
28
+ return language === 'typescript' ? ['.ts', '.js'] : ['.js', '.ts']
29
29
  }
30
30
 
31
31
  /** `graphql`-tagged templates. GraphQL has no backticks, so a lazy scan is exact. */
32
32
  function relayTagPattern(): RegExp {
33
- return /(?<![\w$.])graphql\s*`([\s\S]*?)`/g;
33
+ return /(?<![\w$.])graphql\s*`([\s\S]*?)`/g
34
34
  }
35
35
 
36
- const OPERATION_NAME = /\b(?:query|mutation|subscription|fragment)\s+([A-Za-z_][\w]*)/;
36
+ const OPERATION_NAME = /\b(?:query|mutation|subscription|fragment)\s+([A-Za-z_][\w]*)/
37
37
 
38
38
  function isUnder(dir: string, file: string): boolean {
39
- const relative = path.relative(dir, file);
40
- return relative !== '' && !relative.startsWith('..') && !path.isAbsolute(relative);
39
+ const relative = path.relative(dir, file)
40
+ return relative !== '' && !relative.startsWith('..') && !path.isAbsolute(relative)
41
41
  }
42
42
 
43
43
  // Insert hoisted imports after any leading directive prologue ('use client' /
44
44
  // 'use server' / 'use strict') and optional shebang, so a client module's
45
45
  // `'use client'` stays the first statement.
46
46
  function injectAfterDirectives(source: string, injection: string): string {
47
- const prologue = /^(\uFEFF?(?:#![^\n]*\n)?(?:[ \t]*(['"])use [\w-]+\2[ \t]*;?[ \t]*(?:\r?\n|$))*)/.exec(
48
- source,
49
- );
50
- const index = prologue ? prologue[0].length : 0;
51
- return `${source.slice(0, index)}${injection}\n${source.slice(index)}`;
47
+ const prologue =
48
+ /^(\uFEFF?(?:#![^\n]*\n)?(?:[ \t]*(['"])use [\w-]+\2[ \t]*;?[ \t]*(?:\r?\n|$))*)/.exec(source)
49
+ const index = prologue ? prologue[0].length : 0
50
+ return `${source.slice(0, index)}${injection}\n${source.slice(index)}`
52
51
  }
53
52
 
54
53
  /**
55
54
  * Build a source transform applying `compiler.relay`. Returns a no-op transform
56
55
  * when nothing is configured so pure-core apps pay nothing.
57
56
  */
58
- export function createRelayTransform(relay: RelayCompilerConfig | undefined): ServerSourceTransform {
59
- if (!relay) return withSniff([], source => source);
57
+ export function createRelayTransform(
58
+ relay: RelayCompilerConfig | undefined,
59
+ ): ServerSourceTransform {
60
+ if (!relay) return withSniff([], source => source)
60
61
 
61
- const cwd = path.resolve(process.cwd());
62
- const srcDir = path.resolve(cwd, relay.src);
62
+ const cwd = path.resolve(process.cwd())
63
+ const srcDir = path.resolve(cwd, relay.src)
63
64
  const artifactDir = relay.artifactDirectory
64
65
  ? path.resolve(cwd, relay.artifactDirectory)
65
- : undefined;
66
- const extensions = artifactExtensions(relay.language);
67
- const resolved = new Map<string, string | undefined>();
66
+ : undefined
67
+ const extensions = artifactExtensions(relay.language)
68
+ const resolved = new Map<string, string | undefined>()
68
69
 
69
70
  /** The on-disk artifact for one operation name, or undefined when absent. */
70
71
  function artifactFor(fileDir: string, name: string): string | undefined {
71
72
  // Without `artifactDirectory`, relay-compiler writes `__generated__` next
72
73
  // to the source file.
73
- const directory = artifactDir ?? path.join(fileDir, '__generated__');
74
- const key = `${directory}\0${name}`;
75
- if (resolved.has(key)) return resolved.get(key);
76
- let found: string | undefined;
74
+ const directory = artifactDir ?? path.join(fileDir, '__generated__')
75
+ const key = `${directory}\0${name}`
76
+ if (resolved.has(key)) return resolved.get(key)
77
+ let found: string | undefined
77
78
  for (const extension of extensions) {
78
- const candidate = path.join(directory, `${name}.graphql${extension}`);
79
+ const candidate = path.join(directory, `${name}.graphql${extension}`)
79
80
  if (existsSync(candidate)) {
80
- found = candidate;
81
- break;
81
+ found = candidate
82
+ break
82
83
  }
83
84
  }
84
- resolved.set(key, found);
85
- return found;
85
+ resolved.set(key, found)
86
+ return found
86
87
  }
87
88
 
88
89
  return withSniff(['graphql'], (source, file) => {
89
- if (!source.includes('graphql`') && !/graphql\s*`/.test(source)) return source;
90
- const absolute = path.resolve(file);
90
+ if (!source.includes('graphql`') && !/graphql\s*`/.test(source)) return source
91
+ const absolute = path.resolve(file)
91
92
  // Next scopes the transform to `src`. Files outside the build cwd entirely
92
93
  // (materialized copies) are not covered by that check, so only skip a file
93
94
  // that lives under the cwd but outside the configured source root.
94
- if (isUnder(cwd, absolute) && !isUnder(srcDir, absolute)) return source;
95
+ if (isUnder(cwd, absolute) && !isUnder(srcDir, absolute)) return source
95
96
 
96
- const bindings = new Map<string, string>();
97
+ const bindings = new Map<string, string>()
97
98
  const replaced = source.replace(relayTagPattern(), (match, body: string) => {
98
- const name = OPERATION_NAME.exec(body)?.[1];
99
- if (!name) return match;
100
- const artifact = artifactFor(path.dirname(absolute), name);
101
- if (!artifact) return match;
102
- let binding = bindings.get(artifact);
99
+ const name = OPERATION_NAME.exec(body)?.[1]
100
+ if (!name) return match
101
+ const artifact = artifactFor(path.dirname(absolute), name)
102
+ if (!artifact) return match
103
+ let binding = bindings.get(artifact)
103
104
  if (!binding) {
104
- binding = `__pnext_relay_${bindings.size}`;
105
- bindings.set(artifact, binding);
105
+ binding = `__pnext_relay_${bindings.size}`
106
+ bindings.set(artifact, binding)
106
107
  }
107
- return binding;
108
- });
109
- if (bindings.size === 0) return source;
108
+ return binding
109
+ })
110
+ if (bindings.size === 0) return source
110
111
 
111
112
  const imports = [...bindings]
112
113
  .map(([artifact, binding]) => `import * as ${binding} from ${JSON.stringify(artifact)};`)
113
- .join('\n');
114
- return injectAfterDirectives(replaced, imports);
115
- });
114
+ .join('\n')
115
+ return injectAfterDirectives(replaced, imports)
116
+ })
116
117
  }