@wular/pnext 0.0.3 → 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 -1961
  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 -1887
  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} +152 -143
  351. package/src/resolve/engine.ts +90 -77
  352. package/src/resolve/imports.ts +475 -463
  353. package/src/resolve/scan-facts.ts +442 -186
  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 +833 -848
  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
@@ -10,8 +10,8 @@
10
10
  // Ordering: registerCompatExtensions runs cache BEFORE actions, so the use-cache source transform is
11
11
  // registered ahead of the inline-action-tag transform, matching the old rewriteServerSource order.
12
12
 
13
- import type { ResolvedConfig } from '../../config';
14
- import { nextCompatEnabled } from '../../compat';
13
+ import type { ResolvedConfig } from '../../config'
14
+ import { nextCompatEnabled } from '../../compat/aliases'
15
15
  import {
16
16
  registerBundledSourceTransforms,
17
17
  registerInitHooks,
@@ -19,7 +19,7 @@ import {
19
19
  setRenderExtensions,
20
20
  setRequestExtensions,
21
21
  withSniff,
22
- } from '../../extensions';
22
+ } from '../../extensions'
23
23
  import {
24
24
  collectRenderCacheMeta,
25
25
  currentRenderCacheMeta,
@@ -28,13 +28,13 @@ import {
28
28
  tagsRevalidatedSince,
29
29
  tagsRevalidationReasonSince,
30
30
  tagsStaleSince,
31
- } from '../cache/revalidate';
32
- import { setBuildFlagsOutPath } from '../cache/build-flags';
33
- import { installCompatFetchCache } from '../cache/fetch-patch';
34
- import { installCustomCacheHandler } from '../cache/custom-handler';
35
- import { installModernCacheHandlers } from '../cache/modern-handler';
36
- import { rewriteUseCacheSource } from '../cache/use-cache-transform';
37
- import { resumeDataCacheExtension } from '../cache/resume-data-cache';
31
+ } from '../cache/revalidate'
32
+ import { setBuildFlagsOutPath } from '../cache/build-flags'
33
+ import { installCompatFetchCache } from '../cache/fetch-patch'
34
+ import { installCustomCacheHandler } from '../cache/custom-handler'
35
+ import { installModernCacheHandlers } from '../cache/modern-handler'
36
+ import { rewriteUseCacheSource } from '../cache/use-cache-transform'
37
+ import { resumeDataCacheExtension } from '../cache/resume-data-cache'
38
38
 
39
39
  export function registerCacheExtensions(config: ResolvedConfig): void {
40
40
  // Render cache-meta collection scope (tags/revalidate/no-store) wrapped
@@ -45,7 +45,7 @@ export function registerCacheExtensions(config: ResolvedConfig): void {
45
45
  // the document can inline its own reuse window for hard loads.
46
46
  currentCacheStaleSeconds: () => currentRenderCacheMeta()?.staleSeconds,
47
47
  prerenderSidecar: resumeDataCacheExtension,
48
- });
48
+ })
49
49
 
50
50
  // ISR on-demand staleness: fold the path + tag revalidation checks start.ts
51
51
  // used to OR together into the single registry predicate.
@@ -56,7 +56,7 @@ export function registerCacheExtensions(config: ResolvedConfig): void {
56
56
  pathRevalidationReasonSince(pathname, mtimeMs) ??
57
57
  tagsRevalidationReasonSince(tags, mtimeMs) ??
58
58
  (tagsStaleSince(tags, mtimeMs) ? 'soft' : undefined),
59
- });
59
+ })
60
60
 
61
61
  // 'use cache' source rewrite (server bundles): registered first so it runs
62
62
  // before the inline-action-tag transform, exactly as before. Also registered
