@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
@@ -20,34 +20,34 @@
20
20
  * routes' server modules as soon as the route scan hands them over, and blocks on stdin for the
21
21
  * go-ahead to finish the rest once the manifest is written.
22
22
  */
23
- import { existsSync } from 'node:fs';
24
- import { readFile } from 'node:fs/promises';
25
- import path from 'node:path';
26
- import { fileURLToPath } from 'node:url';
27
- import { loadConfig, pathToFileHref, type ResolvedConfig } from '../../config';
28
- import { bootstrapCompat } from '../../compat-bootstrap';
29
- import { ssrClientReference } from '../../client/reference';
23
+ import { existsSync } from 'node:fs'
24
+ import { readFile } from 'node:fs/promises'
25
+ import path from 'node:path'
26
+ import { fileURLToPath } from 'node:url'
27
+ import { loadConfig, pathToFileHref, type ResolvedConfig } from '../../config'
28
+ import { bootstrapCompat } from '../../compat-bootstrap'
29
+ import { ssrClientReference } from '../../client/reference'
30
30
  import {
31
31
  devClientModuleHref,
32
32
  devServerModuleHref,
33
33
  setEmitCompiledSpecifiersManifest,
34
- } from '../../dev/imports';
35
- import { getCompatModeExtensions } from '../../extensions';
36
- import { findConventionFiles, findLayouts } from '../../routing/routes';
37
- import { registerServerRuntime } from '../../runtime/server';
38
- import { namedBunBinary } from '../named-bin';
39
- import type { VerboseLogger } from '../../utils/verbose';
40
- import type { BuildManifest } from '../../types';
34
+ } from '../../runtime/modules'
35
+ import { getCompatModeExtensions } from '../../extensions'
36
+ import { findConventionFiles, findLayouts } from '../../routing/routes'
37
+ import { registerServerRuntime } from '../../runtime/loader'
38
+ import { namedBunBinary } from '../boot/named-bin'
39
+ import type { VerboseLogger } from '../../utils/verbose'
40
+ import type { BuildManifest } from '../../types'
41
41
 
42
42
  // The child reports one line per file it finishes — `<source>` for an imported
43
43
  // route handler, `<source>\t<compiled>` for a compiled module. Everything else
44
44
  // it prints is app output the parent passes through.
45
- const DONE_MARKER = 'pnext-warm-done:';
45
+ const DONE_MARKER = 'pnext-warm-done:'
46
46
 
47
47
  // Printed once compiles finish and before the handler loop starts: the
48
48
  // compiled artifact set is already final at that boundary, so the parent can
49
49
  // start tracing the node_modules closure while this process runs handlers.
50
- const COMPILED_MARKER = 'pnext-warm-compiled';
50
+ const COMPILED_MARKER = 'pnext-warm-compiled'
51
51
 
52
52
  /**
53
53
  * What the parent sends over stdin, one JSON object per line. A `prewarm`
@@ -56,21 +56,21 @@ const COMPILED_MARKER = 'pnext-warm-compiled';
56
56
  */
57
57
  interface WarmRequest {
58
58
  /** Files a previous attempt already finished — or died on. */
59
- skip: string[];
59
+ skip: string[]
60
60
  }
61
61
  interface PrewarmRequest {
62
62
  /** Page route sources, known from the route scan long before the manifest. */
63
- prewarm: string[];
63
+ prewarm: string[]
64
64
  }
65
65
 
66
66
  // An attempt still running after this long is not going to finish: something in
67
67
  // the app's own code is holding the process. Bounded so the build completes
68
68
  // instead of hanging forever.
69
- const ATTEMPT_TIMEOUT_MS = 10 * 60_000;
69
+ const ATTEMPT_TIMEOUT_MS = 10 * 60_000
70
70
 
71
71
  // One clean pass, plus enough restarts to step over a couple of poisoned files
72
72
  // before concluding the app cannot be warmed.
73
- const MAX_ATTEMPTS = 3;
73
+ const MAX_ATTEMPTS = 3
74
74
 
75
75
  export interface WarmChild {
76
76
  /**
@@ -78,17 +78,17 @@ export interface WarmChild {
78
78
  * under the rest of the build. Optional and fire-and-forget: whatever it does
79
79
  * not get to, `finish` compiles.
80
80
  */
81
- prewarm(files: string[]): void;
81
+ prewarm(files: string[]): void
82
82
  /**
83
83
  * Release the child to warm, and collect the module paths it compiled. `onCompiled`, if given,
84
84
  * fires once - as soon as the child reaches its handler phase - with the modules compiled so far,
85
85
  * which is already the final set: the caller can start tracing the node_modules closure while the
86
86
  * child runs handlers concurrently.
87
87
  */
88
- finish(log: VerboseLogger, onCompiled?: (modules: string[]) => void): Promise<string[]>;
88
+ finish(log: VerboseLogger, onCompiled?: (modules: string[]) => void): Promise<string[]>
89
89
  }
