@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
@@ -8,44 +8,44 @@
8
8
  // accepts.
9
9
  // ---------------------------------------------------------------------------
10
10
 
11
- import { getNextConfig } from '../config-loader';
11
+ import { getNextConfig } from '../config-loader'
12
12
 
13
13
  export interface LocalPattern {
14
- pathname?: string;
15
- search?: string;
14
+ pathname?: string
15
+ search?: string
16
16
  }
17
17
 
18
18
  export interface RemotePattern {
19
- protocol?: string;
20
- hostname?: string;
21
- port?: string;
22
- pathname?: string;
23
- search?: string;
19
+ protocol?: string
20
+ hostname?: string
21
+ port?: string
22
+ pathname?: string
23
+ search?: string
24
24
  }
25
25
 
26
26
  export interface ResolvedImagesConfig {
27
- deviceSizes: number[];
28
- imageSizes: number[];
27
+ deviceSizes: number[]
28
+ imageSizes: number[]
29
29
  /** deviceSizes + imageSizes, sorted ascending (Next's `allSizes`). */
30
- allSizes: number[];
31
- qualities: number[] | undefined;
32
- formats: string[];
33
- path: string;
34
- loader: string;
35
- loaderFile: string;
36
- domains: string[];
37
- disableStaticImages: boolean;
38
- minimumCacheTTL: number;
39
- maximumRedirects: number;
40
- maximumResponseBody: number;
41
- dangerouslyAllowLocalIP: boolean;
42
- dangerouslyAllowSVG: boolean;
43
- contentSecurityPolicy: string;
44
- contentDispositionType: string;
45
- localPatterns: LocalPattern[] | undefined;
46
- remotePatterns: RemotePattern[];
47
- unoptimized: boolean;
48
- customCacheHandler: boolean;
30
+ allSizes: number[]
31
+ qualities: number[] | undefined
32
+ formats: string[]
33
+ path: string
34
+ loader: string
35
+ loaderFile: string
36
+ domains: string[]
37
+ disableStaticImages: boolean
38
+ minimumCacheTTL: number
39
+ maximumRedirects: number
40
+ maximumResponseBody: number
41
+ dangerouslyAllowLocalIP: boolean
42
+ dangerouslyAllowSVG: boolean
43
+ contentSecurityPolicy: string
44
+ contentDispositionType: string
45
+ localPatterns: LocalPattern[] | undefined
46
+ remotePatterns: RemotePattern[]
47
+ unoptimized: boolean
48
+ customCacheHandler: boolean
49
49
  }
50
50
 
51
51
  const DEFAULTS = {
@@ -69,41 +69,39 @@ const DEFAULTS = {
69
69
  qualities: [75] as number[] | undefined,
70
70
  unoptimized: false,
71
71
  customCacheHandler: false,
72
- } as const;
72
+ } as const
73
73
 
74
- let cached: { key: unknown; value: ResolvedImagesConfig } | undefined;
74
+ let cached: { key: unknown; value: ResolvedImagesConfig } | undefined
75
75
 
76
76
  function asNumberArray(value: unknown, fallback: number[]): number[] {
77
- if (!Array.isArray(value)) return fallback;
78
- const nums = value.filter((v): v is number => typeof v === 'number');
79
- return nums.length > 0 ? nums : fallback;
77
+ if (!Array.isArray(value)) return fallback
78
+ const nums = value.filter((v): v is number => typeof v === 'number')
79
+ return nums.length > 0 ? nums : fallback
80
80
  }
81
81
 
82
82
  /** The app's resolved images config, defaults overlaid with next.config.images. */
83
83
  export function getImagesConfig(): ResolvedImagesConfig {
84
- const raw = getNextConfig().images;
85
- if (cached && cached.key === raw) return cached.value;
86
- const images = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;
84
+ const raw = getNextConfig().images
85
+ if (cached && cached.key === raw) return cached.value
86
+ const images = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>
87
87
 
88
88
  const deviceSizes = asNumberArray(images.deviceSizes, [...DEFAULTS.deviceSizes]).sort(
89
89
  (a, b) => a - b,
90
- );
90
+ )
91
91
  const imageSizes = asNumberArray(images.imageSizes, [...DEFAULTS.imageSizes]).sort(
92
92
  (a, b) => a - b,
93
- );
93
+ )
94
94
  const qualities =
95
95
  images.qualities === undefined
96
96
  ? [...(DEFAULTS.qualities ?? [])]
