@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
@@ -1,4 +1,4 @@
1
- import { AsyncLocalStorage } from 'node:async_hooks';
1
+ import { AsyncLocalStorage } from 'node:async_hooks'
2
2
  import {
3
3
  cacheComponents,
4
4
  hangingPromise,
@@ -6,8 +6,8 @@ import {
6
6
  isRuntimePrefetchPrerender,
7
7
  markRuntimeApiOnAwait,
8
8
  PostponeError,
9
- } from '../ppr';
10
- import type { NextRequest, RouteParamValue } from '../types';
9
+ } from '../render/ppr'
10
+ import type { NextRequest, RouteParamValue } from '../types'
11
11
 
12
12
  // Request work-unit store (CORE seam for compat after()/onRequestError).
13
13
  //
@@ -21,56 +21,56 @@ import type { NextRequest, RouteParamValue } from '../types';
21
21
  // proxying on top of these accessors. Core only owns the store and the flush.
22
22
 
23
23
  /** The lifecycle phase the request is currently executing in. */
24
- export type WorkUnitPhase = 'render' | 'action' | 'handler' | 'middleware' | 'after';
24
+ export type WorkUnitPhase = 'render' | 'action' | 'handler' | 'middleware' | 'after'
25
25
 
26
26
  /** How the matched route is being served — set by the responding call site. */
27
- export type WorkUnitRouteKind = 'html' | 'data' | 'static-asset' | 'route-handler';
27
+ export type WorkUnitRouteKind = 'html' | 'data' | 'static-asset' | 'route-handler'
28
28
 
29
29
  /** Per-request work unit carrying phase + the after-task queue. */
30
30
  export interface WorkUnit {
31
- phase: WorkUnitPhase;
31
+ phase: WorkUnitPhase
32
32
  /** Tasks queued via queueAfterTask, drained once on response close. */
33
- afterTasks: (() => unknown)[];
33
+ afterTasks: (() => unknown)[]
34
34
  /** Guard so the after-queue flushes exactly once across all close paths. */
35
- flushed: boolean;
35
+ flushed: boolean
36
36
  /** How the response is being produced (set by the responding call site). */
37
- routeKind?: WorkUnitRouteKind;
37
+ routeKind?: WorkUnitRouteKind
38
38
  /** Caching disposition of the matched route, when known. */
39
- routeMode?: 'static' | 'isr' | 'dynamic';
39
+ routeMode?: 'static' | 'isr' | 'dynamic'
40
40
  /** Opaque hints for response finalizers. */
41
- responseHints?: Record<string, unknown>;
41
+ responseHints?: Record<string, unknown>
42
42
  /**
43
43
  * Opaque compat scratch space keyed by well-known symbols (testmode proxy
44
44
  * info, onRequestError dedupe flag). Core never reads these; it only carries
45
45
  * the store across the request lifecycle. Kept off the typed surface so core
46
46
  * grows no dependency on compat.
47
47
  */
48
- compat?: Record<symbol, unknown>;
48
+ compat?: Record<symbol, unknown>
49
49
  }
50
50
 
51
51
  // Anchored on globalThis (like requestStorage below) so compiled compat
52
52
  // bundles that inline their own copy of this module still observe the same
53
53
  // per-request work unit — canonical-URL recording happens in core while its
54
54
  // readers (pages-router SSR state, navigation hooks) run from built bundles.
55
- const WORK_UNIT_STORAGE = Symbol.for('pnext.workUnitStorage');
55
+ const WORK_UNIT_STORAGE = Symbol.for('pnext.workUnitStorage')
56
56
  const workUnitStorage = ((globalThis as Record<PropertyKey, unknown>)[WORK_UNIT_STORAGE] ??=
57
- new AsyncLocalStorage<WorkUnit>()) as AsyncLocalStorage<WorkUnit>;
57
+ new AsyncLocalStorage<WorkUnit>()) as AsyncLocalStorage<WorkUnit>
58
58
 
59
59
  /** Run `callback` inside a fresh request work unit (start/dev per-request scope). */
60
60
  export function runWithWorkUnit<T>(phase: WorkUnitPhase, callback: () => T): T {
61
- const unit: WorkUnit = { phase, afterTasks: [], flushed: false };
62
- return workUnitStorage.run(unit, callback);
61
+ const unit: WorkUnit = { phase, afterTasks: [], flushed: false }
62
+ return workUnitStorage.run(unit, callback)
63
63
  }
