@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
@@ -10,26 +10,26 @@
10
10
  // Wired as a server source transform (covering both the Bun runtime's per-file SSR loading and the
11
11
  // esbuild server passes) and as a client source transform.
12
12
 
13
- import { existsSync, readdirSync, statSync } from 'node:fs';
14
- import path from 'node:path';
13
+ import { existsSync, readdirSync, statSync } from 'node:fs'
14
+ import path from 'node:path'
15
15
 
16
16
  /** Extensions whose files also get an extension-less request key (webpack resolves both). */
17
- const RESOLVABLE_EXTENSIONS = ['.js', '.jsx', '.ts', '.tsx', '.mjs', '.cjs', '.json'];
17
+ const RESOLVABLE_EXTENSIONS = ['.js', '.jsx', '.ts', '.tsx', '.mjs', '.cjs', '.json']
18
18
 
19
19
  // `require.context(` — also matches the TS-cast form the Next fixtures use,
20
20
  // `(require as any).context(`, since the transform runs on pre-compiled source.
21
- const CONTEXT_CALL = /(?:\(\s*require\s+as\s+[^)]*\)|\brequire)\s*\.\s*context\s*\(/g;
21
+ const CONTEXT_CALL = /(?:\(\s*require\s+as\s+[^)]*\)|\brequire)\s*\.\s*context\s*\(/g
22
22
 
23
23
  /** Cheap gate: does this source contain any candidate `require.context(` call? */
24
24
  export function sourceHasRequireContext(source: string): boolean {
25
- return source.includes('.context(') && source.includes('require');
25
+ return source.includes('.context(') && source.includes('require')
26
26
  }
27
27
 
28
28
  interface ContextEntry {
29
29
  /** Request key, e.g. `./parent/file1.js`. */
30
- key: string;
30
+ key: string
31
31
  /** Absolute path of the file the key resolves to. */
32
- file: string;
32
+ file: string
33
33
  }
34
34
 
35
35
  /**
@@ -37,98 +37,101 @@ interface ContextEntry {
37
37
  * commas, ignoring commas nested in parens/brackets/braces, strings, regex
38
38
  * literals and comments. Returns `undefined` when the parens never balance.
39
39
  */
40
- function splitCallArguments(source: string, openIndex: number): { args: string[]; end: number } | undefined {
41
- const args: string[] = [];
42
- let depth = 0;
43
- let start = openIndex + 1;
44
- let index = openIndex;
45
- let quote: string | undefined;
46
- let inRegex = false;
40
+ function splitCallArguments(
41
+ source: string,
42
+ openIndex: number,
43
+ ): { args: string[]; end: number } | undefined {
44
+ const args: string[] = []
45
+ let depth = 0
46
+ let start = openIndex + 1
47
+ let index = openIndex
48
+ let quote: string | undefined
49
+ let inRegex = false
47
50
  while (index < source.length) {
48
- const char = source[index]!;
49
- const prev = source[index - 1];
51
+ const char = source[index]!
52
+ const prev = source[index - 1]
50
53
  if (quote) {
51
- if (char === quote && prev !== '\\') quote = undefined;
54
+ if (char === quote && prev !== '\\') quote = undefined
52
55
  } else if (inRegex) {
53
- if (char === '/' && prev !== '\\') inRegex = false;
56
+ if (char === '/' && prev !== '\\') inRegex = false
54
57
  } else if (char === '"' || char === "'" || char === '`') {
55
- quote = char;
58
+ quote = char
56
59
  } else if (char === '/' && source[index + 1] === '/') {
57
- index = source.indexOf('\n', index);
58
- if (index === -1) return undefined;
60
+ index = source.indexOf('\n', index)
61
+ if (index === -1) return undefined
59
62
  } else if (char === '/' && source[index + 1] === '*') {
60
- const close = source.indexOf('*/', index + 2);
61
- if (close === -1) return undefined;
62
- index = close + 1;
63
+ const close = source.indexOf('*/', index + 2)
64
+ if (close === -1) return undefined
65
+ index = close + 1
63
66
  } else if (char === '/' && depth > 0) {
64
67
  // Inside the argument list a `/` can only start a regex literal (the
65
68
  // division case would need a preceding operand, which no argument
66
69
  // position of `require.context` produces).
67
- inRegex = true;
70
+ inRegex = true
68
71
  } else if (char === '(' || char === '[' || char === '{') {
69
- depth++;
72
+ depth++
70
73
  } else if (char === ')' || char === ']' || char === '}') {
71
- depth--;
74
+ depth--
72
75
  if (depth === 0) {
73
- args.push(source.slice(start, index));
74
- const trimmed = args.map(arg => arg.trim());
75
- return { args: trimmed.length === 1 && trimmed[0] === '' ? [] : trimmed, end: index };
76
+ args.push(source.slice(start, index))
77
+ const trimmed = args.map(arg => arg.trim())
78
+ return { args: trimmed.length === 1 && trimmed[0] === '' ? [] : trimmed, end: index }
76
79
  }
77
80
  } else if (char === ',' && depth === 1) {
78
- args.push(source.slice(start, index));
79
- start = index + 1;
81
+ args.push(source.slice(start, index))
82
+ start = index + 1
80
83
  }
81
- index++;
84
+ index++
82
85
  }
83
- return undefined;
86
+ return undefined
84
87
  }
85
88
 
86
89
  /** Parse a `/pattern/flags` literal; returns `undefined` for anything else. */
87
90
  function parseRegExpLiteral(text: string): RegExp | undefined {
88
- const match = /^\/((?:\\.|\[(?:\\.|[^\]])*\]|[^/])+)\/([a-z]*)$/.exec(text);
89
- if (!match) return undefined;
91
+ const match = /^\/((?:\\.|\[(?:\\.|[^\]])*\]|[^/])+)\/([a-z]*)$/.exec(text)
92
+ if (!match) return undefined
90
93
  try {
91
- return new RegExp(match[1]!, match[2]!.replace(/[gy]/g, ''));
94
+ return new RegExp(match[1]!, match[2]!.replace(/[gy]/g, ''))
92
95
  } catch {
93
- return undefined;
96
+ return undefined
94
97
  }
95
98
  }
