@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,10 +14,10 @@
14
14
  // opentelemetry suite. Everything is inert unless next compat is on AND @opentelemetry/api resolves from
15
15
  // the app.
16
16
 
17
- import { readFileSync } from 'node:fs';
18
- import path from 'node:path';
19
- import type { ResolvedConfig } from '../../config';
20
- import type { RouteManifestEntry } from '../../types';
17
+ import { readFileSync } from 'node:fs'
18
+ import path from 'node:path'
19
+ import type { ResolvedConfig } from '../../config'
20
+ import type { RouteManifestEntry } from '../../types'
21
21
  import {
22
22
  registerInitHooks,
23
23
  registerRequestInterceptors,
@@ -27,18 +27,18 @@ import {
27
27
  setRequestExtensions,
28
28
  type RequestInterceptor,
29
29
  type ResponseFinalizer,
30
- } from '../../extensions';
31
- import { nextCompatEnabled } from '../index';
32
- import { getRequestRuntime } from '../../routing/request-runtime';
33
- import { selectRouteForRequest } from '../../routing/routes';
34
- import { queueAfterTask } from '../../request/context';
30
+ } from '../../extensions'
31
+ import { nextCompatEnabled } from '../aliases'
32
+ import { getRequestRuntime } from '../../routing/request-environment'
33
+ import { selectRouteForRequest } from '../../routing/routes'
34
+ import { queueAfterTask } from '../../request/context'
35
35
  import {
36
36
  getDocumentScriptExtensions,
37
37
  setRenderSpanExtensions,
38
38
  setDocumentScriptExtensions,
39
39
  setStreamBoundaryExtensions,
40
- } from '../../render/hooks';
41
- import { setProxyRunObserver } from '../../proxy';
40
+ } from '../../render/hooks'
41
+ import { setProxyRunObserver } from '../../routing/proxy'
42
42
  import {
43
43
  SPAN_TYPE,
44
44
  emitClientComponentLoadingSpan,
@@ -56,11 +56,11 @@ import {
56
56
  withPagesDataSpan,
57
57
  withRenderBodySpan,
58
58
  withRouteHandlerSpan,
59
- } from '../otel/tracer';
60
- import { getOtelApi } from '../otel/api';
61
- import { installFetchSpan } from '../otel/fetch-span';
62
- import { clientTraceMetadataTags } from '../otel/client-trace-metadata';
63
- import { instrumentationReady } from '../lifecycle/instrumentation';
59
+ } from '../otel/tracer'
60
+ import { getOtelApi } from '../otel/api'
61
+ import { installFetchSpan } from '../otel/fetch-span'
62
+ import { clientTraceMetadataTags } from '../otel/client-trace-metadata'
63
+ import { instrumentationReady } from '../lifecycle/instrumentation'
64
64
 
65
65
  /**
66
66
  * The ROOT-span interceptor. Registered FIRST, before every other sub-registrar, so the
@@ -70,73 +70,73 @@ import { instrumentationReady } from '../lifecycle/instrumentation';
70
70
  * immediately from the pre-rewrite match; the LATE interceptor re-stamps them after rewrites.
71
71
  */
72
72
  export function registerOtelRootInterceptor(config: ResolvedConfig): void {
73
- if (!nextCompatEnabled(config)) return;
74
- setOtelAppRoot(config.root);
73
+ if (!nextCompatEnabled(config)) return
74
+ setOtelAppRoot(config.root)
75
75
 
76
76
  const rootInterceptor: RequestInterceptor = async request => {
77
77
  try {
78
78
  // Instrumentation register() installs the app's TracerProvider; opening
79
79
  // the root span before it completes would produce a non-recording span.
80
- await instrumentationReady();
81
- const url = new URL(request.url);
80
+ await instrumentationReady()
81
+ const url = new URL(request.url)
82
82
  startRootSpan({
83
83
  method: request.method.toUpperCase(),
84
84
  target: url.pathname + url.search,
85
85
  rsc: request.headers.get('rsc') === '1',
86
86
  headers: request.headers,
87
- });
88
- stampMatchedRoute(url.pathname);
87
+ })
88
+ stampMatchedRoute(url.pathname)
89
89
  // Safety net for the synchronous-500 error path: core's top-level catch
90
90
  // returns a bare 500 WITHOUT running responseFinalizers, so the finalizer
91
91
  // never closes the root span there. The work-unit after-queue DOES flush
92
92
  // on that path (flushWorkUnit in the catch), so end the span as 500 from
93
93
  // an after-task. Idempotent: on success paths the finalizer ends it first.
94
- queueAfterTask(() => endRootSpanIfUnclosed(500));
94
+ queueAfterTask(() => endRootSpanIfUnclosed(500))
95
95
  } catch {
96
96
  // Never let tracing break the request.
97
97
  }
