@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
@@ -9,196 +9,195 @@
9
9
  // Lazy: the oxc-parser native binding costs ~12.6 MB RSS; load it only when a parse happens.
10
10
  const parseSync: typeof import('oxc-parser').parseSync = (...args) =>
11
11
  // eslint-disable-next-line @typescript-eslint/no-require-imports
12
- loadNative(() => require('oxc-parser') as typeof import('oxc-parser')).parseSync(...args);
13
- import { loadNative } from '../../utils/native-require';
14
- import { rewriteFacts } from '../../resolve/scan-facts';
12
+ loadNative(() => require('oxc-parser') as typeof import('oxc-parser')).parseSync(...args)
13
+ import { loadNative } from '../../utils/native-require'
14
+ import { rewriteFacts } from '../../resolve/scan-facts'
15
15
 
16
- const marker = '__pnextLegacyChildKind';
16
+ const marker = '__pnextLegacyChildKind'
17
17
 
18
18
  interface Node {
19
- type: string;
20
- start: number;
21
- end: number;
22
- [key: string]: unknown;
19
+ type: string
20
+ start: number
21
+ end: number
22
+ [key: string]: unknown
23
23
  }
24
24
 
25
25
  interface JsxName {
26
- type: string;
27
- name?: string;
28
- start: number;
29
- end: number;
26
+ type: string
27
+ name?: string
28
+ start: number
29
+ end: number
30
30
  }
31
31
 
32
32
  interface JsxOpeningElement extends Node {
33
- name: JsxName;
34
- attributes: Node[];
35
- selfClosing: boolean;
33
+ name: JsxName
34
+ attributes: Node[]
35
+ selfClosing: boolean
36
36
  }
37
37
 
38
38
  interface JsxElement extends Node {
39
- openingElement: JsxOpeningElement;
40
- children: Node[];
41
- closingElement: Node | null;
39
+ openingElement: JsxOpeningElement
40
+ children: Node[]
41
+ closingElement: Node | null
42
42
  }
43
43
 
44
44
  export function rewriteLegacyLinkValidation(source: string, file: string): string {
45
- if (!source.includes('Link') && !source.includes('legacyBehavior')) return source;
46
- const imports = rewriteFacts(file, source).imports;
45
+ if (!source.includes('Link') && !source.includes('legacyBehavior')) return source
46
+ const imports = rewriteFacts(file, source).imports
47
47
  const directLink =
48
48
  imports.some(statement => statement.specifier === 'next/link') &&
49
- source.includes('legacyBehavior');
49
+ source.includes('legacyBehavior')
50
50
  const asyncLinkWrapper =
51
51
  imports.some(statement =>
52
52
  statement.bindings.some(binding => !binding.type && binding.local.endsWith('Link')),
53
53
  ) &&
54
54
  /<[A-Za-z_$][\w$]*Link\b/.test(source) &&
55
- /\basync\s+function\b/.test(source);
56
- if (!directLink && !asyncLinkWrapper) return source;
55
+ /\basync\s+function\b/.test(source)
56
+ if (!directLink && !asyncLinkWrapper) return source
57
57
 
58
58
  const program = parseSync(file, source, { lang: langForFile(file) }).program as unknown as {
59
- body: Node[];
60
- };
61
- const linkNames = new Set<string>();
62
- const asyncNames = new Set<string>();
63
- const functionNames = new Set<string>();
64
- const lazyNames = new Set<string>();
65
- const edits: { at: number; text: string }[] = [];
59
+ body: Node[]
60
+ }
61
+ const linkNames = new Set<string>()
62
+ const asyncNames = new Set<string>()
63
+ const functionNames = new Set<string>()
64
+ const lazyNames = new Set<string>()
65
+ const edits: { at: number; text: string }[] = []
66
66
  const isClient = program.body.some(
67
- statement =>
68
- statement.type === 'ExpressionStatement' && statement.directive === 'use client',
69
- );
67
+ statement => statement.type === 'ExpressionStatement' && statement.directive === 'use client',
68
+ )
70
69
 
