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