@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
@@ -6,22 +6,22 @@
6
6
  // Counting them needs no registry walk: an artifact goes stale exactly when its (profile, source)
7
7
  // pair is renamed to a different artifact, and it only costs memory if it was ever imported. Both
8
8
  // facts are known at the two call sites below, so the count is an O(1) side effect of compiling.
9
- import { fileURLToPath } from 'node:url';
9
+ import { fileURLToPath } from 'node:url'
10
10
 
11
11
  /** Current artifact per `${profile}:${file}`. */
12
- const liveNames = new Map<string, string>();
12
+ const liveNames = new Map<string, string>()
13
13
  /** Artifacts that actually entered the ES module registry. */
14
- const imported = new Set<string>();
15
- let stale = 0;
14
+ const imported = new Set<string>()
15
+ let stale = 0
16
16
 
17
17
  /** Record that `outFile` is now the artifact for `key` (`${profile}:${file}`). */
18
18
  export function noteModuleGeneration(key: string, outFile: string) {
19
- const previous = liveNames.get(key);
19
+ const previous = liveNames.get(key)
20
20
  if (previous !== outFile) {
21
- liveNames.set(key, outFile);
21
+ liveNames.set(key, outFile)
22
22
  // Only a generation the registry actually holds costs memory; one that was
23
23
  // compiled and superseded before any import cost disk alone.
24
- if (previous !== undefined && imported.delete(previous)) stale += 1;
24
+ if (previous !== undefined && imported.delete(previous)) stale += 1
25
25
  }
26
26
  }
27
27
 
