@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,8 +1,8 @@
1
- import { existsSync } from 'node:fs';
2
- import { createRequire } from 'node:module';
3
- import path from 'node:path';
4
- import { pathToFileHref } from '../../config';
5
- import { DEFAULT_BODY_LIMIT_BYTES } from './endpoint';
1
+ import { existsSync } from 'node:fs'
2
+ import { createRequire } from 'node:module'
3
+ import path from 'node:path'
4
+ import { pathToFileHref } from '../../config'
5
+ import { DEFAULT_BODY_LIMIT_BYTES } from './endpoint'
6
6
 
7
7
  /**
8
8
  * Server-actions options read from the app's next.config in compat mode:
@@ -11,33 +11,33 @@ import { DEFAULT_BODY_LIMIT_BYTES } from './endpoint';
11
11
  * message - the size-limit e2e suite asserts the text.
12
12
  */
13
13
  export const SIZE_LIMIT_ERROR =
14
- 'Server Actions Size Limit must be a valid number or filesize format larger than 1MB';
14
+ 'Server Actions Size Limit must be a valid number or filesize format larger than 1MB'
15
15
 
16
16
  export interface ServerActionsConfig {
17
- bodySizeLimitBytes: number;
17
+ bodySizeLimitBytes: number
18
18
  }
19
19
 
20
20
  export interface NextConfigShape {
21
- serverActions?: { bodySizeLimit?: unknown };
22
- experimental?: { serverActions?: { bodySizeLimit?: unknown } | boolean };
23
- rewrites?: () => unknown;
24
- redirects?: () => unknown;
21
+ serverActions?: { bodySizeLimit?: unknown }
22
+ experimental?: { serverActions?: { bodySizeLimit?: unknown } | boolean }
23
+ rewrites?: () => unknown
24
+ redirects?: () => unknown
25
25
  }
26
26
 
27
27
  export async function loadServerActionsConfig(root: string): Promise<ServerActionsConfig> {
28
- const config = await loadResolvedNextConfig(root);
29
- const experimental = config?.experimental;
28
+ const config = await loadResolvedNextConfig(root)
29
+ const experimental = config?.experimental
30
30
  const limit =
31
31
  config?.serverActions?.bodySizeLimit ??
32
32
  (experimental && typeof experimental === 'object' && experimental.serverActions
33
33
  ? (experimental.serverActions as { bodySizeLimit?: unknown }).bodySizeLimit
34
- : undefined);
35
- if (limit === undefined) return { bodySizeLimitBytes: DEFAULT_BODY_LIMIT_BYTES };
36
- return { bodySizeLimitBytes: parseBodySizeLimit(limit) };
34
+ : undefined)
35
+ if (limit === undefined) return { bodySizeLimitBytes: DEFAULT_BODY_LIMIT_BYTES }
36
+ return { bodySizeLimitBytes: parseBodySizeLimit(limit) }
37
37
  }
38
38
 
39
39
  export async function loadResolvedNextConfig(root: string): Promise<NextConfigShape | undefined> {
40
- return (await loadNextConfigFromStore()) ?? (await loadNextConfig(root));
40
+ return (await loadNextConfigFromStore()) ?? (await loadNextConfig(root))
41
41
  }
42
42
 
43
43
  /**
@@ -50,51 +50,51 @@ export async function loadResolvedNextConfig(root: string): Promise<NextConfigSh
50
50
  */
51
51
  async function loadNextConfigFromStore(): Promise<NextConfigShape | undefined> {
52
52
  try {
53
- const { getNextConfig } = await import('../next/config-loader');
54
- const store: NextConfigShape = getNextConfig();
55
- return store && Object.keys(store).length > 0 ? store : undefined;
53
+ const { getNextConfig } = await import('../next/config-loader')
54
+ const store: NextConfigShape = getNextConfig()
55
+ return store && Object.keys(store).length > 0 ? store : undefined
56
56
  } catch {
57
- return undefined;
57
+ return undefined
58
58
  }
59
59
  }
60
60
 
