@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
@@ -1,51 +1,51 @@
1
- import type { JSX } from 'preact';
1
+ import type { JSX } from 'preact'
2
2
 
3
3
  interface LocalPattern {
4
- pathname?: string;
5
- search?: string;
4
+ pathname?: string
5
+ search?: string
6
6
  }
7
7
 
8
8
  interface RemotePattern {
9
- protocol?: string;
10
- hostname?: string;
11
- port?: string;
12
- pathname?: string;
13
- search?: string;
9
+ protocol?: string
10
+ hostname?: string
11
+ port?: string
12
+ pathname?: string
13
+ search?: string
14
14
  }
15
15
 
16
16
  export interface ResolvedImagesConfig {
17
- deviceSizes: number[];
18
- imageSizes: number[];
19
- allSizes: number[];
20
- qualities: number[] | undefined;
21
- formats: string[];
22
- path: string;
23
- loader: string;
24
- loaderFile: string;
25
- domains: string[];
26
- disableStaticImages: boolean;
27
- minimumCacheTTL: number;
28
- maximumRedirects: number;
29
- maximumResponseBody: number;
30
- dangerouslyAllowLocalIP: boolean;
31
- dangerouslyAllowSVG: boolean;
32
- contentSecurityPolicy: string;
33
- contentDispositionType: string;
34
- localPatterns: LocalPattern[] | undefined;
35
- remotePatterns: RemotePattern[];
36
- unoptimized: boolean;
37
- customCacheHandler: boolean;
17
+ deviceSizes: number[]
18
+ imageSizes: number[]
19
+ allSizes: number[]
20
+ qualities: number[] | undefined
21
+ formats: string[]
22
+ path: string
23
+ loader: string
24
+ loaderFile: string
25
+ domains: string[]
26
+ disableStaticImages: boolean
27
+ minimumCacheTTL: number
28
+ maximumRedirects: number
29
+ maximumResponseBody: number
30
+ dangerouslyAllowLocalIP: boolean
31
+ dangerouslyAllowSVG: boolean
32
+ contentSecurityPolicy: string
33
+ contentDispositionType: string
34
+ localPatterns: LocalPattern[] | undefined
35
+ remotePatterns: RemotePattern[]
36
+ unoptimized: boolean
37
+ customCacheHandler: boolean
38
38
  }
39
39
 
40
40
  declare global {
41
- var __PNEXT_IMAGE_CONFIG__: ResolvedImagesConfig | undefined;
41
+ var __PNEXT_IMAGE_CONFIG__: ResolvedImagesConfig | undefined
42
42
  }
43
43
 
44
44
  // Client-graph bundler defines (see compat/register/bundler.ts). The boolean
45
45
  // twin gates the branch on a literal so DEFAULT_IMAGES_CONFIG is dropped from
46
46
  // every client bundle — a `??` against an object define never folds.
47
- declare const __PNEXT_IMAGE_CONFIG_INLINE__: ResolvedImagesConfig;
48
- declare const __PNEXT_IMAGE_CONFIG_INLINED__: boolean;
47
+ declare const __PNEXT_IMAGE_CONFIG_INLINE__: ResolvedImagesConfig
48
+ declare const __PNEXT_IMAGE_CONFIG_INLINED__: boolean
49
49
 
50
50
  const DEFAULT_IMAGES_CONFIG: ResolvedImagesConfig = {
51
51
  deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -69,73 +69,73 @@ const DEFAULT_IMAGES_CONFIG: ResolvedImagesConfig = {
69
69
  remotePatterns: [],
70
70
  unoptimized: false,
71
71
  customCacheHandler: false,
72
- };
72
+ }
73
73
 
74
74
  export interface StaticImageData {
75
- src: string;
76
- width: number;
77
- height: number;
78
- blurDataURL?: string;
79
- blurWidth?: number;
80
- blurHeight?: number;
75
+ src: string
76
+ width: number
77
+ height: number
78
+ blurDataURL?: string
79
+ blurWidth?: number
80
+ blurHeight?: number
81
81
  }
82
82
 
83
- type StaticImport = StaticImageData | { default: StaticImageData };
83
+ type StaticImport = StaticImageData | { default: StaticImageData }
84
84
 
85
85
  interface LoaderProps {
86
- src: string;
87
- width: number;
88
- quality?: number;
86
+ src: string
87
+ width: number
88
+ quality?: number
89
89
  }
