@wular/pnext 0.0.4 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/README.md +22 -16
  2. package/bin/pnext +6 -1
  3. package/config/lint/base.js +7 -7
  4. package/config/ts/base.json +2 -4
  5. package/config/ts/react.json +2 -6
  6. package/package.json +23 -2
  7. package/reference/compat.md +87 -22
  8. package/reference/config.md +40 -93
  9. package/reference/css.md +42 -33
  10. package/reference/dev.md +26 -33
  11. package/reference/env.md +18 -20
  12. package/reference/getting-started.md +132 -0
  13. package/reference/metadata.md +31 -46
  14. package/reference/navigation.md +65 -105
  15. package/reference/performance.md +21 -142
  16. package/reference/rendering.md +78 -75
  17. package/reference/routing.md +97 -107
  18. package/reference/typegen.md +27 -29
  19. package/src/api/cache.ts +36 -37
  20. package/src/api/client-cache.ts +2 -2
  21. package/src/api/client-navigation.ts +121 -114
  22. package/src/api/dynamic.tsx +58 -55
  23. package/src/api/link.tsx +52 -53
  24. package/src/api/navigation.ts +59 -58
  25. package/src/api/server.ts +152 -144
  26. package/src/api/suspense.ts +4 -4
  27. package/src/cli/adapters/vercel-warm.ts +126 -121
  28. package/src/cli/adapters/vercel.ts +437 -443
  29. package/src/cli/analyze.ts +333 -144
  30. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  31. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  32. package/src/cli/build.ts +976 -978
  33. package/src/cli/create.ts +72 -64
  34. package/src/cli/dev.ts +116 -116
  35. package/src/cli/index.ts +94 -85
  36. package/src/cli/migrate/package-json.ts +73 -71
  37. package/src/cli/migrate/report.ts +32 -33
  38. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  39. package/src/cli/migrate/scan.ts +46 -46
  40. package/src/cli/migrate/spinner.ts +9 -9
  41. package/src/cli/migrate/tsconfig.ts +35 -35
  42. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  43. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  44. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  45. package/src/cli/start.ts +65 -66
  46. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  47. package/src/client/build.ts +802 -768
  48. package/src/client/chunk-fold.ts +245 -240
  49. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  50. package/src/client/entry.ts +162 -147
  51. package/src/client/prebuilt.ts +231 -223
  52. package/src/client/profile.ts +29 -29
  53. package/src/client/react-compiler.ts +20 -15
  54. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  55. package/src/client/reference-stub.ts +51 -51
  56. package/src/client/reference.ts +19 -19
  57. package/src/{api → client}/router/events.ts +32 -17
  58. package/src/{api → client}/router/history.ts +16 -16
  59. package/src/{api → client}/router/hub.ts +52 -53
  60. package/src/{api/router.ts → client/router/index.ts} +61 -60
  61. package/src/{api → client}/router/policies.ts +24 -24
  62. package/src/{api → client}/router/runtime.ts +2022 -1995
  63. package/src/{api → client}/router/types.ts +98 -98
  64. package/src/compat/actions/client-plugin.ts +42 -43
  65. package/src/compat/actions/client-stub.ts +14 -14
  66. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  67. package/src/compat/actions/config.ts +63 -64
  68. package/src/compat/actions/detect.ts +68 -68
  69. package/src/compat/actions/discovery.ts +105 -105
  70. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  71. package/src/compat/actions/early-submit.ts +1 -1
  72. package/src/compat/actions/endpoint.ts +198 -198
  73. package/src/compat/actions/extensions.ts +811 -0
  74. package/src/compat/actions/flight.ts +23 -23
  75. package/src/compat/actions/form-state.ts +34 -34
  76. package/src/compat/actions/hoist.ts +382 -236
  77. package/src/compat/actions/ids.ts +7 -12
  78. package/src/compat/actions/index.ts +8 -8
  79. package/src/compat/actions/instances.ts +46 -46
  80. package/src/compat/actions/origin.ts +47 -48
  81. package/src/compat/actions/protocol.ts +22 -22
  82. package/src/compat/actions/registry.ts +19 -19
  83. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  84. package/src/compat/actions/rewrite.ts +125 -125
  85. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  86. package/src/compat/actions/serve.ts +132 -136
  87. package/src/compat/actions/server-tag.ts +4 -4
  88. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  89. package/src/compat/actions/unrecognized-error.ts +4 -4
  90. package/src/compat/{index.ts → aliases.ts} +112 -109
  91. package/src/compat/bundler/bun-externals.ts +18 -18
  92. package/src/compat/bundler/cjs-exports.ts +271 -223
  93. package/src/compat/bundler/config.ts +116 -111
  94. package/src/compat/bundler/externals.ts +12 -12
  95. package/src/compat/bundler/import-meta-url.ts +19 -19
  96. package/src/compat/bundler/modularize-imports.ts +36 -33
  97. package/src/compat/bundler/new-url-asset.ts +22 -24
  98. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  99. package/src/compat/bundler/polyfill.ts +28 -28
  100. package/src/compat/bundler/react-compiler.ts +35 -29
  101. package/src/compat/bundler/react-profiler.tsx +11 -11
  102. package/src/compat/bundler/relay-transform.ts +48 -47
  103. package/src/compat/bundler/require-context.ts +119 -113
  104. package/src/compat/bundler/resolve-extensions.ts +19 -19
  105. package/src/compat/bundler/source-cache.ts +25 -25
  106. package/src/compat/bundler/static-imports.ts +7 -7
  107. package/src/compat/bundler/symlink-imports.ts +46 -46
  108. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  109. package/src/compat/bundler/wasm.ts +58 -60
  110. package/src/compat/bundler/webpack-loaders.ts +254 -241
  111. package/src/compat/bundler/worker.ts +101 -104
  112. package/src/compat/cache/build-flags.ts +29 -29
  113. package/src/compat/cache/build-prerender-errors.ts +40 -44
  114. package/src/compat/cache/custom-handler.ts +60 -53
  115. package/src/compat/cache/fetch-patch.ts +240 -240
  116. package/src/compat/cache/handler.ts +27 -31
  117. package/src/compat/cache/modern-handler.ts +148 -126
  118. package/src/compat/cache/resume-data-cache.ts +47 -45
  119. package/src/compat/cache/revalidate.ts +233 -232
  120. package/src/compat/cache/runtime-error.ts +35 -35
  121. package/src/compat/cache/use-cache-transform.ts +442 -417
  122. package/src/compat/cache/use-cache.ts +650 -614
  123. package/src/compat/cache-control.ts +140 -142
  124. package/src/compat/client/base-path.ts +21 -20
  125. package/src/compat/client/css-order.ts +18 -18
  126. package/src/compat/client/errors/bare-boundary.ts +11 -11
  127. package/src/compat/client/errors/control-flow.ts +23 -23
  128. package/src/compat/client/errors/error-boundary.ts +61 -61
  129. package/src/compat/client/errors/global-error.ts +101 -91
  130. package/src/compat/client/errors/install.ts +71 -72
  131. package/src/compat/client/errors/lazy.ts +23 -23
  132. package/src/compat/client/errors/primitive-throw.ts +47 -45
  133. package/src/compat/client/errors/soft-refresh.ts +4 -4
  134. package/src/compat/client/link-status.ts +33 -33
  135. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  136. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  137. package/src/compat/client/navigation-scroll.ts +63 -63
  138. package/src/compat/client/optimistic-routing.ts +93 -88
  139. package/src/compat/client/prefetch-cache.ts +23 -24
  140. package/src/compat/client/route-announcer.ts +35 -35
  141. package/src/compat/client/segment-cache-policy.ts +20 -20
  142. package/src/compat/client/segment-cache.ts +309 -315
  143. package/src/compat/client/segment-prefetch.ts +127 -132
  144. package/src/compat/client/trailing-slash.ts +5 -4
  145. package/src/compat/css/chunking.ts +113 -116
  146. package/src/compat/css/inline-css.ts +21 -21
  147. package/src/compat/css/lightningcss.ts +37 -38
  148. package/src/compat/css/modules.ts +161 -175
  149. package/src/compat/css/nonce.ts +7 -7
  150. package/src/compat/css/sass-plugin.ts +18 -21
  151. package/src/compat/css/sass.ts +150 -152
  152. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  153. package/src/compat/css/styled-jsx.ts +21 -21
  154. package/src/compat/edge-runtime.ts +27 -27
  155. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  156. package/src/compat/export/client.ts +29 -31
  157. package/src/compat/export/{index.ts → emit.ts} +111 -110
  158. package/src/compat/export/standalone.ts +62 -54
  159. package/src/compat/image-optimizer/cache.ts +51 -49
  160. package/src/compat/image-optimizer/detect.ts +52 -52
  161. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  162. package/src/compat/image-optimizer/source.ts +77 -80
  163. package/src/compat/lifecycle/after-scope.ts +26 -26
  164. package/src/compat/lifecycle/after.ts +48 -45
  165. package/src/compat/lifecycle/error-funnel.ts +98 -102
  166. package/src/compat/lifecycle/error-serialize.ts +30 -26
  167. package/src/compat/lifecycle/error-ui.ts +67 -32
  168. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  169. package/src/compat/lifecycle/instrumentation.ts +85 -85
  170. package/src/compat/lifecycle/node-console.ts +11 -11
  171. package/src/compat/lifecycle/testmode.ts +160 -132
  172. package/src/compat/mdx/compile.ts +60 -57
  173. package/src/compat/mdx/plugin.ts +11 -11
  174. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  175. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  176. package/src/compat/metadata.ts +75 -81
  177. package/src/compat/next/cache.ts +68 -69
  178. package/src/compat/next/canonical-url.ts +9 -9
  179. package/src/compat/next/client-cache.ts +19 -19
  180. package/src/compat/next/client-navigation.ts +112 -116
  181. package/src/compat/next/client-only.ts +1 -1
  182. package/src/compat/next/client-script.tsx +99 -93
  183. package/src/compat/next/client-server.ts +10 -10
  184. package/src/compat/next/config-loader.ts +176 -173
  185. package/src/compat/next/config.ts +7 -7
  186. package/src/compat/next/constants.cjs +6 -6
  187. package/src/compat/next/constants.ts +6 -6
  188. package/src/compat/next/custom-server.ts +26 -24
  189. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  190. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  191. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  192. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  193. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  194. package/src/compat/next/dynamic.tsx +21 -18
  195. package/src/compat/next/error.tsx +52 -52
  196. package/src/compat/next/font/cache.ts +74 -74
  197. package/src/compat/next/font/google.ts +2 -2
  198. package/src/compat/next/font/index.ts +1 -1
  199. package/src/compat/next/font/local.ts +3 -3
  200. package/src/compat/next/font/runtime-client.ts +17 -15
  201. package/src/compat/next/font/runtime.ts +443 -408
  202. package/src/compat/next/font/shared.ts +120 -108
  203. package/src/compat/next/form.tsx +63 -63
  204. package/src/compat/next/head.tsx +2 -2
  205. package/src/compat/next/headers.ts +103 -95
  206. package/src/compat/next/image/client.tsx +220 -0
  207. package/src/compat/next/image/config.ts +56 -58
  208. package/src/compat/next/image/optimizer.ts +40 -36
  209. package/src/compat/next/image/patterns.ts +37 -40
  210. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  211. package/src/compat/next/image/shared.ts +65 -57
  212. package/src/compat/next/image/static-metadata.ts +98 -107
  213. package/src/compat/next/image/validate.ts +79 -88
  214. package/src/compat/next/image.tsx +19 -23
  215. package/src/compat/next/index.ts +1 -1
  216. package/src/compat/next/legacy-image.tsx +59 -60
  217. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  218. package/src/compat/next/link.tsx +158 -158
  219. package/src/compat/next/navigation.cjs +12 -3
  220. package/src/compat/next/navigation.ts +48 -50
  221. package/src/compat/next/offline.ts +27 -27
  222. package/src/compat/next/og.ts +121 -124
  223. package/src/compat/next/preferred-region.ts +13 -14
  224. package/src/compat/next/redirects.ts +58 -56
  225. package/src/compat/next/resource-hints.ts +73 -76
  226. package/src/compat/next/rewrites.ts +130 -133
  227. package/src/compat/next/root-params.ts +45 -45
  228. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  229. package/src/compat/next/router.cjs +4 -2
  230. package/src/compat/next/router.ts +58 -61
  231. package/src/compat/next/script.tsx +108 -108
  232. package/src/compat/next/server-only.ts +1 -1
  233. package/src/compat/next/server.ts +19 -19
  234. package/src/compat/next/svgr.ts +18 -17
  235. package/src/compat/next/telemetry.ts +24 -24
  236. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  237. package/src/compat/next/user-agent.ts +53 -49
  238. package/src/compat/next/web-vitals.ts +22 -24
  239. package/src/compat/otel/api.ts +41 -41
  240. package/src/compat/otel/client-trace-metadata.ts +25 -27
  241. package/src/compat/otel/fetch-span.ts +29 -29
  242. package/src/compat/otel/tracer.ts +331 -331
  243. package/src/compat/pages/api.ts +456 -0
  244. package/src/compat/pages/client-plugin.ts +36 -36
  245. package/src/compat/pages/router-state.ts +34 -34
  246. package/src/compat/pages/{index.ts → router.ts} +130 -135
  247. package/src/compat/ppr/io.ts +12 -12
  248. package/src/compat/ppr/missing-root-params.ts +34 -38
  249. package/src/compat/ppr/root-params-scan.ts +66 -66
  250. package/src/compat/ppr/root-params-transform.ts +24 -26
  251. package/src/compat/ppr/root-params.ts +30 -30
  252. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  253. package/src/compat/protocol.ts +71 -70
  254. package/src/compat/react/action-state.ts +47 -48
  255. package/src/compat/react/client-lite.ts +15 -15
  256. package/src/compat/react/client.ts +4 -4
  257. package/src/compat/react/compiler-runtime.ts +11 -11
  258. package/src/compat/react/dom-client.ts +44 -44
  259. package/src/compat/react/dom-react-server.ts +10 -16
  260. package/src/compat/react/dom-server.ts +10 -10
  261. package/src/compat/react/dom.ts +52 -52
  262. package/src/compat/react/hooks-extra.ts +34 -35
  263. package/src/compat/react/parity.ts +64 -61
  264. package/src/compat/react/preact.ts +81 -82
  265. package/src/compat/react/react-server.ts +28 -28
  266. package/src/compat/react/router-shim.ts +1 -1
  267. package/src/compat/react/server-component-use.ts +8 -8
  268. package/src/compat/react/server-inserted-html.ts +30 -31
  269. package/src/compat/react/server.ts +53 -55
  270. package/src/compat/react/use.ts +32 -32
  271. package/src/compat/react/view-transition.ts +20 -20
  272. package/src/compat/register/actions.ts +35 -824
  273. package/src/compat/register/boot.ts +41 -41
  274. package/src/compat/register/build-tier.ts +5 -5
  275. package/src/compat/register/build.ts +74 -70
  276. package/src/compat/register/bundler.ts +161 -156
  277. package/src/compat/register/cache.ts +20 -20
  278. package/src/compat/register/client-errors.ts +3 -3
  279. package/src/compat/register/config.ts +6 -6
  280. package/src/compat/register/css-extras.ts +30 -34
  281. package/src/compat/register/edge-runtime.ts +3 -3
  282. package/src/compat/register/errors.ts +10 -12
  283. package/src/compat/register/export.ts +16 -16
  284. package/src/compat/register/font.ts +11 -11
  285. package/src/compat/register/hooks.ts +2 -2
  286. package/src/compat/register/image.ts +40 -40
  287. package/src/compat/register/index.ts +59 -62
  288. package/src/compat/register/instrumentation-client.ts +10 -10
  289. package/src/compat/register/lifecycle.ts +25 -28
  290. package/src/compat/register/mdx.ts +10 -10
  291. package/src/compat/register/middleware.ts +226 -16
  292. package/src/compat/register/otel.ts +80 -88
  293. package/src/compat/register/pages-api.ts +10 -463
  294. package/src/compat/register/ppr.ts +16 -16
  295. package/src/compat/register/protocol.ts +17 -18
  296. package/src/compat/register/proxy.ts +49 -51
  297. package/src/compat/register/render.ts +79 -76
  298. package/src/compat/register/routing.ts +162 -159
  299. package/src/compat/register/segment.ts +24 -1897
  300. package/src/compat/register/static-image.ts +3 -3
  301. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  302. package/src/compat/register/typed-routes.ts +14 -14
  303. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  304. package/src/compat/register/validation.ts +18 -18
  305. package/src/compat/segment/loading-boundary.ts +43 -45
  306. package/src/compat/segment/page-slot.ts +69 -69
  307. package/src/compat/segment/serve.ts +1884 -0
  308. package/src/compat/segment/tree.ts +113 -112
  309. package/src/compat/segment/vary-key.ts +38 -38
  310. package/src/compat/segment/vary-params.ts +138 -142
  311. package/src/compat/static-params.ts +14 -12
  312. package/src/compat/tsconfig-defaults.ts +87 -91
  313. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  314. package/src/compat/typecheck/worker.ts +15 -12
  315. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  316. package/src/compat/typed-routes/manifest.ts +174 -170
  317. package/src/compat/typed-routes/typegen.ts +127 -110
  318. package/src/compat/validation/errors.ts +16 -19
  319. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  320. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  321. package/src/compat-bootstrap.ts +16 -16
  322. package/src/config.ts +86 -69
  323. package/src/css/build.ts +230 -227
  324. package/src/css/postcss.ts +79 -80
  325. package/src/css/worker.ts +14 -15
  326. package/src/dev/client-actions.ts +10 -10
  327. package/src/dev/client-chunk-store.ts +27 -27
  328. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  329. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  330. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  331. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  332. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  333. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  334. package/src/dev/server.ts +804 -820
  335. package/src/env.ts +46 -43
  336. package/src/extensions.ts +491 -478
  337. package/src/index.ts +8 -8
  338. package/src/internal.ts +20 -23
  339. package/src/{islands → render}/boundary-error.ts +3 -3
  340. package/src/render/hooks.ts +71 -71
  341. package/src/render/island-context.ts +14 -14
  342. package/src/render/metadata.ts +310 -310
  343. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  344. package/src/{ppr.ts → render/ppr.ts} +244 -245
  345. package/src/render/renderer.ts +2087 -2082
  346. package/src/render/resource-hints.ts +16 -17
  347. package/src/render/slots.tsx +224 -235
  348. package/src/{islands → render}/static-children.ts +9 -12
  349. package/src/{islands → render}/static-slots.ts +37 -37
  350. package/src/{cache/context.ts → request/cache.ts} +20 -20
  351. package/src/request/context.ts +107 -107
  352. package/src/{dynamic/source.ts → resolve/dynamic.ts} +139 -139
  353. package/src/resolve/engine.ts +90 -77
  354. package/src/resolve/imports.ts +475 -463
  355. package/src/resolve/scan-facts.ts +318 -296
  356. package/src/resolve/source-text.ts +37 -37
  357. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  358. package/src/routing/forwarded.ts +19 -19
  359. package/src/routing/handler.ts +84 -91
  360. package/src/routing/href.ts +87 -70
  361. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  362. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  363. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  364. package/src/routing/routes.ts +827 -815
  365. package/src/routing/slots.ts +164 -160
  366. package/src/runtime/loader.ts +954 -0
  367. package/src/{dev → runtime}/module-cache.ts +309 -287
  368. package/src/{dev → runtime}/module-generations.ts +9 -9
  369. package/src/{dev → runtime}/module-transform.ts +81 -72
  370. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  371. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  372. package/src/runtime/vendor.ts +428 -406
  373. package/src/styles.d.ts +9 -0
  374. package/src/types.ts +324 -335
  375. package/src/utils/ansi.ts +5 -5
  376. package/src/utils/{source.ts → code.ts} +15 -12
  377. package/src/utils/content-type.ts +3 -3
  378. package/src/utils/decode.ts +2 -2
  379. package/src/utils/dev-profile.ts +13 -13
  380. package/src/utils/error-log.ts +6 -6
  381. package/src/utils/esbuild.ts +18 -18
  382. package/src/utils/fs-cache.ts +13 -13
  383. package/src/utils/fs.ts +57 -49
  384. package/src/utils/html.ts +20 -24
  385. package/src/utils/native-require.ts +8 -8
  386. package/src/utils/serialize.ts +139 -146
  387. package/src/utils/verbose.ts +18 -18
  388. package/reference/overview.md +0 -35
  389. package/src/cli/analyze-print.ts +0 -181
  390. package/src/compat/middleware/manifest.ts +0 -210
  391. package/src/compat/next/image-client.tsx +0 -215
  392. package/src/compat/next/link-usage.ts +0 -29
  393. package/src/css/index.ts +0 -2
  394. package/src/render/index.ts +0 -1
  395. package/src/style-modules.d.ts +0 -9
@@ -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
  }