61
61
  export async function loadNextConfig(root: string): Promise<NextConfigShape | undefined> {
62
62
  for (const name of ['next.config.js', 'next.config.mjs', 'next.config.cjs']) {
63
- const file = path.join(root, name);
64
- if (!existsSync(file)) continue;
63
+ const file = path.join(root, name)
64
+ if (!existsSync(file)) continue
65
65
  try {
66
66
  if (name.endsWith('.js') || name.endsWith('.cjs')) {
67
- const requireFrom = createRequire(path.join(root, 'noop.js'));
68
- delete requireFrom.cache[requireFrom.resolve(file)];
69
- const required: unknown = requireFrom(file);
67
+ const requireFrom = createRequire(path.join(root, 'noop.js'))
68
+ delete requireFrom.cache[requireFrom.resolve(file)]
69
+ const required: unknown = requireFrom(file)
70
70
  let value =
71
71
  required && typeof required === 'object' && 'default' in required
72
72
  ? required.default
73
- : required;
73
+ : required
74
74
  if (typeof value === 'function') {
75
75
  value = await (value as (phase: string, ctx: { defaultConfig: object }) => unknown)(
76
76
  'phase-production-server',
77
77
  { defaultConfig: {} },
78
- );
78
+ )
79
79
  }
80
- return value ?? undefined;
80
+ return value ?? undefined
81
81
  }
82
82
  const loaded = (await import(`${pathToFileHref(file)}?v=${Date.now()}`)) as {
83
- default?: unknown;
84
- };
85
- let value: unknown = loaded.default ?? loaded;
83
+ default?: unknown
84
+ }
85
+ let value: unknown = loaded.default ?? loaded
86
86
  if (typeof value === 'function') {
87
87
  value = await (value as (phase: string, ctx: { defaultConfig: object }) => unknown)(
88
88
  'phase-production-server',
89
89
  { defaultConfig: {} },
90
- );
90
+ )
91
91
  }
92
- return (value ?? undefined);
92
+ return value ?? undefined
93
93
  } catch {
94
- return undefined;
94
+ return undefined
95
95
  }
96
96
  }
97
- return undefined;
97
+ return undefined
98
98
  }
99
99
 
100
100
  /**
@@ -107,58 +107,57 @@ export async function loadNextConfig(root: string): Promise<NextConfigShape | un
107
107
  * skipped here - the lazy per-request path still validates.
108
108
  */
109
109
  export function validateServerActionsConfigSync(root: string): void {
110
- let config: NextConfigShape | undefined;
111
- const requireFrom = createRequire(path.join(root, 'noop.js'));
110
+ let config: NextConfigShape | undefined
111
+ const requireFrom = createRequire(path.join(root, 'noop.js'))
112
112
  for (const name of ['next.config.js', 'next.config.cjs']) {
113
- const file = path.join(root, name);
114
- if (!existsSync(file)) continue;
113
+ const file = path.join(root, name)
114
+ if (!existsSync(file)) continue
115
115
  try {
116
- delete requireFrom.cache[requireFrom.resolve(file)];
117
- let value: unknown = requireFrom(file);
116
+ delete requireFrom.cache[requireFrom.resolve(file)]
117
+ let value: unknown = requireFrom(file)
118
118
  if (value && typeof value === 'object' && 'default' in value) {
119
- value = (value as { default?: unknown }).default;
119
+ value = (value as { default?: unknown }).default
120
120
  }
121
121
  if (typeof value === 'function') {
122
122
  value = (value as (phase: string, ctx: { defaultConfig: object }) => unknown)(
123
123
  'phase-production-server',
124
124
  { defaultConfig: {} },
125
- );
125
+ )
126
126
  }
127
- config = value as NextConfigShape | undefined;
127
+ config = value as NextConfigShape | undefined
128
128
  } catch (error) {
129
129
  // A malformed limit surfaced synchronously from require's module eval is
130
130
  // unlikely; any load failure means we can't validate here — defer.
131
- if (error instanceof Error && error.message === SIZE_LIMIT_ERROR) throw error;
132
- return;
131
+ if (error instanceof Error && error.message === SIZE_LIMIT_ERROR) throw error
132
+ return
133
133
  }
134
- break;
134
+ break
135
135
  }
136
- if (!config) return;
137
- const experimental = config.experimental;
136
+ if (!config) return
137
+ const experimental = config.experimental
138
138
  const limit =
139
139
  config.serverActions?.bodySizeLimit ??
140
140
  (experimental && typeof experimental === 'object' && experimental.serverActions
141
141
  ? (experimental.serverActions as { bodySizeLimit?: unknown }).bodySizeLimit
142
- : undefined);
143
- if (limit === undefined) return;
144
- parseBodySizeLimit(limit);
142
+ : undefined)
143
+ if (limit === undefined) return
144
+ parseBodySizeLimit(limit)
145
145
  }
146
146
 
147
147
  /** Parse '2mb' / '500kb' / bytes number into bytes; throw SIZE_LIMIT_ERROR. */