98
- return undefined;
99
- };
100
- registerRequestInterceptors(rootInterceptor);
98
+ return undefined
99
+ }
100
+ registerRequestInterceptors(rootInterceptor)
101
101
  // Resolving @opentelemetry/api out of the app loads the whole package inside this interceptor on
102
102
  // the first request. The result is memoized, so paying it in the dev warm just moves it off that
103
103
  // request.
104
- registerRequestWarmHooks(() => void getOtelApi(config.root));
104
+ registerRequestWarmHooks(() => void getOtelApi(config.root))
105
105
  }
106
106
 
107
107
  /** Resolve the matched route for `pathname` and stamp it on the root span. */
108
108
  function stampMatchedRoute(pathname: string): void {
109
- const runtime = getRequestRuntime();
110
- if (!runtime) return;
111
- const matched = selectRouteForRequest(runtime.routes, pathname, undefined);
112
- if (!matched) return;
113
- const routeRuntime = matched.route.segmentConfig?.runtime;
109
+ const runtime = getRequestRuntime()
110
+ if (!runtime) return
111
+ const matched = selectRouteForRequest(runtime.routes, pathname, undefined)
112
+ if (!matched) return
113
+ const routeRuntime = matched.route.segmentConfig?.runtime
114
114
  setRootSpanRoute(routeEntryToDisplay(matched.route), {
115
115
  edge: routeRuntime === 'edge' || routeRuntime === 'experimental-edge',
116
116
  kind: matched.route.kind === 'handler' ? 'handler' : 'page',
117
117
  params: matched.params,
118
- });
118
+ })
119
119
  }
120
120
 
121
121
  export function registerOtelExtensions(config: ResolvedConfig): void {
122
- if (!nextCompatEnabled(config)) return;
122
+ if (!nextCompatEnabled(config)) return
123
123
 
124
- const appRoot = config.root;
125
- setOtelAppRoot(appRoot);
124
+ const appRoot = config.root
125
+ setOtelAppRoot(appRoot)
126
126
 
127
127
  // Install the fetch span wrapper at server (and build) start, AFTER the cache
128
128
  // fetch-patch has wrapped globalThis.fetch (register order: cache before otel).
129
129
  registerInitHooks(() => {
130
- installFetchSpan(appRoot);
131
- });
130
+ installFetchSpan(appRoot)
131
+ })
132
132
 
133
133
  // Materialized pages wrappers (compat/pages wrapperSource) call this global —
134
134
  // when present — around their getServerSideProps/getStaticProps invocation so
135
135
  // the `Render.<kind>` span lands beside the document render span. A global
136
136
  // (not an import) keeps the generated bundles pnext-agnostic.
137
- (
137
+ ;(
138
138
  globalThis as { __PNEXT_PAGES_DATA_SPAN__?: typeof withPagesDataSpan }
139
- ).__PNEXT_PAGES_DATA_SPAN__ = withPagesDataSpan;
139
+ ).__PNEXT_PAGES_DATA_SPAN__ = withPagesDataSpan
140
140
 
141
141
  // Render-internal spans (nest under the request root span via the work-unit
142
142
  // ALS the tracer threads): the render-body span (`render route (app)`), the
