@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,10 +6,10 @@
6
6
  // same placement SWC's usage mode picks, so the polyfill runs ahead of that module and ships in its
7
7
  // chunk. Gated on swcEnvOptions being configured, so a pure app pays nothing.
8
8
 
9
- import { createHash } from 'node:crypto';
10
- import { createRequire } from 'node:module';
11
- import path from 'node:path';
12
- import type { ResolvedConfig } from '../../config';
9
+ import { createHash } from 'node:crypto'
10
+ import { createRequire } from 'node:module'
11
+ import path from 'node:path'
12
+ import type { ResolvedConfig } from '../../config'
13
13
 
14
14
  // No-module polyfills chunk (COMPAT - Next parity).
15
15
  //
@@ -19,41 +19,41 @@ import type { ResolvedConfig } from '../../config';
19
19
  // carries the same `noModule` script tag Next emits, which some suites assert on.
20
20
 
21
21
  /** Inert body for the no-module polyfills chunk (never runs in module browsers). */
22
- export const POLYFILLS_NOMODULE_SOURCE = '!function(){"use strict"}();\n';
22
+ export const POLYFILLS_NOMODULE_SOURCE = '!function(){"use strict"}();\n'
23
23
 
24
- let cachedPolyfillsFileName: string | undefined;
24
+ let cachedPolyfillsFileName: string | undefined
25
25
 
26
26
  /** Content-hashed filename for the emitted no-module polyfills chunk. */
27
27
  export function polyfillsChunkFileName(): string {
28
- if (cachedPolyfillsFileName) return cachedPolyfillsFileName;
29
- const hash = createHash('sha256').update(POLYFILLS_NOMODULE_SOURCE).digest('hex').slice(0, 16);
30
- return (cachedPolyfillsFileName = `polyfills-${hash}.js`);
28
+ if (cachedPolyfillsFileName) return cachedPolyfillsFileName
29
+ const hash = createHash('sha256').update(POLYFILLS_NOMODULE_SOURCE).digest('hex').slice(0, 16)
30
+ return (cachedPolyfillsFileName = `polyfills-${hash}.js`)
31
31
  }
32
32
 
33
33
  /** App-absolute served path of the polyfills chunk (before assetPrefix). */
34
34
  export function polyfillsChunkPath(): string {
35
- return `/_next/static/chunks/${polyfillsChunkFileName()}`;
35
+ return `/_next/static/chunks/${polyfillsChunkFileName()}`
36
36
  }
37
37
 
38
38
  // The core-js module SWC's usage mode emits per feature, keyed by the syntax
39
39
  // that pulls it in. Extend as more features are needed.
40
40
  const POLYFILL_FEATURES: { usage: RegExp; module: string }[] = [
41
41
  { usage: /\.replaceAll\s*\(/, module: 'core-js/modules/es.string.replace-all.js' },
42
- ];
42
+ ]
43
43
 
44
44
  /** Sniff tokens for the client transform below (one per feature usage). */
45
- export const POLYFILL_USAGE_TOKENS = POLYFILL_FEATURES.map(feature => feature.usage);
45
+ export const POLYFILL_USAGE_TOKENS = POLYFILL_FEATURES.map(feature => feature.usage)
46
46
 
47
47
  // core-js resolves from the app, not from pnext. One require per root, reused
48
48
  // across the transform's per-module calls.
49
- const polyfillRequires = new Map<string, NodeJS.Require>();
49
+ const polyfillRequires = new Map<string, NodeJS.Require>()
50
50
 
51
51
  function polyfillRequire(config: ResolvedConfig) {
52
- const existing = polyfillRequires.get(config.root);
53
- if (existing) return existing;
54
- const created = createRequire(path.join(config.root, 'pnext-polyfill-resolve.cjs'));
55
- polyfillRequires.set(config.root, created);
56
- return created;
52
+ const existing = polyfillRequires.get(config.root)
53
+ if (existing) return existing
54
+ const created = createRequire(path.join(config.root, 'pnext-polyfill-resolve.cjs'))
55
+ polyfillRequires.set(config.root, created)
56
+ return created
57
57
  }
58
58
 