90
90
 
91
- export type ImageLoader = (props: LoaderProps) => string;
91
+ export type ImageLoader = (props: LoaderProps) => string
92
92
 
93
93
  export type ImageProps = Omit<
94
94
  JSX.HTMLAttributes<HTMLImageElement>,
95
95
  'src' | 'srcset' | 'width' | 'height' | 'loading' | 'ref' | 'alt' | 'style'
96
96
  > & {
97
- src: string | StaticImport;
98
- alt?: string;
99
- width?: number | string;
100
- height?: number | string;
101
- fill?: boolean;
102
- loader?: ImageLoader;
103
- quality?: number | string;
104
- priority?: boolean;
97
+ src: string | StaticImport
98
+ alt?: string
99
+ width?: number | string
100
+ height?: number | string
101
+ fill?: boolean
102
+ loader?: ImageLoader
103
+ quality?: number | string
104
+ priority?: boolean
105
105
  /** Preload the image without opting into the `priority` LCP warning gating. */
106
- preload?: boolean;
107
- loading?: 'lazy' | 'eager';
108
- placeholder?: 'blur' | 'empty' | `data:image/${string}`;
109
- blurDataURL?: string;
110
- unoptimized?: boolean;
111
- overrideSrc?: string;
112
- sizes?: string;
113
- fetchPriority?: 'high' | 'low' | 'auto';
114
- decoding?: 'async' | 'auto' | 'sync';
115
- style?: JSX.CSSProperties | string;
116
- onLoad?: JSX.GenericEventHandler<HTMLImageElement>;
117
- onError?: JSX.GenericEventHandler<HTMLImageElement>;
118
- onLoadingComplete?: (img: HTMLImageElement) => void;
119
- layout?: 'fill' | 'responsive' | 'intrinsic' | 'fixed';
120
- objectFit?: string;
121
- objectPosition?: string;
122
- };
106
+ preload?: boolean
107
+ loading?: 'lazy' | 'eager'
108
+ placeholder?: 'blur' | 'empty' | `data:image/${string}`
109
+ blurDataURL?: string
110
+ unoptimized?: boolean
111
+ overrideSrc?: string
112
+ sizes?: string
113
+ fetchPriority?: 'high' | 'low' | 'auto'
114
+ decoding?: 'async' | 'auto' | 'sync'
115
+ style?: JSX.CSSProperties | string
116
+ onLoad?: JSX.GenericEventHandler<HTMLImageElement>
117
+ onError?: JSX.GenericEventHandler<HTMLImageElement>
118
+ onLoadingComplete?: (img: HTMLImageElement) => void
119
+ layout?: 'fill' | 'responsive' | 'intrinsic' | 'fixed'
120
+ objectFit?: string
121
+ objectPosition?: string
122
+ }
123
123
 
124
124
  export interface ResolvedImageProps {
125
- props: Record<string, unknown>;
125
+ props: Record<string, unknown>
126
126
  meta: {
127
- preload: boolean;
128
- fill: boolean;
129
- unoptimized: boolean;
130
- placeholder: string;
131
- imgAttributes: { src: string; srcSet?: string; sizes?: string };
127
+ preload: boolean
128
+ fill: boolean
129
+ unoptimized: boolean
130
+ placeholder: string
131
+ imgAttributes: { src: string; srcSet?: string; sizes?: string }
132
132
  /**
133
133
  * Serialized style WITHOUT the placeholder background props - what the img should carry once loaded.
134
134
  * Set only while a placeholder is applied; the server render stamps it as `data-nimg-ph` so the
135
135
  * non-hydrated placeholder script can restore it on load.
136
136
  */
137
- loadedStyle?: string;
138
- };
137
+ loadedStyle?: string
138
+ }
139
139
  }
140
140
 
141
141
  const INVALID_BACKGROUND_SIZE = new Set<string | undefined>([
@@ -144,17 +144,17 @@ const INVALID_BACKGROUND_SIZE = new Set<string | undefined>([
144
144
  'none',
145
145
  'scale-down',
146
146
  undefined,
147
- ]);
147
+ ])
148
148
 
149
149
  function unwrapStaticImport(src: StaticImport): StaticImageData {
150
- return 'default' in src ? src.default : src;
150
+ return 'default' in src ? src.default : src
151
151
  }
152
152
 
