@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
@@ -16,38 +16,38 @@
16
16
  //
17
17
  // The enablement gate is inlined here (a pure read of config.compat) rather than imported from
18
18
  // compat, so this file carries no static edge into compat. It must stay in sync with
19
- // compat/index.ts reactCompatEnabled/nextCompatEnabled.
19
+ // compat/aliases.ts reactCompatEnabled/nextCompatEnabled.
20
20
 
21
- import type { ResolvedConfig } from './config';
22
- import { onExtensionHostReset } from './extensions';
21
+ import type { ResolvedConfig } from './config'
22
+ import { onExtensionHostReset } from './extensions'
23
23
 
24
24
  /** True when either Next or React compatibility (or the React compiler) is on. */
25
25
  function compatEnabled(config: ResolvedConfig): boolean {
26
- const compat = config.compat;
27
- return Boolean(compat?.next || compat?.react || compat?.reactCompiler);
26
+ const compat = config.compat
27
+ return Boolean(compat?.next || compat?.react || compat?.reactCompiler)
28
28
  }
29
29
 
30
- let bootRegistration: Promise<void> | undefined;
31
- let registration: Promise<void> | undefined;
30
+ let bootRegistration: Promise<void> | undefined
31
+ let registration: Promise<void> | undefined
32
32
 
33
33
  // A fresh host has none of compat's registrations, so the "already registered"
34
34
  // memo has to go with it — otherwise the next bootstrap call is a no-op and the
35
35
  // host stays empty for the rest of the process.
36
36
  onExtensionHostReset(() => {
37
- bootRegistration = undefined;
38
- registration = undefined;
39
- });
37
+ bootRegistration = undefined
38
+ registration = undefined
39
+ })
40
40
 
41
41
  /**
42
42
  * Register the boot tier: the compat facts core consults before the first
43
43
  * compile. No-op (and no compat code loaded) for a pure-core app.
44
44
  */
45
45
  export function bootstrapCompatBoot(config: ResolvedConfig): Promise<void> {
46
- if (!compatEnabled(config)) return Promise.resolve();
46
+ if (!compatEnabled(config)) return Promise.resolve()
47
47
  bootRegistration ??= import('./compat/register/boot').then(module =>
48
48
  module.registerCompatBootExtensions(config),
49
- );
50
- return bootRegistration;
49
+ )
50
+ return bootRegistration
51
51
  }
52
52
 
53
53
  /**
@@ -59,9 +59,9 @@ export function bootstrapCompat(
59
59
  config: ResolvedConfig,
60
60
  options: { serve?: boolean } = {},
61
61
  ): Promise<void> {
62
- if (!compatEnabled(config)) return Promise.resolve();
62
+ if (!compatEnabled(config)) return Promise.resolve()
63
63
  registration ??= bootstrapCompatBoot(config)
64
64
  .then(() => import('./compat/register/index'))
65
- .then(module => module.registerCompatExtensions(config, options));
66
- return registration;
65
+ .then(module => module.registerCompatExtensions(config, options))
66
+ return registration
67
67
  }
package/src/config.ts CHANGED
@@ -1,31 +1,31 @@
1
- import { existsSync, realpathSync } from 'node:fs';
2
- import { fileURLToPath, pathToFileURL } from 'node:url';
3
- import path from 'node:path';
4
- import { loadEnv } from './env';
5
- import { findWorkspaceRoot } from './resolve/imports';
6
- import type { PNextConfig } from './types';
7
- import { setCacheComponents } from './ppr';
1
+ import { existsSync, realpathSync } from 'node:fs'
2
+ import { fileURLToPath, pathToFileURL } from 'node:url'
3
+ import path from 'node:path'
4
+ import { loadEnv } from './env'
5
+ import { findWorkspaceRoot } from './resolve/imports'
6
+ import { PREFETCH_MODES, type PNextConfig } from './types'
7
+ import { setCacheComponents } from './render/ppr'
8
8
 
9
9
  export type ResolvedConfig = Required<Pick<PNextConfig, 'outDir' | 'basePath'>> &
10
10
  Omit<PNextConfig, 'outDir' | 'basePath'> & {
11
- root: string;
12
- workspaceRoot: string;
13
- appDir: string;
14
- publicDir: 'public';
15
- appPath: string;
16
- publicPath: string;
11
+ root: string
12
+ workspaceRoot: string
13
+ appDir: string
14
+ publicDir: 'public'
15
+ appPath: string
16
+ publicPath: string
17
17
  /** Where this process writes and serves from: the out root, or `<outRoot>/dev` in dev. */
