@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
@@ -1,29 +1,29 @@
1
- import { readdirSync, realpathSync } from 'node:fs';
2
- import { realpath } from 'node:fs/promises';
3
- import path from 'node:path';
4
- import type { Plugin } from 'esbuild';
5
- import type { ResolvedConfig } from '../../config';
6
- import { resolveImport } from '../../resolve/imports';
1
+ import { readdirSync, realpathSync } from 'node:fs'
2
+ import { realpath } from 'node:fs/promises'
3
+ import path from 'node:path'
4
+ import type { Plugin } from 'esbuild'
5
+ import type { ResolvedConfig } from '../../config'
6
+ import { resolveImport } from '../../resolve/imports'
7
7
 
8
- const resolvedMarker = Symbol('pnext-symlink-import');
8
+ const resolvedMarker = Symbol('pnext-symlink-import')
9
9
 
10
10
  /**
11
11
  * Whether a file IS its own real path - asked once per relative import, so the same importers are
12
12
  * re-resolved component-by-component across every build. Keyed on the path alone: a path's symlink
13
13
  * identity changes only on an install, which already invalidates every resolved artifact key.
14
14
  */
15
- const realPaths = new Map<string, Promise<boolean>>();
15
+ const realPaths = new Map<string, Promise<boolean>>()
16
16
 
17
17
  function isRealPath(file: string) {
18
- let real = realPaths.get(file);
18
+ let real = realPaths.get(file)
19
19
  if (!real) {
20
20
  real = realpath(file).then(
21
21
  resolved => resolved === file,
22
22
  () => true,
23
- );
24
- realPaths.set(file, real);
23
+ )
24
+ realPaths.set(file, real)
25
25
  }
26
- return real;
26
+ return real
27
27
  }
28
28
 
29
29
  /**
@@ -33,9 +33,9 @@ function isRealPath(file: string) {
33
33
  * these during node_modules resolution, so importers come out as realpaths
34
34
  * 'other' pnpm trees, symlinked roots, stray source symlinks, or a failed scan
35
35
  */
36
- type SymlinkLayout = 'none' | 'package-links' | 'other';
36
+ type SymlinkLayout = 'none' | 'package-links' | 'other'
37
37
 
38
- const symlinkLayouts = new Map<string, SymlinkLayout>();
38
+ const symlinkLayouts = new Map<string, SymlinkLayout>()
39
39
 
40
40
  /**
41
41
  * Whether this build can see a SYMLINKED importer, so the plugin's onResolve is registered only where it
@@ -47,50 +47,47 @@ export function symlinkedImportsPossible(
47
47
  config: ResolvedConfig,
48
48
  realPathEntries?: boolean,
49
49
  ): boolean {
50
- const key = `${config.root}\0${config.workspaceRoot}`;
51
- let layout = symlinkLayouts.get(key);
50
+ const key = `${config.root}\0${config.workspaceRoot}`
51
+ let layout = symlinkLayouts.get(key)
52
52
  if (layout === undefined) {
53
- layout = detectSymlinkLayout(config);
54
- symlinkLayouts.set(key, layout);
53
+ layout = detectSymlinkLayout(config)
54
+ symlinkLayouts.set(key, layout)
55
55
  }
56
- if (layout === 'none') return false;
57
- if (layout === 'package-links') return !realPathEntries;
58
- return true;
56
+ if (layout === 'none') return false
57
+ if (layout === 'package-links') return !realPathEntries
58
+ return true
59
59
  }
60
60
 
61
61
  function detectSymlinkLayout(config: ResolvedConfig): SymlinkLayout {
62
62
  try {
63
- const roots = [...new Set([config.root, config.workspaceRoot])].map(root =>
64
- path.resolve(root),
65
- );
66
- let packageLinks = false;
63
+ const roots = [...new Set([config.root, config.workspaceRoot])].map(root => path.resolve(root))
64
+ let packageLinks = false
67
65
  for (const root of roots) {
68
- if (realpathSync(root) !== root) return 'other';
69
- if (readDirEntries(root).some(entry => entry.isSymbolicLink())) return 'other';
70
- const nodeModules = path.join(root, 'node_modules');
66
+ if (realpathSync(root) !== root) return 'other'
67
+ if (readDirEntries(root).some(entry => entry.isSymbolicLink())) return 'other'
68
+ const nodeModules = path.join(root, 'node_modules')
71
69
  for (const entry of readDirEntries(nodeModules)) {
72
- if (entry.name === '.pnpm') return 'other';
73
- if (entry.isSymbolicLink()) packageLinks = true;
70
+ if (entry.name === '.pnpm') return 'other'
71
+ if (entry.isSymbolicLink()) packageLinks = true
74
72
  else if (entry.isDirectory() && entry.name.startsWith('@')) {
75
- const scopeDir = path.join(nodeModules, entry.name);
76
- if (readDirEntries(scopeDir).some(scoped => scoped.isSymbolicLink()))
77
- packageLinks = true;
73
+ const scopeDir = path.join(nodeModules, entry.name)
74
+ if (readDirEntries(scopeDir).some(scoped => scoped.isSymbolicLink())) packageLinks = true
78
75
  }
79
76
  }
80
77
  }
81
- return packageLinks ? 'package-links' : 'none';
78
+ return packageLinks ? 'package-links' : 'none'
82
79
  } catch {
83
- return 'other';
80
+ return 'other'
84
81
  }
85
82
  }
86
83
 
87
84
  /** Missing dir = no symlinks there; any other failure propagates as "uncertain". */