@@ -29,10 +29,10 @@ export function noteModuleGeneration(key: string, outFile: string) {
29
29
  export function noteModuleImported(href: string) {
30
30
  // Named as a path on the compile side, imported as an href: normalise through
31
31
  // the same URL codec both sides use, or every entry would look never-imported.
32
- imported.add(href.startsWith('file:') ? fileURLToPath(href) : href);
32
+ imported.add(href.startsWith('file:') ? fileURLToPath(href) : href)
33
33
  }
34
34
 
35
35
  /** Live and superseded registry generations of compiled server modules. */
36
36
  export function moduleGenerationStats() {
37
- return { live: imported.size, stale };
37
+ return { live: imported.size, stale }
38
38
  }
@@ -4,14 +4,16 @@
4
4
  //
5
5
  // esbuild's bundler is still load-bearing for a handful of shapes (below); `transformBailReason` sniffs
6
6
  // those out per file and the caller falls back to the esbuild build for them. Same pipeline in dev and prod.
7
- import type { TransformOptions } from 'oxc-transform';
7
+ import type { TransformOptions } from 'oxc-transform'
8
8
 
9
9
  // Lazy: the native binding costs ~3.6 MB RSS and a prod server never transforms.
10
10
  const transformSync: typeof import('oxc-transform').transformSync = (...args) =>
11
11
  // eslint-disable-next-line @typescript-eslint/no-require-imports
12
- loadNative(() => require('oxc-transform') as typeof import('oxc-transform')).transformSync(...args);
13
- import { loadNative } from '../utils/native-require';
14
- import { isCommonJsModuleSource } from '../resolve/imports';
12
+ loadNative(() => require('oxc-transform') as typeof import('oxc-transform')).transformSync(
13
+ ...args,
14
+ )
15
+ import { loadNative } from '../utils/native-require'
16
+ import { isCommonJsModuleSource } from '../resolve/imports'
15
17
 
16
18
  /** Why a source cannot take the transform path — one per esbuild-only shape. */
17
19
  export type TransformBailReason =
@@ -20,23 +22,27 @@ export type TransformBailReason =
20
22
  | 'enum' // oxc's enum lowering omits `E || {}`, breaking declaration merging
21
23
  | 'helpers' // the transform needed @oxc-project/runtime helper imports
22
24
  | 'parse-error'
23
- | 'specifier'; // a specifier the bundler resolves by inlining (assets with a
25
+ | 'specifier' // a specifier the bundler resolves by inlining (assets with a
24
26
  // loader rule, `#subpath` facades, require-aliases)
25
27
 
26
28
  // `import(` whose argument is not a string literal — esbuild turns those into a
27
29
  // `__glob({...})` map of the matching directory, which needs the bundler.
28
- const NON_LITERAL_DYNAMIC_IMPORT = /\bimport\s*\(\s*(?!['"])[^)]/;
29
- const REQUIRE_CALL = /\brequire\s*\(/;
30
- const COMMONJS_EXPORTS = /\bmodule\.exports\b|\bexports\s*\.\s*[A-Za-z_$]/;
31
- const ENUM_DECLARATION = /(?:^|[^.\w$])enum\s+[A-Za-z_$]/;
30
+ const NON_LITERAL_DYNAMIC_IMPORT = /\bimport\s*\(\s*(?!['"])[^)]/
31
+ const REQUIRE_CALL = /\brequire\s*\(/
32
+ const COMMONJS_EXPORTS = /\bmodule\.exports\b|\bexports\s*\.\s*[A-Za-z_$]/
33
+ const ENUM_DECLARATION = /(?:^|[^.\w$])enum\s+[A-Za-z_$]/
32
34
 
33
35
  export function transformBailReason(source: string, file: string): TransformBailReason | undefined {
34
- if (REQUIRE_CALL.test(source) || COMMONJS_EXPORTS.test(source) || isCommonJsModuleSource(source, file)) {
35
- return 'commonjs';
36
+ if (
37
+ REQUIRE_CALL.test(source) ||
38
+ COMMONJS_EXPORTS.test(source) ||
39
+ isCommonJsModuleSource(source, file)
40
+ ) {
41
+ return 'commonjs'
36
42
  }
37
- if (NON_LITERAL_DYNAMIC_IMPORT.test(source)) return 'glob-import';
38
- if (ENUM_DECLARATION.test(source)) return 'enum';
39
- return undefined;
43
+ if (NON_LITERAL_DYNAMIC_IMPORT.test(source)) return 'glob-import'
44
+ if (ENUM_DECLARATION.test(source)) return 'enum'
45
+ return undefined
40
46
  }
41
47
 
42
48
  /**
@@ -55,67 +61,67 @@ export function transformServerModule(
55
61
  // lowering plugins are expensive on the transform line.
56
62
  sourcemap: false,
57
63
  ...(define ? { define } : {}),
58
- };
59
- const result = transformSync(file, source, options);
60
- if (result.errors.length > 0) return { bail: 'parse-error' };
64
+ }
65
+ const result = transformSync(file, source, options)
66
+ if (result.errors.length > 0) return { bail: 'parse-error' }
61
67
  // Runtime helpers would import `@oxc-project/runtime`, which the app does not
62
68
  // have; esbuild inlines its equivalents, so hand those sources back to it.
63
- if (Object.keys(result.helpersUsed).length > 0) return { bail: 'helpers' };
64
- return { code: dropUnreferencedImports(result.code) };
69
+ if (Object.keys(result.helpersUsed).length > 0) return { bail: 'helpers' }
70
+ return { code: dropUnreferencedImports(result.code) }
65
71
  }
66
72
 
67
73
  // `.ts` forbids JSX (`<T>x` is a type assertion); `.js`/`.jsx` app modules may
68
74
  // contain JSX, matching the esbuild build's `loader: { '.js': 'jsx' }`.
69
75
  function langForFile(file: string): 'ts' | 'tsx' | 'jsx' {
70
- if (/\.[mc]?ts$/.test(file)) return 'ts';
71
- if (file.endsWith('.tsx')) return 'tsx';
72
- return 'jsx';
76
+ if (/\.[mc]?ts$/.test(file)) return 'ts'
77
+ if (file.endsWith('.tsx')) return 'tsx'
78
+ return 'jsx'
73
79
  }
74
80
 
75
81
  // --------------------------------------------------------------------------
76
82
  // emitted-module specifier scan
77
83
  // --------------------------------------------------------------------------
78
84
 
79
- export type SpecifierKind = 'import-statement' | 'dynamic-import';
85
+ export type SpecifierKind = 'import-statement' | 'dynamic-import'
80
86
 
81
87
  export interface FoundSpecifier {
82
- start: number;
83
- end: number;
84
- value: string;
85
- kind: SpecifierKind;
88
+ start: number
89
+ end: number
90
+ value: string
91
+ kind: SpecifierKind
86
92
  }
87
93
 
88
94
  const SPECIFIER_RE =
89
- /(?:^|[\n;{}])\s*(?:import|export)\b[^;'"]*?\bfrom\s*("[^"]*"|'[^']*')|(?:^|[\n;{}])\s*import\s*("[^"]*"|'[^']*')|\bimport\s*\(\s*("[^"]*"|'[^']*')\s*\)/g;
95
+ /(?:^|[\n;{}])\s*(?:import|export)\b[^;'"]*?\bfrom\s*("[^"]*"|'[^']*')|(?:^|[\n;{}])\s*import\s*("[^"]*"|'[^']*')|\bimport\s*\(\s*("[^"]*"|'[^']*')\s*\)/g
90
96
 
91
97
  /** Every module specifier in emitted ESM, with the span of its string literal. */
92
98
  export function outputSpecifiers(code: string): FoundSpecifier[] {
93
- const found: FoundSpecifier[] = [];
94
- SPECIFIER_RE.lastIndex = 0;
95
- let match: RegExpExecArray | null;
99
+ const found: FoundSpecifier[] = []
100
+ SPECIFIER_RE.lastIndex = 0
101
+ let match: RegExpExecArray | null
96
102
  while ((match = SPECIFIER_RE.exec(code))) {
97
103
  for (let group = 1; group <= 3; group += 1) {
98
- const literal = match[group];
99
- if (literal === undefined) continue;
100
- const start = match.index + match[0].lastIndexOf(literal);
104
+ const literal = match[group]
105
+ if (literal === undefined) continue
106
+ const start = match.index + match[0].lastIndexOf(literal)
101
107
  found.push({
102
108
  start,
103
109
  end: start + literal.length,
104
110
  value: literal.slice(1, -1),
105
111
  kind: group === 3 ? 'dynamic-import' : 'import-statement',
106
- });
112
+ })
107
113
  }
108
114
  }
109
- return found;
115
+ return found
110
116
  }
111
117
 
112
118
  /** Apply `{start, end, value}` replacements to `code` (spans must not overlap). */
113
119
  export function spliceSource(code: string, edits: { start: number; end: number; value: string }[]) {
114
- let next = code;
120
+ let next = code
115
121
  for (const edit of [...edits].sort((a, b) => b.start - a.start)) {
116
- next = `${next.slice(0, edit.start)}${edit.value}${next.slice(edit.end)}`;
122
+ next = `${next.slice(0, edit.start)}${edit.value}${next.slice(edit.end)}`
117
123
  }
118
- return next;
124
+ return next
119
125
  }
120
126
 
121
127
  // --------------------------------------------------------------------------
@@ -123,7 +129,7 @@ export function spliceSource(code: string, edits: { start: number; end: number;
123
129
  // --------------------------------------------------------------------------
124
130
 
125
131
  const IMPORT_STATEMENT_RE =
126
- /(?:^|\n)[ \t]*import\s+([A-Za-z_$][\w$]*\s*,\s*)?(?:\*\s*as\s+([A-Za-z_$][\w$]*)|\{([^}]*)\}|([A-Za-z_$][\w$]*))\s+from\s*(?:"[^"]*"|'[^']*')\s*;?/g;
132
+ /(?:^|\n)[ \t]*import\s+([A-Za-z_$][\w$]*\s*,\s*)?(?:\*\s*as\s+([A-Za-z_$][\w$]*)|\{([^}]*)\}|([A-Za-z_$][\w$]*))\s+from\s*(?:"[^"]*"|'[^']*')\s*;?/g
127
133
 
128
134
  /**
129
135
  * oxc keeps an import whose only uses were type positions it could not see through; the emitted module then
@@ -133,49 +139,52 @@ const IMPORT_STATEMENT_RE =
133
139
  * Side-effect-only `import 'x'` never matches this pattern and is always kept.
134
140
  */
135
141
  export function dropUnreferencedImports(code: string) {
136
- const statements: { start: number; end: number; names: string[] }[] = [];
137
- IMPORT_STATEMENT_RE.lastIndex = 0;
138
- let match: RegExpExecArray | null;
142
+ const statements: { start: number; end: number; names: string[] }[] = []
143
+ IMPORT_STATEMENT_RE.lastIndex = 0
144
+ let match: RegExpExecArray | null
139
145
  while ((match = IMPORT_STATEMENT_RE.exec(code))) {
140
- const [text, defaultWithNamed, namespace, named, defaultOnly] = match;
141
- const names: string[] = [];
142
- if (defaultWithNamed) names.push(defaultWithNamed.replace(/\s*,\s*$/, '').trim());
143
- if (namespace) names.push(namespace);
144
- if (defaultOnly) names.push(defaultOnly);
146
+ const [text, defaultWithNamed, namespace, named, defaultOnly] = match
147
+ const names: string[] = []
148
+ if (defaultWithNamed) names.push(defaultWithNamed.replace(/\s*,\s*$/, '').trim())
149
+ if (namespace) names.push(namespace)
150
+ if (defaultOnly) names.push(defaultOnly)
145
151
  if (named !== undefined) {
146
152
  for (const part of named.split(',')) {
147
- const local = part.split(/\bas\b/).pop()?.trim();
153
+ const local = part
154
+ .split(/\bas\b/)
155
+ .pop()
156
+ ?.trim()
148
157
  // An unparsed clause (comments, odd spacing) yields no local name: keep.
149
- if (!local) continue;
150
- if (!/^[A-Za-z_$][\w$]*$/.test(local)) return code;
151
- names.push(local);
158
+ if (!local) continue
159
+ if (!/^[A-Za-z_$][\w$]*$/.test(local)) return code
160
+ names.push(local)
152
161
  }
153
162
  }
154
- if (names.length === 0) continue;
155
- const leading = text.startsWith('\n') ? 1 : 0;
156
- statements.push({ start: match.index + leading, end: match.index + text.length, names });
163
+ if (names.length === 0) continue
164
+ const leading = text.startsWith('\n') ? 1 : 0
165
+ statements.push({ start: match.index + leading, end: match.index + text.length, names })
157
166
  }
158
- if (statements.length === 0) return code;
167
+ if (statements.length === 0) return code
159
168
 
160
169
  // Reference test runs against the module with every import statement cut out,
161
170
  // so one import's bindings never count as a use of another's.
162
- const gaps: string[] = [];
163
- let cursor = 0;
171
+ const gaps: string[] = []
172
+ let cursor = 0
164
173
  for (const statement of statements) {
165
- gaps.push(code.slice(cursor, statement.start));
166
- cursor = statement.end;
174
+ gaps.push(code.slice(cursor, statement.start))
175
+ cursor = statement.end
167
176
  }
168
- gaps.push(code.slice(cursor));
169
- const used = referencedNames(gaps.join('\n'));
170
- const unused = statements.filter(statement => statement.names.every(name => !used.has(name)));
171
- if (unused.length === 0) return code;
177
+ gaps.push(code.slice(cursor))
178
+ const used = referencedNames(gaps.join('\n'))
179
+ const unused = statements.filter(statement => statement.names.every(name => !used.has(name)))
180
+ if (unused.length === 0) return code
172
181
  return spliceSource(
173
182
  code,
174
183
  unused.map(({ start, end }) => ({ start, end, value: '' })),
175
- );
184
+ )
176
185
  }
177
186
 
178
- const IDENTIFIER_RE = /[A-Za-z_$][\w$]*/g;
187
+ const IDENTIFIER_RE = /[A-Za-z_$][\w$]*/g
179
188
 
180
189
  /**
181
190
  * Every identifier token that is not a member-access property name. A single
@@ -183,12 +192,12 @@ const IDENTIFIER_RE = /[A-Za-z_$][\w$]*/g;
183
192
  * spread/rest operator (`...name`), which IS a reference.
184
193
  */
185
194
  function referencedNames(body: string) {
186
- const names = new Set<string>();
187
- IDENTIFIER_RE.lastIndex = 0;
188
- let match: RegExpExecArray | null;
195
+ const names = new Set<string>()
196
+ IDENTIFIER_RE.lastIndex = 0
197
+ let match: RegExpExecArray | null
189
198
  while ((match = IDENTIFIER_RE.exec(body))) {
190
- if (body[match.index - 1] === '.' && body[match.index - 2] !== '.') continue;
191
- names.add(match[0]);
199
+ if (body[match.index - 1] === '.' && body[match.index - 2] !== '.') continue
200
+ names.add(match[0])
192
201
  }
193
- return names;
202
+ return names
194
203
  }