71
70
  for (const statement of program.body) {
72
71
  if (statement.type === 'ImportDeclaration' && sourceValue(statement) === 'next/link') {
73
72
  for (const specifier of (statement.specifiers as Node[] | undefined) ?? []) {
74
- const local = identifierName(specifier.local);
75
- if (!local) continue;
76
- if (specifier.type === 'ImportDefaultSpecifier') linkNames.add(local);
77
- else if (identifierName(specifier.imported) === 'Link') linkNames.add(local);
73
+ const local = identifierName(specifier.local)
74
+ if (!local) continue
75
+ if (specifier.type === 'ImportDefaultSpecifier') linkNames.add(local)
76
+ else if (identifierName(specifier.imported) === 'Link') linkNames.add(local)
78
77
  }
79
78
  }
80
79
  if (statement.type === 'FunctionDeclaration') {
81
- const name = identifierName(statement.id);
80
+ const name = identifierName(statement.id)
82
81
  if (name) {
83
- functionNames.add(name);
84
- if (statement.async === true) asyncNames.add(name);
82
+ functionNames.add(name)
83
+ if (statement.async === true) asyncNames.add(name)
85
84
  }
86
85
  }
87
86
  if (statement.type === 'VariableDeclaration') {
88
87
  for (const declarator of (statement.declarations as Node[] | undefined) ?? []) {
89
- const name = identifierName(declarator.id);
90
- const init = declarator.init as Node | null;
91
- if (!name || !init) continue;
88
+ const name = identifierName(declarator.id)
89
+ const init = declarator.init as Node | null
90
+ if (!name || !init) continue
92
91
  if (init.type === 'ArrowFunctionExpression' || init.type === 'FunctionExpression') {
93
- functionNames.add(name);
94
- if (init.async === true) asyncNames.add(name);
92
+ functionNames.add(name)
93
+ if (init.async === true) asyncNames.add(name)
95
94
  }
96
- if (isLazyCall(init)) lazyNames.add(name);
95
+ if (isLazyCall(init)) lazyNames.add(name)
97
96
  }
98
97
  }
99
98
  }
100
99
 
101
100
  // Only elements with a body can have the single child this annotates.
102
101
  walk(program.body, node => {
103
- if (node.type !== 'JSXElement') return;
104
- const element = node as unknown as JsxElement;
105
- if (element.closingElement === null) return;
106
- annotate(element);
107
- });
102
+ if (node.type !== 'JSXElement') return
103
+ const element = node as unknown as JsxElement
104
+ if (element.closingElement === null) return
105
+ annotate(element)
106
+ })
108
107
 
109
108
  function annotate(element: JsxElement): void {
110
- const opening = element.openingElement;
111
- if (opening.name.type !== 'JSXIdentifier' || hasMarker(opening)) return;
112
- const parent = opening.name.name ?? '';
113
- const isLink = linkNames.has(parent);
114
- if (!isLink && !parent.endsWith('Link')) return;
115
- const children = element.children.filter(isMeaningfulChild);
116
- if (children.length !== 1) return;
117
- const kind = childKind(children[0]!);
118
- if (!kind || (!isLink && kind !== 'server-async')) return;
109
+ const opening = element.openingElement
110
+ if (opening.name.type !== 'JSXIdentifier' || hasMarker(opening)) return
111
+ const parent = opening.name.name ?? ''
112
+ const isLink = linkNames.has(parent)
113
+ if (!isLink && !parent.endsWith('Link')) return
114
+ const children = element.children.filter(isMeaningfulChild)
115
+ if (children.length !== 1) return
116
+ const kind = childKind(children[0]!)
117
+ if (!kind || (!isLink && kind !== 'server-async')) return
119
118
  const annotatedKind = !isLink
120
119
  ? 'server-async-through-client'
121
120
  : isClient && kind === 'lazy'
122
121
  ? 'client-lazy'
123
- : kind;
124
- edits.push({ at: opening.name.end, text: ` ${marker}="${annotatedKind}"` });
122
+ : kind
123
+ edits.push({ at: opening.name.end, text: ` ${marker}="${annotatedKind}"` })
125
124
  }
126
125
 
127
126
  function childKind(child: Node): 'server-sync' | 'server-async' | 'lazy' | undefined {
128
- let name: string | undefined;
127
+ let name: string | undefined
129
128
  if (child.type === 'JSXElement') {
130
- const opening = (child as unknown as JsxElement).openingElement;
131
- if (opening.name.type === 'JSXIdentifier') name = opening.name.name;
129
+ const opening = (child as unknown as JsxElement).openingElement
130
+ if (opening.name.type === 'JSXIdentifier') name = opening.name.name
132
131
  } else if (child.type === 'JSXExpressionContainer') {
133
- const expression = child.expression as Node | undefined;
134
- if (expression?.type === 'Identifier') name = expression.name as string;
132
+ const expression = child.expression as Node | undefined
133
+ if (expression?.type === 'Identifier') name = expression.name as string
135
134
  }
136
- if (!name) return undefined;
137
- if (lazyNames.has(name)) return 'lazy';
138
- if (asyncNames.has(name)) return 'server-async';
139
- if (!isClient && functionNames.has(name)) return 'server-sync';
140
- return undefined;
135
+ if (!name) return undefined
136
+ if (lazyNames.has(name)) return 'lazy'
137
+ if (asyncNames.has(name)) return 'server-async'
138
+ if (!isClient && functionNames.has(name)) return 'server-sync'
139
+ return undefined
141
140
  }