97
- : asNumberArray(images.qualities, [...(DEFAULTS.qualities ?? [])]).sort((a, b) => a - b);
97
+ : asNumberArray(images.qualities, [...(DEFAULTS.qualities ?? [])]).sort((a, b) => a - b)
98
98
 
99
99
  const value: ResolvedImagesConfig = {
100
100
  deviceSizes,
101
101
  imageSizes,
102
102
  allSizes: [...deviceSizes, ...imageSizes].sort((a, b) => a - b),
103
103
  qualities,
104
- formats: Array.isArray(images.formats)
105
- ? (images.formats as string[])
106
- : [...DEFAULTS.formats],
104
+ formats: Array.isArray(images.formats) ? (images.formats as string[]) : [...DEFAULTS.formats],
107
105
  path: typeof images.path === 'string' ? images.path : DEFAULTS.path,
108
106
  loader: typeof images.loader === 'string' ? images.loader : DEFAULTS.loader,
109
107
  loaderFile: typeof images.loaderFile === 'string' ? images.loaderFile : DEFAULTS.loaderFile,
@@ -145,21 +143,21 @@ export function getImagesConfig(): ResolvedImagesConfig {
145
143
  unoptimized:
146
144
  typeof images.unoptimized === 'boolean' ? images.unoptimized : DEFAULTS.unoptimized,
147
145
  customCacheHandler: Boolean(images.customCacheHandler),
148
- };
149
- cached = { key: raw, value };
150
- return value;
146
+ }
147
+ cached = { key: raw, value }
148
+ return value
151
149
  }
152
150
 
153
151
  function normalizeLocalPatterns(value: unknown): LocalPattern[] | undefined {
154
- if (!Array.isArray(value)) return undefined;
152
+ if (!Array.isArray(value)) return undefined
155
153
  const patterns = value.map(entry => {
156
- if (typeof entry === 'string') return { pathname: entry, search: '' };
157
- const obj = (entry ?? {}) as Record<string, unknown>;
154
+ if (typeof entry === 'string') return { pathname: entry, search: '' }
155
+ const obj = (entry ?? {}) as Record<string, unknown>
158
156
  return {
159
157
  pathname: typeof obj.pathname === 'string' ? obj.pathname : undefined,
160
158
  search: typeof obj.search === 'string' ? obj.search : undefined,
161
- };
162
- });
159
+ }
160
+ })
163
161
  // Next implicitly allows statically-imported media once localPatterns is
164
162
  // configured, so build-time optimized static images keep loading. Appended to
165
163
  // the normalized list so the runtime check and the images-manifest writer
@@ -167,12 +165,12 @@ function normalizeLocalPatterns(value: unknown): LocalPattern[] | undefined {
167
165
  patterns.push(
168
166
  { pathname: '/_next/static/media/**', search: '' },
169
167
  { pathname: '/_next/static/immutable/media/**', search: '' },
170
- );
171
- return patterns;
168
+ )
169
+ return patterns
172
170
  }
173
171
 
174
172
  function normalizeRemotePatterns(value: unknown): RemotePattern[] {
175
- if (!Array.isArray(value)) return [];
173
+ if (!Array.isArray(value)) return []
176
174
  return value.map(entry => {
177
175
  // next.config may pass a URL instance (new URL('https://host/**')).
178
176
  if (entry instanceof URL) {
@@ -182,15 +180,15 @@ function normalizeRemotePatterns(value: unknown): RemotePattern[] {
182
180
  ...(entry.port ? { port: entry.port } : {}),
183
181
  pathname: entry.pathname,
184
182
  search: entry.search,
185
- };
183
+ }
186
184
  }
187
- const obj = (entry ?? {}) as Record<string, unknown>;
185
+ const obj = (entry ?? {}) as Record<string, unknown>
188
186
  return {
189
187
  protocol: typeof obj.protocol === 'string' ? obj.protocol : undefined,
190
188
  hostname: typeof obj.hostname === 'string' ? obj.hostname : undefined,
191
189
  port: typeof obj.port === 'string' ? obj.port : undefined,
192
190
  pathname: typeof obj.pathname === 'string' ? obj.pathname : undefined,
193
191
  search: typeof obj.search === 'string' ? obj.search : undefined,
194
- };
195
- });
192
+ }
193
+ })
196
194
  }
@@ -6,62 +6,66 @@
6
6
  // and the build-time blur-placeholder generator for static imports.
7
7
  // ---------------------------------------------------------------------------