@@ -144,7 +144,7 @@ export function registerOtelExtensions(config: ResolvedConfig): void {
144
144
  // segment-module spans. All inert when no root span is open.
145
145
  setRenderSpanExtensions({
146
146
  withRenderBodySpan: (route, fn) => {
147
- const displayRoute = routePatternToDisplay(route);
147
+ const displayRoute = routePatternToDisplay(route)
148
148
  // A materialized pages route renders through the app pipeline, but Next
149
149
  // reports it as the pages-router document render span.
150
150
  if (isPagesCompatRoute(route)) {
@@ -153,26 +153,22 @@ export function registerOtelExtensions(config: ResolvedConfig): void {
153
153
  displayRoute,
154
154
  fn,
155
155
  SPAN_TYPE.renderDocument,
156
- );
156
+ )
157
157
  }
158
- return withRenderBodySpan(
159
- `render route (app) ${displayRoute}`,
160
- displayRoute,
161
- fn,
162
- );
158
+ return withRenderBodySpan(`render route (app) ${displayRoute}`, displayRoute, fn)
163
159
  },
164
160
  withFindPageComponentsSpan: (route, fn) => {
165
- const entry = routeEntryFor(route);
161
+ const entry = routeEntryFor(route)
166
162
  // A materialized pages-API route reports ONLY its Node.runHandler span
167
163
  // (Next's pages-api dispatch has no findPageComponents phase).
168
- if (entry?.kind === 'handler' && isPagesCompatEntry(entry)) return fn();
169
- const displayRoute = routePatternToDisplay(route);
164
+ if (entry?.kind === 'handler' && isPagesCompatEntry(entry)) return fn()
165
+ const displayRoute = routePatternToDisplay(route)
170
166
  return withChildSpan(
171
167
  'resolve page components',
172
168
  SPAN_TYPE.findPageComponents,
173
169
  { 'next.route': displayRoute },
174
170
  fn,
175
- );
171
+ )
176
172
  },
177
173
  emitResolveSegmentSpan: segment =>
178
174
  emitLeafSpan('resolve segment modules', SPAN_TYPE.getLayoutOrPageModule, {
@@ -182,31 +178,31 @@ export function registerOtelExtensions(config: ResolvedConfig): void {
182
178
  isPagesCompatRoute(route)
183
179
  ? withPagesApiHandlerSpan(routePatternToDisplay(route), fn)
184
180
  : withRouteHandlerSpan(routePatternToDisplay(route), fn),
185
- });
186
- setStreamBoundaryExtensions({ onStreamBoundaryError: markRenderSpanError });
181
+ })
182
+ setStreamBoundaryExtensions({ onStreamBoundaryError: markRenderSpanError })
187
183
 
188
184
  // clientTraceMetadata meta tags injected once into the document head (dynamic pages only; a production
189
185
  // start skips static). Composed with register-render's documentBodyScripts under a separate key.
190
186
  // The renderer's `ctx.dynamic` already encodes Next's gating: dev renders are always dynamic, a prod
191
187
  // STATIC page is dynamic:false, a prod DYNAMIC page is dynamic:true. So isNextStart:true is safe -
192
188
  // clientTraceMetadataTags only drops when isNextStart && !dynamic, exactly the prod-static case.
193
- const previousHeadTags = getDocumentScriptExtensions().documentHeadTags;
189
+ const previousHeadTags = getDocumentScriptExtensions().documentHeadTags
194
190
  setDocumentScriptExtensions({
195
191
  documentHeadTags: (cfg, ctx) =>
196
192
  `${previousHeadTags?.(cfg, ctx) ?? ''}${clientTraceMetadataTags({ dynamic: ctx.dynamic, isNextStart: true, rsc: ctx.rsc })}`,
197
- });
193
+ })
198
194
 
199
195
  // Middleware.execute span around the proxy/middleware handler run. Parents
200
196
  // under the incoming traceparent (top-level trace), NOT the request root span.
201
- setProxyRunObserver((request, fn) => withMiddlewareSpan(request, fn));
197
+ setProxyRunObserver((request, fn) => withMiddlewareSpan(request, fn))
202
198
 
203
- const previousOnRequestError = getRequestExtensions().onRequestError;
199
+ const previousOnRequestError = getRequestExtensions().onRequestError
204
200
  setRequestExtensions({
205
201
  onRequestError: async (error, requestInfo, context) => {
206
- markRenderSpanError(error);
207
- await previousOnRequestError(error, requestInfo, context);
202
+ markRenderSpanError(error)
203
+ await previousOnRequestError(error, requestInfo, context)
208
204
  },
209
- });
205
+ })
210
206
 
211
207
  // Late interceptor: re-stamp the route attributes after the rewrite/action
212
208
  // interceptors ran, so a rewritten request reports its DESTINATION route
@@ -214,13 +210,13 @@ export function registerOtelExtensions(config: ResolvedConfig): void {
214
210
  // original target — see registerOtelRootInterceptor).
215
211
  const otelRouteInterceptor: RequestInterceptor = request => {
216
212
  try {
217
- stampMatchedRoute(new URL(request.url).pathname);
213
+ stampMatchedRoute(new URL(request.url).pathname)
218
214
  } catch {
219
215
  // Never let tracing break the request.
220
216
  }
221
- return Promise.resolve(undefined);
222
- };
223
- registerRequestInterceptors(otelRouteInterceptor);
217
+ return Promise.resolve(undefined)
218
+ }
219
+ registerRequestInterceptors(otelRouteInterceptor)
224
220
 
225
221
  // Close the root span pre-flush with the final status. Runs on every response-producing path (page