@@ -64,22 +64,22 @@ export function registerCacheExtensions(config: ResolvedConfig): void {
64
64
  // the directive is the one trigger in the chain that survives bundling.
65
65
  const useCache = withSniff(['use cache'], (source, file, root) =>
66
66
  rewriteUseCacheSource(source, file, root),
67
- );
68
- registerServerSourceTransforms(useCache);
69
- registerBundledSourceTransforms(useCache);
67
+ )
68
+ registerServerSourceTransforms(useCache)
69
+ registerBundledSourceTransforms(useCache)
70
70
 
71
71
  // Prerenders + runtime renders must observe Next fetch-cache options
72
72
  // (force-cache, next: { revalidate, tags }). Idempotent; next-compat only.
73
73
  if (nextCompatEnabled(config)) {
74
74
  registerInitHooks(cfg => {
75
- installCompatFetchCache();
75
+ installCompatFetchCache()
76
76
  // Where `pnext start` reads the build's --debug-prerender flag back from
77
77
  // (the runtime 'use cache' error funnel shapes its log around it).
78
- setBuildFlagsOutPath(cfg.outPath);
78
+ setBuildFlagsOutPath(cfg.outPath)
79
79
  // Load + instantiate the configured `cacheHandler` (next.config) and
80
80
  // install it into the core cache seam so the data cache defers to it.
81
- installCustomCacheHandler(cfg.root);
82
- installModernCacheHandlers(cfg.root);
83
- });
81
+ installCustomCacheHandler(cfg.root)
82
+ installModernCacheHandlers(cfg.root)
83
+ })
84
84
  }
85
85
  }
@@ -7,11 +7,11 @@
7
7
  // contract. The compat entry already imports the route's nearest error.js and installs the action-error
8
8
  // overlay; to activate the general client error pipeline it additionally calls installClientErrors.
9
9
 
10
- import type { ResolvedConfig } from '../../config';
11
- import { nextCompatEnabled } from '../../compat';
10
+ import type { ResolvedConfig } from '../../config'
11
+ import { nextCompatEnabled } from '../../compat/aliases'
12
12
 
13
13
  export function registerClientErrorExtensions(config: ResolvedConfig): void {
14
- if (!nextCompatEnabled(config)) return;
14
+ if (!nextCompatEnabled(config)) return
15
15
  // No server-side render/routing extension: the client runtime installs in the
16
16
  // browser from the generated entry (seam 5, clientEntryModules). Kept as the
17
17
  // stable registration seam so the orchestrator can wire it uniformly.
@@ -5,13 +5,13 @@
5
5
  // next.config values feed pnext's resolved config for build AND start/dev. The orchestrator must call
6
6
  // this from register.ts too, so a single registerCompatExtensions() pass leaves the source installed.
7
7
 
8
- import { registerConfigSource as registerCoreConfigSource } from '../../config';
9
- import type { ConfigSourceOverrides } from '../../config';
10
- import { loadNextConfig } from '../next/config-loader';
8
+ import { registerConfigSource as registerCoreConfigSource } from '../../config'
9
+ import type { ConfigSourceOverrides } from '../../config'
10
+ import { loadNextConfig } from '../next/config-loader'
11
11
 
12
12
  export function registerConfigSource(): void {
13
13
  registerCoreConfigSource(async (root, options): Promise<ConfigSourceOverrides> => {
14
- const { overrides } = await loadNextConfig(root, options);
15
- return overrides;
16
- });
14
+ const { overrides } = await loadNextConfig(root, options)
15
+ return overrides
16
+ })
17
17
  }
@@ -18,38 +18,34 @@
18
18
  // Gated on next-compat: a pure-core or react-only app keeps every no-op default and never loads the sass
19
19
  // module.
20
20
 
