@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
@@ -9,8 +9,8 @@
9
9
  */
10
10
  export class UnrecognizedActionError extends Error {
11
11
  constructor(...args: ConstructorParameters<typeof Error>) {
12
- super(...args);
13
- this.name = 'UnrecognizedActionError';
12
+ super(...args)
13
+ this.name = 'UnrecognizedActionError'
14
14
  }
15
15
  }
16
16
 
@@ -21,10 +21,10 @@ export class UnrecognizedActionError extends Error {
21
21
  * prototype) by the name/message the endpoint sends.
22
22
  */
23
23
  export function isUnrecognizedActionError(error: unknown): boolean {
24
- if (error instanceof UnrecognizedActionError) return true;
24
+ if (error instanceof UnrecognizedActionError) return true
25
25
  return (
26
26
  error instanceof Error &&
27
27
  (error.name === 'UnrecognizedActionError' ||
28
28
  / was not found on the server\.?$/.test(error.message))
29
- );
29
+ )
30
30
  }
@@ -1,25 +1,25 @@
1
- import path from 'node:path';
2
- import { createRequire } from 'node:module';
3
- import type { Plugin } from 'esbuild';
4
- import { frameworkRuntimeAliasEntries, pnextAliases, type CompatAliasTarget } from '../config';
5
- import type { PNextConfig } from '../types';
6
- import { escapeRegex, isIdentifier, uniqueIdentifier } from '../utils/source';
7
- import { actionClientStubPlugin, hasClientActionModules } from './actions/client-plugin';
8
- import { rewriteRootParamsSource } from './ppr/root-params-transform';
1
+ import path from 'node:path'
2
+ import { createRequire } from 'node:module'
3
+ import type { Plugin } from 'esbuild'
4
+ import { frameworkRuntimeAliasEntries, pnextAliases, type CompatAliasTarget } from '../config'
5
+ import type { PNextConfig } from '../types'
6
+ import { escapeRegex, isIdentifier, uniqueIdentifier } from '../utils/code'
7
+ import { actionClientStubPlugin, hasClientActionModules } from './actions/client-plugin'
8
+ import { rewriteRootParamsSource } from './ppr/root-params-transform'
9
9
 
10
- export type CompatConfig = Pick<PNextConfig, 'compat'>;
10
+ export type CompatConfig = Pick<PNextConfig, 'compat'>
11
11
 
12
12
  export function reactCompatEnabled(config: CompatConfig) {
13
- return Boolean(config.compat?.next || config.compat?.react || reactCompilerOptions(config));
13
+ return Boolean(config.compat?.next || config.compat?.react || reactCompilerOptions(config))
14
14
  }
15
15
 
16
16
  export function reactCompilerOptions(config: CompatConfig) {
17
- if (!config.compat?.reactCompiler) return undefined;
18
- return { target: '18' };
17
+ if (!config.compat?.reactCompiler) return undefined
18
+ return { target: '18' }
19
19
  }
20
20
 
21
21
  export function nextCompatEnabled(config: CompatConfig) {
22
- return Boolean(config.compat?.next);
22
+ return Boolean(config.compat?.next)
23
23
  }
24
24
 
25
25
  /** The only `next/dist/*` deep imports pnext shims (see reference/compat.md "Smaller surfaces"). */
@@ -29,7 +29,7 @@ export const SHIMMED_NEXT_DIST_PATHS = [
29
29
  'next/dist/server/web/spec-extension/unstable-no-store',
30
30
  'next/dist/server/web/spec-extension/revalidate',
31
31
  'next/dist/server/app-render/work-unit-async-storage.external',
32
- ];
32
+ ]
33
33
 