59
59
  /**
@@ -70,19 +70,19 @@ export function rewriteUsagePolyfillImports(
70
70
  file: string,
71
71
  config: ResolvedConfig,
72
72
  ): string {
73
- const inApp = file.startsWith(`${config.root}${path.sep}`);
74
- if (!inApp || file.includes(`${path.sep}node_modules${path.sep}`)) return source;
75
- const require = polyfillRequire(config);
73
+ const inApp = file.startsWith(`${config.root}${path.sep}`)
74
+ if (!inApp || file.includes(`${path.sep}node_modules${path.sep}`)) return source
75
+ const require = polyfillRequire(config)
76
76
  const imports = POLYFILL_FEATURES.flatMap(feature => {
77
- if (!feature.usage.test(source)) return [];
77
+ if (!feature.usage.test(source)) return []
78
78
  try {
79
- return [`import ${JSON.stringify(require.resolve(feature.module))};`];
79
+ return [`import ${JSON.stringify(require.resolve(feature.module))};`]
80
80
  } catch {
81
- return [];
81
+ return []
82
82
  }
83
- });
84
- if (imports.length === 0) return source;
83
+ })
84
+ if (imports.length === 0) return source
85
85
  // After the directive prologue: a `'use client'` module must keep it first.
86
- const directive = /^(?:\s*['"][^'"]+['"];?\s*)*/.exec(source)?.[0] ?? '';
87
- return `${directive}${imports.join('\n')}\n${source.slice(directive.length)}`;
86
+ const directive = /^(?:\s*['"][^'"]+['"];?\s*)*/.exec(source)?.[0] ?? ''
87
+ return `${directive}${imports.join('\n')}\n${source.slice(directive.length)}`
88
88
  }
@@ -4,11 +4,11 @@
4
4
  // `reactCompiler` flag reaches it through the compat-mode options seam.
5
5
  // ---------------------------------------------------------------------------
6
6
 
7
- import path from 'node:path';
8
- import { rewriteFacts } from '../../resolve/scan-facts';
9
- import { spliceSource } from '../../dev/module-transform';
7
+ import path from 'node:path'
8
+ import { rewriteFacts } from '../../resolve/scan-facts'
9
+ import { spliceSource } from '../../runtime/module-transform'
10
10
 
11
- const profilerRuntimePath = path.join(import.meta.dirname, 'react-profiler.tsx');
11
+ const profilerRuntimePath = path.join(import.meta.dirname, 'react-profiler.tsx')
12
12
 
13
13
  /**
14
14
  * Split `Profiler` out of a `react` named import onto pnext's own Profiler
@@ -16,46 +16,52 @@ const profilerRuntimePath = path.join(import.meta.dirname, 'react-profiler.tsx')
16
16
  * matched by shape rather than by a line-anchored regex.
17
17
  */
18
18
  export function rewriteReactProfilerImport(source: string, file = 'module.tsx'): string {
19
- if (!source.includes('Profiler')) return source;
20
- const edits: { start: number; end: number; value: string }[] = [];
19
+ if (!source.includes('Profiler')) return source
20
+ const edits: { start: number; end: number; value: string }[] = []
21
21
  for (const statement of rewriteFacts(file, source).imports) {
22
- if (statement.specifier !== 'react') continue;
23
- const profilers = statement.bindings.filter(binding => binding.imported === 'Profiler');
24
- if (profilers.length === 0) continue;
22
+ if (statement.specifier !== 'react') continue
23
+ const profilers = statement.bindings.filter(binding => binding.imported === 'Profiler')
24
+ if (profilers.length === 0) continue
25
25
 
26
- const rest = statement.bindings.filter(binding => binding.imported !== 'Profiler');
27
- const named = rest.filter(binding => binding.imported !== 'default' && binding.imported !== '*');
28
- const other = rest.filter(binding => binding.imported === 'default' || binding.imported === '*');
29
- const indent = importIndent(source, statement.start);
30
- const clause = named.map(printBinding).join(', ');
31
- const prefix = other.map(binding => (binding.imported === '*' ? `* as ${binding.local}` : binding.local)).join(', ');
32
- const lines: string[] = [];
33
- if (prefix && clause) lines.push(`${indent}import ${prefix}, { ${clause} } from 'react';`);
34
- else if (prefix) lines.push(`${indent}import ${prefix} from 'react';`);
35
- else if (clause) lines.push(`${indent}import { ${clause} } from 'react';`);
26
+ const rest = statement.bindings.filter(binding => binding.imported !== 'Profiler')
27
+ const named = rest.filter(binding => binding.imported !== 'default' && binding.imported !== '*')
28
+ const other = rest.filter(binding => binding.imported === 'default' || binding.imported === '*')
29
+ const indent = importIndent(source, statement.start)
30
+ const clause = named.map(printBinding).join(', ')
31
+ const prefix = other
32
+ .map(binding => (binding.imported === '*' ? `* as ${binding.local}` : binding.local))
33
+ .join(', ')
34
+ const lines: string[] = []
35
+ if (prefix && clause) lines.push(`${indent}import ${prefix}, { ${clause} } from 'react';`)
36
+ else if (prefix) lines.push(`${indent}import ${prefix} from 'react';`)
37
+ else if (clause) lines.push(`${indent}import { ${clause} } from 'react';`)
36
38
  for (const profiler of profilers) {
37
39
  lines.push(
38
40
  `${indent}import { Profiler as ${profiler.local} } from ${JSON.stringify(profilerRuntimePath)};`,
39
- );
41
+ )
40
42
  }
41
- edits.push({ start: statement.start, end: statement.end, value: lines.join('\n').slice(indent.length) });
43
+ edits.push({
44
+ start: statement.start,
45
+ end: statement.end,
46
+ value: lines.join('\n').slice(indent.length),
47
+ })
42
48
  }