18
- outPath: string;
18
+ outPath: string
19
19
  /** The out root itself (`.pnext`), identical in dev and build. */
20
- outRootPath: string;
20
+ outRootPath: string
21
21
  /** Generated types — always under the out root, because tsconfig points at it. */
22
- typesPath: string;
23
- };
22
+ typesPath: string
23
+ }
24
24
 
25
25
  const defaultConfig = {
26
26
  outDir: '.pnext',
27
27
  basePath: '',
28
- } satisfies Required<Pick<PNextConfig, 'outDir' | 'basePath'>>;
28
+ } satisfies Required<Pick<PNextConfig, 'outDir' | 'basePath'>>
29
29
 
30
30
  // configSources seam. Core owns the shape; compat populates it.
31
31
  //
@@ -38,22 +38,22 @@ const defaultConfig = {
38
38
  // dynamic import when compat.next is enabled - mirroring the compat-bootstrap gate so core keeps no static
39
39
  // edge into compat.
40
40
  export interface ConfigSourceOverrides {
41
- basePath?: string;
42
- trailingSlash?: boolean;
43
- skipTrailingSlashRedirect?: boolean;
44
- outDir?: string;
45
- assetPrefix?: string;
46
- productionBrowserSourceMaps?: boolean;
41
+ basePath?: string
42
+ trailingSlash?: boolean
43
+ skipTrailingSlashRedirect?: boolean
44
+ outDir?: string
45
+ assetPrefix?: string
46
+ productionBrowserSourceMaps?: boolean
47
47
  }
48
48
  export type ConfigSource = (
49
49
  root: string,
50
50
  options: { dev?: boolean },
51
- ) => Promise<ConfigSourceOverrides>;
51
+ ) => Promise<ConfigSourceOverrides>
52
52
 
53
- let configSource: ConfigSource | undefined;
53
+ let configSource: ConfigSource | undefined
54
54
 
55
55
  export function registerConfigSource(source: ConfigSource): void {
56
- configSource = source;
56
+ configSource = source
57
57
  }
58
58
 
59
59
  async function resolveConfigSource(
@@ -61,44 +61,45 @@ async function resolveConfigSource(
61
61
  root: string,
62
62
  options: { dev?: boolean },
63
63
  ): Promise<ConfigSourceOverrides> {
64
- if (!config.compat?.next) return {};
64
+ if (!config.compat?.next) return {}
65
65
  if (!configSource) {
66
- await import('./compat/register/config').then(module => module.registerConfigSource());
66
+ await import('./compat/register/config').then(module => module.registerConfigSource())
67
67
  }
68
- if (!configSource) return {};
69
- return configSource(root, options);
68
+ if (!configSource) return {}
69
+ return configSource(root, options)
70
70
  }
71
71
 
72
72
  export async function loadConfig(
73
73
  rootInput = process.cwd(),
74
74
  options: { dev?: boolean } = {},
75
75
  ): Promise<ResolvedConfig> {
76
- const root = canonicalRoot(path.resolve(rootInput));
77
- await loadEnv(root, options);
78
- const configPath = path.join(root, 'pnext.config.ts');
76
+ const root = canonicalRoot(path.resolve(rootInput))
77
+ await loadEnv(root, options)
78
+ const configPath = path.join(root, 'pnext.config.ts')
79
79
  const loadedConfig = existsSync(configPath)
80
80
  ? ((await import(pathToFileHref(configPath))) as { default?: PNextConfig })
81
- : {};
81
+ : {}
82
82
  const config: PNextConfig = {
83
83
  ...(loadedConfig.default ?? {}),
84
84
  // eslint-disable-next-line turbo/no-undeclared-env-vars
85
85
  ...(process.env.PNEXT_COMPAT === 'next'
86
86
  ? { compat: { ...(loadedConfig.default?.compat ?? {}), next: true } }
87
87
  : {}),
88
- };
88
+ }
89
+ validateConfig(config)
89
90
  // cacheComponents is a per-app flag on a process-global cell: clear it before
90
91
  // the next.config source re-derives it, so a pure-core (or flag-off) app
91
92
  // loaded after a cacheComponents app never inherits the previous build's flag.
92
- setCacheComponents(false);
93
- const sourceOverrides = stripUndefined(await resolveConfigSource(config, root, options));
94
- const merged = { ...defaultConfig, ...config, ...sourceOverrides };
95
- const appPath = await resolveAppPath(root, config);
96
- const outRootPath = path.resolve(root, merged.outDir);
93
+ setCacheComponents(false)
94
+ const sourceOverrides = stripUndefined(await resolveConfigSource(config, root, options))
95
+ const merged = { ...defaultConfig, ...config, ...sourceOverrides }
96
+ const appPath = await resolveAppPath(root, config)
97
+ const outRootPath = path.resolve(root, merged.outDir)
97
98
  const workspaceRoot = canonicalRoot(
98
99
  config.workspaceRoot
99
100
  ? path.resolve(root, config.workspaceRoot)
100
101
  : (findWorkspaceRoot(root) ?? root),
101
- );
102
+ )
102
103
 