8
8
 
9
- import type { ResolvedImagesConfig } from './config';
9
+ import type { ResolvedImagesConfig } from './config'
10
10
 
11
- export { serveImageOptimizer } from '../../image-optimizer';
11
+ export { serveImageOptimizer } from '../../image-optimizer/optimize'
12
12
 
13
- const BLUR_QUALITY = 70;
13
+ const BLUR_QUALITY = 70
14
14
 
15
15
  interface SharpPipeline {
16
- resize(options: { width?: number; height?: number; withoutEnlargement?: boolean }): SharpPipeline;
17
- webp(options: { quality: number }): SharpPipeline;
18
- avif(options: { quality: number }): SharpPipeline;
19
- png(options: { quality: number }): SharpPipeline;
20
- jpeg(options: { quality: number; mozjpeg?: boolean }): SharpPipeline;
21
- toBuffer(): Promise<Buffer>;
16
+ resize(options: { width?: number; height?: number; withoutEnlargement?: boolean }): SharpPipeline
17
+ webp(options: { quality: number }): SharpPipeline
18
+ avif(options: { quality: number }): SharpPipeline
19
+ png(options: { quality: number }): SharpPipeline
20
+ jpeg(options: { quality: number; mozjpeg?: boolean }): SharpPipeline
21
+ toBuffer(): Promise<Buffer>
22
22
  }
23
23
 
24
- type SharpModule = (input: Buffer | Uint8Array) => SharpPipeline;
24
+ type SharpModule = (input: Buffer | Uint8Array) => SharpPipeline
25
25
 
26
- let sharpPromise: Promise<SharpModule | undefined> | undefined;
26
+ let sharpPromise: Promise<SharpModule | undefined> | undefined
27
27
  function loadSharp(): Promise<SharpModule | undefined> {
28
28
  if (!sharpPromise) {
29
29
  sharpPromise = import('sharp')
30
30
  .then(m => (m.default ?? m) as unknown as SharpModule)
31
- .catch(() => undefined);
31
+ .catch(() => undefined)
32
32
  }
33
- return sharpPromise;
33
+ return sharpPromise
34
34
  }
35
35
 
36
36
  /** True if this request is for the image optimizer endpoint. */
37
37
  export function isImageOptimizerRequest(url: URL, config: ResolvedImagesConfig): boolean {
38
38
  // `/_next/image/` (trailingSlash: true apps) is served the same as the bare
39
39
  // path — the interceptor runs before core's trailing-slash normalization.
40
- return url.pathname === config.path || url.pathname === `${config.path}/`;
40
+ return url.pathname === config.path || url.pathname === `${config.path}/`
41
41
  }
42
42
 
43
- const VALID_BLUR_EXT = new Set(['jpeg', 'jpg', 'png', 'webp', 'avif']);
43
+ const VALID_BLUR_EXT = new Set(['jpeg', 'jpg', 'png', 'webp', 'avif'])
44
44
 
45
45
  /** True for animated webp/gif/avif — Next skips blur-placeholder generation for these. */