34
34
  /**
35
35
  * Clear failure for compat-only imports in apps that never enabled the
@@ -41,25 +41,25 @@ export function missingCompatImportError(
41
41
  ): string | undefined {
42
42
  if (/^next(\/|$)/.test(specifier)) {
43
43
  if (!nextCompatEnabled(config)) {
44
- return `'${specifier}' requires Next compatibility. Enable compat.next in pnext.config.ts.`;
44
+ return `'${specifier}' requires Next compatibility. Enable compat.next in pnext.config.ts.`
45
45
  }
46
46
  if (specifier.startsWith('next/dist/')) {
47
- const bare = specifier.replace(/\.js$/, '');
47
+ const bare = specifier.replace(/\.js$/, '')
48
48
  if (!SHIMMED_NEXT_DIST_PATHS.includes(bare)) {
49
49
  return (
50
50
  `'${specifier}' is not a supported import: next/dist internals are not part of the ` +
51
51
  `public surface pnext shims. Only these next/dist/* paths are shimmed:\n` +
52
52
  SHIMMED_NEXT_DIST_PATHS.map(path => ` - ${path}`).join('\n') +
53
53
  `\nSee reference/compat.md ("Smaller surfaces") and report the library that needs a new shim.`
54
- );
54
+ )
55
55
  }
56
56
  }
57
- return undefined;
57
+ return undefined
58
58
  }
59
59
  if (/^react(-dom)?(\/|$)/.test(specifier) && !reactCompatEnabled(config)) {
60
- return `'${specifier}' requires React compatibility. Enable compat.react (or compat.next) in pnext.config.ts.`;
60
+ return `'${specifier}' requires React compatibility. Enable compat.react (or compat.next) in pnext.config.ts.`
61
61
  }
62
- return undefined;
62
+ return undefined
63
63
  }
64
64
 
65
65
  export function compatAliases(
@@ -71,7 +71,7 @@ export function compatAliases(
71
71
  ...pnextAliases(target),
72
72
  ...reactCompatAliases(config, target),
73
73
  ...nextCompatAliases(config, target),
74
- };
74
+ }
75
75
  }
76
76
 
77
77
  /**
@@ -80,21 +80,21 @@ export function compatAliases(
80
80
  * instrumentation compatibility.
81
81
  */
82
82
  export function reactServerLayerAliases(config: CompatConfig): Record<string, string> {
83
- if (!reactCompatEnabled(config)) return {};
84
- const reactRoot = path.resolve(import.meta.dirname, 'react');
83
+ if (!reactCompatEnabled(config)) return {}
84
+ const reactRoot = path.resolve(import.meta.dirname, 'react')
85
85
  return {
86
86
  react: path.join(reactRoot, 'react-server.ts'),
87
87
  'react-dom': path.join(reactRoot, 'dom-react-server.ts'),
88
- };
88
+ }
89
89
  }
90
90
 
91
91
  export function reactCompatAliases(
92
92
  config: CompatConfig,
93
93
  target: CompatAliasTarget,
94
94
  ): Record<string, string> {
95
- if (!reactCompatEnabled(config)) return {};
96
- const reactRoot = path.resolve(import.meta.dirname, 'react');
97
- const runtime = frameworkRuntimeAliasEntries();
95
+ if (!reactCompatEnabled(config)) return {}
96
+ const reactRoot = path.resolve(import.meta.dirname, 'react')
97
+ const runtime = frameworkRuntimeAliasEntries()
98
98
  return {
99
99
  react: path.join(reactRoot, target === 'client' ? 'client.ts' : 'server.ts'),
100
100
  // dom.ts wraps preact/compat with the form-action hooks react-dom ships
@@ -115,19 +115,19 @@ export function reactCompatAliases(
115
115
  // package's own `require('react').useMemo` throws under preact SSR.
116
116
  'react/compiler-runtime': path.join(reactRoot, 'compiler-runtime.ts'),
117
117
  'react-compiler-runtime': path.join(reactRoot, 'compiler-runtime.ts'),
118
- };
118
+ }
119
119
  }
120
120
 
121
121
  export function nextCompatAliases(
122
122
  config: CompatConfig,
123
123
  target: CompatAliasTarget,
124
124
  ): Record<string, string> {
125
- if (!nextCompatEnabled(config)) return {};
126
- return nextCompatAliasEntries(target);
125
+ if (!nextCompatEnabled(config)) return {}
126
+ return nextCompatAliasEntries(target)
127
127
  }