43
- return edits.length > 0 ? spliceSource(source, edits) : source;
49
+ return edits.length > 0 ? spliceSource(source, edits) : source
44
50
  }
45
51
 
46
52
  function printBinding(binding: { imported: string; local: string; type: boolean }) {
47
- const name = binding.imported === binding.local ? binding.local : `${binding.imported} as ${binding.local}`;
48
- return binding.type ? `type ${name}` : name;
53
+ const name =
54
+ binding.imported === binding.local ? binding.local : `${binding.imported} as ${binding.local}`
55
+ return binding.type ? `type ${name}` : name
49
56
  }
50
57
 
51
58
  /** Leading whitespace of the statement's own line (the splice keeps the first one). */
52
59
  function importIndent(source: string, start: number) {
53
- const lineStart = source.lastIndexOf('\n', start - 1) + 1;
54
- const indent = source.slice(lineStart, start);
55
- return /^[ \t]*$/.test(indent) ? indent : '';
60
+ const lineStart = source.lastIndexOf('\n', start - 1) + 1
61
+ const indent = source.slice(lineStart, start)
62
+ return /^[ \t]*$/.test(indent) ? indent : ''
56
63
  }
57
64
 
58
65
  export function rewriteReactProfilerServerSource(source: string, file?: string): string {
59
- return rewriteReactProfilerImport(source, file);
66
+ return rewriteReactProfilerImport(source, file)
60
67
  }
61
-
@@ -1,9 +1,9 @@
1
- import { Fragment, type ComponentChildren } from 'preact';
2
- import { useLayoutEffect, useRef } from 'preact/hooks';
1
+ import { Fragment, type ComponentChildren } from 'preact'
2
+ import { useLayoutEffect, useRef } from 'preact/hooks'
3
3
 
4
4
  export interface ProfilerProps {
5
- id: string;
6
- children?: ComponentChildren;
5
+ id: string
6
+ children?: ComponentChildren
7
7
  onRender?: (
8
8
  id: string,
9
9
  phase: 'mount' | 'update',
@@ -11,15 +11,15 @@ export interface ProfilerProps {
11
11
  baseDuration: number,
12
12
  startTime: number,
13
13
  commitTime: number,
14
- ) => void;
14
+ ) => void
15
15
  }
16
16
 
17
17
  export function Profiler({ id, children, onRender }: ProfilerProps) {
18
- const phase = useRef<'mount' | 'update'>('mount');
18
+ const phase = useRef<'mount' | 'update'>('mount')
19
19
  useLayoutEffect(() => {
20
- const now = typeof performance === 'undefined' ? 0 : performance.now();
21
- onRender?.(id, phase.current, 0, 0, now, now);
22
- phase.current = 'update';
23
- });
24
- return <Fragment>{children}</Fragment>;
20
+ const now = typeof performance === 'undefined' ? 0 : performance.now()
21
+ onRender?.(id, phase.current, 0, 0, now, now)
22
+ phase.current = 'update'
23
+ })
24
+ return <Fragment>{children}</Fragment>
25
25
  }
