@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
@@ -7,66 +7,66 @@
7
7
  // - every local source file must still match the stat it was read at, so a font swapped while the
8
8
  // server was not running re-resolves and re-emits.
9
9
  // Nothing here is used by `pnext build`, which owns the directory it just wiped.
10
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
11
- import { mkdir, stat } from 'node:fs/promises';
12
- import { createHash } from 'node:crypto';
13
- import path from 'node:path';
14
- import type { ResolvedConfig } from '../../../config';
15
- import { restartCacheEnabled } from '../../../dev/restart-cache';
16
- import { writeFileAtomic } from '../../../utils/fs';
17
- import type { MetadataLink } from '../../../types';
10
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs'
11
+ import { mkdir, stat } from 'node:fs/promises'
12
+ import { createHash } from 'node:crypto'
13
+ import path from 'node:path'
14
+ import type { ResolvedConfig } from '../../../config'
15
+ import { restartCacheEnabled } from '../../../dev/restart/enabled'
16
+ import { writeFileAtomic } from '../../../utils/fs'
17
+ import type { MetadataLink } from '../../../types'
18
18
 
19
19
  export interface PersistableFont {
20
- css: string;
21
- preloads: MetadataLink[];
22
- usesFonts: boolean;
23
- files: string[];
20
+ css: string
21
+ preloads: MetadataLink[]
22
+ usesFonts: boolean
23
+ files: string[]
24
24
  /** Local font files the resolution read (google resolutions have none). */
25
- sources?: string[];
25
+ sources?: string[]
26
26
  }
27
27
 
28
28
  /** `[file, mtimeMs, size]` — a local source and the stat it was resolved at. */
29
- type SourceStat = [string, number, number];
29
+ type SourceStat = [string, number, number]
30
30
 
31
31
  interface Entry extends PersistableFont {
32
- sourceStats: SourceStat[];
32
+ sourceStats: SourceStat[]
33
33
  }
34
34
 
35
35
  interface IndexFile {
36
- version: number;
36
+ version: number
37
37
  /** Content hash of the font runtime, so an upgrade never serves its output. */
38
- runtime: string;
39
- fonts: Record<string, Entry>;
38
+ runtime: string
39
+ fonts: Record<string, Entry>
40
40
  }
41
41
 
42
42
  /** Bumped whenever a record's shape changes; an older index is simply ignored. */
43
- const INDEX_VERSION = 1;
43
+ const INDEX_VERSION = 1
44
44
 
45
45
  interface FontIndex {
46
- file: string;
47
- fonts: Map<string, Entry>;
48
- dirty: boolean;
49
- flush?: Timer;
46
+ file: string
47
+ fonts: Map<string, Entry>
48
+ dirty: boolean
49
+ flush?: Timer
50
50
  }
51
51
 
52
- const indexes = new Map<string, FontIndex>();
52
+ const indexes = new Map<string, FontIndex>()
53
53
 
54
54
  function fontIndex(config: ResolvedConfig): FontIndex {
55
- const file = path.join(config.outPath, 'cache', 'fonts', 'index.json');
56
- const existing = indexes.get(file);
57
- if (existing) return existing;
58
- const created: FontIndex = { file, fonts: readIndex(file), dirty: false };
59
- indexes.set(file, created);
55
+ const file = path.join(config.outPath, 'cache', 'fonts', 'index.json')
56
+ const existing = indexes.get(file)
57
+ if (existing) return existing
58
+ const created: FontIndex = { file, fonts: readIndex(file), dirty: false }
59
+ indexes.set(file, created)
60
60
  process.on('exit', () => {
61
- if (!created.dirty) return;
62
- created.dirty = false;
61
+ if (!created.dirty) return
62
+ created.dirty = false
63
63
  try {
64
- writeFileSync(created.file, serializeIndex(created.fonts));
64
+ writeFileSync(created.file, serializeIndex(created.fonts))
65
65
  } catch {
66
66
  // Best effort: a missing index only costs the next boot a re-resolve.
67
67
  }
68
- });
69
- return created;
68
+ })
69
+ return created
70
70
  }
71
71
 
72
72
  /** The recorded resolution for `key`, or undefined when it no longer describes disk. */
@@ -74,72 +74,72 @@ export async function persistedFont(
74
74
  config: ResolvedConfig,
75
75
  key: string,
76
76
  ): Promise<PersistableFont | undefined> {
77
- if (!restartCacheEnabled()) return undefined;
78
- const entry = fontIndex(config).fonts.get(key);
79
- if (!entry) return undefined;
80
- if (!entry.files.every(file => existsSync(file))) return undefined;
77
+ if (!restartCacheEnabled()) return undefined
78
+ const entry = fontIndex(config).fonts.get(key)
79
+ if (!entry) return undefined
80
+ if (!entry.files.every(file => existsSync(file))) return undefined
81
81
  const stats = await Promise.all(
82
82
  entry.sourceStats.map(async ([file, mtimeMs, size]) => {
83
- const current = await stat(file).catch(() => undefined);
84
- return current?.mtimeMs === mtimeMs && current.size === size;
83
+ const current = await stat(file).catch(() => undefined)
84
+ return current?.mtimeMs === mtimeMs && current.size === size
85
85
  }),
86
- );
87
- if (!stats.every(Boolean)) return undefined;
88
- return entry;
86
+ )
87
+ if (!stats.every(Boolean)) return undefined
88
+ return entry
89
89
  }
