@wular/pnext 0.0.3 → 0.0.6

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 (392) hide show
  1. package/README.md +11 -11
  2. package/bin/pnext +1 -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 +1 -1
  8. package/reference/config.md +2 -2
  9. package/reference/css.md +13 -9
  10. package/reference/dev.md +1 -1
  11. package/reference/metadata.md +7 -7
  12. package/reference/navigation.md +35 -28
  13. package/reference/performance.md +70 -70
  14. package/reference/rendering.md +17 -17
  15. package/reference/routing.md +17 -17
  16. package/reference/typegen.md +12 -8
  17. package/src/api/cache.ts +36 -37
  18. package/src/api/client-cache.ts +2 -2
  19. package/src/api/client-navigation.ts +113 -109
  20. package/src/api/dynamic.tsx +58 -55
  21. package/src/api/link.tsx +49 -52
  22. package/src/api/navigation.ts +59 -58
  23. package/src/api/server.ts +152 -144
  24. package/src/api/suspense.ts +4 -4
  25. package/src/cli/adapters/vercel-warm.ts +126 -121
  26. package/src/cli/adapters/vercel.ts +437 -443
  27. package/src/cli/analyze.ts +333 -144
  28. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  29. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  30. package/src/cli/build.ts +976 -978
  31. package/src/cli/create.ts +71 -63
  32. package/src/cli/dev.ts +116 -116
  33. package/src/cli/index.ts +88 -85
  34. package/src/cli/migrate/package-json.ts +73 -71
  35. package/src/cli/migrate/report.ts +32 -33
  36. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  37. package/src/cli/migrate/scan.ts +46 -46
  38. package/src/cli/migrate/spinner.ts +9 -9
  39. package/src/cli/migrate/tsconfig.ts +35 -35
  40. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  41. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  42. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  43. package/src/cli/start.ts +65 -66
  44. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  45. package/src/client/build.ts +794 -768
  46. package/src/client/chunk-fold.ts +245 -240
  47. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  48. package/src/client/entry.ts +162 -147
  49. package/src/client/prebuilt.ts +231 -223
  50. package/src/client/profile.ts +29 -29
  51. package/src/client/react-compiler.ts +20 -15
  52. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  53. package/src/client/reference-stub.ts +51 -51
  54. package/src/client/reference.ts +19 -19
  55. package/src/{api → client}/router/events.ts +17 -17
  56. package/src/{api → client}/router/history.ts +16 -16
  57. package/src/{api → client}/router/hub.ts +52 -53
  58. package/src/{api/router.ts → client/router/index.ts} +61 -60
  59. package/src/{api → client}/router/policies.ts +24 -24
  60. package/src/{api → client}/router/runtime.ts +1988 -1961
  61. package/src/{api → client}/router/types.ts +93 -98
  62. package/src/compat/actions/client-plugin.ts +42 -43
  63. package/src/compat/actions/client-stub.ts +14 -14
  64. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  65. package/src/compat/actions/config.ts +63 -64
  66. package/src/compat/actions/detect.ts +68 -68
  67. package/src/compat/actions/discovery.ts +105 -105
  68. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  69. package/src/compat/actions/early-submit.ts +1 -1
  70. package/src/compat/actions/endpoint.ts +198 -198
  71. package/src/compat/actions/extensions.ts +811 -0
  72. package/src/compat/actions/flight.ts +23 -23
  73. package/src/compat/actions/form-state.ts +34 -34
  74. package/src/compat/actions/hoist.ts +382 -236
  75. package/src/compat/actions/ids.ts +7 -12
  76. package/src/compat/actions/index.ts +8 -8
  77. package/src/compat/actions/instances.ts +46 -46
  78. package/src/compat/actions/origin.ts +47 -48
  79. package/src/compat/actions/protocol.ts +22 -22
  80. package/src/compat/actions/registry.ts +19 -19
  81. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  82. package/src/compat/actions/rewrite.ts +125 -125
  83. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  84. package/src/compat/actions/serve.ts +132 -136
  85. package/src/compat/actions/server-tag.ts +4 -4
  86. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  87. package/src/compat/actions/unrecognized-error.ts +4 -4
  88. package/src/compat/{index.ts → aliases.ts} +112 -109
  89. package/src/compat/bundler/bun-externals.ts +18 -18
  90. package/src/compat/bundler/cjs-exports.ts +271 -223
  91. package/src/compat/bundler/config.ts +116 -111
  92. package/src/compat/bundler/externals.ts +12 -12
  93. package/src/compat/bundler/import-meta-url.ts +19 -19
  94. package/src/compat/bundler/modularize-imports.ts +36 -33
  95. package/src/compat/bundler/new-url-asset.ts +22 -24
  96. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  97. package/src/compat/bundler/polyfill.ts +28 -28
  98. package/src/compat/bundler/react-compiler.ts +35 -29
  99. package/src/compat/bundler/react-profiler.tsx +11 -11
  100. package/src/compat/bundler/relay-transform.ts +48 -47
  101. package/src/compat/bundler/require-context.ts +119 -113
  102. package/src/compat/bundler/resolve-extensions.ts +19 -19
  103. package/src/compat/bundler/source-cache.ts +25 -25
  104. package/src/compat/bundler/static-imports.ts +7 -7
  105. package/src/compat/bundler/symlink-imports.ts +46 -46
  106. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  107. package/src/compat/bundler/wasm.ts +58 -60
  108. package/src/compat/bundler/webpack-loaders.ts +254 -241
  109. package/src/compat/bundler/worker.ts +101 -104
  110. package/src/compat/cache/build-flags.ts +29 -29
  111. package/src/compat/cache/build-prerender-errors.ts +40 -44
  112. package/src/compat/cache/custom-handler.ts +60 -53
  113. package/src/compat/cache/fetch-patch.ts +240 -240
  114. package/src/compat/cache/handler.ts +27 -31
  115. package/src/compat/cache/modern-handler.ts +148 -126
  116. package/src/compat/cache/resume-data-cache.ts +47 -45
  117. package/src/compat/cache/revalidate.ts +233 -232
  118. package/src/compat/cache/runtime-error.ts +35 -35
  119. package/src/compat/cache/use-cache-transform.ts +442 -417
  120. package/src/compat/cache/use-cache.ts +650 -614
  121. package/src/compat/cache-control.ts +140 -142
  122. package/src/compat/client/base-path.ts +21 -20
  123. package/src/compat/client/css-order.ts +18 -18
  124. package/src/compat/client/errors/bare-boundary.ts +11 -11
  125. package/src/compat/client/errors/control-flow.ts +23 -23
  126. package/src/compat/client/errors/error-boundary.ts +61 -61
  127. package/src/compat/client/errors/global-error.ts +101 -91
  128. package/src/compat/client/errors/install.ts +71 -72
  129. package/src/compat/client/errors/lazy.ts +23 -23
  130. package/src/compat/client/errors/primitive-throw.ts +47 -45
  131. package/src/compat/client/errors/soft-refresh.ts +4 -4
  132. package/src/compat/client/link-status.ts +33 -33
  133. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  134. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  135. package/src/compat/client/navigation-scroll.ts +63 -63
  136. package/src/compat/client/optimistic-routing.ts +93 -88
  137. package/src/compat/client/prefetch-cache.ts +23 -24
  138. package/src/compat/client/route-announcer.ts +35 -35
  139. package/src/compat/client/segment-cache-policy.ts +20 -20
  140. package/src/compat/client/segment-cache.ts +309 -315
  141. package/src/compat/client/segment-prefetch.ts +127 -132
  142. package/src/compat/client/trailing-slash.ts +5 -4
  143. package/src/compat/css/chunking.ts +113 -116
  144. package/src/compat/css/inline-css.ts +21 -21
  145. package/src/compat/css/lightningcss.ts +37 -38
  146. package/src/compat/css/modules.ts +161 -175
  147. package/src/compat/css/nonce.ts +7 -7
  148. package/src/compat/css/sass-plugin.ts +18 -21
  149. package/src/compat/css/sass.ts +150 -152
  150. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  151. package/src/compat/css/styled-jsx.ts +21 -21
  152. package/src/compat/edge-runtime.ts +27 -27
  153. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  154. package/src/compat/export/client.ts +29 -31
  155. package/src/compat/export/{index.ts → emit.ts} +111 -110
  156. package/src/compat/export/standalone.ts +62 -54
  157. package/src/compat/image-optimizer/cache.ts +51 -49
  158. package/src/compat/image-optimizer/detect.ts +52 -52
  159. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  160. package/src/compat/image-optimizer/source.ts +77 -80
  161. package/src/compat/lifecycle/after-scope.ts +26 -26
  162. package/src/compat/lifecycle/after.ts +48 -45
  163. package/src/compat/lifecycle/error-funnel.ts +98 -102
  164. package/src/compat/lifecycle/error-serialize.ts +30 -26
  165. package/src/compat/lifecycle/error-ui.ts +67 -32
  166. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  167. package/src/compat/lifecycle/instrumentation.ts +85 -85
  168. package/src/compat/lifecycle/node-console.ts +11 -11
  169. package/src/compat/lifecycle/testmode.ts +160 -132
  170. package/src/compat/mdx/compile.ts +60 -57
  171. package/src/compat/mdx/plugin.ts +11 -11
  172. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  173. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  174. package/src/compat/metadata.ts +75 -81
  175. package/src/compat/next/cache.ts +68 -69
  176. package/src/compat/next/canonical-url.ts +9 -9
  177. package/src/compat/next/client-cache.ts +19 -19
  178. package/src/compat/next/client-navigation.ts +112 -116
  179. package/src/compat/next/client-only.ts +1 -1
  180. package/src/compat/next/client-script.tsx +99 -93
  181. package/src/compat/next/client-server.ts +10 -10
  182. package/src/compat/next/config-loader.ts +176 -173
  183. package/src/compat/next/config.ts +7 -7
  184. package/src/compat/next/constants.cjs +6 -6
  185. package/src/compat/next/constants.ts +6 -6
  186. package/src/compat/next/custom-server.ts +26 -24
  187. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  188. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  189. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  190. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  191. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  192. package/src/compat/next/dynamic.tsx +21 -18
  193. package/src/compat/next/error.tsx +52 -52
  194. package/src/compat/next/font/cache.ts +74 -74
  195. package/src/compat/next/font/google.ts +2 -2
  196. package/src/compat/next/font/index.ts +1 -1
  197. package/src/compat/next/font/local.ts +3 -3
  198. package/src/compat/next/font/runtime-client.ts +17 -15
  199. package/src/compat/next/font/runtime.ts +443 -408
  200. package/src/compat/next/font/shared.ts +120 -108
  201. package/src/compat/next/form.tsx +63 -63
  202. package/src/compat/next/head.tsx +2 -2
  203. package/src/compat/next/headers.ts +103 -95
  204. package/src/compat/next/image/client.tsx +220 -0
  205. package/src/compat/next/image/config.ts +56 -58
  206. package/src/compat/next/image/optimizer.ts +40 -36
  207. package/src/compat/next/image/patterns.ts +37 -40
  208. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  209. package/src/compat/next/image/shared.ts +65 -57
  210. package/src/compat/next/image/static-metadata.ts +98 -107
  211. package/src/compat/next/image/validate.ts +79 -88
  212. package/src/compat/next/image.tsx +19 -23
  213. package/src/compat/next/index.ts +1 -1
  214. package/src/compat/next/legacy-image.tsx +59 -60
  215. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  216. package/src/compat/next/link.tsx +158 -158
  217. package/src/compat/next/navigation.cjs +12 -3
  218. package/src/compat/next/navigation.ts +48 -50
  219. package/src/compat/next/offline.ts +27 -27
  220. package/src/compat/next/og.ts +121 -124
  221. package/src/compat/next/preferred-region.ts +13 -14
  222. package/src/compat/next/redirects.ts +58 -56
  223. package/src/compat/next/resource-hints.ts +73 -76
  224. package/src/compat/next/rewrites.ts +130 -133
  225. package/src/compat/next/root-params.ts +45 -45
  226. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  227. package/src/compat/next/router.cjs +4 -2
  228. package/src/compat/next/router.ts +58 -61
  229. package/src/compat/next/script.tsx +108 -108
  230. package/src/compat/next/server-only.ts +1 -1
  231. package/src/compat/next/server.ts +19 -19
  232. package/src/compat/next/svgr.ts +18 -17
  233. package/src/compat/next/telemetry.ts +24 -24
  234. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  235. package/src/compat/next/user-agent.ts +53 -49
  236. package/src/compat/next/web-vitals.ts +22 -24
  237. package/src/compat/otel/api.ts +41 -41
  238. package/src/compat/otel/client-trace-metadata.ts +25 -27
  239. package/src/compat/otel/fetch-span.ts +29 -29
  240. package/src/compat/otel/tracer.ts +331 -331
  241. package/src/compat/pages/api.ts +456 -0
  242. package/src/compat/pages/client-plugin.ts +36 -36
  243. package/src/compat/pages/router-state.ts +34 -34
  244. package/src/compat/pages/{index.ts → router.ts} +130 -135
  245. package/src/compat/ppr/io.ts +12 -12
  246. package/src/compat/ppr/missing-root-params.ts +34 -38
  247. package/src/compat/ppr/root-params-scan.ts +66 -66
  248. package/src/compat/ppr/root-params-transform.ts +24 -26
  249. package/src/compat/ppr/root-params.ts +30 -30
  250. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  251. package/src/compat/protocol.ts +71 -70
  252. package/src/compat/react/action-state.ts +47 -48
  253. package/src/compat/react/client-lite.ts +15 -15
  254. package/src/compat/react/client.ts +4 -4
  255. package/src/compat/react/compiler-runtime.ts +11 -11
  256. package/src/compat/react/dom-client.ts +44 -44
  257. package/src/compat/react/dom-react-server.ts +10 -16
  258. package/src/compat/react/dom-server.ts +10 -10
  259. package/src/compat/react/dom.ts +52 -52
  260. package/src/compat/react/hooks-extra.ts +34 -35
  261. package/src/compat/react/parity.ts +64 -61
  262. package/src/compat/react/preact.ts +81 -82
  263. package/src/compat/react/react-server.ts +28 -28
  264. package/src/compat/react/router-shim.ts +1 -1
  265. package/src/compat/react/server-component-use.ts +8 -8
  266. package/src/compat/react/server-inserted-html.ts +30 -31
  267. package/src/compat/react/server.ts +53 -55
  268. package/src/compat/react/use.ts +32 -32
  269. package/src/compat/react/view-transition.ts +20 -20
  270. package/src/compat/register/actions.ts +35 -824
  271. package/src/compat/register/boot.ts +41 -41
  272. package/src/compat/register/build-tier.ts +5 -5
  273. package/src/compat/register/build.ts +74 -70
  274. package/src/compat/register/bundler.ts +161 -156
  275. package/src/compat/register/cache.ts +20 -20
  276. package/src/compat/register/client-errors.ts +3 -3
  277. package/src/compat/register/config.ts +6 -6
  278. package/src/compat/register/css-extras.ts +30 -34
  279. package/src/compat/register/edge-runtime.ts +3 -3
  280. package/src/compat/register/errors.ts +10 -12
  281. package/src/compat/register/export.ts +16 -16
  282. package/src/compat/register/font.ts +11 -11
  283. package/src/compat/register/hooks.ts +2 -2
  284. package/src/compat/register/image.ts +40 -40
  285. package/src/compat/register/index.ts +59 -62
  286. package/src/compat/register/instrumentation-client.ts +10 -10
  287. package/src/compat/register/lifecycle.ts +25 -28
  288. package/src/compat/register/mdx.ts +10 -10
  289. package/src/compat/register/middleware.ts +226 -16
  290. package/src/compat/register/otel.ts +80 -88
  291. package/src/compat/register/pages-api.ts +10 -463
  292. package/src/compat/register/ppr.ts +16 -16
  293. package/src/compat/register/protocol.ts +17 -18
  294. package/src/compat/register/proxy.ts +49 -51
  295. package/src/compat/register/render.ts +79 -76
  296. package/src/compat/register/routing.ts +162 -159
  297. package/src/compat/register/segment.ts +24 -1887
  298. package/src/compat/register/static-image.ts +3 -3
  299. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  300. package/src/compat/register/typed-routes.ts +14 -14
  301. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  302. package/src/compat/register/validation.ts +18 -18
  303. package/src/compat/segment/loading-boundary.ts +43 -45
  304. package/src/compat/segment/page-slot.ts +69 -69
  305. package/src/compat/segment/serve.ts +1884 -0
  306. package/src/compat/segment/tree.ts +113 -112
  307. package/src/compat/segment/vary-key.ts +38 -38
  308. package/src/compat/segment/vary-params.ts +138 -142
  309. package/src/compat/static-params.ts +14 -12
  310. package/src/compat/tsconfig-defaults.ts +87 -91
  311. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  312. package/src/compat/typecheck/worker.ts +15 -12
  313. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  314. package/src/compat/typed-routes/manifest.ts +174 -170
  315. package/src/compat/typed-routes/typegen.ts +127 -110
  316. package/src/compat/validation/errors.ts +16 -19
  317. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  318. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  319. package/src/compat-bootstrap.ts +16 -16
  320. package/src/config.ts +69 -69
  321. package/src/css/build.ts +230 -227
  322. package/src/css/postcss.ts +79 -80
  323. package/src/css/worker.ts +14 -15
  324. package/src/dev/client-actions.ts +10 -10
  325. package/src/dev/client-chunk-store.ts +27 -27
  326. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  327. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  328. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  329. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  330. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  331. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  332. package/src/dev/server.ts +804 -820
  333. package/src/env.ts +46 -43
  334. package/src/extensions.ts +491 -478
  335. package/src/index.ts +8 -8
  336. package/src/internal.ts +20 -23
  337. package/src/{islands → render}/boundary-error.ts +3 -3
  338. package/src/render/hooks.ts +71 -71
  339. package/src/render/island-context.ts +14 -14
  340. package/src/render/metadata.ts +310 -310
  341. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  342. package/src/{ppr.ts → render/ppr.ts} +244 -245
  343. package/src/render/renderer.ts +2076 -2082
  344. package/src/render/resource-hints.ts +16 -17
  345. package/src/render/slots.tsx +224 -235
  346. package/src/{islands → render}/static-children.ts +9 -12
  347. package/src/{islands → render}/static-slots.ts +37 -37
  348. package/src/{cache/context.ts → request/cache.ts} +20 -20
  349. package/src/request/context.ts +107 -107
  350. package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
  351. package/src/resolve/engine.ts +90 -77
  352. package/src/resolve/imports.ts +475 -463
  353. package/src/resolve/scan-facts.ts +442 -186
  354. package/src/resolve/source-text.ts +37 -37
  355. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  356. package/src/routing/forwarded.ts +19 -19
  357. package/src/routing/handler.ts +84 -91
  358. package/src/routing/href.ts +69 -70
  359. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  360. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  361. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  362. package/src/routing/routes.ts +833 -848
  363. package/src/routing/slots.ts +164 -160
  364. package/src/runtime/loader.ts +952 -0
  365. package/src/{dev → runtime}/module-cache.ts +309 -287
  366. package/src/{dev → runtime}/module-generations.ts +9 -9
  367. package/src/{dev → runtime}/module-transform.ts +81 -72
  368. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  369. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  370. package/src/runtime/vendor.ts +425 -404
  371. package/src/styles.d.ts +9 -0
  372. package/src/types.ts +320 -335
  373. package/src/utils/ansi.ts +5 -5
  374. package/src/utils/{source.ts → code.ts} +15 -12
  375. package/src/utils/content-type.ts +3 -3
  376. package/src/utils/decode.ts +2 -2
  377. package/src/utils/dev-profile.ts +13 -13
  378. package/src/utils/error-log.ts +6 -6
  379. package/src/utils/esbuild.ts +18 -18
  380. package/src/utils/fs-cache.ts +13 -13
  381. package/src/utils/fs.ts +57 -49
  382. package/src/utils/html.ts +20 -24
  383. package/src/utils/native-require.ts +8 -8
  384. package/src/utils/serialize.ts +139 -146
  385. package/src/utils/verbose.ts +18 -18
  386. package/src/cli/analyze-print.ts +0 -181
  387. package/src/compat/middleware/manifest.ts +0 -210
  388. package/src/compat/next/image-client.tsx +0 -215
  389. package/src/compat/next/link-usage.ts +0 -29
  390. package/src/css/index.ts +0 -2
  391. package/src/render/index.ts +0 -1
  392. package/src/style-modules.d.ts +0 -9