@@ -14,10 +14,10 @@
14
14
  // Everything is resolved relative to `process.cwd()`, matching the SWC transform's root. That is what
15
15
  // makes the multi-project fixture work: each sub-project is built with its own cwd.
16
16
 
17
- import { existsSync } from 'node:fs';
18
- import path from 'node:path';
19
- import { withSniff, type ServerSourceTransform } from '../../extensions';
20
- import type { RelayCompilerConfig } from './config';
17
+ import { existsSync } from 'node:fs'
18
+ import path from 'node:path'
19
+ import { withSniff, type ServerSourceTransform } from '../../extensions'
20
+ import type { RelayCompilerConfig } from './config'
21
21
 
22
22
  /** The artifact extension relay-compiler emits for each `language` setting. */
23
23
  function artifactExtensions(language: RelayCompilerConfig['language']): string[] {
@@ -25,92 +25,93 @@ function artifactExtensions(language: RelayCompilerConfig['language']): string[]
25
25
  // project can point `artifactDirectory` at output generated with a different
26
26
  // `language` than next.config declares (the multi-project fixture reads its
27
27
  // `language` from a sibling project's relay config).
28
- return language === 'typescript' ? ['.ts', '.js'] : ['.js', '.ts'];
28
+ return language === 'typescript' ? ['.ts', '.js'] : ['.js', '.ts']
29
29
  }
30
30
 
31
31
  /** `graphql`-tagged templates. GraphQL has no backticks, so a lazy scan is exact. */
32
32
  function relayTagPattern(): RegExp {
33
- return /(?<![\w$.])graphql\s*`([\s\S]*?)`/g;
33
+ return /(?<![\w$.])graphql\s*`([\s\S]*?)`/g
34
34
  }
35
35
 
36
- const OPERATION_NAME = /\b(?:query|mutation|subscription|fragment)\s+([A-Za-z_][\w]*)/;
36
+ const OPERATION_NAME = /\b(?:query|mutation|subscription|fragment)\s+([A-Za-z_][\w]*)/
37
37
 
38
38
  function isUnder(dir: string, file: string): boolean {
39
- const relative = path.relative(dir, file);
40
- return relative !== '' && !relative.startsWith('..') && !path.isAbsolute(relative);
39
+ const relative = path.relative(dir, file)
40
+ return relative !== '' && !relative.startsWith('..') && !path.isAbsolute(relative)
41
41
  }
42
42
 
43
43
  // Insert hoisted imports after any leading directive prologue ('use client' /
44
44
  // 'use server' / 'use strict') and optional shebang, so a client module's
45
45
  // `'use client'` stays the first statement.