103
104
  return {
104
105
  ...config,
@@ -125,11 +126,27 @@ export async function loadConfig(
125
126
  outPath: options.dev ? path.join(outRootPath, devOutSegment) : outRootPath,
126
127
  outRootPath,
127
128
  typesPath: path.join(outRootPath, 'types'),
128
- };
129
+ }
130
+ }
131
+
132
+ // One row per enum-valued config field; validateConfig checks them all.
133
+ const enumFields: readonly [keyof PNextConfig, readonly unknown[]][] = [
134
+ ['prefetch', PREFETCH_MODES],
135
+ ]
136
+
137
+ function validateConfig(config: PNextConfig) {
138
+ for (const [field, allowed] of enumFields) {
139
+ const value = config[field]
140
+ if (value === undefined || allowed.includes(value)) continue
141
+ const list = allowed.map(v => (typeof v === 'string' ? `'${v}'` : String(v))).join(', ')
142
+ throw new Error(
143
+ `Invalid pnext config: '${field}' must be one of ${list} (received ${JSON.stringify(value)}).`,
144
+ )
145
+ }
129
146
  }
130
147
 
131
148
  /** Dev's private subtree under the out root. Build never touches it. */
132
- export const devOutSegment = 'dev';
149
+ export const devOutSegment = 'dev'
133
150
 
134
151
  // Relative-import resolution realpaths the importing file (so a materialized shim resolves `./sibling`
135
152
  // against real source), so every containment check against root/workspaceRoot compares realpaths.
@@ -138,21 +155,21 @@ export const devOutSegment = 'dev';
138
155
  // resolving. A no-op when the path holds no symlinks.
139
156
  function canonicalRoot(dir: string) {
140
157
  try {
141
- return realpathSync(dir);
158
+ return realpathSync(dir)
142
159
  } catch {
143
- return dir;
160
+ return dir
144
161
  }
145
162
  }
146
163
 
147
164
  function stripUndefined<T extends object>(value: T): T {
148
- return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined)) as T;
165
+ return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined)) as T
149
166
  }
150
167
 
151
168
  export function pathToFileHref(filePath: string) {
152
169
  // pathToFileURL percent-encodes literal special characters (notably `%`, so a
153
170
  // directory physically named `%5Ffoo` on disk stays `%255Ffoo` in the href and
154
171
  // import() decodes it back to the literal `%5Ffoo` rather than to `_foo`).
155
- return pathToFileURL(path.resolve(filePath)).href;
172
+ return pathToFileURL(path.resolve(filePath)).href
156
173
  }
157
174
 
