@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
@@ -1,19 +1,19 @@
1
- import path from 'node:path';
2
- import { existsSync, readFileSync } from 'node:fs';
3
- import { builtinModules } from 'node:module';
4
- import { listFilesSync } from '../../utils/fs';
5
- import type { ResolvedConfig } from '../../config';
6
- import { nextCompatEnabled } from '..';
7
- import { importSpecifiers } from '../../resolve/scan-facts';
8
- import { readSourceSync } from '../../resolve/source-text';
1
+ import path from 'node:path'
2
+ import { existsSync, readFileSync } from 'node:fs'
3
+ import { builtinModules } from 'node:module'
4
+ import { listFilesSync } from '../../utils/fs'
5
+ import type { ResolvedConfig } from '../../config'
6
+ import { nextCompatEnabled } from '../aliases'
7
+ import { importSpecifiers } from '../../resolve/scan-facts'
8
+ import { readSourceSync } from '../../resolve/source-text'
9
9
  import {
10
10
  packageNameOfSpecifier,
11
11
  resolutionRootForFile,
12
12
  resolvePackageSpecifier,
13
- } from '../../resolve/imports';
14
- import { moduleActionExports, moduleLevelUseCache, moduleLevelUseServer } from './detect';
15
- import { canonical, canonicalActionId } from './client-plugin';
16
- import { registerActionModule, type ActionEntry } from './registry';
13
+ } from '../../resolve/imports'
14
+ import { moduleActionExports, moduleLevelUseCache, moduleLevelUseServer } from './detect'
15
+ import { canonical, canonicalActionId } from './client-plugin'
16
+ import { registerActionModule, type ActionEntry } from './registry'
17
17
 
18
18
  /**
19
19
  * One discovered server-action module: its source path, the action export
@@ -23,26 +23,26 @@ import { registerActionModule, type ActionEntry } from './registry';
23
23
  */
24
24
  export interface DiscoveredActionModule {
25
25
  /** Source file of the 'use server' module. */
26
- file: string;
26
+ file: string
27
27
  /** Action export names (named exports + 'default'). */
28
- exports: string[];
28
+ exports: string[]
29
29
  /** actionId(file, exportName, root) keyed by export name. */
30
- ids: Record<string, string>;
30
+ ids: Record<string, string>
31
31
  /** What runAction hands to importModule() (defaults to `file`). */
32
- modulePath: string;
32
+ modulePath: string
33
33
  }
34
34
 
35
35
  export interface ActionDiscovery {
36
- modules: DiscoveredActionModule[];
36
+ modules: DiscoveredActionModule[]
37
37
  /** Every source file that is a 'use server' module, for the client alias. */
38
- actionFiles: Set<string>;
38
+ actionFiles: Set<string>
39
39
  /**
40
40
  * First-party files that import a node_modules action module. The route-fact scan's client-entry-reason
41
41
  * walk never descends into node_modules (see collectSourceFiles), so a route reaching an action only
42
42
  * through one of these files needs its 'actions' reason added explicitly - the action file itself never
43
43
  * lands in route.sourceFiles the way a first-party action module does.
44
44
  */
45
- actionImporters: Set<string>;
45
+ actionImporters: Set<string>
46
46
  }
47
47
 