142
141
 
143
- if (edits.length === 0) return source;
144
- let output = source;
142
+ if (edits.length === 0) return source
143
+ let output = source
145
144
  for (const edit of edits.sort((a, b) => b.at - a.at)) {
146
- output = output.slice(0, edit.at) + edit.text + output.slice(edit.at);
145
+ output = output.slice(0, edit.at) + edit.text + output.slice(edit.at)
147
146
  }
148
- return output;
147
+ return output
149
148
  }
150
149
 
151
150
  function isMeaningfulChild(child: Node): boolean {
152
151
  if (child.type === 'JSXText') {
153
- return typeof child.value === 'string' && child.value.trim().length > 0;
152
+ return typeof child.value === 'string' && child.value.trim().length > 0
154
153
  }
155
154
  if (child.type === 'JSXExpressionContainer') {
156
- return (child.expression as Node | undefined)?.type !== 'JSXEmptyExpression';
155
+ return (child.expression as Node | undefined)?.type !== 'JSXEmptyExpression'
157
156
  }
158
- return true;
157
+ return true
159
158
  }
160
159
 
161
160
  function hasMarker(opening: JsxOpeningElement): boolean {
162
161
  return opening.attributes.some(
163
162
  attribute =>
164
163
  attribute.type === 'JSXAttribute' && (attribute.name as JsxName | undefined)?.name === marker,
165
- );
164
+ )
166
165
  }
167
166
 
168
167
  function isLazyCall(expression: Node): boolean {
169
- if (expression.type !== 'CallExpression') return false;
170
- const callee = expression.callee as Node | undefined;
171
- if (!callee) return false;
172
- if (callee.type === 'Identifier') return callee.name === 'lazy';
173
- return callee.type === 'MemberExpression' && identifierName(callee.property) === 'lazy';
168
+ if (expression.type !== 'CallExpression') return false
169
+ const callee = expression.callee as Node | undefined
170
+ if (!callee) return false
171
+ if (callee.type === 'Identifier') return callee.name === 'lazy'
172
+ return callee.type === 'MemberExpression' && identifierName(callee.property) === 'lazy'
174
173
  }
175
174
 
176
175
  function identifierName(node: unknown): string | undefined {
177
- const named = node as { type?: string; name?: unknown } | null | undefined;
178
- return typeof named?.name === 'string' ? named.name : undefined;
176
+ const named = node as { type?: string; name?: unknown } | null | undefined
177
+ return typeof named?.name === 'string' ? named.name : undefined
179
178
  }
180
179
 
181
180
  function sourceValue(statement: Node): string | undefined {
182
- const literal = statement.source as { value?: unknown } | undefined;
183
- return typeof literal?.value === 'string' ? literal.value : undefined;
181
+ const literal = statement.source as { value?: unknown } | undefined
182
+ return typeof literal?.value === 'string' ? literal.value : undefined
184
183
  }
185
184
 
186
185
  /** Depth-first over every AST node — this only runs for a file that uses Link. */
187
186
  function walk(node: unknown, visit: (node: Node) => void): void {
188
187
  if (Array.isArray(node)) {
189
- for (const item of node) walk(item, visit);
190
- return;
188
+ for (const item of node) walk(item, visit)
189
+ return
191
190
  }
192
- if (!node || typeof node !== 'object') return;
193
- const candidate = node as Node;
194
- if (typeof candidate.type === 'string') visit(candidate);
191
+ if (!node || typeof node !== 'object') return
192
+ const candidate = node as Node
193
+ if (typeof candidate.type === 'string') visit(candidate)
195
194
  for (const key in candidate) {
196
- if (key !== 'type') walk(candidate[key], visit);
195
+ if (key !== 'type') walk(candidate[key], visit)
197
196
  }
198
197
  }
199
198
 
200
199
  // `.ts` forbids JSX (`<T>value` is a type assertion); everything else parses as
201
200
  // the tsx superset, matching the scan-facts language rule.
202
201
  function langForFile(file: string): 'ts' | 'tsx' {
203
- return /\.[cm]?ts$/.test(file) ? 'ts' : 'tsx';
202
+ return /\.[cm]?ts$/.test(file) ? 'ts' : 'tsx'
204
203
  }