153
153
  function toNumber(value: number | string | undefined): number | undefined {
154
- if (value === undefined) return undefined;
155
- if (typeof value === 'number') return value;
156
- const n = parseInt(value, 10);
157
- return Number.isNaN(n) ? undefined : n;
154
+ if (value === undefined) return undefined
155
+ if (typeof value === 'number') return value
156
+ const n = parseInt(value, 10)
157
+ return Number.isNaN(n) ? undefined : n
158
158
  }
159
159
 
160
160
  // The client reads the inlined define, the server the global registerImageExtensions
@@ -162,7 +162,7 @@ function toNumber(value: number | string | undefined): number | undefined {
162
162
  export function getImagesConfig(): ResolvedImagesConfig {
163
163
  return typeof __PNEXT_IMAGE_CONFIG_INLINED__ === 'boolean'
164
164
  ? __PNEXT_IMAGE_CONFIG_INLINE__
165
- : (globalThis.__PNEXT_IMAGE_CONFIG__ ?? DEFAULT_IMAGES_CONFIG);
165
+ : (globalThis.__PNEXT_IMAGE_CONFIG__ ?? DEFAULT_IMAGES_CONFIG)
166
166
  }
167
167
 
168
168
  function defaultLoader(
@@ -171,34 +171,34 @@ function defaultLoader(
171
171
  width: number,
172
172
  quality?: number,
173
173
  ): string {
174
- const q = findClosestQuality(config, quality);
175
- return `${config.path}?url=${encodeURIComponent(src)}&w=${width}&q=${q}`;
174
+ const q = findClosestQuality(config, quality)
175
+ return `${config.path}?url=${encodeURIComponent(src)}&w=${width}&q=${q}`
176
176
  }
177
177
 
178
178
  export function findClosestQuality(config: ResolvedImagesConfig, quality?: number): number {
179
- const qualities = config.qualities;
180
- if (!qualities || qualities.length === 0) return quality ?? 75;
181
- if (quality === undefined) return closest(qualities, 75);
182
- return closest(qualities, quality);
179
+ const qualities = config.qualities
180
+ if (!qualities || qualities.length === 0) return quality ?? 75
181
+ if (quality === undefined) return closest(qualities, 75)
182
+ return closest(qualities, quality)
183
183
  }
184
184
 
185
185
  function closest(values: number[], target: number): number {
186
- let best = values[0]!;
187
- let bestDelta = Math.abs(best - target);
186
+ let best = values[0]!
187
+ let bestDelta = Math.abs(best - target)
188
188
  for (const value of values) {
189
- const delta = Math.abs(value - target);
189
+ const delta = Math.abs(value - target)
190
190
  if (delta < bestDelta) {
191
- best = value;
192
- bestDelta = delta;
191
+ best = value
192
+ bestDelta = delta
193
193
  }
194
194
  }
195
- return best;
195
+ return best
196
196
  }
197
197
 
198
198
  interface GenImgAttrsResult {
199
- src: string;
200
- srcSet: string | undefined;
201
- sizes: string | undefined;
199
+ src: string
200
+ srcSet: string | undefined
201
+ sizes: string | undefined
202
202
  }
203
203
 
204
204
  function getWidths(
@@ -206,44 +206,49 @@ function getWidths(
206
206
  width: number | undefined,
207
207
  sizes: string | undefined,
208
208
  ): { widths: number[]; kind: 'w' | 'x' } {
209
- const { deviceSizes, allSizes } = config;
209
+ const { deviceSizes, allSizes } = config
210
210
  if (sizes) {
211
- const viewportWidthRe = /(^|\s)(1?\d?\d)vw/g;
212
- const percentSizes: number[] = [];
213
- for (let match; (match = viewportWidthRe.exec(sizes)); ) {
214
- percentSizes.push(parseInt(match[2]!, 10));
211
+ const viewportWidthRe = /(^|\s)(1?\d?\d)vw/g
212
+ const percentSizes: number[] = []
213
+ for (let match; (match = viewportWidthRe.exec(sizes));) {
214
+ percentSizes.push(parseInt(match[2]!, 10))
215
215
  }
216
216
  if (percentSizes.length) {
217
- const smallestRatio = Math.min(...percentSizes) * 0.01;
217
+ const smallestRatio = Math.min(...percentSizes) * 0.01
218
218
  return {
219
219
  widths: allSizes.filter(s => s >= deviceSizes[0]! * smallestRatio),
220
220
  kind: 'w',
221
- };
221
+ }
222
222
  }
223
- return { widths: allSizes, kind: 'w' };
223
+ return { widths: allSizes, kind: 'w' }
224
224
  }
225
- if (typeof width !== 'number') return { widths: deviceSizes, kind: 'w' };
225
+ if (typeof width !== 'number') return { widths: deviceSizes, kind: 'w' }
226
226
  const widths = [
227
227
  ...new Set(
228
228
  [width, width * 2].map(w => allSizes.find(p => p >= w) || allSizes[allSizes.length - 1]!),
229
229
  ),
230
- ];
231
- return { widths, kind: 'x' };
230
+ ]
231
+ return { widths, kind: 'x' }
232
232
  }
233
233
 
234
234
  function generateImgAttrs(params: {
235
- config: ResolvedImagesConfig;
236
- src: string;
237
- unoptimized: boolean;
238
- width: number | undefined;
239
- quality: number | undefined;
240
- sizes: string | undefined;
241
- loader: (args: { config: ResolvedImagesConfig; src: string; width: number; quality?: number }) => string;
235
+ config: ResolvedImagesConfig
236
+ src: string
237
+ unoptimized: boolean
238
+ width: number | undefined
239
+ quality: number | undefined
240
+ sizes: string | undefined
241
+ loader: (args: {
242
+ config: ResolvedImagesConfig
243
+ src: string
244
+ width: number
245
+ quality?: number
246
+ }) => string
242
247
  }): GenImgAttrsResult {
243
- const { config, src, unoptimized, width, quality, sizes, loader } = params;
244
- if (unoptimized) return { src, srcSet: undefined, sizes: undefined };
245
- const { widths, kind } = getWidths(config, width, sizes);
246
- const last = widths.length - 1;
248
+ const { config, src, unoptimized, width, quality, sizes, loader } = params
249
+ if (unoptimized) return { src, srcSet: undefined, sizes: undefined }
250
+ const { widths, kind } = getWidths(config, width, sizes)
251
+ const last = widths.length - 1
247
252
  return {
248
253
  sizes: !sizes && kind === 'w' ? '100vw' : sizes,
249
254
  srcSet: widths
@@ -253,7 +258,7 @@ function generateImgAttrs(params: {
253
258
  )
254
259
  .join(', '),
255
260
  src: loader({ config, src, quality, width: widths[last]! }),
256
- };
261
+ }
257
262
  }
258
263
 
259
264
  /**
@@ -262,38 +267,38 @@ function generateImgAttrs(params: {
262
267
  * builder is then dead code. Undefined (no define) keeps it, so the gate can only ever remove bytes an
263
268
  * app proved it cannot use.
264
269
  */
265
- declare const __PNEXT_IMAGE_BLUR__: boolean;
270
+ declare const __PNEXT_IMAGE_BLUR__: boolean
266
271
 
267
272
  function getImageBlurSvg(params: {
268
- widthInt?: number;
269
- heightInt?: number;
270
- blurWidth?: number;
271
- blurHeight?: number;
272
- blurDataURL: string;
273
- objectFit?: string;
273
+ widthInt?: number
274
+ heightInt?: number
275
+ blurWidth?: number
276
+ blurHeight?: number
277
+ blurDataURL: string
278
+ objectFit?: string
274
279
  }): string {
275
- const { widthInt, heightInt, blurWidth, blurHeight, blurDataURL, objectFit } = params;
276
- const std = 20;
277
- const svgWidth = blurWidth ? blurWidth * 40 : widthInt;
278
- const svgHeight = blurHeight ? blurHeight * 40 : heightInt;
279
- const viewBox = svgWidth && svgHeight ? `viewBox='0 0 ${svgWidth} ${svgHeight}'` : '';
280
+ const { widthInt, heightInt, blurWidth, blurHeight, blurDataURL, objectFit } = params
281
+ const std = 20
282
+ const svgWidth = blurWidth ? blurWidth * 40 : widthInt
283
+ const svgHeight = blurHeight ? blurHeight * 40 : heightInt
284
+ const viewBox = svgWidth && svgHeight ? `viewBox='0 0 ${svgWidth} ${svgHeight}'` : ''
280
285
  const preserveAspectRatio = viewBox
281
286
  ? 'none'
282
287
  : objectFit === 'contain'
283
288
  ? 'xMidYMid'
284
289
  : objectFit === 'cover'
285
290
  ? 'xMidYMid slice'
286
- : 'none';
287
- return `%3Csvg xmlns='http://www.w3.org/2000/svg' ${viewBox}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${preserveAspectRatio}' style='filter: url(%23b);' href='${blurDataURL}'/%3E%3C/svg%3E`;
291
+ : 'none'
292
+ return `%3Csvg xmlns='http://www.w3.org/2000/svg' ${viewBox}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${preserveAspectRatio}' style='filter: url(%23b);' href='${blurDataURL}'/%3E%3C/svg%3E`
288
293
  }
289
294
 
290
295
  export function getImageProps(imageProps: ImageProps): { props: Record<string, unknown> } {
291
- const resolved = resolveImageProps(imageProps, getImagesConfig());
292
- return { props: resolved.props };
296
+ const resolved = resolveImageProps(imageProps, getImagesConfig())
297
+ return { props: resolved.props }
293
298
  }
294
299
 
295
300
  export function unstable_getImgProps(imageProps: ImageProps) {
296
- return getImageProps(imageProps);
301
+ return getImageProps(imageProps)
297
302
  }
298
303
 
299
304
  export function resolveImageProps(
@@ -328,66 +333,66 @@ export function resolveImageProps(
328
333
  onError: _onError,
329
334
  onLoadingComplete: _onLoadingComplete,
330
335
  ...rest
331
- } = imageProps;
336
+ } = imageProps
332
337
 
333
- let fill = fillProp;
334
- let sizes = sizesProp;
335
- let userStyle = normalizeStyle(styleProp);
338
+ let fill = fillProp
339
+ let sizes = sizesProp
340
+ let userStyle = normalizeStyle(styleProp)
336
341
 
337
342
  if (layout) {
338
- if (layout === 'fill') fill = true;
343
+ if (layout === 'fill') fill = true
339
344
  const layoutStyle =
340
345
  layout === 'intrinsic'
341
346
  ? { maxWidth: '100%', height: 'auto' }
342
347
  : layout === 'responsive'
343
348
  ? { width: '100%', height: 'auto' }
344
- : undefined;
345
- if (layoutStyle) userStyle = { ...userStyle, ...layoutStyle };
346
- if (!sizes && (layout === 'responsive' || layout === 'fill')) sizes = '100vw';
349
+ : undefined
350
+ if (layoutStyle) userStyle = { ...userStyle, ...layoutStyle }
351
+ if (!sizes && (layout === 'responsive' || layout === 'fill')) sizes = '100vw'
347
352
  }
348
353
 
349
- const staticData = rawSrc && typeof rawSrc !== 'string' ? unwrapStaticImport(rawSrc) : undefined;
350
- const src = typeof rawSrc === 'string' ? rawSrc : (staticData?.src ?? '');
354
+ const staticData = rawSrc && typeof rawSrc !== 'string' ? unwrapStaticImport(rawSrc) : undefined
355
+ const src = typeof rawSrc === 'string' ? rawSrc : (staticData?.src ?? '')
351
356
 
352
- let width = toNumber(widthProp);
353
- let height = toNumber(heightProp);
357
+ let width = toNumber(widthProp)
358
+ let height = toNumber(heightProp)
354
359
  if (staticData) {
355
360
  if (width === undefined && height === undefined) {
356
- width = staticData.width;
357
- height = staticData.height;
361
+ width = staticData.width
362
+ height = staticData.height
358
363
  } else if (width !== undefined && height === undefined) {
359
- height = Math.round((staticData.height / staticData.width) * width);
364
+ height = Math.round((staticData.height / staticData.width) * width)
360
365
  } else if (height !== undefined && width === undefined) {
361
- width = Math.round((staticData.width / staticData.height) * height);
366
+ width = Math.round((staticData.width / staticData.height) * height)
362
367
  }
363
368
  }
364
369
 
365
- const blurDataURL = blurDataURLProp ?? staticData?.blurDataURL;
366
- const quality = toNumber(qualityProp);
367
- let unoptimized = Boolean(unoptimizedProp ?? config.unoptimized);
368
- if (!src || src.startsWith('data:') || src.startsWith('blob:')) unoptimized = true;
370
+ const blurDataURL = blurDataURLProp ?? staticData?.blurDataURL
371
+ const quality = toNumber(qualityProp)
372
+ let unoptimized = Boolean(unoptimizedProp ?? config.unoptimized)
373
+ if (!src || src.startsWith('data:') || src.startsWith('blob:')) unoptimized = true
369
374
  // Serve `.svg` as-is instead of proxying through the Image Optimization API,
370
375
  // which refuses SVG unless `dangerouslyAllowSVG` is set (otherwise the request
371
376
  // 400s and the image never loads, so onLoad/onLoadingComplete never fire).
372
377
  // Only applies to the default loader — a custom loader/loaderFile owns SVG.
373
- const isDefaultLoader = !loader && !config.loaderFile;
378
+ const isDefaultLoader = !loader && !config.loaderFile
374
379
  if (
375
380
  isDefaultLoader &&
376
381
  !config.dangerouslyAllowSVG &&
377
382
  (src.split('?', 1)[0] ?? '').endsWith('.svg')
378
383
  ) {
379
- unoptimized = true;
384
+ unoptimized = true
380
385
  }
381
- if (!unoptimized) validateLocalSrc(config, src);
386
+ if (!unoptimized) validateLocalSrc(config, src)
382
387
 
383
388
  const activeLoader: (args: {
384
- config: ResolvedImagesConfig;
385
- src: string;
386
- width: number;
387
- quality?: number;
389
+ config: ResolvedImagesConfig
390
+ src: string
391
+ width: number
392
+ quality?: number
388
393
  }) => string = loader
389
394
  ? ({ src: s, width: w, quality: q }) => loader({ src: s, width: w, quality: q })
390
- : ({ config: c, src: s, width: w, quality: q }) => defaultLoader(c, s, w, q);
395
+ : ({ config: c, src: s, width: w, quality: q }) => defaultLoader(c, s, w, q)
391
396
 
392
397
  const imgAttrs = generateImgAttrs({
393
398
  config,
@@ -397,16 +402,16 @@ export function resolveImageProps(
397
402
  quality,
398
403
  sizes,
399
404
  loader: activeLoader,
400
- });
405
+ })
401
406
 
402
- const isBlur = placeholder === 'blur' && Boolean(blurDataURL);
407
+ const isBlur = placeholder === 'blur' && Boolean(blurDataURL)
403
408
  const imgStyle: Record<string, string | number | undefined> = {
404
409
  ...(fill ? { ...fillStyle(), objectFit, objectPosition } : {}),
405
410
  ...(showAltText ? {} : { color: 'transparent' }),
406
411
  ...userStyle,
407
- };
412
+ }
408
413
 