90
90
 
91
- type WarmProcess = Bun.Subprocess<'pipe', 'pipe', 'inherit'>;
91
+ type WarmProcess = Bun.Subprocess<'pipe', 'pipe', 'inherit'>
92
92
 
93
93
  /**
94
94
  * Spawn the warm child. Call as early in the build as possible: it boots while the build runs and
@@ -96,31 +96,31 @@ type WarmProcess = Bun.Subprocess<'pipe', 'pipe', 'inherit'>;
96
96
  * throws - a warm-up that cannot start degrades to "no warmed modules", which `finish` reports.
97
97
  */
98
98
  export function startWarmChild(config: ResolvedConfig): WarmChild {
99
- const spawn = () => spawnWarmProcess(config);
100
- const first = spawn();
99
+ const spawn = () => spawnWarmProcess(config)
100
+ const first = spawn()
101
101
  return {
102
102
  prewarm(files) {
103
- if (!first || files.length === 0) return;
103
+ if (!first || files.length === 0) return
104
104
  try {
105
- void first.stdin.write(`${JSON.stringify({ prewarm: files } satisfies PrewarmRequest)}\n`);
106
- void first.stdin.flush();
105
+ void first.stdin.write(`${JSON.stringify({ prewarm: files } satisfies PrewarmRequest)}\n`)
106
+ void first.stdin.flush()
107
107
  } catch {
108
108
  // broken pipe: the child is gone; `finish` reports why
109
109
  }
110
110
  },
111
111
  finish: (log, onCompiled) => warmWithRestarts(first, spawn, log, onCompiled),
112
- };
112
+ }
113
113
  }
114
114
 
115
115
  function spawnWarmProcess(config: ResolvedConfig): WarmProcess | undefined {
116
- const entry = fileURLToPath(new URL(import.meta.url));
116
+ const entry = fileURLToPath(new URL(import.meta.url))
117
117
  try {
118
118
  return Bun.spawn(
119
119
  [namedBunBinary('pnext-warm'), '--conditions=react-server', entry, config.root],
120
120
  { cwd: config.root, stdin: 'pipe', stdout: 'pipe', stderr: 'inherit', env: process.env },
121
- );
121
+ )
122
122
  } catch {
123
- return undefined; // no child (fork limit, unsupported platform)
123
+ return undefined // no child (fork limit, unsupported platform)
124
124
  }
125
125
  }
126
126
 
@@ -132,34 +132,39 @@ async function warmWithRestarts(
132
132
  ) {
133
133
  // Source file -> compiled artifact. Handlers map to nothing but still count as
134
134
  // finished, so a restart does not import them a second time.
135
- const finished = new Map<string, string | undefined>();
136
- const compiled = () => [...finished.values()].filter((file): file is string => Boolean(file));
135
+ const finished = new Map<string, string | undefined>()
136
+ const compiled = () => [...finished.values()].filter((file): file is string => Boolean(file))
137
137
  // The marker can only mean "compiled set final" the first time it fires —
138
138
  // whichever attempt reaches its own handler phase first.
139
- let fired = false;
139
+ let fired = false
140
140
  const fireOnCompiled = onCompiled
141
141
  ? () => {
142
- if (fired) return;
143
- fired = true;
144
- onCompiled(compiled());
142
+ if (fired) return
143
+ fired = true
144
+ onCompiled(compiled())
145
145
  }
146
- : undefined;
147
- let child = first;
146
+ : undefined
147
+ let child = first
148
148
  for (let attempt = 1; attempt <= MAX_ATTEMPTS && child; attempt++) {
149
- const before = finished.size;
150
- const failure = await runAttempt(child, { skip: [...finished.keys()] }, finished, fireOnCompiled);
149
+ const before = finished.size
150
+ const failure = await runAttempt(
151
+ child,
152
+ { skip: [...finished.keys()] },
153
+ finished,
154
+ fireOnCompiled,
155
+ )
151
156
  if (!failure) {
152
- log.log(`warmed ${compiled().length} modules`);
153
- return compiled();
157
+ log.log(`warmed ${compiled().length} modules`)
158
+ return compiled()
154
159
  }
155
160
  // A restart only helps if the last one got somewhere; otherwise the first
156
161
  // thing it would redo is what killed it.
157
- child = finished.size > before && attempt < MAX_ATTEMPTS ? spawn() : undefined;
158
- if (child) log.log(`warm-up ${failure} after ${finished.size} files; restarting past them`);
159
- else warmIncomplete(failure, finished.size);
162
+ child = finished.size > before && attempt < MAX_ATTEMPTS ? spawn() : undefined
163
+ if (child) log.log(`warm-up ${failure} after ${finished.size} files; restarting past them`)
164
+ else warmIncomplete(failure, finished.size)
160
165
  }
161
- fireOnCompiled?.();
162
- return compiled();
166
+ fireOnCompiled?.()
167
+ return compiled()
163
168
  }