90
90
 
91
91
  /** Record a finished resolution. Failures are non-fatal — they cost a re-resolve. */
92
92
  export async function persistFont(config: ResolvedConfig, key: string, font: PersistableFont) {
93
- const index = fontIndex(config);
93
+ const index = fontIndex(config)
94
94
  const sourceStats = await Promise.all(
95
95
  (font.sources ?? []).map(async (file): Promise<SourceStat | undefined> => {
96
- const stats = await stat(file).catch(() => undefined);
97
- return stats ? [file, stats.mtimeMs, stats.size] : undefined;
96
+ const stats = await stat(file).catch(() => undefined)
97
+ return stats ? [file, stats.mtimeMs, stats.size] : undefined
98
98
  }),
99
- );
99
+ )
100
100
  // A source that vanished mid-resolve must not be recorded as validated.
101
- if (sourceStats.some(entry => entry === undefined)) return;
102
- index.fonts.set(key, { ...font, sourceStats: sourceStats as SourceStat[] });
103
- persist(index);
101
+ if (sourceStats.some(entry => entry === undefined)) return
102
+ index.fonts.set(key, { ...font, sourceStats: sourceStats as SourceStat[] })
103
+ persist(index)
104
104
  }
105
105
 
106
106
  function persist(index: FontIndex) {
107
- index.dirty = true;
108
- if (index.flush) return;
107
+ index.dirty = true
108
+ if (index.flush) return
109
109
  index.flush = setTimeout(async () => {
110
- index.flush = undefined;
111
- if (!index.dirty) return;
112
- const contents = serializeIndex(index.fonts);
110
+ index.flush = undefined
111
+ if (!index.dirty) return
112
+ const contents = serializeIndex(index.fonts)
113
113
  try {
114
- await mkdir(path.dirname(index.file), { recursive: true });
115
- await writeFileAtomic(index.file, contents);
116
- index.dirty = false;
114
+ await mkdir(path.dirname(index.file), { recursive: true })
115
+ await writeFileAtomic(index.file, contents)
116
+ index.dirty = false
117
117
  } catch {
118
118
  // A write that lost a race with a cache wipe must not look persisted.
119
119
  }
120
- }, 50);
120
+ }, 50)
121
121
  // NOT unref'd: under the dev server this timer never fired, so the index was never written and
122
122
  // every restart re-resolved every font over the network. The `exit` handler above still covers a
123
123
  // process exit inside the window.
124
124
  }
125
125
 
126
126
  function readIndex(file: string) {
127
- const fonts = new Map<string, Entry>();
128
- let parsed: IndexFile | undefined;
127
+ const fonts = new Map<string, Entry>()
128
+ let parsed: IndexFile | undefined
129
129
  try {
130
- parsed = JSON.parse(readFileSync(file, 'utf8')) as IndexFile;
130
+ parsed = JSON.parse(readFileSync(file, 'utf8')) as IndexFile
131
131
  } catch {
132
- return fonts;
132
+ return fonts
133
133
  }
134
134
  if (parsed?.version !== INDEX_VERSION || parsed.runtime !== runtimeFingerprint()) {
135
- return fonts;
135
+ return fonts
136
136
  }
137
137
  for (const [key, entry] of Object.entries(parsed.fonts ?? {})) {
138
138
  if (entry && Array.isArray(entry.files) && Array.isArray(entry.sourceStats)) {
139
- fonts.set(key, entry);
139
+ fonts.set(key, entry)
140
140
  }
141
141
  }
142
- return fonts;
142
+ return fonts
143
143
  }
144
144
 
145
145
  function serializeIndex(fonts: Map<string, Entry>) {
@@ -147,25 +147,25 @@ function serializeIndex(fonts: Map<string, Entry>) {
147
147
  version: INDEX_VERSION,
148
148
  runtime: runtimeFingerprint(),
149
149
  fonts: Object.fromEntries(fonts),
150
- } satisfies IndexFile);
150
+ } satisfies IndexFile)
151
151
  }
152
152
 
153
153
  // The CSS a resolution emits is shaped entirely by this directory's sources, so
154
154
  // editing the font runtime must retire its records the same way editing a font
155
155
  // does. Four small files, once per process.
156
- let fingerprint: string | undefined;
156
+ let fingerprint: string | undefined
157
157
 