409
- const objectFitVal = typeof imgStyle.objectFit === 'string' ? imgStyle.objectFit : undefined;
414
+ const objectFitVal = typeof imgStyle.objectFit === 'string' ? imgStyle.objectFit : undefined
410
415
  const backgroundImage =
411
416
  !blurComplete && placeholder !== 'empty'
412
417
  ? placeholder === 'blur'
@@ -425,11 +430,11 @@ export function resolveImageProps(
425
430
  })}")`
426
431
  : undefined
427
432
  : `url("${placeholder}")`
428
- : undefined;
433
+ : undefined
429
434
 
430
- let backgroundSize = 'cover';
431
- if (objectFitVal === 'fill') backgroundSize = '100% 100%';
432
- else if (objectFitVal && !INVALID_BACKGROUND_SIZE.has(objectFitVal)) backgroundSize = objectFitVal;
435
+ let backgroundSize = 'cover'
436
+ if (objectFitVal === 'fill') backgroundSize = '100% 100%'
437
+ else if (objectFitVal && !INVALID_BACKGROUND_SIZE.has(objectFitVal)) backgroundSize = objectFitVal
433
438
 
434
439
  const placeholderStyle: Record<string, string | number> = backgroundImage
435
440
  ? {
@@ -438,10 +443,10 @@ export function resolveImageProps(
438
443
  backgroundRepeat: 'no-repeat',
439
444
  backgroundImage,
440
445
  }
441
- : {};
446
+ : {}
442
447
 
443
- const style = serializeStyle({ ...imgStyle, ...placeholderStyle });
444
- const resolvedSrc = (overrideSrc ?? imgAttrs.src) || undefined;
448
+ const style = serializeStyle({ ...imgStyle, ...placeholderStyle })
449
+ const resolvedSrc = (overrideSrc ?? imgAttrs.src) || undefined
445
450
  const props: Record<string, unknown> = {
446
451
  ...rest,
447
452
  alt,
@@ -450,14 +455,14 @@ export function resolveImageProps(
450
455
  ...(imgAttrs.sizes ? { sizes: imgAttrs.sizes } : {}),
451
456
  decoding,
452
457
  style,
453
- };
458
+ }
454
459
  if (!fill) {
455
- if (width !== undefined) props.width = width;
456
- if (height !== undefined) props.height = height;
460
+ if (width !== undefined) props.width = width
461
+ if (height !== undefined) props.height = height
457
462
  }
458
- if (loading !== undefined) props.loading = loading;
459
- else if (!priority && !preload) props.loading = 'lazy';
460
- if (fetchPriority !== undefined) props.fetchpriority = fetchPriority;
463
+ if (loading !== undefined) props.loading = loading
464
+ else if (!priority && !preload) props.loading = 'lazy'
465
+ if (fetchPriority !== undefined) props.fetchpriority = fetchPriority
461
466
 
462
467
  return {
463
468
  props,
@@ -473,18 +478,18 @@ export function resolveImageProps(
473
478
  },
474
479
  ...(backgroundImage ? { loadedStyle: serializeStyle(imgStyle) } : {}),
475
480
  },
476
- };
481
+ }
477
482
  }
