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