164
169
 
165
170
  /** Runs one attempt to completion. Returns undefined on success, else why it died. */
@@ -172,48 +177,48 @@ async function runAttempt(
172
177
  try {
173
178
  // Writing the request and closing stdin is the go-ahead; until then the
174
179
  // child sits parked after its boot (or busy on a prewarm batch).
175
- void child.stdin.write(`${JSON.stringify(request)}\n`);
176
- void child.stdin.end();
180
+ void child.stdin.write(`${JSON.stringify(request)}\n`)
181
+ void child.stdin.end()
177
182
  } catch {
178
183
  // broken pipe: the child is already gone, and its exit below says why
179
184
  }
180
- const timeout = setTimeout(() => child.kill('SIGKILL'), ATTEMPT_TIMEOUT_MS);
181
- timeout.unref?.();
185
+ const timeout = setTimeout(() => child.kill('SIGKILL'), ATTEMPT_TIMEOUT_MS)
186
+ timeout.unref?.()
182
187
 
183
188
  // Streamed rather than buffered to completion: the compiled-phase marker
184
189
  // has to reach the caller while this attempt is still running (the child's
185
190
  // handler phase), not after the process exits.
186
191
  const processLine = (line: string) => {
187
- if (!line) return;
192
+ if (!line) return
188
193
  if (line === COMPILED_MARKER) {
189
- onCompiled?.();
190
- return;
194
+ onCompiled?.()
195
+ return
191
196
  }
192
197
  if (!line.startsWith(DONE_MARKER)) {
193
- console.log(line); // app output
194
- return;
198
+ console.log(line) // app output
199
+ return
195
200
  }
196
- const [source, artifact] = line.slice(DONE_MARKER.length).split('\t');
197
- if (source) finished.set(source, artifact || undefined);
198
- };
199
- const reader = child.stdout.getReader();
200
- const decoder = new TextDecoder();
201
- let buffer = '';
201
+ const [source, artifact] = line.slice(DONE_MARKER.length).split('\t')
202
+ if (source) finished.set(source, artifact || undefined)
203
+ }
204
+ const reader = child.stdout.getReader()
205
+ const decoder = new TextDecoder()
206
+ let buffer = ''
202
207
  for (;;) {
203
- const { done, value } = await reader.read();
204
- if (done) break;
205
- buffer += decoder.decode(value, { stream: true });
206
- let newline: number;
208
+ const { done, value } = await reader.read()
209
+ if (done) break
210
+ buffer += decoder.decode(value, { stream: true })
211
+ let newline: number
207
212
  while ((newline = buffer.indexOf('\n')) >= 0) {
208
- processLine(buffer.slice(0, newline));
209
- buffer = buffer.slice(newline + 1);
213
+ processLine(buffer.slice(0, newline))
214
+ buffer = buffer.slice(newline + 1)
210
215
  }
211
216
  }
212
- if (buffer) processLine(buffer);
217
+ if (buffer) processLine(buffer)
213
218
 
214
- const code = await child.exited.finally(() => clearTimeout(timeout));
215
- if (code === 0) return undefined;
216
- return child.signalCode ? `was killed by ${child.signalCode}` : `exited with code ${code}`;
219
+ const code = await child.exited.finally(() => clearTimeout(timeout))
220
+ if (code === 0) return undefined
221
+ return child.signalCode ? `was killed by ${child.signalCode}` : `exited with code ${code}`
217
222
  }
218
223
 
