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