158
175
  export function publicEnvDefines() {
@@ -167,7 +184,7 @@ export function publicEnvDefines() {
167
184
  `process.env.${key}`,
168
185
  value === undefined ? 'undefined' : JSON.stringify(value),
169
186
  ]),
170
- );
187
+ )
171
188
  }
172
189
 
173
190
  type FrameworkRuntimeAlias =
@@ -177,15 +194,15 @@ type FrameworkRuntimeAlias =
177
194
  | 'preact/compat/client'
178
195
  | 'preact/jsx-runtime'
179
196
  | 'preact/jsx-dev-runtime'
180
- | 'react-compiler-runtime';
197
+ | 'react-compiler-runtime'
181
198
 
182
- export type CompatAliasTarget = 'server' | 'client';
199
+ export type CompatAliasTarget = 'server' | 'client'
183
200
 
184
201
  /**
185
202
  * Seven `import.meta.resolve` calls against the framework's OWN install - the answer cannot change for the
186
203
  * life of the process, and every esbuild build builds an alias map (a vendor pass runs hundreds of those).
187
204
  */
188
- let frameworkRuntimeAliases: Record<FrameworkRuntimeAlias, string> | undefined;
205
+ let frameworkRuntimeAliases: Record<FrameworkRuntimeAlias, string> | undefined
189
206
 
190
207
  export function frameworkRuntimeAliasEntries(): Record<FrameworkRuntimeAlias, string> {
191
208
  frameworkRuntimeAliases ??= {
@@ -196,37 +213,37 @@ export function frameworkRuntimeAliasEntries(): Record<FrameworkRuntimeAlias, st
196
213
  'preact/jsx-runtime': resolveRuntimeModule('preact/jsx-runtime'),
197
214
  'preact/jsx-dev-runtime': resolveRuntimeModule('preact/jsx-dev-runtime'),
198
215
  'react-compiler-runtime': resolveRuntimeModule('react-compiler-runtime'),
199
- };
200
- return frameworkRuntimeAliases;
216
+ }
217
+ return frameworkRuntimeAliases
201
218
  }
202
219
 
203
220
  function resolveRuntimeModule(specifier: string) {
204
- return fileURLToPath(import.meta.resolve(specifier));
221
+ return fileURLToPath(import.meta.resolve(specifier))
205
222
  }
206
223
 
207
224
  export function pnextAliases(target: CompatAliasTarget): Record<string, string> {
208
- if (target !== 'client') return {};
225
+ if (target !== 'client') return {}
209
226
  return {
210
227
  '@wular/pnext/cache': path.resolve(import.meta.dirname, 'api/client-cache.ts'),
211
- };
228
+ }
212
229
  }
213
230
 
214
231
  async function resolveAppPath(root: string, config: PNextConfig) {
215
- const rootApp = path.join(root, 'app');
232
+ const rootApp = path.join(root, 'app')
216
233
  if (config.compat?.next) {
217
- const pagesPath = path.join(root, 'pages');
218
- const hasPages = existsSync(pagesPath);
234
+ const pagesPath = path.join(root, 'pages')
235
+ const hasPages = existsSync(pagesPath)
219
236
  if (existsSync(rootApp)) {
220
237
  if (hasPages) {
221
- const { materializePagesApp } = await import('./compat/pages');
222
- const hybrid = await materializePagesApp(root);
223
- if (hybrid) return hybrid;
238
+ const { materializePagesApp } = await import('./compat/pages/router')
239
+ const hybrid = await materializePagesApp(root)
240
+ if (hybrid) return hybrid
224
241
  }
225
- return rootApp;
242
+ return rootApp
226
243
  }
227
- const { materializePagesApp } = await import('./compat/pages');
228
- const pagesApp = await materializePagesApp(root);
229
- if (pagesApp) return pagesApp;
230
- } else if (existsSync(rootApp)) return rootApp;
231
- return path.join(root, 'src', 'app');
244
+ const { materializePagesApp } = await import('./compat/pages/router')
245
+ const pagesApp = await materializePagesApp(root)
246
+ if (pagesApp) return pagesApp
247
+ } else if (existsSync(rootApp)) return rootApp
248
+ return path.join(root, 'src', 'app')
232
249
  }