219
224
  function warmIncomplete(failure: string, done: number) {
@@ -221,18 +226,18 @@ function warmIncomplete(failure: string, done: number) {
221
226
  `vercel adapter: module warm-up ${failure} after warming ${done} file(s). The function ships ` +
222
227
  'without the rest of its module cache and may fail to render those routes at request time, ' +
223
228
  "where Vercel's filesystem is read-only.",
224
- );
229
+ )
225
230
  }
226
231
 
227
232
  const report = (file: string, artifact?: string) => {
228
- console.log(`${DONE_MARKER}${file}${artifact ? `\t${artifact}` : ''}`);
229
- };
233
+ console.log(`${DONE_MARKER}${file}${artifact ? `\t${artifact}` : ''}`)
234
+ }
230
235
 
231
236
  /** Every server module a page route pulls in: the page, its layouts, its conventions. */
232
237
  function pageServerFiles(config: ResolvedConfig, routeFiles: Iterable<string>) {
233
- const files = new Set<string>();
234
- const globalNotFound = path.join(config.appPath, 'not-found.tsx');
235
- if (existsSync(globalNotFound)) files.add(globalNotFound);
238
+ const files = new Set<string>()
239
+ const globalNotFound = path.join(config.appPath, 'not-found.tsx')
240
+ if (existsSync(globalNotFound)) files.add(globalNotFound)
236
241
  for (const routeFile of routeFiles) {
237
242
  for (const file of [
238
243
  routeFile,
@@ -241,14 +246,14 @@ function pageServerFiles(config: ResolvedConfig, routeFiles: Iterable<string>) {
241
246
  findConventionFiles(config.appPath, routeFile, name),
242
247
  ),
243
248
  ]) {
244
- if (existsSync(file)) files.add(file);
249
+ if (existsSync(file)) files.add(file)
245
250
  }
246
251
  }
247
- return files;
252
+ return files
248
253
  }
249
254
 
250
255
  const compileServer = (config: ResolvedConfig, file: string) =>
251
- devServerModuleHref(config, file, 'build').then(href => report(file, fileURLToPath(href)));
256
+ devServerModuleHref(config, file, 'build').then(href => report(file, fileURLToPath(href)))
252
257
 
253
258
  /**
254
259
  * Compile the page routes' server modules from the build's route scan, long before the manifest
@@ -257,12 +262,12 @@ const compileServer = (config: ResolvedConfig, file: string) =>
257
262
  * code, so it is safe to overlap (see the handler note below).
258
263
  */
259
264
  export async function prewarmPageModules(config: ResolvedConfig, routeFiles: string[]) {
260
- if (!getCompatModeExtensions().reactEnabled(config)) return;
265
+ if (!getCompatModeExtensions().reactEnabled(config)) return
261
266
  await Promise.all(
262
267
  [...pageServerFiles(config, routeFiles)].map(file =>
263
268
  compileServer(config, file).catch(() => undefined),
264
269
  ),
265
- );
270
+ )
266
271
  }
267
272
 
268
273
  /**
@@ -274,19 +279,19 @@ export async function warmRouteModules(
274
279
  manifest: BuildManifest,
275
280
  skip: ReadonlySet<string> = new Set(),
276
281
  ) {
277
- const clientFiles = new Set<string>();
278
- const handlers: BuildManifest['routes'] = [];
279
- const pageRoutes: string[] = [];
282
+ const clientFiles = new Set<string>()
283
+ const handlers: BuildManifest['routes'] = []
284
+ const pageRoutes: string[] = []
280
285
 
281
286
  for (const route of manifest.routes) {
282
287
  if (route.kind === 'handler') {
283
- if (!skip.has(route.file)) handlers.push(route);
284
- continue;
288
+ if (!skip.has(route.file)) handlers.push(route)
289
+ continue
285
290
  }
286
- pageRoutes.push(route.file);
291
+ pageRoutes.push(route.file)
287
292
  for (const reference of route.clientReferences) {
288
293
  if (ssrClientReference(reference) && existsSync(reference.file)) {
289
- clientFiles.add(reference.file);
294
+ clientFiles.add(reference.file)
290
295
  }
291
296
  }
292
297
  }
@@ -305,9 +310,9 @@ export async function warmRouteModules(
305
310
  report(file, fileURLToPath(href)),
306
311
  ),
307
312
  ),
308
- ]);
313
+ ])
309
314
  }
310
- console.log(COMPILED_MARKER);
315
+ console.log(COMPILED_MARKER)
311
316
 
312
317
  // Handlers come last, and only once nothing else is in flight. Importing them runs the app's own
313
318
  // server code (auth, db pools, telemetry), and that code running *concurrently* with the compile
@@ -315,16 +320,16 @@ export async function warmRouteModules(
315
320
  // handlers alone against a populated cache never crash. Doing them after the compiles also means a
316
321
  // crash here costs only the remaining handlers, not the whole module pass.
317
322
  for (const route of handlers) {
318
- registerServerRuntime(config, route.sourceFiles);
323
+ registerServerRuntime(config, route.sourceFiles)
319
324
  // Reported before the import, not after: handlers are imported one at a
320
325
  // time, so a handler that takes the process down is unambiguous and a
321
326
  // restart must not run it again (Bun caches a failed import for the
322
327
  // process' lifetime anyway, so a retry could not succeed either).
323
- report(route.file);
328
+ report(route.file)
324
329
  try {
325
- await import(pathToFileHref(route.file));
330
+ await import(pathToFileHref(route.file))
326
331
  } catch (error) {
327
- console.warn(`vercel adapter: importing ${route.file} failed during warmup:`, error);
332
+ console.warn(`vercel adapter: importing ${route.file} failed during warmup:`, error)
328
333
  }
329
334
  }
330
335
  }
@@ -334,42 +339,42 @@ export async function warmRouteModules(
334
339
  * each prewarm batch as it arrives. Returns the final request.
335
340
  */