148
148
  export function parseBodySizeLimit(value: unknown): number {
149
149
  if (typeof value === 'number') {
150
- if (!Number.isFinite(value) || value <= 0) throw new Error(SIZE_LIMIT_ERROR);
151
- return Math.floor(value);
150
+ if (!Number.isFinite(value) || value <= 0) throw new Error(SIZE_LIMIT_ERROR)
151
+ return Math.floor(value)
152
152
  }
153
153
  if (typeof value === 'string') {
154
- const match = /^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i.exec(value.trim());
155
- if (!match) throw new Error(SIZE_LIMIT_ERROR);
156
- const amount = Number(match[1]);
157
- if (!Number.isFinite(amount) || amount <= 0) throw new Error(SIZE_LIMIT_ERROR);
158
- const unit = (match[2] ?? 'b').toLowerCase();
159
- const factor =
160
- unit === 'gb' ? 1024 ** 3 : unit === 'mb' ? 1024 ** 2 : unit === 'kb' ? 1024 : 1;
161
- return Math.floor(amount * factor);
154
+ const match = /^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i.exec(value.trim())
155
+ if (!match) throw new Error(SIZE_LIMIT_ERROR)
156
+ const amount = Number(match[1])
157
+ if (!Number.isFinite(amount) || amount <= 0) throw new Error(SIZE_LIMIT_ERROR)
158
+ const unit = (match[2] ?? 'b').toLowerCase()
159
+ const factor = unit === 'gb' ? 1024 ** 3 : unit === 'mb' ? 1024 ** 2 : unit === 'kb' ? 1024 : 1
160
+ return Math.floor(amount * factor)
162
161
  }
163
- throw new Error(SIZE_LIMIT_ERROR);
162
+ throw new Error(SIZE_LIMIT_ERROR)
164
163
  }
@@ -7,10 +7,10 @@
7
7
  * file with named exports; inline actions inside components are best-effort.
8
8
  */
9
9
 
10
- export { actionId, workspaceRelative } from './ids';
10
+ export { actionId, workspaceRelative } from './ids'
11
11
 