@@ -1,19 +1,29 @@
1
- import { existsSync } from 'node:fs';
2
- import path from 'node:path';
3
- import type { ResolverFactory, NapiResolveOptions } from 'oxc-resolver';
4
- import { loadNative } from '../utils/native-require';
1
+ import { existsSync } from 'node:fs'
2
+ import path from 'node:path'
3
+ import type { ResolverFactory, NapiResolveOptions } from 'oxc-resolver'
4
+ import { loadNative } from '../utils/native-require'
5
5
 
6
6
  // Lazy: the native binding costs ~1.3 MB RSS and a prod server may never resolve.
7
7
  function createResolverFactory(options: NapiResolveOptions): ResolverFactory {
8
8
  const { ResolverFactory: Factory } = loadNative(
9
9
  // eslint-disable-next-line @typescript-eslint/no-require-imports
10
10
  () => require('oxc-resolver') as typeof import('oxc-resolver'),
11
- );
12
- return new Factory(options);
13
- }
14
- import { clearNodeModulesFsCache } from '../utils/fs-cache';
15
-
16
- const sourceExtensions = ['.tsx', '.ts', '.jsx', '.js', '.mjs', '.mts', '.cts', '.module.css', '.css'];
11
+ )
12
+ return new Factory(options)
13
+ }
14
+ import { clearNodeModulesFsCache } from '../utils/fs-cache'
15
+
16
+ const sourceExtensions = [
17
+ '.tsx',
18
+ '.ts',
19
+ '.jsx',
20
+ '.js',
21
+ '.mjs',
22
+ '.mts',
23
+ '.cts',
24
+ '.module.css',
25
+ '.css',
26
+ ]
17
27
 