336
341
  async function readWarmRequests(config: ResolvedConfig): Promise<Partial<WarmRequest>> {
337
- let buffer = '';
338
- const decoder = new TextDecoder();
339
- const reader = Bun.stdin.stream().getReader();
342
+ let buffer = ''
343
+ const decoder = new TextDecoder()
344
+ const reader = Bun.stdin.stream().getReader()
340
345
  for (;;) {
341
- const { done, value } = await reader.read();
342
- if (done) break;
343
- buffer += decoder.decode(value, { stream: true });
344
- let newline: number;
346
+ const { done, value } = await reader.read()
347
+ if (done) break
348
+ buffer += decoder.decode(value, { stream: true })
349
+ let newline: number
345
350
  while ((newline = buffer.indexOf('\n')) >= 0) {
346
- const line = buffer.slice(0, newline).trim();
347
- buffer = buffer.slice(newline + 1);
348
- if (!line) continue;
349
- const message = JSON.parse(line) as Partial<WarmRequest & PrewarmRequest>;
350
- if (message.skip) return message;
351
- if (message.prewarm) await prewarmPageModules(config, message.prewarm);
351
+ const line = buffer.slice(0, newline).trim()
352
+ buffer = buffer.slice(newline + 1)
353
+ if (!line) continue
354
+ const message = JSON.parse(line) as Partial<WarmRequest & PrewarmRequest>
355
+ if (message.skip) return message
356
+ if (message.prewarm) await prewarmPageModules(config, message.prewarm)
352
357
  }
353
358
  }
354
- const rest = buffer.trim();
355
- return rest ? (JSON.parse(rest) as Partial<WarmRequest>) : {};
359
+ const rest = buffer.trim()
360
+ return rest ? (JSON.parse(rest) as Partial<WarmRequest>) : {}
356
361
  }
357
362
 
358
363
  if (import.meta.main) {
359
- const root = process.argv[2];
360
- const config = await loadConfig(root);
361
- await bootstrapCompat(config);
364
+ const root = process.argv[2]
365
+ const config = await loadConfig(root)
366
+ await bootstrapCompat(config)
362
367
  // This process only ever runs for a vercel-adapter build; record each
363
368
  // artifact's specifiers so the parent's trace step can read them back.
364
- setEmitCompiledSpecifiersManifest(true);
369
+ setEmitCompiledSpecifiersManifest(true)
365
370
  // Blocks until the parent sends the go-ahead, i.e. until the manifest is
366
371
  // written; a prewarm batch may arrive and run before that.
367
- const request = await readWarmRequests(config);
372
+ const request = await readWarmRequests(config)
368
373
  const manifest = JSON.parse(
369
374
  await readFile(path.join(config.outPath, 'manifest.json'), 'utf8'),
370
- ) as BuildManifest;
371
- await warmRouteModules(config, manifest, new Set(request.skip ?? []));
375
+ ) as BuildManifest
376
+ await warmRouteModules(config, manifest, new Set(request.skip ?? []))
372
377
  // App code reached through a route handler can leave the loop alive (a db
373
378
  // pool, a stray interval); the warm pass is done either way.
374
- process.exit(0);
379
+ process.exit(0)
375
380
  }