128
128
 
129
129
  export function nextCompatAliasEntries(target: CompatAliasTarget): Record<string, string> {
130
- const nextRoot = path.resolve(import.meta.dirname, 'next');
130
+ const nextRoot = path.resolve(import.meta.dirname, 'next')
131
131
  return withJsExtensionAliases({
132
132
  next: path.join(nextRoot, 'index.ts'),
133
133
  // Client variant avoids node:async_hooks (render cache-meta collector) in
@@ -225,15 +225,15 @@ export function nextCompatAliasEntries(target: CompatAliasTarget): Record<string
225
225
  ),
226
226
  }
227
227
  : {}),
228
- });
228
+ })
229
229
  }
230
230
 
231
231
  function withJsExtensionAliases(aliases: Record<string, string>) {
232
- const entries = { ...aliases };
232
+ const entries = { ...aliases }
233
233
  for (const [specifier, target] of Object.entries(aliases)) {
234
- if (specifier !== 'next') entries[`${specifier}.js`] = target;
234
+ if (specifier !== 'next') entries[`${specifier}.js`] = target
235
235
  }
236
- return entries;
236
+ return entries
237
237
  }
238
238
 
239
239
  /**
@@ -242,8 +242,8 @@ function withJsExtensionAliases(aliases: Record<string, string>) {
242
242
  * happens to be installed.
243
243
  */
244
244
  export function compatAliasPlugin(config: CompatConfig): Plugin {
245
- const aliases = compatAliases(config, 'client');
246
- const specifiers = Object.keys(aliases);
245
+ const aliases = compatAliases(config, 'client')
246
+ const specifiers = Object.keys(aliases)
247
247
  return {
248
248
  name: 'pnext-compat-alias',
249
249
  setup(build) {
@@ -252,46 +252,46 @@ export function compatAliasPlugin(config: CompatConfig): Plugin {
252
252
  // stub participates in every client build without editing the client
253
253
  // build pipeline. No-op when no action modules were discovered.
254
254
  if (nextCompatEnabled(config) && hasClientActionModules()) {
255
- void actionClientStubPlugin().setup(build);
255
+ void actionClientStubPlugin().setup(build)
256
256
  }
257
257
 
258
258
  build.onResolve({ filter: /^(?:react(?:-dom)?|next)(?:\/|$)/ }, args => {
259
- if (aliases[args.path]) return undefined;
260
- const message = missingCompatImportError(config, args.path);
261
- return message ? { errors: [{ text: message }] } : undefined;
262
- });
263
- if (specifiers.length === 0) return;
259
+ if (aliases[args.path]) return undefined
260
+ const message = missingCompatImportError(config, args.path)
261
+ return message ? { errors: [{ text: message }] } : undefined
262
+ })
263
+ if (specifiers.length === 0) return
264
264
  build.onResolve(
265
265
  { filter: new RegExp(`^(${specifiers.map(escapeRegex).join('|')})$`) },
266
266
  async args => {
267
- const target = aliases[args.path];
268
- if (!target) return undefined;
269
- if (path.isAbsolute(target)) return { path: target };
267
+ const target = aliases[args.path]
268
+ if (!target) return undefined
269
+ if (path.isAbsolute(target)) return { path: target }
270
270
  return build.resolve(target, {
271
271
  kind: args.kind,
272
272
  importer: args.importer,
273
273
  namespace: args.namespace,
274
274
  resolveDir: args.resolveDir,
275
- });
275
+ })
276
276
  },
277
- );
277
+ )
278
278
  },
279
- };
279
+ }
280
280
  }
281
281
 
282
282
  // Compat apps render React's Suspense (the preact/compat class, via the react
283
283
  // aliases or a direct import). That identity is loaded lazily and only when
284
284
  // compat is enabled, so core apps never pull preact/compat into the server
285
285
  // process — core streaming uses PNext's own Suspense marker instead.
286
- let compatSuspense: unknown;
286
+ let compatSuspense: unknown
287
287
 