46
46
  function injectAfterDirectives(source: string, injection: string): string {
47
- const prologue = /^(\uFEFF?(?:#![^\n]*\n)?(?:[ \t]*(['"])use [\w-]+\2[ \t]*;?[ \t]*(?:\r?\n|$))*)/.exec(
48
- source,
49
- );
50
- const index = prologue ? prologue[0].length : 0;
51
- return `${source.slice(0, index)}${injection}\n${source.slice(index)}`;
47
+ const prologue =
48
+ /^(\uFEFF?(?:#![^\n]*\n)?(?:[ \t]*(['"])use [\w-]+\2[ \t]*;?[ \t]*(?:\r?\n|$))*)/.exec(source)
49
+ const index = prologue ? prologue[0].length : 0
50
+ return `${source.slice(0, index)}${injection}\n${source.slice(index)}`
52
51
  }
53
52
 
54
53
  /**
55
54
  * Build a source transform applying `compiler.relay`. Returns a no-op transform
56
55
  * when nothing is configured so pure-core apps pay nothing.
57
56
  */
58
- export function createRelayTransform(relay: RelayCompilerConfig | undefined): ServerSourceTransform {
59
- if (!relay) return withSniff([], source => source);
57
+ export function createRelayTransform(
58
+ relay: RelayCompilerConfig | undefined,
59
+ ): ServerSourceTransform {
60
+ if (!relay) return withSniff([], source => source)
60
61
 
61
- const cwd = path.resolve(process.cwd());
62
- const srcDir = path.resolve(cwd, relay.src);
62
+ const cwd = path.resolve(process.cwd())
63
+ const srcDir = path.resolve(cwd, relay.src)
63
64
  const artifactDir = relay.artifactDirectory
64
65
  ? path.resolve(cwd, relay.artifactDirectory)
65
- : undefined;
66
- const extensions = artifactExtensions(relay.language);
67
- const resolved = new Map<string, string | undefined>();
66
+ : undefined
67
+ const extensions = artifactExtensions(relay.language)
68
+ const resolved = new Map<string, string | undefined>()
68
69
 
69
70
  /** The on-disk artifact for one operation name, or undefined when absent. */
70
71
  function artifactFor(fileDir: string, name: string): string | undefined {
71
72
  // Without `artifactDirectory`, relay-compiler writes `__generated__` next
72
73
  // to the source file.
73
- const directory = artifactDir ?? path.join(fileDir, '__generated__');
74
- const key = `${directory}\0${name}`;
75
- if (resolved.has(key)) return resolved.get(key);
76
- let found: string | undefined;
74
+ const directory = artifactDir ?? path.join(fileDir, '__generated__')
75
+ const key = `${directory}\0${name}`
76
+ if (resolved.has(key)) return resolved.get(key)
77
+ let found: string | undefined
77
78
  for (const extension of extensions) {
78
- const candidate = path.join(directory, `${name}.graphql${extension}`);
79
+ const candidate = path.join(directory, `${name}.graphql${extension}`)
79
80
  if (existsSync(candidate)) {
80
- found = candidate;
81
- break;
81
+ found = candidate
82
+ break
82
83
  }
83
84
  }
84
- resolved.set(key, found);
85
- return found;
85
+ resolved.set(key, found)
86
+ return found
86
87
  }
87
88
 
88
89
  return withSniff(['graphql'], (source, file) => {
89
- if (!source.includes('graphql`') && !/graphql\s*`/.test(source)) return source;
90
- const absolute = path.resolve(file);
90
+ if (!source.includes('graphql`') && !/graphql\s*`/.test(source)) return source
91
+ const absolute = path.resolve(file)
91
92
  // Next scopes the transform to `src`. Files outside the build cwd entirely
92
93
  // (materialized copies) are not covered by that check, so only skip a file
93
94
  // that lives under the cwd but outside the configured source root.
94
- if (isUnder(cwd, absolute) && !isUnder(srcDir, absolute)) return source;
95
+ if (isUnder(cwd, absolute) && !isUnder(srcDir, absolute)) return source
95
96
 
96
- const bindings = new Map<string, string>();
97
+ const bindings = new Map<string, string>()
97
98
  const replaced = source.replace(relayTagPattern(), (match, body: string) => {
98
- const name = OPERATION_NAME.exec(body)?.[1];
99
- if (!name) return match;
100
- const artifact = artifactFor(path.dirname(absolute), name);
101
- if (!artifact) return match;
102
- let binding = bindings.get(artifact);
99
+ const name = OPERATION_NAME.exec(body)?.[1]
100
+ if (!name) return match
101
+ const artifact = artifactFor(path.dirname(absolute), name)
102
+ if (!artifact) return match
103
+ let binding = bindings.get(artifact)
103
104
  if (!binding) {
104
- binding = `__pnext_relay_${bindings.size}`;
105
- bindings.set(artifact, binding);
105
+ binding = `__pnext_relay_${bindings.size}`
106
+ bindings.set(artifact, binding)
106
107
  }
107
- return binding;
108
- });
109
- if (bindings.size === 0) return source;
108
+ return binding
109
+ })
110
+ if (bindings.size === 0) return source
110
111
 
111
112
  const imports = [...bindings]
112
113
  .map(([artifact, binding]) => `import * as ${binding} from ${JSON.stringify(artifact)};`)
113
- .join('\n');
114
- return injectAfterDirectives(replaced, imports);
115
- });
114
+ .join('\n')
115
+ return injectAfterDirectives(replaced, imports)
116
+ })
116
117
  }