48
48
  /**
@@ -58,62 +58,59 @@ export async function discoverActions(
58
58
  config: ResolvedConfig,
59
59
  options: { modulePathFor?: (file: string) => string } = {},
60
60
  ): Promise<ActionDiscovery> {
61
- const empty: ActionDiscovery = { modules: [], actionFiles: new Set(), actionImporters: new Set() };
62
- if (!nextCompatEnabled(config)) return empty;
61
+ const empty: ActionDiscovery = { modules: [], actionFiles: new Set(), actionImporters: new Set() }
62
+ if (!nextCompatEnabled(config)) return empty
63
63
 
64
- const roots = actionScanRoots(config);
65
- const seen = new Set<string>();
66
- const files: string[] = [];
64
+ const roots = actionScanRoots(config)
65
+ const seen = new Set<string>()
66
+ const files: string[] = []
67
67
  // Synchronous on purpose: every await hands the loop back to the build's sync route-fact walk and
68
68
  // gate steps, which hold it long enough to stretch this work into a span the client stage then
69
69
  // waits on. Running it straight through costs the same CPU and unblocks the stage.
70
- const listings = roots.map(root => (existsSync(root) ? listFilesSync(root) : []));
70
+ const listings = roots.map(root => (existsSync(root) ? listFilesSync(root) : []))
71
71
  for (const listing of listings) {
72
72
  for (const file of listing) {
73
- const resolved = path.resolve(file);
74
- if (seen.has(resolved) || !isScriptFile(resolved)) continue;
75
- seen.add(resolved);
76
- files.push(resolved);
73
+ const resolved = path.resolve(file)
74
+ if (seen.has(resolved) || !isScriptFile(resolved)) continue
75
+ seen.add(resolved)
76
+ files.push(resolved)
77
77
  }
78
78
  }
79
- const sources = readSources(files);
80
- const { files: nodeModuleActionFiles, importers: actionImporters } = discoverNodeModuleActionFiles(
81
- config,
82
- files,
83
- sources,
84
- seen,
85
- );
79
+ const sources = readSources(files)
80
+ const { files: nodeModuleActionFiles, importers: actionImporters } =
81
+ discoverNodeModuleActionFiles(config, files, sources, seen)
86
82
  for (const file of nodeModuleActionFiles) {
87
- files.push(file);
88
- seen.add(file);
83
+ files.push(file)
84
+ seen.add(file)
89
85
  }
90
86
  for (const [file, source] of readSources(files.filter(file => !sources.has(file)))) {
91
- sources.set(file, source);
87
+ sources.set(file, source)
92
88
  }
93
89
 
94
- const modules: DiscoveredActionModule[] = [];
95
- const actionFiles = new Set<string>();
90
+ const modules: DiscoveredActionModule[] = []
91
+ const actionFiles = new Set<string>()
96
92
  for (const file of files) {
97
- const source = sources.get(file)!;
93
+ const source = sources.get(file)!
98
94
  // Module-level 'use cache' files are server-reference modules too: their
99
95
  // exports cross to client components as RPC stubs (Next semantics — the
100
96
  // cached function always runs, and caches, on the server).
101
- if (!moduleLevelUseServer(source) && !moduleLevelUseCache(source)) continue;
102
- const exports = moduleActionExports(source);
103
- if (exports.length === 0) continue;
97
+ if (!moduleLevelUseServer(source) && !moduleLevelUseCache(source)) continue
98
+ const exports = moduleActionExports(source)
99
+ if (exports.length === 0) continue
104
100
 
105
- const ids: Record<string, string> = {};
106
- for (const exportName of exports) ids[exportName] = canonicalActionId(file, exportName, config.root);
101
+ const ids: Record<string, string> = {}
102
+ for (const exportName of exports)
103
+ ids[exportName] = canonicalActionId(file, exportName, config.root)
107
104
  modules.push({
108
105
  file,
109
106
  exports,
110
107
  ids,
111
108
  modulePath: options.modulePathFor ? options.modulePathFor(file) : file,
112
- });
113
- actionFiles.add(file);
109
+ })
110
+ actionFiles.add(file)
114
111
  }
115
112
 
116
- return { modules, actionFiles, actionImporters };
113
+ return { modules, actionFiles, actionImporters }
117
114
  }
118
115
 
119
116
  /**
@@ -124,8 +121,8 @@ export function registerDiscoveredActions(
124
121
  config: ResolvedConfig,
125
122
  discovery: ActionDiscovery,
126
123
  ): ActionEntry[] {
127
- const entries: ActionEntry[] = [];
128
- const root = canonical(config.root);
124
+ const entries: ActionEntry[] = []
125
+ const root = canonical(config.root)
129
126
  for (const module of discovery.modules) {
130
127
  // Canonical (file, root) so registry ids match the client stub / manifest.
131
128
  entries.push(
@@ -133,9 +130,9 @@ export function registerDiscoveredActions(
133
130
  root,
134
131
  modulePath: module.modulePath,
135
132
  }),
136
- );
133
+ )
137
134
  }
138
- return entries;
135
+ return entries
139
136
  }
140
137
 
141
138
  // Server actions live under the app dir and (for monorepos) may be shared from
@@ -143,24 +140,24 @@ export function registerDiscoveredActions(
143
140
  // app dir plus the project src dir if present — the common home for a shared
144
141
  // actions module. node_modules and the build output are excluded.
145
142
  function actionScanRoots(config: ResolvedConfig) {
146
- const roots = new Set<string>([config.appPath]);
143
+ const roots = new Set<string>([config.appPath])
147
144
  if (config.appPath.includes('pnext-pages-compat')) {
148
- const rootApp = path.join(config.root, 'app');
149
- if (existsSync(rootApp)) roots.add(rootApp);
150
- const srcApp = path.join(config.root, 'src', 'app');
151
- if (existsSync(srcApp)) roots.add(srcApp);
145
+ const rootApp = path.join(config.root, 'app')
146
+ if (existsSync(rootApp)) roots.add(rootApp)
147
+ const srcApp = path.join(config.root, 'src', 'app')
148
+ if (existsSync(srcApp)) roots.add(srcApp)
152
149
  }
153
- const srcDir = path.join(config.root, 'src');
154
- if (existsSync(srcDir)) roots.add(srcDir);
155
- return [...roots];
150
+ const srcDir = path.join(config.root, 'src')
151
+ if (existsSync(srcDir)) roots.add(srcDir)
152
+ return [...roots]
156
153
  }
157
154
 
158
155
  function isScriptFile(file: string) {
159
- if (file.includes(`${path.sep}node_modules${path.sep}`)) return false;
160
- return /\.(?:tsx?|jsx?|mjs)$/.test(file) && !file.endsWith('.d.ts');
156
+ if (file.includes(`${path.sep}node_modules${path.sep}`)) return false
157
+ return /\.(?:tsx?|jsx?|mjs)$/.test(file) && !file.endsWith('.d.ts')
161
158
  }
162
159
 
163
- const ACTION_RESOLVE_CONDITIONS = ['react-server', 'node', 'import', 'module', 'default'] as const;
160
+ const ACTION_RESOLVE_CONDITIONS = ['react-server', 'node', 'import', 'module', 'default'] as const
164
161
  /**
165
162
  * node_modules packages that export module-level 'use server' modules the app imports directly.
166
163
  * Reading a file's real imports costs an oxc parse - but an import specifier is always a quoted string
@@ -173,89 +170,92 @@ function discoverNodeModuleActionFiles(
173
170
  sources: Map<string, string>,
174
171
  seen: Set<string>,
175
172
  ): { files: string[]; importers: Set<string> } {
176
- const actionFiles = new Set<string>();
177
- const importers = new Set<string>();
173
+ const actionFiles = new Set<string>()
174
+ const importers = new Set<string>()
178
175
  // A bare specifier resolves purely from the importer's resolution root, so
179
176
  // both the resolution and the 'use server' verdict are cached app-wide, and
180
177
  // each is derived only for the specifiers a file actually reaches.
181
- const targets = new Map<string, string | undefined>();
182
- const verdicts = new Map<string, boolean>();
178
+ const targets = new Map<string, string | undefined>()
179
+ const verdicts = new Map<string, boolean>()
183
180
  const actionTarget = (resolveRoot: string, file: string, specifier: string) => {
184
- const packageName = packageNameOfSpecifier(specifier);
185
- if (!packageName || builtinModules.includes(packageName)) return undefined;
186
- const key = `${resolveRoot}\0${specifier}`;
181
+ const packageName = packageNameOfSpecifier(specifier)
182
+ if (!packageName || builtinModules.includes(packageName)) return undefined
183
+ const key = `${resolveRoot}\0${specifier}`
187
184
  if (!targets.has(key)) {
188
- targets.set(key, resolvePackageSpecifier(config.root, file, specifier, ACTION_RESOLVE_CONDITIONS));
185
+ targets.set(
186
+ key,
187
+ resolvePackageSpecifier(config.root, file, specifier, ACTION_RESOLVE_CONDITIONS),
188
+ )
189
189
  }
190
- const resolved = targets.get(key);
191
- if (!resolved) return undefined;
192
- const absolute = path.resolve(resolved);
193
- if (seen.has(absolute) || !isNodeModuleScriptFile(absolute)) return undefined;
194
- let verdict = verdicts.get(absolute);
190
+ const resolved = targets.get(key)
191
+ if (!resolved) return undefined
192
+ const absolute = path.resolve(resolved)
193
+ if (seen.has(absolute) || !isNodeModuleScriptFile(absolute)) return undefined
194
+ let verdict = verdicts.get(absolute)
195
195
  if (verdict === undefined) {
196
196
  // An unreadable candidate is simply not an action module.
197
197
  try {
198
- verdict = moduleLevelUseServer(readFileSync(absolute, 'utf8'));
198
+ verdict = moduleLevelUseServer(readFileSync(absolute, 'utf8'))
199
199
  } catch {
200
- verdict = false;
200
+ verdict = false
201
201
  }
202
- verdicts.set(absolute, verdict);
202
+ verdicts.set(absolute, verdict)
203
203
  }
204
- return verdict ? absolute : undefined;
205
- };
204
+ return verdict ? absolute : undefined
205
+ }
206
206
 
207
207
  for (const file of sourceFiles) {
208
- const source = sources.get(file) ?? '';
209
- const resolveRoot = resolutionRootForFile(config.root, file);
210
- let reachable = false;
208
+ const source = sources.get(file) ?? ''
209
+ const resolveRoot = resolutionRootForFile(config.root, file)
210
+ let reachable = false
211
211
  for (const candidate of candidateSpecifiers(source)) {
212
212
  if (actionTarget(resolveRoot, file, candidate)) {
213
- reachable = true;
214
- break;
213
+ reachable = true
214
+ break
215
215
  }
216
216
  }
217
217
  // No candidate resolves to an action module, so neither can the file's real
218
218
  // imports (a subset) — the parse would only reproduce this answer.
219
- if (!reachable) continue;
219
+ if (!reachable) continue
220
220
  for (const specifier of importSpecifiers(source, file)) {
221
- const target = actionTarget(resolveRoot, file, specifier);
221
+ const target = actionTarget(resolveRoot, file, specifier)
222
222
  if (target) {
223
- actionFiles.add(target);
224
- importers.add(file);
223
+ actionFiles.add(target)
224
+ importers.add(file)
225
225
  }
226
226
  }
227
227
  }
228
- return { files: [...actionFiles], importers };
228
+ return { files: [...actionFiles], importers }
229
229
  }
230
230
 
231
231
  // Every string literal in an import position: `from 'x'`, `import 'x'`,
232
232
  // `import('x')`, `require('x')`. Deliberately looser than the grammar (it also
233
233
  // matches inside comments and strings) — over-reporting only costs a resolve.
234
234
  const importedLiteral =
235
- /\b(?:from|import|require)\s*\(?\s*(?:\/\*[\s\S]*?\*\/\s*)?(['"])([^'"\n]{1,256})\1/g;
235
+ /\b(?:from|import|require)\s*\(?\s*(?:\/\*[\s\S]*?\*\/\s*)?(['"])([^'"\n]{1,256})\1/g
236
236
  // npm package names are lowercase `[a-z0-9._-]` with an optional @scope, so a
237
237
  // literal with whitespace or a leading ./ can never be a bare specifier.
238
- const bareSpecifier = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*(?:\/[^\s]+)?$/i;
238
+ const bareSpecifier = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*(?:\/[^\s]+)?$/i
239
239
 
240
240
  /** Every literal in the source that could be an imported bare package specifier. */
