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