88
85
  function readDirEntries(dir: string) {
89
86
  try {
90
- return readdirSync(dir, { withFileTypes: true });
87
+ return readdirSync(dir, { withFileTypes: true })
91
88
  } catch (error) {
92
- if ((error as NodeJS.ErrnoException).code === 'ENOENT') return [];
93
- throw error;
89
+ if ((error as NodeJS.ErrnoException).code === 'ENOENT') return []
90
+ throw error
94
91
  }
95
92
  }
96
93
 
@@ -100,20 +97,23 @@ export function serverSymlinkImportPlugin(config: ResolvedConfig): Plugin {
100
97
  name: 'pnext-symlink-imports',
101
98
  setup(build) {
102
99
  build.onResolve({ filter: /^\.\.?\// }, async args => {
103
- if (!args.importer || (args.pluginData as Record<PropertyKey, unknown> | undefined)?.[resolvedMarker]) {
104
- return undefined;
100
+ if (
101
+ !args.importer ||
102
+ (args.pluginData as Record<PropertyKey, unknown> | undefined)?.[resolvedMarker]
103
+ ) {
104
+ return undefined
105
105
  }
106
- if (await isRealPath(args.importer)) return undefined;
107
- const target = resolveImport(config.root, args.importer, args.path);
108
- if (!target) return undefined;
106
+ if (await isRealPath(args.importer)) return undefined
107
+ const target = resolveImport(config.root, args.importer, args.path)
108
+ if (!target) return undefined
109
109
  return build.resolve(target, {
110
110
  kind: args.kind,
111
111
  importer: args.importer,
112
112
  namespace: args.namespace,
113
113
  resolveDir: args.resolveDir,
114
114
  pluginData: { ...(args.pluginData as object | undefined), [resolvedMarker]: true },
115
- });
116
- });
115
+ })
116
+ })
117
117
  },
118
- };
118
+ }
119
119
  }
@@ -19,21 +19,19 @@
19
19
  // anywhere -> no plugin.
20
20
  // ---------------------------------------------------------------------------
21
21
 
22
- import path from 'node:path';
23
- import type { Plugin } from 'esbuild';
24
- import type { ResolvedConfig } from '../../config';
25
- import { configuredTsPathPatterns, resolveConfiguredTsPath } from '../../resolve/imports';
26
- import { escapeRegex } from '../../utils/source';
22
+ import path from 'node:path'
23
+ import type { Plugin } from 'esbuild'
24
+ import type { ResolvedConfig } from '../../config'
25
+ import { configuredTsPathPatterns, resolveConfiguredTsPath } from '../../resolve/imports'
26
+ import { escapeRegex } from '../../utils/code'
27
27
 