18
28
  // An ESM `import './x.js'` is authored against the source file that compiles to
19
29
  // it — a source convention only (see isSourceRequest / probePackageTarget).
@@ -22,41 +32,41 @@ const extensionAlias = {
22
32
  '.jsx': ['.tsx', '.jsx'],
23
33
  '.mjs': ['.mts', '.mjs'],
24
34
  '.cjs': ['.cts', '.cjs'],
25
- };
35
+ }
26
36
 
27
37
  export interface ResolvedModule {
28
- path: string;
38
+ path: string
29
39
  }
30
40
 
31
41
  /** The package answered "no" for this subpath (Node's ERR_PACKAGE_PATH_NOT_EXPORTED). */
32
42
  export interface UnexportedModule {
33
- notExported: true;
43
+ notExported: true
34
44
  }
35
45
 
36
- export type ResolveOutcome = ResolvedModule | UnexportedModule | undefined;
46
+ export type ResolveOutcome = ResolvedModule | UnexportedModule | undefined
37
47
 
38
- let configuredExtensions: string[] | undefined;
39
- let configuredTsConfigPath: string | undefined;
48
+ let configuredExtensions: string[] | undefined
49
+ let configuredTsConfigPath: string | undefined
40
50
 
41
- let baseFactory: ResolverFactory | undefined;
42
- const factories = new Map<string, ResolverFactory>();
43
- const tsConfigFiles = new Map<string, string | undefined>();
51
+ let baseFactory: ResolverFactory | undefined
52
+ const factories = new Map<string, ResolverFactory>()
53
+ const tsConfigFiles = new Map<string, string | undefined>()
44
54
 