64
64
 
65
65
  /** The active request work unit, or undefined outside a request scope. */
66
66
  export function getWorkUnit(): WorkUnit | undefined {
67
- return workUnitStorage.getStore();
67
+ return workUnitStorage.getStore()
68
68
  }
69
69
 
70
70
  /** Set the current work-unit phase (compat toggles render/action/handler/...). */
71
71
  export function setPhase(phase: WorkUnitPhase): void {
72
- const unit = workUnitStorage.getStore();
73
- if (unit) unit.phase = phase;
72
+ const unit = workUnitStorage.getStore()
73
+ if (unit) unit.phase = phase
74
74
  }
75
75
 
76
76
  /** Record how the current request is being served (drives finalizers + funnel). */
@@ -79,11 +79,11 @@ export function setWorkUnitRoute(
79
79
  routeMode?: WorkUnit['routeMode'],
80
80
  responseHints?: Record<string, unknown>,
81
81
  ): void {
82
- const unit = workUnitStorage.getStore();
83
- if (!unit) return;
84
- unit.routeKind = routeKind;
85
- if (routeMode) unit.routeMode = routeMode;
86
- if (responseHints) unit.responseHints = responseHints;
82
+ const unit = workUnitStorage.getStore()
83
+ if (!unit) return
84
+ unit.routeKind = routeKind
85
+ if (routeMode) unit.routeMode = routeMode
86
+ if (responseHints) unit.responseHints = responseHints
87
87
  }
88
88
 
89
89
  /**
@@ -91,10 +91,10 @@ export function setWorkUnitRoute(
91
91
  * work unit is active. Compat's after() delegates here; core never enqueues.
92
92
  */
93
93
  export function queueAfterTask(task: () => unknown): boolean {
94
- const unit = workUnitStorage.getStore();
95
- if (!unit) return false;
96
- unit.afterTasks.push(task);
97
- return true;
94
+ const unit = workUnitStorage.getStore()
95
+ if (!unit) return false
96
+ unit.afterTasks.push(task)
97
+ return true
98
98
  }
99
99
 
100
100
  /**
@@ -104,9 +104,9 @@ export function queueAfterTask(task: () => unknown): boolean {
104
104
  * multiple close paths (stream end / redirect / abort / error).
105
105
  */
106
106
  export function flushWorkUnit(unit: WorkUnit | undefined = workUnitStorage.getStore()): void {
107
- if (!unit || unit.flushed) return;
108
- unit.flushed = true;
109
- if (unit.afterTasks.length === 0) return;
107
+ if (!unit || unit.flushed) return
108
+ unit.flushed = true
109
+ if (unit.afterTasks.length === 0) return
110
110
  // Drain under a SHALLOW COPY carrying `phase: 'after'` rather than mutating
111
111
  // the shared unit. The flush is detached and async, so setting `phase` on the
112
112
  // unit itself leaked: every later render seen under that unit (the build/PPR
@@ -115,36 +115,36 @@ export function flushWorkUnit(unit: WorkUnit | undefined = workUnitStorage.getSt
115
115
  // after()". Every other field stays shared by reference; only the phase and
116
116
  // the queue diverge, and nested after() enqueues onto the copy's queue via
117
117
  // the store, which is exactly what this loop drains.
118
- const afterUnit: WorkUnit = { ...unit, phase: 'after' };
118
+ const afterUnit: WorkUnit = { ...unit, phase: 'after' }
119
119
  const flushing = workUnitStorage.run(afterUnit, async () => {
120
120
  while (afterUnit.afterTasks.length) {
121
- const tasks = afterUnit.afterTasks;
122
- afterUnit.afterTasks = [];
121
+ const tasks = afterUnit.afterTasks
122
+ afterUnit.afterTasks = []
123
123
  for (const task of tasks) {
124
124
  try {
125
- await task();
125
+ await task()
126
126
  } catch (error) {
127
- console.error('after() task failed:', error);
127
+ console.error('after() task failed:', error)
128
128
  }
129
129
  }
130
130
  }
131
- });
132
- pendingFlushes.add(flushing);
133
- void flushing.finally(() => pendingFlushes.delete(flushing));
131
+ })
132
+ pendingFlushes.add(flushing)
133
+ void flushing.finally(() => pendingFlushes.delete(flushing))
134
134
  }
135
135
 