21
- import type { Plugin } from 'esbuild';
22
- import type { ResolvedConfig } from '../../config';
23
- import {
24
- getBundlerExtensions,
25
- setBundlerExtensions,
26
- setCssExtensions,
27
- } from '../../extensions';
28
- import { nextCompatEnabled } from '../../render/hooks';
21
+ import type { Plugin } from 'esbuild'
22
+ import type { ResolvedConfig } from '../../config'
23
+ import { getBundlerExtensions, setBundlerExtensions, setCssExtensions } from '../../extensions'
24
+ import { nextCompatEnabled } from '../../render/hooks'
29
25
  import {
30
26
  sassChunkPlugin,
31
27
  sassLoadCssModuleForClient,
32
28
  sassResolveCssModule,
33
- } from '../css/sass-plugin';
34
- import { isSassFile, isSassModuleFile, sassModuleMapping } from '../css/sass';
29
+ } from '../css/sass-plugin'
30
+ import { isSassFile, isSassModuleFile, sassModuleMapping } from '../css/sass'
35
31
  import {
36
32
  nextCssLoadModuleForClient,
37
33
  nextCssModuleChunkPlugin,
38
34
  nextCssResolveModule,
39
- } from '../css/modules';
40
- import { nextPlanRouteCssChunks } from '../css/chunking';
41
- import { inlineCssStylesheets } from '../css/inline-css';
35
+ } from '../css/modules'
36
+ import { nextPlanRouteCssChunks } from '../css/chunking'
37
+ import { inlineCssStylesheets } from '../css/inline-css'
42
38
 
43
39
  export function registerCssExtrasExtensions(config: ResolvedConfig): void {
44
- if (!nextCompatEnabled(config)) return;
40
+ if (!nextCompatEnabled(config)) return
45
41
 
46
42
  // (1) CSS-chunk + module-map registry consumed by src/css.ts. The two entries
47
43
  // the route scanner needs (extraCssExtensions, resolveCssDependency) plus the
48
44
  // source materialization are boot facts — register-boot.ts owns them.
49
- const resolveNextCssModule = nextCssResolveModule(config);
50
- const loadNextCssModuleForClient = nextCssLoadModuleForClient(config);
51
- const resolveSassCssModule = sassResolveCssModule(config);
52
- const loadSassCssModuleForClient = sassLoadCssModuleForClient(config);
45
+ const resolveNextCssModule = nextCssResolveModule(config)
46
+ const loadNextCssModuleForClient = nextCssLoadModuleForClient(config)
47
+ const resolveSassCssModule = sassResolveCssModule(config)
48
+ const loadSassCssModuleForClient = sassLoadCssModuleForClient(config)
53
49
  setCssExtensions({
54
50
  deferRootNotFoundCss: () => true,
55
51
  inlineStylesheets: inlineCssStylesheets,
@@ -58,12 +54,12 @@ export function registerCssExtrasExtensions(config: ResolvedConfig): void {
58
54
  loadCssModuleForClient: file =>
59
55
  loadNextCssModuleForClient(file) ?? loadSassCssModuleForClient(file),
60
56
  planRouteCssChunks: nextPlanRouteCssChunks,
61
- });
57
+ })
62
58
 
63
59
  // (2) Compose the sass module-loader onto the JS bundle esbuild seams.
64
- const current = getBundlerExtensions();
65
- const priorClient = current.clientEsbuildPlugins;
66
- const priorServer = current.serverEsbuildPlugins;
60
+ const current = getBundlerExtensions()
61
+ const priorClient = current.clientEsbuildPlugins
62
+ const priorServer = current.serverEsbuildPlugins
67
63
  setBundlerExtensions({
68
64
  clientEsbuildPlugins: (cfg: ResolvedConfig): Plugin[] => [
69
65
  ...priorClient(cfg),
@@ -74,20 +70,20 @@ export function registerCssExtrasExtensions(config: ResolvedConfig): void {
74
70
  nextCssServerModuleLoaderPlugin(cfg),
75
71
  sassModuleLoaderPlugin(cfg),
76
72
  ],
77
- });
73
+ })
78
74
  }
79
75
 