45
55
  export function setEngineExtensions(extensions: readonly string[] | undefined): void {
46
- configuredExtensions = extensions && extensions.length > 0 ? [...extensions] : undefined;
47
- resetEngine();
56
+ configuredExtensions = extensions && extensions.length > 0 ? [...extensions] : undefined
57
+ resetEngine()
48
58
  }
49
59
 
50
60
  export function setEngineTsConfigPath(file: string | undefined): void {
51
- configuredTsConfigPath = file;
52
- resetEngine();
61
+ configuredTsConfigPath = file
62
+ resetEngine()
53
63
  }
54
64
 
55
65
  function resetEngine() {
56
- baseFactory = undefined;
57
- factories.clear();
58
- tsConfigFiles.clear();
59
- nodeModulesOutcomes.clear();
66
+ baseFactory = undefined
67
+ factories.clear()
68
+ tsConfigFiles.clear()
69
+ nodeModulesOutcomes.clear()
60
70
  }
61
71
 
62
72
  /**
@@ -65,24 +75,24 @@ function resetEngine() {
65
75
  * constructed, only their fs cache is emptied.
66
76
  */
67
77
  export function clearResolverFsCache(): void {
68
- baseFactory?.clearCache();
69
- for (const factory of factories.values()) factory.clearCache();
70
- nodeModulesOutcomes.clear();
71
- clearNodeModulesFsCache();
78
+ baseFactory?.clearCache()
79
+ for (const factory of factories.values()) factory.clearCache()
80
+ nodeModulesOutcomes.clear()
81
+ clearNodeModulesFsCache()
72
82
  }