136
- const pendingFlushes = new Set<Promise<void>>();
136
+ const pendingFlushes = new Set<Promise<void>>()
137
137
 
138
138
  /**
139
139
  * Await all in-flight after-queue flushes (graceful shutdown). Bounded by
140
140
  * timeoutMs so a hung after() task can't block process exit.
141
141
  */
142
142
  export async function drainWorkUnits(timeoutMs = 10_000): Promise<void> {
143
- if (pendingFlushes.size === 0) return;
143
+ if (pendingFlushes.size === 0) return
144
144
  await Promise.race([
145
145
  Promise.allSettled([...pendingFlushes]),
146
146
  new Promise(resolve => setTimeout(resolve, timeoutMs)),
147
- ]);
147
+ ])
148
148
  }
149
149
 
150
150
  /**
@@ -158,52 +158,52 @@ export function flushWorkUnitOnClose(
158
158
  unit: WorkUnit | undefined,
159
159
  signal?: AbortSignal,
160
160
  ): Response {
161
- if (!unit) return response;
162
- if (signal) signal.addEventListener('abort', () => flushWorkUnit(unit), { once: true });
161
+ if (!unit) return response
162
+ if (signal) signal.addEventListener('abort', () => flushWorkUnit(unit), { once: true })
163
163
  if (!response.body) {
164
- flushWorkUnit(unit);
165
- return response;
164
+ flushWorkUnit(unit)
165
+ return response
166
166
  }
167
167
  // An explicit Content-Length means the body is fully buffered upstream (image
168
168
  // optimizer, static files) — nothing can enqueue after-tasks while it drains.
169
169
  // Re-wrapping it in a close-observing stream would switch the transfer to
170
170
  // chunked and drop the Content-Length header; flush immediately instead.
171
171
  if (response.headers.has('content-length')) {
172
- flushWorkUnit(unit);
173
- return response;
172
+ flushWorkUnit(unit)
173
+ return response
174
174
  }
175
175
  const observed = response.body.pipeThrough(
176
176
  new TransformStream({
177
177
  transform(chunk, controller) {
178
- controller.enqueue(chunk);
178
+ controller.enqueue(chunk)
179
179
  },
180
180
  flush() {
181
- flushWorkUnit(unit);
181
+ flushWorkUnit(unit)
182
182
  },
183
183
  }),
184
- );
184
+ )
185
185
  return new Response(observed, {
186
186
  status: response.status,
187
187
  statusText: response.statusText,
188
188
  headers: response.headers,
189
- });
189
+ })
190
190
  }
191
191
 
192
192
  interface RequestScope {
193
- request: NextRequest;
194
- params: Record<string, RouteParamValue>;
193
+ request: NextRequest
194
+ params: Record<string, RouteParamValue>
195
195
  /** Work registered via after() from 'next/server', flushed once the request callback settles. */
196
- afterCallbacks?: (() => unknown)[];
196
+ afterCallbacks?: (() => unknown)[]
197
197
  /** Optional response-headers channel render/handler paths may provide (e.g. draftMode set-cookie). */
198
- responseHeaders?: Headers;
198
+ responseHeaders?: Headers
199
199
  }
200
200
 
201
- const REQUEST_STORAGE = Symbol.for('pnext.requestStorage');
201
+ const REQUEST_STORAGE = Symbol.for('pnext.requestStorage')
202
202
  const requestStorage = ((globalThis as Record<PropertyKey, unknown>)[REQUEST_STORAGE] ??=
203
- new AsyncLocalStorage<RequestScope>()) as AsyncLocalStorage<RequestScope>;
203
+ new AsyncLocalStorage<RequestScope>()) as AsyncLocalStorage<RequestScope>
204
204
 
205
205
  export function currentRequest() {
206
- return requestStorage.getStore()?.request;
206
+ return requestStorage.getStore()?.request
207
207
  }
208
208
 
209
209
  // Work-unit store bridge for the deep-internal shim
