@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
@@ -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
  }