96
99
 
97
100
  /** Parse a plain string literal argument; returns `undefined` for anything else. */
98
101
  function parseStringLiteral(text: string): string | undefined {
99
- const match = /^(['"`])((?:\\.|[^\\])*)\1$/.exec(text);
100
- if (!match) return undefined;
102
+ const match = /^(['"`])((?:\\.|[^\\])*)\1$/.exec(text)
103
+ if (!match) return undefined
101
104
  try {
102
- return JSON.parse(`"${match[2]!.replace(/"/g, '\\"').replace(/\\'/g, "'")}"`) as string;
105
+ return JSON.parse(`"${match[2]!.replace(/"/g, '\\"').replace(/\\'/g, "'")}"`) as string
103
106
  } catch {
104
- return match[2];
107
+ return match[2]
105
108
  }
106
109
  }
107
110
 
108
111
  function walkFiles(dir: string, recursive: boolean, prefix = ''): string[] {
109
- let names: string[];
112
+ let names: string[]
110
113
  try {
111
- names = readdirSync(dir).sort();
114
+ names = readdirSync(dir).sort()
112
115
  } catch {
113
- return [];
116
+ return []
114
117
  }
115
- const files: string[] = [];
118
+ const files: string[] = []
116
119
  for (const name of names) {
117
- if (name.startsWith('.') || name === 'node_modules') continue;
118
- const full = path.join(dir, name);
119
- let isDirectory = false;
120
+ if (name.startsWith('.') || name === 'node_modules') continue
121
+ const full = path.join(dir, name)
122
+ let isDirectory = false
120
123
  try {
121
- isDirectory = statSync(full).isDirectory();
124
+ isDirectory = statSync(full).isDirectory()
122
125
  } catch {
123
- continue;
126
+ continue
124
127
  }
125
128
  if (isDirectory) {
126
- if (recursive) files.push(...walkFiles(full, recursive, `${prefix}${name}/`));
129
+ if (recursive) files.push(...walkFiles(full, recursive, `${prefix}${name}/`))
127
130
  } else {
128
- files.push(`${prefix}${name}`);
131
+ files.push(`${prefix}${name}`)
129
132
  }
130
133
  }
131
- return files;
134
+ return files
132
135
  }
133
136
 
134
137
  /**
@@ -138,23 +141,27 @@ function walkFiles(dir: string, recursive: boolean, prefix = ''): string[] {
138
141
  * accepts everything AND the extension-less form of each resolvable file also
139
142
  * becomes a key, since `require('./parent/file1')` resolves there too.
140
143
  */
141
- export function requireContextEntries(dir: string, recursive: boolean, regExp?: RegExp): ContextEntry[] {
142
- const entries: ContextEntry[] = [];
143
- const seen = new Set<string>();
144
+ export function requireContextEntries(
145
+ dir: string,
146
+ recursive: boolean,
147
+ regExp?: RegExp,
148
+ ): ContextEntry[] {
149
+ const entries: ContextEntry[] = []
150
+ const seen = new Set<string>()
144
151
  for (const relative of walkFiles(dir, recursive)) {
145
- const file = path.join(dir, ...relative.split('/'));
146
- const keys = [`./${relative}`];
152
+ const file = path.join(dir, ...relative.split('/'))
153
+ const keys = [`./${relative}`]
147
154
  if (!regExp && RESOLVABLE_EXTENSIONS.includes(path.extname(relative))) {
148
- keys.push(`./${relative.slice(0, -path.extname(relative).length)}`);
155
+ keys.push(`./${relative.slice(0, -path.extname(relative).length)}`)
149
156
  }
150
157
  for (const key of keys) {
151
- if (regExp && !regExp.test(key)) continue;
152
- if (seen.has(key)) continue;
153
- seen.add(key);
154
- entries.push({ key, file });
158
+ if (regExp && !regExp.test(key)) continue
159
+ if (seen.has(key)) continue
160
+ seen.add(key)
161
+ entries.push({ key, file })
155
162
  }
156
163
  }
157
- return entries.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
164
+ return entries.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0))
158
165
  }
159
166
 
160
167
  // Runtime helper injected alongside the expanded contexts. `ctx(key)` mirrors
@@ -186,7 +193,7 @@ const CONTEXT_RUNTIME = `function __pnext_require_context(entries, id) {
186
193
  };
187
194
  context.id = id;
188
195
  return context;
189
- }`;
196
+ }`
190
197
 
191
198
  /**
192
199
  * Resolve the context directory argument against the importing file. Server
@@ -200,22 +207,22 @@ function resolveContextDir(
200
207
  file: string,
201
208
  paths: { outPath?: string; workspaceRoot?: string } | undefined,
202
209
  ): string {
203
- const direct = path.resolve(path.dirname(file), specifier);
204
- if (existsSync(direct)) return direct;
210
+ const direct = path.resolve(path.dirname(file), specifier)
211
+ if (existsSync(direct)) return direct
205
212
  if (paths?.outPath && paths.workspaceRoot) {
206
- const cacheRoot = path.join(paths.outPath, 'cache', 'server');
207
- const relative = path.relative(cacheRoot, file);
213
+ const cacheRoot = path.join(paths.outPath, 'cache', 'server')
214
+ const relative = path.relative(cacheRoot, file)
208
215
  if (relative && !relative.startsWith('..') && !path.isAbsolute(relative)) {
209
- const segments = relative.split(path.sep);
210
- segments.shift(); // drop <profileDir>
216
+ const segments = relative.split(path.sep)
217
+ segments.shift() // drop <profileDir>
211
218
  const original = path.resolve(
212
219
  path.dirname(path.join(paths.workspaceRoot, ...segments)),
213
220
  specifier,
214
- );
215
- if (existsSync(original)) return original;
221
+ )
222
+ if (existsSync(original)) return original
216
223
  }
217
224
  }
218
- return direct;
225
+ return direct
219
226
  }
220
227
 
221
228
  /**
@@ -229,53 +236,52 @@ export function rewriteRequireContextSource(
229
236
  file: string,
230
237
  paths?: { outPath?: string; workspaceRoot?: string },
231
238
  ): string {
232
- if (!sourceHasRequireContext(source)) return source;
233
- const imports: string[] = [];
234
- const contexts: string[] = [];
235
- let output = '';
236
- let cursor = 0;
237
- CONTEXT_CALL.lastIndex = 0;
238
- let match: RegExpExecArray | null;
239
+ if (!sourceHasRequireContext(source)) return source
240
+ const imports: string[] = []
241
+ const contexts: string[] = []
242
+ let output = ''
243
+ let cursor = 0
244
+ CONTEXT_CALL.lastIndex = 0
245
+ let match: RegExpExecArray | null
239
246
  while ((match = CONTEXT_CALL.exec(source))) {
240
- const openIndex = match.index + match[0].length - 1;
241
- const parsed = splitCallArguments(source, openIndex);
242
- if (!parsed) continue;
243
- const [dirArg, recursiveArg, regExpArg] = parsed.args;
244
- const specifier = dirArg === undefined ? undefined : parseStringLiteral(dirArg);
245
- if (specifier === undefined) continue;
246
- const recursive = recursiveArg === undefined ? true : recursiveArg.trim() !== 'false';
247
- const regExp = regExpArg === undefined ? undefined : parseRegExpLiteral(regExpArg.trim());
248
- if (regExpArg !== undefined && !regExp) continue;
247
+ const openIndex = match.index + match[0].length - 1
248
+ const parsed = splitCallArguments(source, openIndex)
249
+ if (!parsed) continue
250
+ const [dirArg, recursiveArg, regExpArg] = parsed.args
251
+ const specifier = dirArg === undefined ? undefined : parseStringLiteral(dirArg)
252
+ if (specifier === undefined) continue
253
+ const recursive = recursiveArg === undefined ? true : recursiveArg.trim() !== 'false'
254
+ const regExp = regExpArg === undefined ? undefined : parseRegExpLiteral(regExpArg.trim())
255
+ if (regExpArg !== undefined && !regExp) continue
249
256
 
250
- const dir = resolveContextDir(specifier, file, paths);
251
- const entries = requireContextEntries(dir, recursive, regExp);
252
- const id = contexts.length;
253
- const binding = `__pnext_context_${id}`;
257
+ const dir = resolveContextDir(specifier, file, paths)
258
+ const entries = requireContextEntries(dir, recursive, regExp)
259
+ const id = contexts.length
260
+ const binding = `__pnext_context_${id}`
254
261
  const rows = entries.map((entry, index) => {
255
- const namespace = `${binding}_${index}`;
256
- imports.push(`import * as ${namespace} from ${JSON.stringify(entry.file)};`);
257
- return `[${JSON.stringify(entry.key)}, ${JSON.stringify(entry.file)}, ${namespace}]`;
258
- });
259
- const contextId = `${specifier} ${recursive ? 'recursive ' : ''}${regExp ? regExp.source : '^\\.\\/.*$'}`;
262
+ const namespace = `${binding}_${index}`
263
+ imports.push(`import * as ${namespace} from ${JSON.stringify(entry.file)};`)
264
+ return `[${JSON.stringify(entry.key)}, ${JSON.stringify(entry.file)}, ${namespace}]`
265
+ })
266
+ const contextId = `${specifier} ${recursive ? 'recursive ' : ''}${regExp ? regExp.source : '^\\.\\/.*$'}`
260
267
  contexts.push(
261
268
  `const ${binding} = __pnext_require_context([${rows.join(', ')}], ${JSON.stringify(contextId)});`,
262
- );
263
- output += source.slice(cursor, match.index) + binding;
264
- cursor = parsed.end + 1;
265
- CONTEXT_CALL.lastIndex = cursor;
269
+ )
270
+ output += source.slice(cursor, match.index) + binding
271
+ cursor = parsed.end + 1
272
+ CONTEXT_CALL.lastIndex = cursor
266
273
  }
267
- if (contexts.length === 0) return source;
268
- output += source.slice(cursor);
269
- const injection = [...imports, CONTEXT_RUNTIME, ...contexts].join('\n');
270
- return injectAfterDirectives(output, injection);
274
+ if (contexts.length === 0) return source
275
+ output += source.slice(cursor)
276
+ const injection = [...imports, CONTEXT_RUNTIME, ...contexts].join('\n')
277
+ return injectAfterDirectives(output, injection)
271
278
  }
272
279
 
273
280
  // Injected declarations go after any leading directive prologue ('use client' /
274
281
  // 'use server') and optional shebang so the directive stays the first statement.
275
282
  function injectAfterDirectives(source: string, injection: string): string {
276
- const prologue = /^(\uFEFF?(?:#![^\n]*\n)?(?:[ \t]*(['"])use [\w-]+\2[ \t]*;?[ \t]*(?:\r?\n|$))*)/.exec(
277
- source,
278
- );
279
- const index = prologue ? prologue[0].length : 0;
280
- return `${source.slice(0, index)}${injection}\n${source.slice(index)}`;
283
+ const prologue =
284
+ /^(\uFEFF?(?:#![^\n]*\n)?(?:[ \t]*(['"])use [\w-]+\2[ \t]*;?[ \t]*(?:\r?\n|$))*)/.exec(source)
285
+ const index = prologue ? prologue[0].length : 0
286
+ return `${source.slice(0, index)}${injection}\n${source.slice(index)}`
281
287
  }
@@ -9,17 +9,17 @@
9
9
  // downstream plugin sees the same path it would for an explicit extension. Only registered when the app
10
10
  // configures resolveExtensions.
11
11
 
12
- import { existsSync, statSync } from 'node:fs';
13
- import path from 'node:path';
14
- import type { Plugin } from 'esbuild';
12
+ import { existsSync, statSync } from 'node:fs'
13
+ import path from 'node:path'
14
+ import type { Plugin } from 'esbuild'
15
15
 
16
- const resolvedMarker = Symbol('pnext-resolve-extensions');
16
+ const resolvedMarker = Symbol('pnext-resolve-extensions')
17
17
 
18
18
  function isFile(file: string): boolean {
19
19
  try {
20
- return statSync(file).isFile();
20
+ return statSync(file).isFile()
21
21
  } catch {
22
- return false;
22
+ return false
23
23
  }
24
24
  }
25
25
 
@@ -34,15 +34,15 @@ export function clientResolveExtensionsPlugin(extensions: readonly string[]): Pl
34
34
  setup(build) {
35
35
  build.onResolve({ filter: /^\.\.?\// }, async args => {
36
36
  if ((args.pluginData as Record<PropertyKey, unknown> | undefined)?.[resolvedMarker]) {
37
- return undefined;
37
+ return undefined
38
38
  }
39
- if (!args.resolveDir) return undefined;
40
- const base = path.resolve(args.resolveDir, args.path);
39
+ if (!args.resolveDir) return undefined
40
+ const base = path.resolve(args.resolveDir, args.path)
41
41
  // An import that already names an existing file resolves as-is.
42
- if (isFile(base)) return undefined;
42
+ if (isFile(base)) return undefined
43
43
  for (const extension of extensions) {
44
- const candidate = `${base}${extension}`;
45
- if (!isFile(candidate)) continue;
44
+ const candidate = `${base}${extension}`
45
+ if (!isFile(candidate)) continue
46
46
  // Re-dispatch with the extension made explicit so downstream
47
47
  // onResolve plugins (static assets, css) match on it.
48
48
  return build.resolve(`${args.path}${extension}`, {
@@ -51,25 +51,25 @@ export function clientResolveExtensionsPlugin(extensions: readonly string[]): Pl
51
51
  namespace: args.namespace,
52
52
  resolveDir: args.resolveDir,
53
53
  pluginData: { ...(args.pluginData as object | undefined), [resolvedMarker]: true },
54
- });
54
+ })
55
55
  }
56
56
  // Directory (index probe) or genuinely missing: preserve the probe
57
57
  // order for index files too, then fall back to esbuild's resolution.
58
58
  if (existsSync(base)) {
59
59
  for (const extension of extensions) {
60
- if (extension === '') continue;
61
- if (!isFile(path.join(base, `index${extension}`))) continue;
60
+ if (extension === '') continue
61
+ if (!isFile(path.join(base, `index${extension}`))) continue
62
62
  return build.resolve(`${args.path.replace(/\/$/, '')}/index${extension}`, {
63
63
  kind: args.kind,
64
64
  importer: args.importer,
65
65
  namespace: args.namespace,
66
66
  resolveDir: args.resolveDir,
67
67
  pluginData: { ...(args.pluginData as object | undefined), [resolvedMarker]: true },
68
- });
68
+ })
69
69
  }
70
70
  }
71
- return undefined;
72
- });
71
+ return undefined
72
+ })
73
73
  },
74
- };
74
+ }
75
75
  }
@@ -7,40 +7,40 @@
7
7
  * for the life of the process (the same assumption the vendor artifact cache makes), and anything
8
8
  * else is keyed on mtime + size so an edit is never served from the memo.
9
9
  */
10
- import { statSync } from 'node:fs';
11
- import path from 'node:path';
10
+ import { statSync } from 'node:fs'
11
+ import path from 'node:path'
12
12
 
13
- const NODE_MODULES = `${path.sep}node_modules${path.sep}`;
13
+ const NODE_MODULES = `${path.sep}node_modules${path.sep}`
14
14
 
15
15
  interface Entry<T> {
16
- stamp: string;
17
- value: T;
16
+ stamp: string
17
+ value: T
18
18
  }
19
19
 
20
20
  /** mtime+size stamp, or '' for a file whose contents cannot change here. */
21
21
  function stamp(file: string) {
22
- if (file.includes(NODE_MODULES)) return '';
22
+ if (file.includes(NODE_MODULES)) return ''
23
23
  try {
24
- const info = statSync(file);
25
- return `${info.mtimeMs}\0${info.size}`;
24
+ const info = statSync(file)
25
+ return `${info.mtimeMs}\0${info.size}`
26
26
  } catch {
27
27
  // A missing file is a real answer for the callers here (they all catch), so
28
28
  // it is cached like any other — under a stamp no live file can produce.
29
- return 'missing';
29
+ return 'missing'
30
30
  }
31
31
  }
32
32
 
33
33
  /** A memo whose entries are recomputed when their file changes on disk. */
34
34
  export function fileMemo<T>(compute: (file: string) => T) {
35
- const entries = new Map<string, Entry<T>>();
35
+ const entries = new Map<string, Entry<T>>()
36
36
  return (file: string): T => {
37
- const current = stamp(file);
38
- const cached = entries.get(file);
39
- if (cached?.stamp === current) return cached.value;
40
- const value = compute(file);
41
- entries.set(file, { stamp: current, value });
42
- return value;
43
- };
37
+ const current = stamp(file)
38
+ const cached = entries.get(file)
39
+ if (cached?.stamp === current) return cached.value
40
+ const value = compute(file)
41
+ entries.set(file, { stamp: current, value })
42
+ return value
43
+ }
44
44
  }
45
45
 
46
46
  /**
@@ -49,13 +49,13 @@ export function fileMemo<T>(compute: (file: string) => T) {
49
49
  * use - awaiting one lets the other builds' callbacks interleave with it.
50
50
  */
51
51
  export function fileMemoAsync<T>(compute: (file: string) => Promise<T>) {
52
- const entries = new Map<string, Entry<Promise<T>>>();
52
+ const entries = new Map<string, Entry<Promise<T>>>()
53
53
  return (file: string): Promise<T> => {
54
- const current = stamp(file);
55
- const cached = entries.get(file);
56
- if (cached?.stamp === current) return cached.value;
57
- const value = compute(file);
58
- entries.set(file, { stamp: current, value });
59
- return value;
60
- };
54
+ const current = stamp(file)
55
+ const cached = entries.get(file)
56
+ if (cached?.stamp === current) return cached.value
57
+ const value = compute(file)
58
+ entries.set(file, { stamp: current, value })
59
+ return value
60
+ }
61
61
  }
@@ -1,5 +1,5 @@
1
- import { pathToFileHref } from '../../config';
2
- import { rewriteSpecifierLiterals } from '../../resolve/scan-facts';
1
+ import { pathToFileHref } from '../../config'
2
+ import { rewriteSpecifierLiterals } from '../../resolve/scan-facts'
3
3
 
4
4
  /**
5
5
  * Resolve registered compat aliases before Bun reaches installed package entries. Folded onto the
@@ -16,10 +16,10 @@ export function rewriteStaticCompatImports(
16
16
  return rewriteSpecifierLiterals(source, file, (specifier, kind) => {
17
17
  // A side-effect `import 'x'` keeps resolving through the host resolver, as
18
18
  // it did under the `from`-anchored regex this replaced.
19
- const target = kind === 'side-effect' ? undefined : aliases[specifier];
20
- if (!target) return undefined;
19
+ const target = kind === 'side-effect' ? undefined : aliases[specifier]
20
+ if (!target) return undefined
21
21
  const resolved =
22
- kind === 'require' ? (requireAliases[specifier] ?? target) : pathToFileHref(target);
23
- return JSON.stringify(resolved);
24
- });
22
+ kind === 'require' ? (requireAliases[specifier] ?? target) : pathToFileHref(target)
23
+ return JSON.stringify(resolved)
24
+ })
25
25
  }