478
483
 
479
484
  function normalizeStyle(style: JSX.CSSProperties | string | undefined): Record<string, unknown> {
480
- if (!style) return {};
481
- if (typeof style !== 'string') return { ...style };
482
- const out: Record<string, unknown> = {};
485
+ if (!style) return {}
486
+ if (typeof style !== 'string') return { ...style }
487
+ const out: Record<string, unknown> = {}
483
488
  for (const decl of style.split(';')) {
484
- const [k, v] = decl.split(':');
485
- if (k && v) out[camel(k.trim())] = v.trim();
489
+ const [k, v] = decl.split(':')
490
+ if (k && v) out[camel(k.trim())] = v.trim()
486
491
  }
487
- return out;
492
+ return out
488
493
  }
489
494
 
490
495
  function fillStyle(): Record<string, string> {
@@ -496,20 +501,20 @@ function fillStyle(): Record<string, string> {
496
501
  top: '0',
497
502
  right: '0',
498
503
  bottom: '0',
499
- };
504
+ }
500
505
  }
501
506
 
502
507
  function validateLocalSrc(config: ResolvedImagesConfig, src: string): void {
503
- if (!src.startsWith('/') || src.startsWith('//') || config.localPatterns !== undefined) return;
504
- const search = new URL(src, 'http://n').search;
505
- if (!search) return;
508
+ if (!src.startsWith('/') || src.startsWith('//') || config.localPatterns !== undefined) return
509
+ const search = new URL(src, 'http://n').search
510
+ if (!search) return
506
511
  throw new Error(
507
512
  `Image with src "${src}" is using a query string which is not configured in images.localPatterns.\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`,
508
- );
513
+ )
509
514
  }