28
28
  export function tsconfigPathsPlugin(config: ResolvedConfig): Plugin | undefined {
29
- const patterns = configuredTsPathPatterns(config.root, config.workspaceRoot);
30
- if (patterns.length === 0) return undefined;
29
+ const patterns = configuredTsPathPatterns(config.root, config.workspaceRoot)
30
+ if (patterns.length === 0) return undefined
31
31
  // A TS `paths` key holds at most one `*`; everything else is literal.
32
32
  const filter = new RegExp(
33
- `^(?:${patterns
34
- .map(pattern => pattern.split('*').map(escapeRegex).join('[^:]*'))
35
- .join('|')})$`,
36
- );
33
+ `^(?:${patterns.map(pattern => pattern.split('*').map(escapeRegex).join('[^:]*')).join('|')})$`,
34
+ )
37
35
  return {
38
36
  name: 'pnext-tsconfig-paths',
39
37
  setup(build) {
@@ -42,9 +40,9 @@ export function tsconfigPathsPlugin(config: ResolvedConfig): Plugin | undefined
42
40
  config.root,
43
41
  path.join(args.resolveDir || config.root, 'pnext-resolve.ts'),
44
42
  args.path,
45
- );
46
- return resolved ? { path: resolved } : undefined;
47
- });
43
+ )
44
+ return resolved ? { path: resolved } : undefined
45
+ })
48
46
  },
49
- };
47
+ }
50
48
  }
@@ -1,51 +1,49 @@
1
- import { createHash } from 'node:crypto';
2
- import { existsSync } from 'node:fs';
3
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
4
- import path from 'node:path';
5
- import type { Plugin } from 'esbuild';
6
- import type { ResolvedConfig } from '../../config';
1
+ import { createHash } from 'node:crypto'
2
+ import { existsSync } from 'node:fs'
3
+ import { mkdir, readFile, writeFile } from 'node:fs/promises'
4
+ import path from 'node:path'
5
+ import type { Plugin } from 'esbuild'
6
+ import type { ResolvedConfig } from '../../config'
7
7
 
8
8
  interface WasmManifestBinding {
9
- name: string;
10
- filePath: string;
9
+ name: string
10
+ filePath: string
11
11
  }
12
12
 