@@ -217,29 +217,29 @@ export function currentRequest() {
217
217
  // The store is NEVER undefined: callers do `getStore().type` during build prerenders as well as live
218
218
  // requests. `prerender-runtime` mirrors Next's runtime-prefetch work unit; `prerender` covers any other
219
219
  // prerender scope, including the fallback when no request scope exists.
220
- const WORK_UNIT_EXTERNAL = Symbol.for('pnext.workUnitExternal');
220
+ const WORK_UNIT_EXTERNAL = Symbol.for('pnext.workUnitExternal')
221
221
 
222
222
  interface WorkUnitExternalStore {
223
- type: 'request' | 'prerender' | 'prerender-runtime';
224
- cookies: unknown;
225
- headers: Headers;
223
+ type: 'request' | 'prerender' | 'prerender-runtime'
224
+ cookies: unknown
225
+ headers: Headers
226
226
  }
227
227
 
228
228
  function workUnitExternalStore(): WorkUnitExternalStore {
229
- const request = currentRequest();
229
+ const request = currentRequest()
230
230
  const type = isRuntimePrefetchPrerender()
231
231
  ? 'prerender-runtime'
232
232
  : isPrerendering() || !request
233
233
  ? 'prerender'
234
- : 'request';
234
+ : 'request'
235
235
  return {
236
236
  type,
237
237
  cookies: request?.cookies,
238
238
  headers: request?.headers ?? new Headers(),
239
- };
239
+ }
240
240
  }
241
241
 
242
- (globalThis as Record<PropertyKey, unknown>)[WORK_UNIT_EXTERNAL] = workUnitExternalStore;
242
+ ;(globalThis as Record<PropertyKey, unknown>)[WORK_UNIT_EXTERNAL] = workUnitExternalStore
243
243
 
244
244
  /**
245
245
  * Capture the current request scope (if any) and return a wrapper that re-runs a function inside it.
@@ -249,13 +249,13 @@ function workUnitExternalStore(): WorkUnitExternalStore {
249
249
  * throws - matching Next's phase semantics.
250
250
  */
251
251
  export function captureRequestScope(): <T>(fn: () => T) => T {
252
- const scope = requestStorage.getStore();
253
- if (!scope) return fn => fn();
254
- return fn => requestStorage.run(scope, fn);
252
+ const scope = requestStorage.getStore()
253
+ if (!scope) return fn => fn()
254
+ return fn => requestStorage.run(scope, fn)
255
255
  }
256
256
 
257
257
  export function currentParams() {
258
- return requestStorage.getStore()?.params ?? {};
258
+ return requestStorage.getStore()?.params ?? {}
259
259
  }
260
260
 
261
261
  export function runWithRequest<T>(
@@ -264,28 +264,28 @@ export function runWithRequest<T>(
264
264
  params: Record<string, RouteParamValue> = {},
265
265
  extras: { responseHeaders?: Headers } = {},
266
266
  ): T {
267
- if (!request) return callback();
267
+ if (!request) return callback()
268
268
  const scope: RequestScope = {
269
269
  request,
270
270
  params,
271
271
  afterCallbacks: [],
272
272
  responseHeaders: extras.responseHeaders,
273
- };
274
- const result = requestStorage.run(scope, callback);
273
+ }
274
+ const result = requestStorage.run(scope, callback)
275
275
  if (isThenable(result)) {
276
276
  return (result as PromiseLike<unknown>).then(
277
277
  value => {
278
- void flushAfterCallbacks(scope);
279
- return value;
278
+ void flushAfterCallbacks(scope)
279
+ return value
280
280
  },
281
281
  error => {
282
- void flushAfterCallbacks(scope);
283
- throw error;
282
+ void flushAfterCallbacks(scope)
283
+ throw error
284
284
  },
285
- ) as T;
285
+ ) as T
286
286
  }
287
- void flushAfterCallbacks(scope);
288
- return result;
287
+ void flushAfterCallbacks(scope)
288
+ return result
289
289
  }
290
290
 
291
291
  /**
@@ -293,33 +293,33 @@ export function runWithRequest<T>(
293
293
  * settles. Returns false when no request scope is active.
294
294
  */
295
295
  export function registerAfterCallback(callback: () => unknown): boolean {
296
- const scope = requestStorage.getStore();
297
- if (!scope) return false;
298
- (scope.afterCallbacks ??= []).push(callback);
299
- return true;
296
+ const scope = requestStorage.getStore()
297
+ if (!scope) return false
298
+ ;(scope.afterCallbacks ??= []).push(callback)
299
+ return true
300
300
  }
301
301
 
302
302
  /** Response-headers channel for the active request scope, when a caller provided one. */
303
303
  export function currentResponseHeaders(): Headers | undefined {
304
- return requestStorage.getStore()?.responseHeaders;
304
+ return requestStorage.getStore()?.responseHeaders
305
305
  }