288
288
  export async function ensureCompatSuspense(config: CompatConfig) {
289
- if (compatSuspense !== undefined || !reactCompatEnabled(config)) return;
290
- compatSuspense = ((await import('preact/compat')) as { Suspense: unknown }).Suspense;
289
+ if (compatSuspense !== undefined || !reactCompatEnabled(config)) return
290
+ compatSuspense = ((await import('preact/compat')) as { Suspense: unknown }).Suspense
291
291
  }
292
292
 
293
293
  export function compatSuspenseType() {
294
- return compatSuspense;
294
+ return compatSuspense
295
295
  }
296
296
 
297
297
  /**
@@ -305,7 +305,7 @@ export function compatSuspenseType() {
305
305
  const fontRuntimePaths: Record<CompatAliasTarget, string> = {
306
306
  server: path.join(import.meta.dirname, 'next', 'font', 'runtime.ts'),
307
307
  client: path.join(import.meta.dirname, 'next', 'font', 'runtime-client.ts'),
308
- };
308
+ }
309
309
 
310
310
  /**
311
311
  * Next-compat source rewrites for `next/font/google` and `next/font/local` imports. Only invoked when
@@ -321,15 +321,15 @@ export function rewriteNextFontSource(
321
321
  target: CompatAliasTarget = 'server',
322
322
  root?: string,
323
323
  ) {
324
- if (!source.includes('next/font') && !source.includes('next/root-params')) return source;
324
+ if (!source.includes('next/font') && !source.includes('next/root-params')) return source
325
325
  // The single next/root-params rewrite in the tree; every other call site
326
326
  // reaches it through this pass rather than re-running its own copy.
327
- source = rewriteRootParamsSource(source);
328
- const runtimePath = fontRuntimePaths[target];
329
- let next = rewriteNextGoogleFontImports(source, runtimePath);
330
- const localFontNames = nextLocalFontImportNames(next);
331
- if (localFontNames.size === 0) return next;
332
- const callerFile = localFontCallerFile(file, root);
327
+ source = rewriteRootParamsSource(source)
328
+ const runtimePath = fontRuntimePaths[target]
329
+ let next = rewriteNextGoogleFontImports(source, runtimePath)
330
+ const localFontNames = nextLocalFontImportNames(next)
331
+ if (localFontNames.size === 0) return next
332
+ const callerFile = localFontCallerFile(file, root)
333
333
  // Rewrite each `NAME(...)` call to `NAME.withFile(<file>)(...)` so the runtime
334
334
  // gets the caller path (for `src` resolution + a stable per-caller hash). The
335
335
  // client runtime only uses `callerFile` for the hash (which must match the
@@ -338,16 +338,19 @@ export function rewriteNextFontSource(
338
338
  next = next.replace(
339
339
  new RegExp(`(?<![.$\\w])${escapeRegex(name)}\\s*\\(`, 'g'),
340
340
  `${name}.withFile(${JSON.stringify(callerFile)})(`,
341
- );
341
+ )
342
342
  }
343
343
  // Next names local-font families after the binding (`const myFont = …`),
344
344
  // including when the loader lives in a package under node_modules.
345
345
  for (const name of localFontNames) {
346
346
  next = next.replace(
347
- new RegExp(`((?:export\\s+)?(?:const|let|var)\\s+)([A-Za-z_$][\\w$]*)(\\s*=\\s*)${escapeRegex(name)}\\.withFile\\(([^)]*)\\)\\(`, 'g'),
347
+ new RegExp(
348
+ `((?:export\\s+)?(?:const|let|var)\\s+)([A-Za-z_$][\\w$]*)(\\s*=\\s*)${escapeRegex(name)}\\.withFile\\(([^)]*)\\)\\(`,
349
+ 'g',
350
+ ),
348
351
  (_statement, declaration: string, binding: string, equals: string, caller: string) =>
349
352
  `${declaration}${binding}${equals}${name}.withFile(${caller}, ${JSON.stringify(binding)})(`,
350
- );
353
+ )
351
354
  }
352
355
  // Replace the bare `import NAME from 'next/font/local'` with an import bound
353
356
  // directly to the runtime's absolute path. This avoids relying on server-side
@@ -356,65 +359,65 @@ export function rewriteNextFontSource(
356
359
  next = next.replace(
357
360
  /^[ \t]*import\s+([A-Za-z_$][\w$]*)\s+from\s+(['"])([^'"]+)\2\s*;?[ \t]*$/gm,
358
361
  (statement, name: string, _quote: string, specifier: string) => {
359
- if (!isNextLocalFontSpecifier(specifier)) return statement;
360
- return `import { localFont as ${name} } from ${JSON.stringify(runtimePath)};`;
362
+ if (!isNextLocalFontSpecifier(specifier)) return statement
363
+ return `import { localFont as ${name} } from ${JSON.stringify(runtimePath)};`
361
364
  },
362
- );
363
- return next;
365
+ )
366
+ return next
364
367
  }
365
368
 
366
369
  function rewriteNextGoogleFontImports(source: string, runtimePath: string) {
367
- const statements: string[] = [];
368
- const helperName = uniqueIdentifier(source, '__pnextGoogleFont');
369
- const namespaceHelperName = uniqueIdentifier(source, '__pnextGoogleFonts', helperName);
370
+ const statements: string[] = []
371
+ const helperName = uniqueIdentifier(source, '__pnextGoogleFont')
372
+ const namespaceHelperName = uniqueIdentifier(source, '__pnextGoogleFonts', helperName)
370
373
  const rewritten = source.replace(
371
374
  /^[ \t]*import\s+(?!type\b)((?:[^\n;]|\n(?![ \t]*(?:import|export)\b))*?)\s+from\s+['"]next\/font\/google['"]\s*;?[ \t]*(?:\r?\n)?/gm,
372
375
  (_statement: string, clause: string) => {
373
- const bindings = nextGoogleFontBindings(clause);
374
- if (bindings.length === 0) return '';
376
+ const bindings = nextGoogleFontBindings(clause)
377
+ if (bindings.length === 0) return ''
375
378
  statements.push(
376
379
  ...bindings.map(binding =>
377
380
  googleFontBindingSource(binding, helperName, namespaceHelperName),
378
381
  ),
379
- );
380
- return '';
382
+ )
383
+ return ''
381
384
  },
382
- );
385
+ )
383
386
 
384
- if (statements.length === 0) return source;
387
+ if (statements.length === 0) return source
385
388
  return [
386
389
  `import { googleFont as ${helperName} } from ${JSON.stringify(runtimePath)};`,
387
390
  `const ${namespaceHelperName} = new Proxy({}, { get: (_target, key) => typeof key === 'string' ? ${helperName}(key.replace(/_/g, ' ')) : undefined });`,
388
391
  ...statements,
389
392
  rewritten,
390
- ].join('\n');
393
+ ].join('\n')
391
394
  }
392
395
 
393
396
  interface GoogleFontBinding {
394
- imported: string;
395
- local: string;
396
- namespace?: boolean;
397
+ imported: string
398
+ local: string
399
+ namespace?: boolean
397
400
  }
398
401
 
399
402
  function nextGoogleFontBindings(clause: string): GoogleFontBinding[] {
400
- const trimmed = clause.trim();
401
- const namespace = /^\*\s+as\s+([A-Za-z_$][\w$]*)$/.exec(trimmed)?.[1];
402
- if (namespace) return [{ imported: namespace, local: namespace, namespace: true }];
403
+ const trimmed = clause.trim()
404
+ const namespace = /^\*\s+as\s+([A-Za-z_$][\w$]*)$/.exec(trimmed)?.[1]
405
+ if (namespace) return [{ imported: namespace, local: namespace, namespace: true }]
403
406
 
404
- const named = /\{([\s\S]*)\}/.exec(trimmed)?.[1];
405
- if (!named) return [];
407
+ const named = /\{([\s\S]*)\}/.exec(trimmed)?.[1]
408
+ if (!named) return []
406
409
  return named
407
410
  .split(',')
408
411
  .map(part => part.trim())
409
412
  .filter(Boolean)
410
413
  .flatMap(part => {
411
- if (part.startsWith('type ')) return [];
412
- const [importedRaw, localRaw] = part.split(/\s+as\s+/);
413
- const imported = importedRaw?.trim();
414
- const local = (localRaw ?? importedRaw)?.trim();
415
- if (!imported || !local || !isIdentifier(imported) || !isIdentifier(local)) return [];
416
- return [{ imported, local }];
417
- });
414
+ if (part.startsWith('type ')) return []
415
+ const [importedRaw, localRaw] = part.split(/\s+as\s+/)
416
+ const imported = importedRaw?.trim()
417
+ const local = (localRaw ?? importedRaw)?.trim()
418
+ if (!imported || !local || !isIdentifier(imported) || !isIdentifier(local)) return []
419
+ return [{ imported, local }]
420
+ })
418
421
  }
419
422
 
420
423
  function googleFontBindingSource(
@@ -422,37 +425,37 @@ function googleFontBindingSource(
422
425
  helperName: string,
423
426
  namespaceHelperName: string,
424
427
  ) {
425
- if (binding.namespace) return `const ${binding.local} = ${namespaceHelperName};`;
426
- return `const ${binding.local} = ${helperName}(${JSON.stringify(googleFontFamily(binding.imported))});`;
428
+ if (binding.namespace) return `const ${binding.local} = ${namespaceHelperName};`
429
+ return `const ${binding.local} = ${helperName}(${JSON.stringify(googleFontFamily(binding.imported))});`
427
430
  }
428
431
 
429
432
  function googleFontFamily(exportName: string) {
430
- return exportName.replace(/_/g, ' ');
433
+ return exportName.replace(/_/g, ' ')
431
434
  }
432
435
 
433
436
  function nextLocalFontImportNames(source: string) {
434
- const names = new Set<string>();
435
- const pattern = /\bimport\s+([A-Za-z_$][\w$]*)\s+from\s+(['"])([^'"]+)\2/g;
436
- let match: RegExpExecArray | null;
437
+ const names = new Set<string>()
438
+ const pattern = /\bimport\s+([A-Za-z_$][\w$]*)\s+from\s+(['"])([^'"]+)\2/g
439
+ let match: RegExpExecArray | null
437
440
  while ((match = pattern.exec(source))) {
438
- if (match[1] && match[3] && isNextLocalFontSpecifier(match[3])) names.add(match[1]);
441
+ if (match[1] && match[3] && isNextLocalFontSpecifier(match[3])) names.add(match[1])
439
442
  }
440
- return names;
443
+ return names
441
444
  }
442
445
 
443
446
  function isNextLocalFontSpecifier(specifier: string) {
444
- if (specifier === 'next/font/local' || specifier === 'next/font/local.js') return true;
445
- const normalized = specifier.replace(/^file:\/\//, '').replace(/\\/g, '/');
446
- return /\/compat\/next\/font\/local\.[jt]s$/.test(normalized);
447
+ if (specifier === 'next/font/local' || specifier === 'next/font/local.js') return true
448
+ const normalized = specifier.replace(/^file:\/\//, '').replace(/\\/g, '/')
449
+ return /\/compat\/next\/font\/local\.[jt]s$/.test(normalized)
447
450
  }
448
451
 
449
452
  function localFontCallerFile(file: string, root: string | undefined) {
450
- if (path.isAbsolute(file)) return file;
451
- if (file.startsWith('.')) return path.resolve(root ?? process.cwd(), file);
452
- if (!root) return file;
453
+ if (path.isAbsolute(file)) return file
454
+ if (file.startsWith('.')) return path.resolve(root ?? process.cwd(), file)
455
+ if (!root) return file
453
456
  try {
454
- return createRequire(path.join(root, 'pnext-resolve.cjs')).resolve(file);
457
+ return createRequire(path.join(root, 'pnext-resolve.cjs')).resolve(file)
455
458
  } catch {
456
- return file;
459
+ return file
457
460
  }
458
461
  }
@@ -1,11 +1,11 @@
1
- import { uniqueIdentifier } from '../../utils/source';
1
+ import { uniqueIdentifier } from '../../utils/code'
2
2
 
3
3
  // A quoted `'bun'`/`'bun:x'` specifier anywhere in the source. Deliberately not
4
4
  // the module record's edges: a route handler looping
5
5
  // `require(name)` over a table of module names has NO static edge, and Next
6
6
  // still externalizes those. Matching the quoted specifier keeps that reach while
7
7
  // staying far tighter than the old bare-word `bun` regex.
8
- const QUOTED_BUN_SPECIFIER = /(['"])bun(?::[^'"]+)?\1/;
8
+ const QUOTED_BUN_SPECIFIER = /(['"])bun(?::[^'"]+)?\1/
9
9
 
10
10
  /**
11
11
  * Guard `bun`/`bun:*` builtins behind a runtime throw so a module importing one can still be compiled
@@ -13,27 +13,27 @@ const QUOTED_BUN_SPECIFIER = /(['"])bun(?::[^'"]+)?\1/;
13
13
  * require/import calls too, which no record can name.
14
14
  */