241
241
  function candidateSpecifiers(source: string) {
242
- const found = new Set<string>();
243
- importedLiteral.lastIndex = 0;
244
- let match: RegExpExecArray | null;
242
+ const found = new Set<string>()
243
+ importedLiteral.lastIndex = 0
244
+ let match: RegExpExecArray | null
245
245
  while ((match = importedLiteral.exec(source))) {
246
- const value = match[2]!;
247
- if (bareSpecifier.test(value)) found.add(value);
246
+ const value = match[2]!
247
+ if (bareSpecifier.test(value)) found.add(value)
248
248
  }
249
- return found;
249
+ return found
250
250
  }
251
251
 
252
252
  /** Read each file once (build-scope cached: the walk's reads are free here). */
253
253
  function readSources(files: string[]) {
254
- const sources = new Map<string, string>();
255
- for (const file of files) sources.set(file, readSourceSync(file));
256
- return sources;
254
+ const sources = new Map<string, string>()
255
+ for (const file of files) sources.set(file, readSourceSync(file))
256
+ return sources
257
257
  }
258
258
 
259
259
  function isNodeModuleScriptFile(file: string) {
260
- return /\.(?:tsx?|jsx?|mjs|cjs|cts)$/.test(file) && !file.endsWith('.d.ts');
260
+ return /\.(?:tsx?|jsx?|mjs|cjs|cts)$/.test(file) && !file.endsWith('.d.ts')
261
261
  }