46
46
  function isAnimated(buffer: Buffer): boolean {
47
47
  // WebP: an 'ANIM' chunk under a VP8X container.
48
- if (buffer.length > 16 && buffer.toString('ascii', 0, 4) === 'RIFF' && buffer.toString('ascii', 8, 12) === 'WEBP') {
49
- return buffer.includes(Buffer.from('ANIM', 'ascii'));
48
+ if (
49
+ buffer.length > 16 &&
50
+ buffer.toString('ascii', 0, 4) === 'RIFF' &&
51
+ buffer.toString('ascii', 8, 12) === 'WEBP'
52
+ ) {
53
+ return buffer.includes(Buffer.from('ANIM', 'ascii'))
50
54
  }
51
55
  // GIF: more than one image descriptor (0x2C) block before the trailer (0x3B).
52
56
  if (buffer.length > 6 && buffer.toString('ascii', 0, 3) === 'GIF') {
53
- let frames = 0;
57
+ let frames = 0
54
58
  for (let i = 6; i < buffer.length; i++) {
55
- if (buffer[i] === 0x2c) frames++;
56
- if (frames > 1) return true;
59
+ if (buffer[i] === 0x2c) frames++
60
+ if (frames > 1) return true
57
61
  }
58
- return false;
62
+ return false
59
63
  }
60
64
  // AVIF: 'avis' major/compatible brand in the ftyp box signals an image sequence.
61
65
  if (buffer.length > 16 && buffer.toString('ascii', 4, 8) === 'ftyp') {
62
- return buffer.toString('ascii', 8, 200).includes('avis');
66
+ return buffer.toString('ascii', 8, 200).includes('avis')
63
67
  }
64
- return false;
68
+ return false
65
69
  }
66
70
 
67
71
  /**
@@ -77,20 +81,20 @@ export async function generateBlurDataURL(
77
81
  blurWidth: number,
78
82
  blurHeight: number,
79
83
  ): Promise<string | undefined> {
80
- const extension = ext === 'jpg' ? 'jpeg' : ext;
81
- if (!VALID_BLUR_EXT.has(extension) || isAnimated(buffer)) return undefined;
82
- const sharp = await loadSharp();
83
- if (!sharp) return undefined;
84
+ const extension = ext === 'jpg' ? 'jpeg' : ext
85
+ if (!VALID_BLUR_EXT.has(extension) || isAnimated(buffer)) return undefined
86
+ const sharp = await loadSharp()
87
+ if (!sharp) return undefined
84
88
  try {
85
- const pipeline = sharp(buffer).resize({ width: blurWidth, height: blurHeight });
86
- let out: SharpPipeline;
87
- if (extension === 'png') out = pipeline.png({ quality: BLUR_QUALITY });
88
- else if (extension === 'webp') out = pipeline.webp({ quality: BLUR_QUALITY });
89
- else if (extension === 'avif') out = pipeline.avif({ quality: BLUR_QUALITY });
90
- else out = pipeline.jpeg({ quality: BLUR_QUALITY, mozjpeg: true });
91
- const resized = await out.toBuffer();
92
- return `data:image/${extension};base64,${resized.toString('base64')}`;
89
+ const pipeline = sharp(buffer).resize({ width: blurWidth, height: blurHeight })
90
+ let out: SharpPipeline
91
+ if (extension === 'png') out = pipeline.png({ quality: BLUR_QUALITY })
92
+ else if (extension === 'webp') out = pipeline.webp({ quality: BLUR_QUALITY })
93
+ else if (extension === 'avif') out = pipeline.avif({ quality: BLUR_QUALITY })
94
+ else out = pipeline.jpeg({ quality: BLUR_QUALITY, mozjpeg: true })
95
+ const resized = await out.toBuffer()
96
+ return `data:image/${extension};base64,${resized.toString('base64')}`
93
97
  } catch {
94
- return undefined;
98
+ return undefined
95
99
  }
96
100
  }
@@ -5,31 +5,31 @@
5
5
  // whether a requested `url` is allowed (else 400).
6
6
  // ---------------------------------------------------------------------------
7
7
 
8
- import type { LocalPattern, RemotePattern } from './config';
8
+ import type { LocalPattern, RemotePattern } from './config'
9
9
 
10
10
  function makePathnameRegex(pathname: string): RegExp {
11
11
  // Convert a Next path-to-regexp style glob ('/assets/**') into a RegExp.
12
12
  // '**' matches any depth; '*' matches a single segment.
13
- let source = '';
14
- const escaped = pathname.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
13
+ let source = ''
14
+ const escaped = pathname.replace(/[.+?^${}()|[\]\\]/g, '\\$&')
15
15
  // Handle ** then * (double-star must be processed first).
16
- source = escaped.replace(/\/\*\*/g, '(?:/.*)?').replace(/\*\*/g, '.*').replace(/\*/g, '[^/]*');
17
- return new RegExp(`^${source}$`);
16
+ source = escaped
17
+ .replace(/\/\*\*/g, '(?:/.*)?')
18
+ .replace(/\*\*/g, '.*')
19
+ .replace(/\*/g, '[^/]*')
20
+ return new RegExp(`^${source}$`)
18
21
  }
19
22
 
20
- export function hasLocalMatch(
21
- localPatterns: LocalPattern[] | undefined,
22
- url: URL,
23
- ): boolean {
23
+ export function hasLocalMatch(localPatterns: LocalPattern[] | undefined, url: URL): boolean {
24
24
  // undefined localPatterns => allow all local images (Next default).
25
- if (localPatterns === undefined) return true;
25
+ if (localPatterns === undefined) return true
26
26
  return localPatterns.some(pattern => {
27
27
  if (pattern.pathname !== undefined && !makePathnameRegex(pattern.pathname).test(url.pathname)) {
28
- return false;
28
+ return false
29
29
  }
30
- if (pattern.search !== undefined && pattern.search !== url.search) return false;
31
- return true;
32
- });
30
+ if (pattern.search !== undefined && pattern.search !== url.search) return false
31
+ return true
32
+ })
33
33
  }