80
76
  function nextCssServerModuleLoaderPlugin(config: ResolvedConfig): Plugin {
81
- const loadModule = nextCssLoadModuleForClient(config);
77
+ const loadModule = nextCssLoadModuleForClient(config)
82
78
  return {
83
79
  name: 'pnext-compat-server-css-module',
84
80
  setup(build) {
85
81
  build.onLoad({ filter: /\.module\.css$/ }, ({ path: file }) => {
86
- const contents = loadModule(file);
87
- return contents ? { contents, loader: 'js' } : null;
88
- });
82
+ const contents = loadModule(file)
83
+ return contents ? { contents, loader: 'js' } : null
84
+ })
89
85
  },
90
- };
86
+ }
91
87
  }
92
88
 
93
89
  /**
@@ -101,14 +97,14 @@ function sassModuleLoaderPlugin(config: ResolvedConfig): Plugin {
101
97
  name: 'pnext-compat-sass-module',
102
98
  setup(build) {
103
99
  build.onLoad({ filter: /\.(?:scss|sass)$/ }, ({ path: file }) => {
104
- if (!isSassFile(file)) return null;
100
+ if (!isSassFile(file)) return null
105
101
  const contents = isSassModuleFile(file)
106
102
  ? `export default ${JSON.stringify(sassModuleMapping(file, config.root, sassIncludePathsFor(config)))};`
107
- : 'export default undefined;';
108
- return { contents, loader: 'js' };
109
- });
103
+ : 'export default undefined;'
104
+ return { contents, loader: 'js' }
105
+ })
110
106
  },
111
- };
107
+ }
112
108
  }
113
109
 
114
110
  // Local include-paths read kept here to avoid importing sass-plugin internals;
@@ -116,5 +112,5 @@ function sassModuleLoaderPlugin(config: ResolvedConfig): Plugin {
116
112
  // file itself), so an empty list is acceptable — the CSS-chunk plugin
117
113
  // (sass-plugin.ts) threads the real sassOptions.includePaths.
118
114
  function sassIncludePathsFor(_config: ResolvedConfig): string[] {
119
- return [];
115
+ return []
120
116
  }
@@ -1,6 +1,6 @@
1
- import { setRuntimeExtensions } from '../../extensions';
2
- import { withEdgeRuntime } from '../edge-runtime';
1
+ import { setRuntimeExtensions } from '../../extensions'
2
+ import { withEdgeRuntime } from '../edge-runtime'
3
3
 
4
4
  export function registerEdgeRuntimeExtensions(): void {
5
- setRuntimeExtensions({ withEdgeRuntime });
5
+ setRuntimeExtensions({ withEdgeRuntime })
6
6
  }
@@ -5,20 +5,20 @@
5
5
  // global-error / global-not-found boundary discovery. A pure-core app registers none of these, keeping
6
6
  // the compact core error UI and no digest/redaction.
7
7
 
8
- import type { ResolvedConfig } from '../../config';
9
- import { setRenderExtensions } from '../../extensions';
10
- import { nextCompatEnabled } from '../../compat';
8
+ import type { ResolvedConfig } from '../../config'
9
+ import { setRenderExtensions } from '../../extensions'
10
+ import { nextCompatEnabled } from '../../compat/aliases'
11
11
  import {
12
12
  serializeBoundaryError,
13
13
  wrapThrownValue,
14
14
  formatErrorLog,
15
- } from '../lifecycle/error-serialize';
15
+ } from '../lifecycle/error-serialize'
16
16
  import {
17
17
  httpAccessFallbackUi,
18
18
  defaultGlobalErrorUi,
19
19
  globalErrorReportScript,
20
- } from '../lifecycle/error-ui';
21
- import { getNextConfig } from '../next/config-loader';
20
+ } from '../lifecycle/error-ui'
21
+ import { getNextConfig } from '../next/config-loader'
22
22
 
23
23
  // global-error / global-not-found are CORE document conventions (discovered by
24
24
  // src/routing/routes.ts findGlobalError + src/render renderGlobalNotFoundResponse);
@@ -26,7 +26,7 @@ import { getNextConfig } from '../next/config-loader';
26
26
  // digest protocol here. forbidden/unauthorized stay compat conventions
27
27
  // (registered in register-routing.ts).
28
28
  export function registerErrorExtensions(config: ResolvedConfig): void {
29
- if (!nextCompatEnabled(config)) return;
29
+ if (!nextCompatEnabled(config)) return
30
30
 
31
31
  setRenderExtensions({
32
32
  serializeError: serializeBoundaryError,
@@ -37,10 +37,8 @@ export function registerErrorExtensions(config: ResolvedConfig): void {
37
37
  formatErrorLog,
38
38
  // Read lazily per call: next.config loads after registration.
39
39
  globalNotFoundEnabled: () => {
40
- const experimental = getNextConfig().experimental as
41
- | { globalNotFound?: boolean }
42
- | undefined;
43
- return experimental?.globalNotFound === true;
40
+ const experimental = getNextConfig().experimental as { globalNotFound?: boolean } | undefined
41
+ return experimental?.globalNotFound === true
44
42
  },
45
- });
43
+ })
46
44
  }
@@ -1,23 +1,23 @@
1
- import { nextCompatEnabled } from '../../compat';
2
- import { onExtensionHostReset, registerBuildCompleteHooks } from '../../extensions';
3
- import type { ResolvedConfig } from '../../config';
4
- import { emitMetadataRouteArtifacts } from '../metadata-route-artifacts';
5
- import { emitStaticExport } from '../export';
6
- import { emitCustomServerShim } from '../next/custom-server';
1
+ import { nextCompatEnabled } from '../../compat/aliases'
2
+ import { onExtensionHostReset, registerBuildCompleteHooks } from '../../extensions'
3
+ import type { ResolvedConfig } from '../../config'
4
+ import { emitMetadataRouteArtifacts } from '../metadata-artifacts'
5
+ import { emitStaticExport } from '../export/emit'
6
+ import { emitCustomServerShim } from '../next/custom-server'
7
7
 
8
- let registered = false;
8
+ let registered = false
9
9
  // Host-scoped guard: a fresh host must be registered into again.
10
- onExtensionHostReset(() => (registered = false));
10
+ onExtensionHostReset(() => (registered = false))
11
11
 
12
12
  export function registerExportExtensions(config: ResolvedConfig): void {
13
- if (registered) return;
14
- if (!nextCompatEnabled(config)) return;
15
- registered = true;
13
+ if (registered) return
14
+ if (!nextCompatEnabled(config)) return
15
+ registered = true
16
16
 
17
17
  registerBuildCompleteHooks(async ctx => {
18
- if (!nextCompatEnabled(ctx.config)) return;
19
- await emitStaticExport(ctx);
20
- await emitMetadataRouteArtifacts(ctx);
21
- await emitCustomServerShim(ctx.config);
22
- });
18
+ if (!nextCompatEnabled(ctx.config)) return
19
+ await emitStaticExport(ctx)
20
+ await emitMetadataRouteArtifacts(ctx)
21
+ await emitCustomServerShim(ctx.config)
22
+ })
23
23
  }
@@ -11,26 +11,26 @@
11
11
  // Registration is idempotent and also happens lazily on the first font-collection scope, so it is safe
12
12
  // to call in a pure-core app and works before the orchestrator wires it in.
13
13
 
14
- import type { ResolvedConfig } from '../../config';
14
+ import type { ResolvedConfig } from '../../config'
15
15
  import {
16
16
  registerClientSourceTransforms,
17
17
  registerServerSourceTransforms,
18
18
  withSniff,
19
- } from '../../extensions';
20
- import { rewriteNextFontSource } from '../index';
21
- import { registerFontFinalizerOnce } from '../next/font/runtime';
19
+ } from '../../extensions'
20
+ import { rewriteNextFontSource } from '../aliases'
21
+ import { registerFontFinalizerOnce } from '../next/font/runtime'
22
22
 
23
- const fontSourceTransformRoots = new Set<string>();
23
+ const fontSourceTransformRoots = new Set<string>()
24
24
 
25
25
  export function registerFontExtensions(config: ResolvedConfig): void {
26
- registerFontFinalizerOnce();
27
- if (!config.compat?.next || fontSourceTransformRoots.has(config.root)) return;
28
- fontSourceTransformRoots.add(config.root);
29
- const sniff = ['next/font', 'next/root-params'];
26
+ registerFontFinalizerOnce()
27
+ if (!config.compat?.next || fontSourceTransformRoots.has(config.root)) return
28
+ fontSourceTransformRoots.add(config.root)
29
+ const sniff = ['next/font', 'next/root-params']
30
30
  registerServerSourceTransforms(
31
31
  withSniff(sniff, (source, file) => rewriteNextFontSource(source, file, 'server', config.root)),
32
- );
32
+ )
33
33
  registerClientSourceTransforms(
34
34
  withSniff(sniff, (source, file) => rewriteNextFontSource(source, file, 'client', config.root)),
35
- );
35
+ )
36
36
  }
@@ -2,7 +2,7 @@
2
2
  // Registration seam for the next/navigation router hooks (COMPAT).
3
3
  //
4
4
  // The hooks themselves (useSelectedLayoutSegment(s), usePathname,
5
- // useSearchParams, useParams) need no runtime registration: compat/index.ts maps
5
+ // useSearchParams, useParams) need no runtime registration: compat/aliases.ts maps
6
6
  // `next/navigation` to compat/next/{navigation,client-navigation}.ts, and the
7
7
  // per-layout segment scope is installed by the core renderer (render/slots.ts +
8
8
  // render/renderer.ts applyLayouts), gated on next-compat.
@@ -22,7 +22,7 @@
22
22
  // today it only re-exports the canonical setter for the proxy wiring.
23
23
  // ---------------------------------------------------------------------------
24
24
 
25
- export { recordCanonicalUrl, canonicalUrlHref } from '../next/canonical-url';
25
+ export { recordCanonicalUrl, canonicalUrlHref } from '../next/canonical-url'
26
26
 
27
27
  /**
28
28
  * Placeholder registration entry point kept for symmetry with the other register-<x> modules. The router
@@ -4,37 +4,37 @@
4
4
  // endpoint, and buildExtensions.steps gets images-manifest.json emission. Safe to call in a pure-core
5
5
  // app: the interceptor and build step no-op unless compat.next is enabled.
6
6
 
7
- import path from 'node:path';
8
- import { mkdir, writeFile } from 'node:fs/promises';
9
- import type { ResolvedConfig } from '../../config';
10
- import { nextCompatEnabled } from '../../compat';
7
+ import path from 'node:path'
8
+ import { mkdir, writeFile } from 'node:fs/promises'
9
+ import type { ResolvedConfig } from '../../config'
10
+ import { nextCompatEnabled } from '../../compat/aliases'
11
11
  import {
12
12
  registerBuildCompleteHooks,
13
13
  registerBuildSteps,
14
14
  registerRequestInterceptors,
15
15
  type BuildStepContext,
16
16
  type RequestInterceptor,
17
- } from '../../extensions';
18
- import { getImagesConfig, type ResolvedImagesConfig } from '../next/image/config';
19
- import { isImageOptimizerRequest, serveImageOptimizer } from '../next/image/optimizer';
20
- import { manifestLocalPatterns } from '../next/image/patterns';
21
- import { getDocumentScriptExtensions, setDocumentScriptExtensions } from '../../render/hooks';
22
- import { setWorkUnitRoute } from '../../request/context';
17
+ } from '../../extensions'
18
+ import { getImagesConfig, type ResolvedImagesConfig } from '../next/image/config'
19
+ import { isImageOptimizerRequest, serveImageOptimizer } from '../next/image/optimizer'
20
+ import { manifestLocalPatterns } from '../next/image/patterns'
21
+ import { getDocumentScriptExtensions, setDocumentScriptExtensions } from '../../render/hooks'
22
+ import { setWorkUnitRoute } from '../../request/context'
23
23
 
24
24
  export function registerImageExtensions(config: ResolvedConfig): void {
25
- globalThis.__PNEXT_IMAGE_CONFIG__ = getImagesConfig();
26
- registerRequestInterceptors(imageOptimizerInterceptor);
27
- registerBuildSteps(writeImagesManifestStep);
25
+ globalThis.__PNEXT_IMAGE_CONFIG__ = getImagesConfig()
26
+ registerRequestInterceptors(imageOptimizerInterceptor)
27
+ registerBuildSteps(writeImagesManifestStep)
28
28
  registerBuildCompleteHooks(async ctx => {
29
- if (nextCompatEnabled(ctx.config)) await mirrorStaticMedia(ctx.config);
30
- });
29
+ if (nextCompatEnabled(ctx.config)) await mirrorStaticMedia(ctx.config)
30
+ })
31
31
 
32
32
  if (nextCompatEnabled(config)) {
33
- const previousHeadTags = getDocumentScriptExtensions().documentHeadTags;
33
+ const previousHeadTags = getDocumentScriptExtensions().documentHeadTags
34
34
  setDocumentScriptExtensions({
35
35
  documentHeadTags: (cfg, ctx) =>
36
36
  `${previousHeadTags?.(cfg, ctx) ?? ''}${PLACEHOLDER_SCRIPT_TAG}`,
37
- });
37
+ })
38
38
  }
39
39
  }
40
40
 
@@ -52,36 +52,36 @@ export function registerImageExtensions(config: ResolvedConfig): void {
52
52
  // INSIDE the post-decode callback, not at bind time. A hydrating route's ClientImage vdom carries no
53
53
  // `data-nimg-ph`, so preact's hydration strips the SSR attribute; by the time this callback fires the
54
54
  // attribute is gone on any hydrated image, the check bails, and ClientImage stays the sole owner.
55
- const PLACEHOLDER_SCRIPT_TAG = `<script>(function(){try{function b(){var l=document.querySelectorAll("img[data-nimg-ph]");for(var i=0;i<l.length;i++){(function(img){if(img.closest("[data-pnext-client]"))return;var done=false;function r(){if(done)return;done=true;("decode"in img?img.decode():Promise.resolve()).catch(function(){}).then(function(){var t=img.getAttribute("data-nimg-ph");if(t==null||!img.isConnected)return;img.style.cssText=t;img.removeAttribute("data-nimg-ph")})}if(img.complete&&img.naturalWidth>0)r();else{img.addEventListener("load",r);img.addEventListener("error",r)}})(l[i])}}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",b);else b()}catch(e){}})();</script>`;
55
+ const PLACEHOLDER_SCRIPT_TAG = `<script>(function(){try{function b(){var l=document.querySelectorAll("img[data-nimg-ph]");for(var i=0;i<l.length;i++){(function(img){if(img.closest("[data-pnext-client]"))return;var done=false;function r(){if(done)return;done=true;("decode"in img?img.decode():Promise.resolve()).catch(function(){}).then(function(){var t=img.getAttribute("data-nimg-ph");if(t==null||!img.isConnected)return;img.style.cssText=t;img.removeAttribute("data-nimg-ph")})}if(img.complete&&img.naturalWidth>0)r();else{img.addEventListener("load",r);img.addEventListener("error",r)}})(l[i])}}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",b);else b()}catch(e){}})();</script>`
56
56
 
57
57
  declare global {
58
- var __PNEXT_IMAGE_CONFIG__: ResolvedImagesConfig | undefined;
58
+ var __PNEXT_IMAGE_CONFIG__: ResolvedImagesConfig | undefined
59
59
  }
60
60
 
61
61
  const imageOptimizerInterceptor: RequestInterceptor = async (request, ctx) => {
62
- const config = ctx.config;
63
- if (!nextCompatEnabled(config)) return undefined;
64
- const url = new URL(request.url);
65
- const images = getImagesConfig();
66
- if (!isImageOptimizerRequest(url, images)) return undefined;
67
- if (request.method !== 'GET' && request.method !== 'HEAD') return undefined;
62
+ const config = ctx.config
63
+ if (!nextCompatEnabled(config)) return undefined
64
+ const url = new URL(request.url)
65
+ const images = getImagesConfig()
66
+ if (!isImageOptimizerRequest(url, images)) return undefined
67
+ if (request.method !== 'GET' && request.method !== 'HEAD') return undefined
68
68
  // Optimizer responses own their headers outright — classify as a static
69
69
  // asset so the app-router finalizers (Vary token merge, x-nextjs-* stamps)
70
70
  // leave them untouched. Next serves /_next/image outside the router too.
71
- setWorkUnitRoute('static-asset');
72
- return serveImageOptimizer(request, config);
73
- };
71
+ setWorkUnitRoute('static-asset')
72
+ return serveImageOptimizer(request, config)
73
+ }
74
74
 
75
75
  // Next-compatible images-manifest.json (.next/): the qualities/localpatterns
76
76
  // e2e suites read it in production to assert the resolved images config.
77
77
  async function writeImagesManifestStep(ctx: BuildStepContext): Promise<void> {
78
- const config = ctx.config;
79
- if (!nextCompatEnabled(config)) return;
80
- const images = getImagesConfig();
78
+ const config = ctx.config
79
+ if (!nextCompatEnabled(config)) return
80
+ const images = getImagesConfig()
81
81
 
82
82
  // normalizeLocalPatterns already appends the internal media patterns when
83
83
  // localPatterns is configured, so manifest and runtime share one source.
84
- const localPatterns = manifestLocalPatterns(images.localPatterns);
84
+ const localPatterns = manifestLocalPatterns(images.localPatterns)
85
85
 
86
86
  const manifest = {
87
87
  version: 1,
@@ -108,11 +108,11 @@ async function writeImagesManifestStep(ctx: BuildStepContext): Promise<void> {
108
108
  unoptimized: images.unoptimized,
109
109
  customCacheHandler: images.customCacheHandler,
110
110
  },
111
- };
111
+ }
112
112
 
113
- const outDir = path.join(config.root, '.next');
114
- await mkdir(outDir, { recursive: true });
115
- await writeFile(path.join(outDir, 'images-manifest.json'), JSON.stringify(manifest, null, 2));
113
+ const outDir = path.join(config.root, '.next')
114
+ await mkdir(outDir, { recursive: true })
115
+ await writeFile(path.join(outDir, 'images-manifest.json'), JSON.stringify(manifest, null, 2))
116
116
  }
117
117
 
118
118
  // Tooling (and Next's e2e suites) discover fingerprinted static-import images
@@ -120,12 +120,12 @@ async function writeImagesManifestStep(ctx: BuildStepContext): Promise<void> {
120
120
  // outPath/public/_next/static/media. Mirror them into .next so both layouts
121
121
  // hold the same files.
122
122
  async function mirrorStaticMedia(config: ResolvedConfig): Promise<void> {
123
- const { cp } = await import('node:fs/promises');
123
+ const { cp } = await import('node:fs/promises')
124
124
  for (const dir of ['media', 'immutable/media']) {
125
- const source = path.join(config.outPath, 'public', '_next', 'static', dir);
126
- const target = path.join(config.root, '.next', 'static', dir);
125
+ const source = path.join(config.outPath, 'public', '_next', 'static', dir)
126
+ const target = path.join(config.root, '.next', 'static', dir)
127
127
  try {
128
- await cp(source, target, { recursive: true, force: true });
128
+ await cp(source, target, { recursive: true, force: true })
129
129
  } catch {
130
130
  // no static media emitted for this build
131
131
  }