510
515
 
511
516
  function camel(prop: string): string {
512
- return prop.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());
517
+ return prop.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase())
513
518
  }
514
519
 
515
520
  const UNITLESS_STYLE_PROPS = new Set([
@@ -556,20 +561,21 @@ const UNITLESS_STYLE_PROPS = new Set([
556
561
  'strokeMiterlimit',
557
562
  'strokeOpacity',
558
563
  'strokeWidth',
559
- ]);
564
+ ])
560
565
 
561
566
  function serializeStyle(style: Record<string, string | number | undefined>): string {
562
567
  return Object.entries(style)
563
568
  .filter(([, v]) => v !== undefined && v !== '')
564
569
  .map(([k, v]) => `${kebab(k)}:${cssValue(k, v!)}`)
565
- .join(';');
570
+ .join(';')
566
571
  }
567
572
 
568
573
  function cssValue(prop: string, value: string | number): string {
569
- if (typeof value === 'number' && value !== 0 && !UNITLESS_STYLE_PROPS.has(prop)) return `${value}px`;
570
- return String(value);
574
+ if (typeof value === 'number' && value !== 0 && !UNITLESS_STYLE_PROPS.has(prop))
575
+ return `${value}px`
576
+ return String(value)
571
577
  }
572
578
 
573
579
  function kebab(prop: string): string {
574
- return prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);
580
+ return prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`)
575
581
  }