34
34
 
35
35
  export function hasRemoteMatch(
@@ -37,42 +37,39 @@ export function hasRemoteMatch(
37
37
  remotePatterns: RemotePattern[],
38
38
  url: URL,
39
39
  ): boolean {
40
- if (domains.includes(url.hostname)) return true;
40
+ if (domains.includes(url.hostname)) return true
41
41
  return remotePatterns.some(pattern => {
42
42
  if (pattern.protocol !== undefined && pattern.protocol !== url.protocol.replace(/:$/, '')) {
43
- return false;
43
+ return false
44
44
  }
45
45
  if (pattern.hostname !== undefined && !matchHostname(pattern.hostname, url.hostname)) {
46
- return false;
46
+ return false
47
47
  }
48
48
  if (pattern.port !== undefined && pattern.port !== '' && pattern.port !== url.port) {
49
- return false;
49
+ return false
50
50
  }
51
- if (
52
- pattern.pathname !== undefined &&
53
- !makePathnameRegex(pattern.pathname).test(url.pathname)
54
- ) {
55
- return false;
51
+ if (pattern.pathname !== undefined && !makePathnameRegex(pattern.pathname).test(url.pathname)) {
52
+ return false
56
53
  }
57
54
  if (pattern.search !== undefined && pattern.search !== '' && pattern.search !== url.search) {
58
- return false;
55
+ return false
59
56
  }
60
- return true;
61
- });
57
+ return true
58
+ })
62
59
  }
63
60
 
64
61
  function matchHostname(pattern: string, hostname: string): boolean {
65
62
  if (pattern.startsWith('**.')) {
66
- const suffix = pattern.slice(2); // ".example.com"
67
- return hostname.endsWith(suffix) && hostname.length > suffix.length;
63
+ const suffix = pattern.slice(2) // ".example.com"
64
+ return hostname.endsWith(suffix) && hostname.length > suffix.length
68
65
  }
69
66
  if (pattern.startsWith('*.')) {
70
- const suffix = pattern.slice(1);
71
- if (!hostname.endsWith(suffix)) return false;
72
- const sub = hostname.slice(0, -suffix.length);
73
- return sub.length > 0 && !sub.includes('.');
67
+ const suffix = pattern.slice(1)
68
+ if (!hostname.endsWith(suffix)) return false
69
+ const sub = hostname.slice(0, -suffix.length)
70
+ return sub.length > 0 && !sub.includes('.')
74
71
  }
75
- return pattern === hostname;
72
+ return pattern === hostname
76
73
  }
77
74
 
78
75
  /**
@@ -83,21 +80,21 @@ function matchHostname(pattern: string, hostname: string): boolean {
83
80
  export function manifestLocalPatterns(
84
81
  localPatterns: LocalPattern[] | undefined,
85
82
  ): { pathname: string; search: string }[] {
86
- const patterns = localPatterns ?? [{ pathname: undefined, search: '' }];
83
+ const patterns = localPatterns ?? [{ pathname: undefined, search: '' }]
87
84
  const entries = patterns.map(pattern => ({
88
85
  pathname: compileLocalPathname(pattern.pathname),
89
86
  search: pattern.search ?? '',
90
- }));
91
- return entries;
87
+ }))
88
+ return entries
92
89
  }
93
90
 
94
91
  // path-to-regexp compiled source strings Next emits for local patterns.
95
92
  function compileLocalPathname(pathname: string | undefined): string {
96
93
  if (pathname === undefined || pathname === '**') {
97
- return '^(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$))(?:(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$)).)*?)\\/?)$';
94
+ return '^(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$))(?:(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$)).)*?)\\/?)$'
98
95
  }
99
96
  // '/assets/**' style
100
- const base = pathname.replace(/\/\*\*$/, '');
101
- const escaped = base.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\//g, '\\/');
102
- return `^(?:${escaped}(?:\\/(?!\\.{1,2}(?:\\/|$))(?:(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$)).)*?)|$))$`;
97
+ const base = pathname.replace(/\/\*\*$/, '')
98
+ const escaped = base.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\//g, '\\/')
99
+ return `^(?:${escaped}(?:\\/(?!\\.{1,2}(?:\\/|$))(?:(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$)).)*?)|$))$`
103
100
  }