15
15
  export function rewriteBunBuiltinExternals(source: string, _file = 'module.tsx'): string {
16
- if (!source.includes('bun')) return source;
17
- if (!QUOTED_BUN_SPECIFIER.test(source)) return source;
16
+ if (!source.includes('bun')) return source
17
+ if (!QUOTED_BUN_SPECIFIER.test(source)) return source
18
18
 
19
- const requireName = uniqueIdentifier(source, '__pnext_require_external');
20
- const importName = uniqueIdentifier(source, '__pnext_import_external', requireName);
21
- const literalRequires: string[] = [];
19
+ const requireName = uniqueIdentifier(source, '__pnext_require_external')
20
+ const importName = uniqueIdentifier(source, '__pnext_import_external', requireName)
21
+ const literalRequires: string[] = []
22
22
  let next = source.replace(
23
23
  /\brequire\s*\(\s*(['"])(bun(?::[^'"]+)?)\1\s*\)/g,
24
24
  (_match, _quote: string, specifier: string) => {
25
- literalRequires.push(specifier);
26
- return `__pnext_bun_external_${literalRequires.length - 1}__`;
25
+ literalRequires.push(specifier)
26
+ return `__pnext_bun_external_${literalRequires.length - 1}__`
27
27
  },
28
- );
29
- next = next.replace(/\brequire\s*\(/g, `${requireName}(`);
28
+ )
29
+ next = next.replace(/\brequire\s*\(/g, `${requireName}(`)
30
30
  next = next.replace(/__pnext_bun_external_(\d+)__/g, (_match, index: string) => {
31
- const specifier = literalRequires[Number(index)];
32
- return `${requireName}(${JSON.stringify(specifier)}, () => require(${JSON.stringify(specifier)}))`;
33
- });
34
- next = next.replace(/\bimport\s*\(/g, `${importName}(`);
31
+ const specifier = literalRequires[Number(index)]
32
+ return `${requireName}(${JSON.stringify(specifier)}, () => require(${JSON.stringify(specifier)}))`
33
+ })
34
+ next = next.replace(/\bimport\s*\(/g, `${importName}(`)
35
35
 
36
- const directive = /^(?:\s*['"][^'"]+['"];?\s*)*/.exec(next)?.[0] ?? '';
36
+ const directive = /^(?:\s*['"][^'"]+['"];?\s*)*/.exec(next)?.[0] ?? ''
37
37
  const helpers = [
38
38
  `const ${requireName} = (specifier, load) => {`,
39
39
  ` if (specifier === 'bun' || specifier.startsWith('bun:')) {`,
@@ -48,6 +48,6 @@ export function rewriteBunBuiltinExternals(source: string, _file = 'module.tsx')
48
48
  ' return import(specifier);',
49
49
  '};',
50
50
  '',
51
- ].join('\n');
52
- return `${directive}${helpers}${next.slice(directive.length)}`;
51
+ ].join('\n')
52
+ return `${directive}${helpers}${next.slice(directive.length)}`
53
53
  }