73
83
 
74
84
  /** The tsconfig (or jsconfig) driving `paths`/`baseUrl` for a resolution root. */
75
85
  export function tsConfigFileFor(root: string): string | undefined {
76
- const key = path.resolve(root);
77
- if (tsConfigFiles.has(key)) return tsConfigFiles.get(key);
86
+ const key = path.resolve(root)
87
+ if (tsConfigFiles.has(key)) return tsConfigFiles.get(key)
78
88
  const candidates = [
79
89
  ...(configuredTsConfigPath ? [path.resolve(key, configuredTsConfigPath)] : []),
80
90
  path.join(key, 'tsconfig.json'),
81
91
  path.join(key, 'jsconfig.json'),
82
- ];
83
- const file = candidates.find(candidate => existsSync(candidate));
84
- tsConfigFiles.set(key, file);
85
- return file;
92
+ ]
93
+ const file = candidates.find(candidate => existsSync(candidate))
94
+ tsConfigFiles.set(key, file)
95
+ return file
86
96
  }
87
97
 
88
98
  /**
@@ -91,11 +101,11 @@ export function tsConfigFileFor(root: string): string | undefined {
91
101
  * package-imports specifier, not a fragment.
92
102
  */
93
103
  export function splitResourceQuery(specifier: string): { path: string; query: string } {
94
- const offset = specifier.startsWith('#') ? 1 : 0;
95
- const match = /[?#]/.exec(specifier.slice(offset));
96
- if (!match) return { path: specifier, query: '' };
97
- const index = offset + match.index;
98
- return { path: specifier.slice(0, index), query: specifier.slice(index) };
104
+ const offset = specifier.startsWith('#') ? 1 : 0
105
+ const match = /[?#]/.exec(specifier.slice(offset))
106
+ if (!match) return { path: specifier, query: '' }
107
+ const index = offset + match.index
108
+ return { path: specifier.slice(0, index), query: specifier.slice(index) }
99
109
  }
100
110
 
101
111
  /**
@@ -108,14 +118,14 @@ export function resolveFrom(
108
118
  conditions: readonly string[],
109
119
  tsConfigRoot?: string,
110
120
  ): ResolveOutcome {
111
- const { path: request } = splitResourceQuery(specifier);
112
- const tsconfig = tsConfigRoot ? tsConfigFileFor(tsConfigRoot) : undefined;
113
- return resolveRequest(dir, request, conditions, tsconfig, isSourceRequest(request));
121
+ const { path: request } = splitResourceQuery(specifier)
122
+ const tsconfig = tsConfigRoot ? tsConfigFileFor(tsConfigRoot) : undefined
123
+ return resolveRequest(dir, request, conditions, tsconfig, isSourceRequest(request))
114
124
  }
115
125
 
116
126
  /** Probe a literal on-disk path with the resolver's extension/index rules. */
117
127
  export function probeFile(target: string, conditions: readonly string[]): string | undefined {
118
- return probe(target, conditions, true);
128
+ return probe(target, conditions, true)
119
129
  }
120
130
 
121
131
  /**
@@ -124,26 +134,29 @@ export function probeFile(target: string, conditions: readonly string[]): string
124
134
  * source alias: Node and webpack read a package's stated target literally, so a
125
135
  * stale `x.ts` next to the built `x.js` must never win.
126
136
  */
127
- export function probePackageTarget(target: string, conditions: readonly string[]): string | undefined {
128
- return probe(target, conditions, false);
137
+ export function probePackageTarget(
138
+ target: string,
139
+ conditions: readonly string[],
140
+ ): string | undefined {
141
+ return probe(target, conditions, false)
129
142
  }
130
143
 
131
144
  function probe(target: string, conditions: readonly string[], sourceAlias: boolean) {
132
- const { path: file } = splitResourceQuery(target);
133
- const request = `./${path.basename(file)}`;
134
- const outcome = resolveRequest(path.dirname(file), request, conditions, undefined, sourceAlias);
135
- return outcome && 'path' in outcome ? outcome.path : undefined;
145
+ const { path: file } = splitResourceQuery(target)
146
+ const request = `./${path.basename(file)}`
147
+ const outcome = resolveRequest(path.dirname(file), request, conditions, undefined, sourceAlias)
148
+ return outcome && 'path' in outcome ? outcome.path : undefined
136
149
  }
137
150
 
138
151
  /** Runtime-cache reset (bench/tests): drop memoized node_modules resolutions. */
139
152
  export function clearNodeModulesResolutionCache(): void {
140
- nodeModulesOutcomes.clear();
153
+ nodeModulesOutcomes.clear()
141
154
  }
142
155
 
143
156
  // Lookups FROM node_modules only: installed layouts are process-immutable,
144
157
  // app-source resolution must stay live under watch (see clearResolverFsCache).
145
- const nodeModulesOutcomes = new Map<string, ResolveOutcome>();
146
- const NODE_MODULES_SEGMENT = `${path.sep}node_modules${path.sep}`;
158
+ const nodeModulesOutcomes = new Map<string, ResolveOutcome>()
159
+ const NODE_MODULES_SEGMENT = `${path.sep}node_modules${path.sep}`
147
160
 
148
161
  function resolveRequest(
149
162
  dir: string,
@@ -154,9 +167,9 @@ function resolveRequest(
154
167
  ): ResolveOutcome {
155
168
  const key = dir.includes(NODE_MODULES_SEGMENT)
156
169
  ? `${dir}\0${request}\0${conditions.join(',')}\0${tsconfig ?? ''}\0${sourceAlias}`
157
- : undefined;
158
- if (key !== undefined && nodeModulesOutcomes.has(key)) return nodeModulesOutcomes.get(key);
159
- const { path: file, error } = resolverFor(conditions, tsconfig, sourceAlias).sync(dir, request);
170
+ : undefined
171
+ if (key !== undefined && nodeModulesOutcomes.has(key)) return nodeModulesOutcomes.get(key)
172
+ const { path: file, error } = resolverFor(conditions, tsconfig, sourceAlias).sync(dir, request)
160
173
  // Declaration files carry no runtime and are never a valid resolution.
161
174
  const outcome: ResolveOutcome = file
162
175
  ? isDeclarationFile(file)
@@ -164,9 +177,9 @@ function resolveRequest(
164
177
  : { path: file }
165
178
  : error?.includes('is not exported')
166
179
  ? { notExported: true }
167
- : undefined;
168
- if (key !== undefined) nodeModulesOutcomes.set(key, outcome);
169
- return outcome;
180
+ : undefined
181
+ if (key !== undefined) nodeModulesOutcomes.set(key, outcome)
182
+ return outcome
170
183
  }
171
184
 
172
185
  // oxc applies `extensionAlias` to the target it reads out of a package's
@@ -174,7 +187,7 @@ function resolveRequest(
174
187
  // (relative or absolute, authored against the file its own build emits) gets
175
188
  // the `.js` -> `.ts` rewrite. Bare specifiers are package lookups.
176
189
  function isSourceRequest(request: string) {
177
- return request.startsWith('.') || path.isAbsolute(request);
190
+ return request.startsWith('.') || path.isAbsolute(request)
178
191
  }
179
192
 
180
193
  function resolverFor(
@@ -182,8 +195,8 @@ function resolverFor(
182
195
  tsconfig: string | undefined,
183
196
  sourceExtensionAlias: boolean,
184
197
  ) {
185
- const key = `${conditions.join(',')}\0${tsconfig ?? ''}\0${sourceExtensionAlias}`;
186
- let resolver = factories.get(key);
198
+ const key = `${conditions.join(',')}\0${tsconfig ?? ''}\0${sourceExtensionAlias}`
199
+ let resolver = factories.get(key)
187
200
  if (!resolver) {
188
201
  // cloneWithOptions replaces the option set rather than merging it, so the
189
202
  // base options are repeated here; the clone shares the base file-system cache.
@@ -192,12 +205,12 @@ function resolverFor(
192
205
  extensionAlias: sourceExtensionAlias ? extensionAlias : {},
193
206
  conditionNames: [...conditions],
194
207
  mainFields: mainFieldsFor(conditions),
195
- };
196
- if (tsconfig) options.tsconfig = { configFile: tsconfig };
197
- resolver = baseResolver().cloneWithOptions(options);
198
- factories.set(key, resolver);
208
+ }
209
+ if (tsconfig) options.tsconfig = { configFile: tsconfig }
210
+ resolver = baseResolver().cloneWithOptions(options)
211
+ factories.set(key, resolver)
199
212
  }
200
- return resolver;
213
+ return resolver
201
214
  }
202
215
 
203
216
  function baseOptions(): NapiResolveOptions {
@@ -206,24 +219,24 @@ function baseOptions(): NapiResolveOptions {
206
219
  // Symlink policy is the caller's (see realLinkedPackageFile in imports.ts):
207
220
  // pnpm virtual-store paths carry version identity that must not collapse.
208
221
  symlinks: false,
209
- };
222
+ }
210
223
  }
211
224
 
212
225
  function baseResolver() {
213
- baseFactory ??= createResolverFactory(baseOptions());
214
- return baseFactory;
226
+ baseFactory ??= createResolverFactory(baseOptions())
227
+ return baseFactory
215
228
  }
216
229
 
217
230
  // `edge-light`/`browser` are plain package.json main fields in Next/webpack, not
218
231
  // only `exports` conditions — a package shipping just `main`/`module`/`edge-light`
219
232
  // must still prefer `edge-light` on the edge layer.
220
233
  function mainFieldsFor(conditions: readonly string[]) {
221
- const fields = ['module', 'main'];
222
- if (conditions.includes('browser')) fields.unshift('browser');
223
- if (conditions.includes('edge-light')) fields.unshift('edge-light');
224
- return fields;
234
+ const fields = ['module', 'main']
235
+ if (conditions.includes('browser')) fields.unshift('browser')
236
+ if (conditions.includes('edge-light')) fields.unshift('edge-light')
237
+ return fields
225
238
  }
226
239
 
227
240
  function isDeclarationFile(file: string) {
228
- return /\.d\.[cm]?ts$/.test(file);
241
+ return /\.d\.[cm]?ts$/.test(file)
229
242
  }