226
222
  // render, route handler, static file, redirect, 404). Before closing, emit the pre-flush leaf spans Next
@@ -228,61 +224,57 @@ export function registerOtelExtensions(config: ResolvedConfig): void {
228
224
  // render span for pages, or the root for handlers.
229
225
  const otelFinalizer: ResponseFinalizer = ctx => {
230
226
  try {
231
- if (ctx.routeKind === 'html') emitClientComponentLoadingSpan(0);
227
+ if (ctx.routeKind === 'html') emitClientComponentLoadingSpan(0)
232
228
  if (ctx.routeKind === 'html' || ctx.routeKind === 'route-handler') {
233
- emitStartResponseSpan();
229
+ emitStartResponseSpan()
234
230
  }
235
- endRootSpan(ctx.status);
231
+ endRootSpan(ctx.status)
236
232
  } catch {
237
233
  // ignore
238
234
  }
239
- };
240
- registerResponseFinalizers(otelFinalizer);
235
+ }
236
+ registerResponseFinalizers(otelFinalizer)
241
237
  }
242
238
 
243
239
  /** The runtime route entry matching a raw route pattern. */
244
240
  function routeEntryFor(routePattern: string): RouteManifestEntry | undefined {
245
- return getRequestRuntime()?.routes.find(r => r.route === routePattern);
241
+ return getRequestRuntime()?.routes.find(r => r.route === routePattern)
246
242
  }
247
243
 
248
244
  // A hybrid app materializes BOTH trees under `pnext-pages-compat`: native app
249
245
  // files become `source-app/...` shims, pages files become `source-pages/...`
250
246
  // wrappers. Only the latter are pages-router routes. The import specifier is a
251
247
  // stable generator-owned marker; cache per file (routes don't change at start).
252
- const pagesCompatFileCache = new Map<string, boolean>();
248
+ const pagesCompatFileCache = new Map<string, boolean>()
253
249
  function isPagesCompatEntry(entry: RouteManifestEntry | undefined): boolean {
254
- if (!entry?.file.includes(`${path.sep}pnext-pages-compat${path.sep}`)) return false;
255
- let cached = pagesCompatFileCache.get(entry.file);
250
+ if (!entry?.file.includes(`${path.sep}pnext-pages-compat${path.sep}`)) return false
251
+ let cached = pagesCompatFileCache.get(entry.file)
256
252
  if (cached === undefined) {
257
253
  try {
258
- cached = readFileSync(entry.file, 'utf8').includes('source-pages/');
254
+ cached = readFileSync(entry.file, 'utf8').includes('source-pages/')
259
255
  } catch {
260
- cached = false;
256
+ cached = false
261
257
  }
262
- pagesCompatFileCache.set(entry.file, cached);
258
+ pagesCompatFileCache.set(entry.file, cached)
263
259
  }
264
- return cached;
260
+ return cached
265
261
  }
266
262
 
267
263
  /** Whether `routePattern` matches a route materialized from `pages/`. */
268
264
  function isPagesCompatRoute(routePattern: string): boolean {
269
- return isPagesCompatEntry(routeEntryFor(routePattern));
265
+ return isPagesCompatEntry(routeEntryFor(routePattern))
270
266
  }
271
267
 
272
268
  function routeEntryToDisplay(route: RouteManifestEntry): string {
273
- let value = route.route || '/';
269
+ let value = route.route || '/'
274
270
  if (route.catchAll) {
275
- const token = route.catchAllOptional
276
- ? `[[...${route.catchAll}]]`
277
- : `[...${route.catchAll}]`;
278
- value = value.replace(`:${route.catchAll}*`, token);
271
+ const token = route.catchAllOptional ? `[[...${route.catchAll}]]` : `[...${route.catchAll}]`
272
+ value = value.replace(`:${route.catchAll}*`, token)
279
273
  }
280
- for (const param of route.params) value = value.replace(`:${param}`, `[${param}]`);
281
- return value;
274
+ for (const param of route.params) value = value.replace(`:${param}`, `[${param}]`)
275
+ return value
282
276
  }
283
277
 
284
278
  function routePatternToDisplay(route: string): string {
285
- return route
286
- .replace(/:([A-Za-z0-9_]+)\*/g, '[...$1]')
287
- .replace(/:([A-Za-z0-9_]+)/g, '[$1]');
279
+ return route.replace(/:([A-Za-z0-9_]+)\*/g, '[...$1]').replace(/:([A-Za-z0-9_]+)/g, '[$1]')
288
280
  }