306
306
 
307
307
  async function flushAfterCallbacks(scope: RequestScope) {
308
308
  while (scope.afterCallbacks?.length) {
309
- const callbacks = scope.afterCallbacks;
310
- scope.afterCallbacks = [];
309
+ const callbacks = scope.afterCallbacks
310
+ scope.afterCallbacks = []
311
311
  for (const callback of callbacks) {
312
312
  try {
313
- await requestStorage.run(scope, callback);
313
+ await requestStorage.run(scope, callback)
314
314
  } catch (error) {
315
- console.error('after() callback failed:', error);
315
+ console.error('after() callback failed:', error)
316
316
  }
317
317
  }
318
318
  }
319
319
  }
320
320
 
321
321
  function isThenable(value: unknown): value is PromiseLike<unknown> {
322
- return typeof (value as { then?: unknown } | null | undefined)?.then === 'function';
322
+ return typeof (value as { then?: unknown } | null | undefined)?.then === 'function'
323
323
  }
324
324
 
325
325
  /**
@@ -331,39 +331,39 @@ function isThenable(value: unknown): value is PromiseLike<unknown> {
331
331
  * the same flag, and module-level rather than ALS-scoped because the calls it
332
332
  * looks for run outside the render's async context by definition.
333
333
  */
334
- const BAILOUT_PROBE = Symbol.for('pnext.dynamicBailoutProbe');
334
+ const BAILOUT_PROBE = Symbol.for('pnext.dynamicBailoutProbe')
335
335
 
336
336
  export function beginDynamicBailoutProbe(route: string): void {
337
- (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE] = route;
337
+ ;(globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE] = route
338
338
  }
339
339
 
340
340
  export function endDynamicBailoutProbe(): void {
341
- delete (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE];
341
+ delete (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE]
342
342
  }
343
343
 
344
344
  function dynamicBailoutRoute(): string | undefined {
345
- const route = (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE];
346
- return typeof route === 'string' ? route : undefined;
345
+ const route = (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE]
346
+ return typeof route === 'string' ? route : undefined
347
347
  }
348
348
 
349
349
  export function requireRequest(api: string) {
350
- const probeRoute = dynamicBailoutRoute();
350
+ const probeRoute = dynamicBailoutRoute()
351
351
  if (probeRoute !== undefined) {
352
352
  const error = new Error(
353
353
  `Route ${probeRoute} couldn't be rendered statically because it used \`${api.replace(/\(\)$/, '')}\`. ` +
354
354
  `See more info here: https://nextjs.org/docs/messages/dynamic-server-error`,
355
- );
356
- error.name = 'DynamicServerError';
357
- throw error;
355
+ )
356
+ error.name = 'DynamicServerError'
357
+ throw error
358
358
  }
359
- const request = currentRequest();
359
+ const request = currentRequest()
360
360
  if (!request) {
361
361
  // In a partial prerender, request access marks the surrounding Suspense
362
362
  // boundary as a dynamic hole rather than failing the build.
363
- if (isPrerendering()) throw new PostponeError(api);
364
- throw new Error(`${api} can only be used while rendering a dynamic PNext request.`);
363
+ if (isPrerendering()) throw new PostponeError(api)
364
+ throw new Error(`${api} can only be used while rendering a dynamic PNext request.`)
365
365
  }
366
- return request;
366
+ return request
367
367
  }
368
368
 
369
369
  /**
@@ -386,11 +386,11 @@ export function requestApiPromise<T>(api: string, produce: () => T): Promise<T>
386
386
  // Awaiting the resolved value arms the sync-IO abort: anything the render
387
387
  // computes with Date.now() & co. AFTER a runtime API resolved belongs to
388
388
  // the navigation, not the prefetch (see runWithRuntimePrefetchSyncIoAbort).
389
- return markRuntimeApiOnAwait(Promise.resolve(produce()));
389
+ return markRuntimeApiOnAwait(Promise.resolve(produce()))
390
390
  }
391
- return hangingPromise<T>(api);
391
+ return hangingPromise<T>(api)
392
392
  }
393
393
  // Legacy PPR (experimental_ppr, cacheComponents off): keep the call-site
394
394
  // throw so the existing shell path postpones exactly as before.
395
- return Promise.resolve(produce());
395
+ return Promise.resolve(produce())
396
396
  }