13
- const WASM_MODULE_FILTER = /\.wasm\?module(?:[?#].*)?$/;
13
+ const WASM_MODULE_FILTER = /\.wasm\?module(?:[?#].*)?$/
14
14
 
15
15
  // Keep one normalized binding list per build output root, so middleware manifest
16
16
  // emission can include the same `wasm` entries Next’s real middleware manifest
17
17
  // emits.
18
- const manifestWasmBindings = new Map<string, Map<string, WasmManifestBinding>>();
18
+ const manifestWasmBindings = new Map<string, Map<string, WasmManifestBinding>>()
19
19
 
20
20
  function outPathKey(outPath: string): string {
21
- return path.resolve(outPath);
21
+ return path.resolve(outPath)
22
22
  }
23
23
 
24
24
  function sourcePathFromSpecifier(specifier: string, resolveDir: string): string | undefined {
25
- const [sourcePath] = specifier.split(/[?#]/, 1);
26
- if (!sourcePath) return undefined;
27
- return path.isAbsolute(sourcePath) ? sourcePath : path.resolve(resolveDir, sourcePath);
25
+ const [sourcePath] = specifier.split(/[?#]/, 1)
26
+ if (!sourcePath) return undefined
27
+ return path.isAbsolute(sourcePath) ? sourcePath : path.resolve(resolveDir, sourcePath)
28
28
  }
29
29
 
30
30
  function assetFileName(bytes: Uint8Array) {
31
- const hash = createHash('sha256').update(bytes).digest('hex').slice(0, 16);
32
- return `wasm_${hash}.wasm`;
31
+ const hash = createHash('sha256').update(bytes).digest('hex').slice(0, 16)
32
+ return `wasm_${hash}.wasm`
33
33
  }
34
34
 
35
35
  function registerManifestBinding(outPath: string, sourcePath: string, name: string) {
36
- const key = outPathKey(outPath);
37
- const bySource = manifestWasmBindings.get(key) ?? new Map<string, WasmManifestBinding>();
38
- bySource.set(sourcePath, { name, filePath: `server/edge-chunks/${name}` });
39
- manifestWasmBindings.set(key, bySource);
36
+ const key = outPathKey(outPath)
37
+ const bySource = manifestWasmBindings.get(key) ?? new Map<string, WasmManifestBinding>()
38
+ bySource.set(sourcePath, { name, filePath: `server/edge-chunks/${name}` })
39
+ manifestWasmBindings.set(key, bySource)
40
40
  }
41
41
 
42
- export function readMiddlewareWasmBindingsForOutPath(
43
- outPath: string,
44
- ): WasmManifestBinding[] {
45
- const key = outPathKey(outPath);
46
- const bindings = manifestWasmBindings.get(key);
47
- if (!bindings || bindings.size === 0) return [];
48
- return [...bindings.values()].sort((a, b) => a.name.localeCompare(b.name));
42
+ export function readMiddlewareWasmBindingsForOutPath(outPath: string): WasmManifestBinding[] {
43
+ const key = outPathKey(outPath)
44
+ const bindings = manifestWasmBindings.get(key)
45
+ if (!bindings || bindings.size === 0) return []
46
+ return [...bindings.values()].sort((a, b) => a.name.localeCompare(b.name))
49
47
  }
50
48
 
51
49
  /**
@@ -62,9 +60,9 @@ export function readMiddlewareWasmBindingsForOutPath(
62
60
  */
63
61
  // The bare form (`import { add } from './add.wasm'`) is turbopack's default
64
62
  // wasm semantics: the module's own exports become the module's named exports.
65
- const WASM_FILTER = /\.wasm(?:[?#].*)?$/;
66
- const WASM_INSTANCE_NAMESPACE = 'pnext-wasm-instance';
67
- const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
63
+ const WASM_FILTER = /\.wasm(?:[?#].*)?$/
64
+ const WASM_INSTANCE_NAMESPACE = 'pnext-wasm-instance'
65
+ const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/
68
66
 
69
67
  /**
70
68
  * ESM source instantiating `bytes` and re-exporting the wasm module's own exports by name (plus the
@@ -74,13 +72,13 @@ const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
74
72
  function wasmInstanceModuleSource(bytes: Uint8Array): string {
75
73
  const names = WebAssembly.Module.exports(new WebAssembly.Module(bytes.buffer as ArrayBuffer))
76
74
  .map(entry => entry.name)
77
- .filter(name => IDENTIFIER.test(name));
75
+ .filter(name => IDENTIFIER.test(name))
78
76
  return [
79
77
  `const bytes = Uint8Array.from(atob(${JSON.stringify(Buffer.from(bytes).toString('base64'))}), c => c.charCodeAt(0));`,
80
78
  'const wasmExports = new WebAssembly.Instance(new WebAssembly.Module(bytes), {}).exports;',
81
79
  ...names.map(name => `export const ${name} = wasmExports[${JSON.stringify(name)}];`),
82
80
  'export default wasmExports;',
83
- ].join('\n');
81
+ ].join('\n')
84
82
  }
85
83
 
86
84
  /**
@@ -90,44 +88,44 @@ function wasmInstanceModuleSource(bytes: Uint8Array): string {
90
88
  * per project root.
91
89
  */
92
90
  export function registerWasmModuleRuntime(config: ResolvedConfig): void {
93
- const root = path.resolve(config.root);
94
- if (wasmRuntimeRoots.has(root)) return;
95
- wasmRuntimeRoots.add(root);
91
+ const root = path.resolve(config.root)
92
+ if (wasmRuntimeRoots.has(root)) return
93
+ wasmRuntimeRoots.add(root)
96
94
  Bun.plugin({
97
95
  name: `pnext-compat-wasm-runtime-${root}`,
98
96
  setup(plugin) {
99
97
  plugin.onLoad({ filter: /\.wasm$/ }, async ({ path: file }) => ({
100
98
  contents: wasmInstanceModuleSource(new Uint8Array(await readFile(file))),
101
99
  loader: 'js',
102
- }));
100
+ }))
103
101
  },
104
- });
102
+ })
105
103
  }
106
104
 
107
- const wasmRuntimeRoots = new Set<string>();
105
+ const wasmRuntimeRoots = new Set<string>()
108
106
 
109
107
  export function wasmModulePlugin(config: ResolvedConfig): Plugin {
110
- const edgeChunkDir = path.join(config.outPath, 'server', 'edge-chunks');
108
+ const edgeChunkDir = path.join(config.outPath, 'server', 'edge-chunks')
111
109
  return {
112
110
  name: 'pnext-compat-wasm-module',
113
- setup(build) {
111
+ setup(build) {
114
112
  build.onResolve({ filter: WASM_MODULE_FILTER }, args => {
115
- const sourcePath = sourcePathFromSpecifier(args.path, args.resolveDir);
116
- if (!sourcePath) return undefined;
117
- return { path: sourcePath, namespace: 'pnext-wasm-module' };
118
- });
113
+ const sourcePath = sourcePathFromSpecifier(args.path, args.resolveDir)
114
+ if (!sourcePath) return undefined
115
+ return { path: sourcePath, namespace: 'pnext-wasm-module' }
116
+ })
119
117
 
120
118
  build.onLoad({ filter: /.*/, namespace: 'pnext-wasm-module' }, async args => {
121
- const sourcePath = path.resolve(args.path);
122
- const bytes = new Uint8Array(await readFile(sourcePath));
123
- const name = assetFileName(bytes);
124
- const outFile = path.join(edgeChunkDir, name);
119
+ const sourcePath = path.resolve(args.path)
120
+ const bytes = new Uint8Array(await readFile(sourcePath))
121
+ const name = assetFileName(bytes)
122
+ const outFile = path.join(edgeChunkDir, name)
125
123
  if (!existsSync(outFile)) {
126
- await mkdir(path.dirname(outFile), { recursive: true });
127
- await writeFile(outFile, bytes);
124
+ await mkdir(path.dirname(outFile), { recursive: true })
125
+ await writeFile(outFile, bytes)
128
126
  }
129
- registerManifestBinding(config.outPath, sourcePath, name);
130
- const moduleBytes = JSON.stringify([...bytes]);
127
+ registerManifestBinding(config.outPath, sourcePath, name)
128
+ const moduleBytes = JSON.stringify([...bytes])
131
129
  return {
132
130
  contents: [
133
131
  `const bytes = new Uint8Array(${moduleBytes});`,
@@ -135,19 +133,19 @@ export function wasmModulePlugin(config: ResolvedConfig): Plugin {
135
133
  'export default module;',
136
134
  ].join('\n'),
137
135
  loader: 'js',
138
- };
139
- });
136
+ }
137
+ })
140
138
 
141
139
  // Bare `.wasm` (no `?module`): the instance's exports ARE the module's.
142
140
  build.onResolve({ filter: WASM_FILTER }, args => {
143
- if (WASM_MODULE_FILTER.test(args.path)) return undefined;
144
- const sourcePath = sourcePathFromSpecifier(args.path, args.resolveDir);
145
- return sourcePath ? { path: sourcePath, namespace: WASM_INSTANCE_NAMESPACE } : undefined;
146
- });
141
+ if (WASM_MODULE_FILTER.test(args.path)) return undefined
142
+ const sourcePath = sourcePathFromSpecifier(args.path, args.resolveDir)
143
+ return sourcePath ? { path: sourcePath, namespace: WASM_INSTANCE_NAMESPACE } : undefined
144
+ })
147
145
  build.onLoad({ filter: /.*/, namespace: WASM_INSTANCE_NAMESPACE }, async args => ({
148
146
  contents: wasmInstanceModuleSource(new Uint8Array(await readFile(path.resolve(args.path)))),
149
147
  loader: 'js',
150
- }));
148
+ }))
151
149
  },
152
- };
150
+ }
153
151
  }