12
- const DIRECTIVE = /^(['"])use server\1\s*;?$/;
13
- const CACHE_DIRECTIVE = /^(['"])use cache\1\s*;?$/;
12
+ const DIRECTIVE = /^(['"])use server\1\s*;?$/
13
+ const CACHE_DIRECTIVE = /^(['"])use cache\1\s*;?$/
14
14
 
15
15
  /**
16
16
  * True when the file's FIRST statement is a 'use server' directive, marking the
@@ -20,8 +20,8 @@ const CACHE_DIRECTIVE = /^(['"])use cache\1\s*;?$/;
20
20
  * a real JS engine would when looking for a directive prologue.
21
21
  */
22
22
  export function moduleLevelUseServer(source: string): boolean {
23
- const first = firstStatementText(stripLeading(source));
24
- return first !== undefined && DIRECTIVE.test(first.trim());
23
+ const first = firstStatementText(stripLeading(source))
24
+ return first !== undefined && DIRECTIVE.test(first.trim())
25
25
  }
26
26
 
27
27
  /**
@@ -31,19 +31,19 @@ export function moduleLevelUseServer(source: string): boolean {
31
31
  * variants are function-level only in practice and excluded.
32
32
  */
33
33
  export function moduleLevelUseCache(source: string): boolean {
34
- const first = firstStatementText(stripLeading(source));
35
- return first !== undefined && CACHE_DIRECTIVE.test(first.trim());
34
+ const first = firstStatementText(stripLeading(source))
35
+ return first !== undefined && CACHE_DIRECTIVE.test(first.trim())
36
36
  }
37
37
 
38
38
  export interface InlineAction {
39
39
  /** Local (and, when exported, exported) name of the action function. */
40
- name: string;
40
+ name: string
41
41
  /** True when the function is a named export (`export ...` / re-exported). */
42
- exported: boolean;
42
+ exported: boolean
43
43
  /** Character offset of the start of the matched declaration in `source`. */
44
- start: number;
44
+ start: number
45
45
  /** Character offset just past the `"use server"` directive that marked it. */
46
- directiveEnd: number;
46
+ directiveEnd: number
47
47
  }
48
48
 
49
49
  /**
@@ -66,27 +66,27 @@ export interface InlineAction {
66
66
  * module-level 'use server' file for the reliable wire path.
67
67
  */
68
68
  export function inlineUseServerFunctions(source: string): InlineAction[] {
69
- const found: InlineAction[] = [];
70
- const seen = new Set<string>();
69
+ const found: InlineAction[] = []
70
+ const seen = new Set<string>()
71
71
 
72
72
  // Shape 1: [export] [async] function NAME(...) { "use server"
73
73
  const fnDecl =
74
- /(\bexport\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\([^)]*\)\s*\{\s*(['"])use server\3\s*;?/g;
75
- collect(fnDecl, source, found, seen, { nameGroup: 2, exportGroup: 1, dirGroup: 3 });
74
+ /(\bexport\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\([^)]*\)\s*\{\s*(['"])use server\3\s*;?/g
75
+ collect(fnDecl, source, found, seen, { nameGroup: 2, exportGroup: 1, dirGroup: 3 })
76
76
 
77
77
  // Shape 2: [export] const NAME = [async] (...) => { "use server"
78
78
  // also covers `= async function (...) { "use server"`
79
79
  const arrowOrExpr =
80
- /(\bexport\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[A-Za-z_$][\w$]*|function\s*\*?\s*\([^)]*\))\s*(?:=>\s*)?\{\s*(['"])use server\3\s*;?/g;
81
- collect(arrowOrExpr, source, found, seen, { nameGroup: 2, exportGroup: 1, dirGroup: 3 });
80
+ /(\bexport\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[A-Za-z_$][\w$]*|function\s*\*?\s*\([^)]*\))\s*(?:=>\s*)?\{\s*(['"])use server\3\s*;?/g
81
+ collect(arrowOrExpr, source, found, seen, { nameGroup: 2, exportGroup: 1, dirGroup: 3 })
82
82
 
83
- return found.sort((a, b) => a.start - b.start);
83
+ return found.sort((a, b) => a.start - b.start)
84
84
  }
85
85
 
86
86
  interface Groups {
87
- nameGroup: number;
88
- exportGroup: number;
89
- dirGroup: number;
87
+ nameGroup: number
88
+ exportGroup: number
89
+ dirGroup: number
90
90
  }
91
91
 
92
92
  function collect(
@@ -96,17 +96,17 @@ function collect(
96
96
  seen: Set<string>,
97
97
  groups: Groups,
98
98
  ) {
99
- let match: RegExpExecArray | null;
99
+ let match: RegExpExecArray | null
100
100
  while ((match = pattern.exec(source))) {
101
- const name = match[groups.nameGroup];
102
- if (!name || seen.has(name)) continue;
103
- seen.add(name);
101
+ const name = match[groups.nameGroup]
102
+ if (!name || seen.has(name)) continue
103
+ seen.add(name)
104
104
  out.push({
105
105
  name,
106
106
  exported: Boolean(match[groups.exportGroup]),
107
107
  start: match.index,
108
108
  directiveEnd: match.index + match[0].length,
109
- });
109
+ })
110
110
  }
111
111
  }
112
112
 
@@ -117,39 +117,39 @@ function collect(
117
117
  * `export { a as b }`, `export default`.
118
118
  */
119
119
  export function moduleActionExports(source: string): string[] {
120
- const names = new Set<string>();
120
+ const names = new Set<string>()
121
121
 
122
122
  // export [async] function NAME / export const|let|var NAME
123
123
  const declRe =
124
- /\bexport\s+(?:async\s+)?(?:function\s*\*?\s+|const\s+|let\s+|var\s+|class\s+)([A-Za-z_$][\w$]*)/g;
125
- for (let m; (m = declRe.exec(source)); ) if (m[1]) names.add(m[1]);
124
+ /\bexport\s+(?:async\s+)?(?:function\s*\*?\s+|const\s+|let\s+|var\s+|class\s+)([A-Za-z_$][\w$]*)/g
125
+ for (let m; (m = declRe.exec(source));) if (m[1]) names.add(m[1])
126
126
 
127
127
  // export default ...
128
- if (/\bexport\s+default\b/.test(source)) names.add('default');
128
+ if (/\bexport\s+default\b/.test(source)) names.add('default')
129
129
 
130
130
  // export { a, b as c } (ignore `export type { ... }`)
131
- const listRe = /\bexport\s+(?!type\b)\{([^}]*)\}/g;
132
- for (let m; (m = listRe.exec(source)); ) {
131
+ const listRe = /\bexport\s+(?!type\b)\{([^}]*)\}/g
132
+ for (let m; (m = listRe.exec(source));) {
133
133
  for (const part of (m[1] ?? '').split(',')) {
134
- const trimmed = part.trim();
135
- if (!trimmed || trimmed.startsWith('type ')) continue;
136
- const exportedName = /\bas\s+([A-Za-z_$][\w$]*)\s*$/.exec(trimmed)?.[1];
137
- const name = exportedName ?? trimmed;
138
- if (/^[A-Za-z_$][\w$]*$/.test(name)) names.add(name);
134
+ const trimmed = part.trim()
135
+ if (!trimmed || trimmed.startsWith('type ')) continue
136
+ const exportedName = /\bas\s+([A-Za-z_$][\w$]*)\s*$/.exec(trimmed)?.[1]
137
+ const name = exportedName ?? trimmed
138
+ if (/^[A-Za-z_$][\w$]*$/.test(name)) names.add(name)
139
139
  }
140
140
  }
141
141
 
142
- return [...names];
142
+ return [...names]
143
143
  }
144
144
 
145
145
  /** Strip a leading shebang and BOM so directive detection starts at real code. */
146
146
  function stripLeading(source: string): string {
147
- let s = source.replace(/^\uFEFF/, '');
147
+ let s = source.replace(/^\uFEFF/, '')
148
148
  if (s.startsWith('#!')) {
149
- const nl = s.indexOf('\n');
150
- s = nl === -1 ? '' : s.slice(nl + 1);
149
+ const nl = s.indexOf('\n')
150
+ s = nl === -1 ? '' : s.slice(nl + 1)
151
151
  }
152
- return s;
152
+ return s
153
153
  }
154
154
 
155
155
  /**
@@ -158,34 +158,34 @@ function stripLeading(source: string): string {
158
158
  * `;`-or-newline-terminated token run.
159
159
  */
160
160
  function firstStatementText(source: string): string | undefined {
161
- let i = 0;
162
- const n = source.length;
161
+ let i = 0
162
+ const n = source.length
163
163
  while (i < n) {
164
- const ch = source[i];
164
+ const ch = source[i]
165
165
  if (ch === ' ' || ch === '\t' || ch === '\r' || ch === '\n') {
166
- i++;
167
- continue;
166
+ i++
167
+ continue
168
168
  }
169
169
  if (ch === '/' && source[i + 1] === '/') {
170
- const nl = source.indexOf('\n', i);
171
- if (nl === -1) return undefined;
172
- i = nl + 1;
173
- continue;
170
+ const nl = source.indexOf('\n', i)
171
+ if (nl === -1) return undefined
172
+ i = nl + 1
173
+ continue
174
174
  }
175
175
  if (ch === '/' && source[i + 1] === '*') {
176
- const end = source.indexOf('*/', i + 2);
177
- if (end === -1) return undefined;
178
- i = end + 2;
179
- continue;
176
+ const end = source.indexOf('*/', i + 2)
177
+ if (end === -1) return undefined
178
+ i = end + 2
179
+ continue
180
180
  }
181
- break;
181
+ break
182
182
  }
183
- if (i >= n) return undefined;
183
+ if (i >= n) return undefined
184
184
  // Read until end of line or a semicolon (directive is a single statement).
185
- let j = i;
186
- while (j < n && source[j] !== '\n' && source[j] !== ';') j++;
187
- const end = source[j] === ';' ? j + 1 : j;
188
- return source.slice(i, end);
185
+ let j = i
186
+ while (j < n && source[j] !== '\n' && source[j] !== ';') j++
187
+ const end = source[j] === ';' ? j + 1 : j
188
+ return source.slice(i, end)
189
189
  }
190
190
 
191
191
  /**
@@ -195,14 +195,14 @@ function firstStatementText(source: string): string | undefined {
195
195
  * restricted to identified actions.
196
196
  */
197
197
  export function opensWithUseServerDirective(fn: unknown): boolean {
198
- if (typeof fn !== 'function') return false;
199
- let source: string;
198
+ if (typeof fn !== 'function') return false
199
+ let source: string
200
200
  try {
201
- source = String(fn);
201
+ source = String(fn)
202
202
  } catch {
203
- return false;
203
+ return false
204
204
  }
205
- const body = source.indexOf('{', source.indexOf(')') + 1);
206
- if (body === -1) return false;
207
- return /^\s*(['"])use server\1/.test(source.slice(body + 1));
205
+ const body = source.indexOf('{', source.indexOf(')') + 1)
206
+ if (body === -1) return false
207
+ return /^\s*(['"])use server\1/.test(source.slice(body + 1))
208
208
  }