158
158
  function runtimeFingerprint() {
159
- if (fingerprint !== undefined) return fingerprint;
160
- const hash = createHash('sha256');
159
+ if (fingerprint !== undefined) return fingerprint
160
+ const hash = createHash('sha256')
161
161
  for (const entry of ['runtime.ts', 'google.ts', 'local.ts', 'shared.ts']) {
162
- const file = new URL(entry, import.meta.url).pathname;
162
+ const file = new URL(entry, import.meta.url).pathname
163
163
  try {
164
- hash.update(`${entry}:${Bun.hash(readFileSync(file)).toString(36)}\0`);
164
+ hash.update(`${entry}:${Bun.hash(readFileSync(file)).toString(36)}\0`)
165
165
  } catch {
166
166
  // ignore unreadable entries
167
167
  }
168
168
  }
169
- fingerprint = hash.digest('hex').slice(0, 16);
170
- return fingerprint;
169
+ fingerprint = hash.digest('hex').slice(0, 16)
170
+ return fingerprint
171
171
  }
@@ -1,2 +1,2 @@
1
- export * from 'next-font/google';
2
- export type { FontDisplay, GoogleFontOptions, NextFont, NextFontWithVariable } from './runtime';
1
+ export * from 'next-font/google'
2
+ export type { FontDisplay, GoogleFontOptions, NextFont, NextFontWithVariable } from './runtime'
@@ -5,4 +5,4 @@ export type {
5
5
  LocalFontSource,
6
6
  NextFont,
7
7
  NextFontWithVariable,
8
- } from './runtime';
8
+ } from './runtime'
@@ -1,5 +1,5 @@
1
- import { localFont } from './runtime';
1
+ import { localFont } from './runtime'
2
2
 
3
- export type { LocalFontOptions, LocalFontSource, NextFont, NextFontWithVariable } from './runtime';
3
+ export type { LocalFontOptions, LocalFontSource, NextFont, NextFontWithVariable } from './runtime'
4
4
 
5
- export default localFont;
5
+ export default localFont
@@ -17,7 +17,7 @@ import {
17
17
  type GoogleFontOptions,
18
18
  type LocalFontOptions,
19
19
  type NextFontWithVariable,
20
- } from './shared';
20
+ } from './shared'
21
21
 
22
22
  export type {
23
23
  FontDisplay,
@@ -26,13 +26,13 @@ export type {
26
26
  LocalFontSource,
27
27
  NextFont,
28
28
  NextFontWithVariable,
29
- } from './shared';
29
+ } from './shared'
30
30
 
31
31
  function fontObject(naming: {
32
- className: string;
33
- variable: string;
34
- hasVariable: boolean;
35
- style: NextFontWithVariable['style'];
32
+ className: string
33
+ variable: string
34
+ hasVariable: boolean
35
+ style: NextFontWithVariable['style']
36
36
  }): NextFontWithVariable {
37
37
  // Plain data object: no registration side effects (the server already emitted
38
38
  // the CSS/assets). Client code reads className/variable/style off this. The
@@ -42,30 +42,32 @@ function fontObject(naming: {
42
42
  const font: NextFontWithVariable = {
43
43
  className: naming.className,
44
44
  style: naming.style,
45
- } as NextFontWithVariable;
46
- if (naming.hasVariable) font.variable = naming.variable;
47
- return font;
45
+ } as NextFontWithVariable
46
+ if (naming.hasVariable) font.variable = naming.variable
47
+ return font
48
48
  }
49
49
 
50
50
  export function googleFont(family: string) {
51
51
  return (options: GoogleFontOptions = {}): NextFontWithVariable =>
52
- fontObject(googleFontNaming(family, options));
52
+ fontObject(googleFontNaming(family, options))
53
53
  }
54
54
 
55
55
  export interface LocalFontLoader {
56
- (options: LocalFontOptions): NextFontWithVariable;
57
- withFile: typeof localFontWithFile;
56
+ (options: LocalFontOptions): NextFontWithVariable
57
+ withFile: typeof localFontWithFile
58
58
  }
59
59
 
60
60
  export function localFontWithFile(callerFile: string | undefined, family?: string) {
61
61
  return (options: LocalFontOptions): NextFontWithVariable =>
62
62
  fontObject({
63
63
  ...localFontNaming(callerFile, options),
64
- ...(family ? { fontFamily: family, style: fontStyle(family, options, options.fallback ?? []) } : {}),
65
- });
64
+ ...(family
65
+ ? { fontFamily: family, style: fontStyle(family, options, options.fallback ?? []) }
66
+ : {}),
67
+ })
66
68
  }
67
69
 
68
70
  export const localFont: LocalFontLoader = Object.assign(
69
71
  (options: LocalFontOptions) => localFontWithFile(undefined)(options),
70
72
  { withFile: localFontWithFile },
71
- );
73
+ )