@wular/pnext 0.0.3 → 0.0.6

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 (392) hide show
  1. package/README.md +11 -11
  2. package/bin/pnext +1 -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 +1 -1
  8. package/reference/config.md +2 -2
  9. package/reference/css.md +13 -9
  10. package/reference/dev.md +1 -1
  11. package/reference/metadata.md +7 -7
  12. package/reference/navigation.md +35 -28
  13. package/reference/performance.md +70 -70
  14. package/reference/rendering.md +17 -17
  15. package/reference/routing.md +17 -17
  16. package/reference/typegen.md +12 -8
  17. package/src/api/cache.ts +36 -37
  18. package/src/api/client-cache.ts +2 -2
  19. package/src/api/client-navigation.ts +113 -109
  20. package/src/api/dynamic.tsx +58 -55
  21. package/src/api/link.tsx +49 -52
  22. package/src/api/navigation.ts +59 -58
  23. package/src/api/server.ts +152 -144
  24. package/src/api/suspense.ts +4 -4
  25. package/src/cli/adapters/vercel-warm.ts +126 -121
  26. package/src/cli/adapters/vercel.ts +437 -443
  27. package/src/cli/analyze.ts +333 -144
  28. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  29. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  30. package/src/cli/build.ts +976 -978
  31. package/src/cli/create.ts +71 -63
  32. package/src/cli/dev.ts +116 -116
  33. package/src/cli/index.ts +88 -85
  34. package/src/cli/migrate/package-json.ts +73 -71
  35. package/src/cli/migrate/report.ts +32 -33
  36. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  37. package/src/cli/migrate/scan.ts +46 -46
  38. package/src/cli/migrate/spinner.ts +9 -9
  39. package/src/cli/migrate/tsconfig.ts +35 -35
  40. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  41. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  42. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  43. package/src/cli/start.ts +65 -66
  44. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  45. package/src/client/build.ts +794 -768
  46. package/src/client/chunk-fold.ts +245 -240
  47. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  48. package/src/client/entry.ts +162 -147
  49. package/src/client/prebuilt.ts +231 -223
  50. package/src/client/profile.ts +29 -29
  51. package/src/client/react-compiler.ts +20 -15
  52. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  53. package/src/client/reference-stub.ts +51 -51
  54. package/src/client/reference.ts +19 -19
  55. package/src/{api → client}/router/events.ts +17 -17
  56. package/src/{api → client}/router/history.ts +16 -16
  57. package/src/{api → client}/router/hub.ts +52 -53
  58. package/src/{api/router.ts → client/router/index.ts} +61 -60
  59. package/src/{api → client}/router/policies.ts +24 -24
  60. package/src/{api → client}/router/runtime.ts +1988 -1961
  61. package/src/{api → client}/router/types.ts +93 -98
  62. package/src/compat/actions/client-plugin.ts +42 -43
  63. package/src/compat/actions/client-stub.ts +14 -14
  64. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  65. package/src/compat/actions/config.ts +63 -64
  66. package/src/compat/actions/detect.ts +68 -68
  67. package/src/compat/actions/discovery.ts +105 -105
  68. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  69. package/src/compat/actions/early-submit.ts +1 -1
  70. package/src/compat/actions/endpoint.ts +198 -198
  71. package/src/compat/actions/extensions.ts +811 -0
  72. package/src/compat/actions/flight.ts +23 -23
  73. package/src/compat/actions/form-state.ts +34 -34
  74. package/src/compat/actions/hoist.ts +382 -236
  75. package/src/compat/actions/ids.ts +7 -12
  76. package/src/compat/actions/index.ts +8 -8
  77. package/src/compat/actions/instances.ts +46 -46
  78. package/src/compat/actions/origin.ts +47 -48
  79. package/src/compat/actions/protocol.ts +22 -22
  80. package/src/compat/actions/registry.ts +19 -19
  81. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  82. package/src/compat/actions/rewrite.ts +125 -125
  83. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  84. package/src/compat/actions/serve.ts +132 -136
  85. package/src/compat/actions/server-tag.ts +4 -4
  86. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  87. package/src/compat/actions/unrecognized-error.ts +4 -4
  88. package/src/compat/{index.ts → aliases.ts} +112 -109
  89. package/src/compat/bundler/bun-externals.ts +18 -18
  90. package/src/compat/bundler/cjs-exports.ts +271 -223
  91. package/src/compat/bundler/config.ts +116 -111
  92. package/src/compat/bundler/externals.ts +12 -12
  93. package/src/compat/bundler/import-meta-url.ts +19 -19
  94. package/src/compat/bundler/modularize-imports.ts +36 -33
  95. package/src/compat/bundler/new-url-asset.ts +22 -24
  96. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  97. package/src/compat/bundler/polyfill.ts +28 -28
  98. package/src/compat/bundler/react-compiler.ts +35 -29
  99. package/src/compat/bundler/react-profiler.tsx +11 -11
  100. package/src/compat/bundler/relay-transform.ts +48 -47
  101. package/src/compat/bundler/require-context.ts +119 -113
  102. package/src/compat/bundler/resolve-extensions.ts +19 -19
  103. package/src/compat/bundler/source-cache.ts +25 -25
  104. package/src/compat/bundler/static-imports.ts +7 -7
  105. package/src/compat/bundler/symlink-imports.ts +46 -46
  106. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  107. package/src/compat/bundler/wasm.ts +58 -60
  108. package/src/compat/bundler/webpack-loaders.ts +254 -241
  109. package/src/compat/bundler/worker.ts +101 -104
  110. package/src/compat/cache/build-flags.ts +29 -29
  111. package/src/compat/cache/build-prerender-errors.ts +40 -44
  112. package/src/compat/cache/custom-handler.ts +60 -53
  113. package/src/compat/cache/fetch-patch.ts +240 -240
  114. package/src/compat/cache/handler.ts +27 -31
  115. package/src/compat/cache/modern-handler.ts +148 -126
  116. package/src/compat/cache/resume-data-cache.ts +47 -45
  117. package/src/compat/cache/revalidate.ts +233 -232
  118. package/src/compat/cache/runtime-error.ts +35 -35
  119. package/src/compat/cache/use-cache-transform.ts +442 -417
  120. package/src/compat/cache/use-cache.ts +650 -614
  121. package/src/compat/cache-control.ts +140 -142
  122. package/src/compat/client/base-path.ts +21 -20
  123. package/src/compat/client/css-order.ts +18 -18
  124. package/src/compat/client/errors/bare-boundary.ts +11 -11
  125. package/src/compat/client/errors/control-flow.ts +23 -23
  126. package/src/compat/client/errors/error-boundary.ts +61 -61
  127. package/src/compat/client/errors/global-error.ts +101 -91
  128. package/src/compat/client/errors/install.ts +71 -72
  129. package/src/compat/client/errors/lazy.ts +23 -23
  130. package/src/compat/client/errors/primitive-throw.ts +47 -45
  131. package/src/compat/client/errors/soft-refresh.ts +4 -4
  132. package/src/compat/client/link-status.ts +33 -33
  133. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  134. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  135. package/src/compat/client/navigation-scroll.ts +63 -63
  136. package/src/compat/client/optimistic-routing.ts +93 -88
  137. package/src/compat/client/prefetch-cache.ts +23 -24
  138. package/src/compat/client/route-announcer.ts +35 -35
  139. package/src/compat/client/segment-cache-policy.ts +20 -20
  140. package/src/compat/client/segment-cache.ts +309 -315
  141. package/src/compat/client/segment-prefetch.ts +127 -132
  142. package/src/compat/client/trailing-slash.ts +5 -4
  143. package/src/compat/css/chunking.ts +113 -116
  144. package/src/compat/css/inline-css.ts +21 -21
  145. package/src/compat/css/lightningcss.ts +37 -38
  146. package/src/compat/css/modules.ts +161 -175
  147. package/src/compat/css/nonce.ts +7 -7
  148. package/src/compat/css/sass-plugin.ts +18 -21
  149. package/src/compat/css/sass.ts +150 -152
  150. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  151. package/src/compat/css/styled-jsx.ts +21 -21
  152. package/src/compat/edge-runtime.ts +27 -27
  153. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  154. package/src/compat/export/client.ts +29 -31
  155. package/src/compat/export/{index.ts → emit.ts} +111 -110
  156. package/src/compat/export/standalone.ts +62 -54
  157. package/src/compat/image-optimizer/cache.ts +51 -49
  158. package/src/compat/image-optimizer/detect.ts +52 -52
  159. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  160. package/src/compat/image-optimizer/source.ts +77 -80
  161. package/src/compat/lifecycle/after-scope.ts +26 -26
  162. package/src/compat/lifecycle/after.ts +48 -45
  163. package/src/compat/lifecycle/error-funnel.ts +98 -102
  164. package/src/compat/lifecycle/error-serialize.ts +30 -26
  165. package/src/compat/lifecycle/error-ui.ts +67 -32
  166. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  167. package/src/compat/lifecycle/instrumentation.ts +85 -85
  168. package/src/compat/lifecycle/node-console.ts +11 -11
  169. package/src/compat/lifecycle/testmode.ts +160 -132
  170. package/src/compat/mdx/compile.ts +60 -57
  171. package/src/compat/mdx/plugin.ts +11 -11
  172. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  173. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  174. package/src/compat/metadata.ts +75 -81
  175. package/src/compat/next/cache.ts +68 -69
  176. package/src/compat/next/canonical-url.ts +9 -9
  177. package/src/compat/next/client-cache.ts +19 -19
  178. package/src/compat/next/client-navigation.ts +112 -116
  179. package/src/compat/next/client-only.ts +1 -1
  180. package/src/compat/next/client-script.tsx +99 -93
  181. package/src/compat/next/client-server.ts +10 -10
  182. package/src/compat/next/config-loader.ts +176 -173
  183. package/src/compat/next/config.ts +7 -7
  184. package/src/compat/next/constants.cjs +6 -6
  185. package/src/compat/next/constants.ts +6 -6
  186. package/src/compat/next/custom-server.ts +26 -24
  187. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  188. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  189. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  190. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  191. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  192. package/src/compat/next/dynamic.tsx +21 -18
  193. package/src/compat/next/error.tsx +52 -52
  194. package/src/compat/next/font/cache.ts +74 -74
  195. package/src/compat/next/font/google.ts +2 -2
  196. package/src/compat/next/font/index.ts +1 -1
  197. package/src/compat/next/font/local.ts +3 -3
  198. package/src/compat/next/font/runtime-client.ts +17 -15
  199. package/src/compat/next/font/runtime.ts +443 -408
  200. package/src/compat/next/font/shared.ts +120 -108
  201. package/src/compat/next/form.tsx +63 -63
  202. package/src/compat/next/head.tsx +2 -2
  203. package/src/compat/next/headers.ts +103 -95
  204. package/src/compat/next/image/client.tsx +220 -0
  205. package/src/compat/next/image/config.ts +56 -58
  206. package/src/compat/next/image/optimizer.ts +40 -36
  207. package/src/compat/next/image/patterns.ts +37 -40
  208. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  209. package/src/compat/next/image/shared.ts +65 -57
  210. package/src/compat/next/image/static-metadata.ts +98 -107
  211. package/src/compat/next/image/validate.ts +79 -88
  212. package/src/compat/next/image.tsx +19 -23
  213. package/src/compat/next/index.ts +1 -1
  214. package/src/compat/next/legacy-image.tsx +59 -60
  215. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  216. package/src/compat/next/link.tsx +158 -158
  217. package/src/compat/next/navigation.cjs +12 -3
  218. package/src/compat/next/navigation.ts +48 -50
  219. package/src/compat/next/offline.ts +27 -27
  220. package/src/compat/next/og.ts +121 -124
  221. package/src/compat/next/preferred-region.ts +13 -14
  222. package/src/compat/next/redirects.ts +58 -56
  223. package/src/compat/next/resource-hints.ts +73 -76
  224. package/src/compat/next/rewrites.ts +130 -133
  225. package/src/compat/next/root-params.ts +45 -45
  226. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  227. package/src/compat/next/router.cjs +4 -2
  228. package/src/compat/next/router.ts +58 -61
  229. package/src/compat/next/script.tsx +108 -108
  230. package/src/compat/next/server-only.ts +1 -1
  231. package/src/compat/next/server.ts +19 -19
  232. package/src/compat/next/svgr.ts +18 -17
  233. package/src/compat/next/telemetry.ts +24 -24
  234. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  235. package/src/compat/next/user-agent.ts +53 -49
  236. package/src/compat/next/web-vitals.ts +22 -24
  237. package/src/compat/otel/api.ts +41 -41
  238. package/src/compat/otel/client-trace-metadata.ts +25 -27
  239. package/src/compat/otel/fetch-span.ts +29 -29
  240. package/src/compat/otel/tracer.ts +331 -331
  241. package/src/compat/pages/api.ts +456 -0
  242. package/src/compat/pages/client-plugin.ts +36 -36
  243. package/src/compat/pages/router-state.ts +34 -34
  244. package/src/compat/pages/{index.ts → router.ts} +130 -135
  245. package/src/compat/ppr/io.ts +12 -12
  246. package/src/compat/ppr/missing-root-params.ts +34 -38
  247. package/src/compat/ppr/root-params-scan.ts +66 -66
  248. package/src/compat/ppr/root-params-transform.ts +24 -26
  249. package/src/compat/ppr/root-params.ts +30 -30
  250. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  251. package/src/compat/protocol.ts +71 -70
  252. package/src/compat/react/action-state.ts +47 -48
  253. package/src/compat/react/client-lite.ts +15 -15
  254. package/src/compat/react/client.ts +4 -4
  255. package/src/compat/react/compiler-runtime.ts +11 -11
  256. package/src/compat/react/dom-client.ts +44 -44
  257. package/src/compat/react/dom-react-server.ts +10 -16
  258. package/src/compat/react/dom-server.ts +10 -10
  259. package/src/compat/react/dom.ts +52 -52
  260. package/src/compat/react/hooks-extra.ts +34 -35
  261. package/src/compat/react/parity.ts +64 -61
  262. package/src/compat/react/preact.ts +81 -82
  263. package/src/compat/react/react-server.ts +28 -28
  264. package/src/compat/react/router-shim.ts +1 -1
  265. package/src/compat/react/server-component-use.ts +8 -8
  266. package/src/compat/react/server-inserted-html.ts +30 -31
  267. package/src/compat/react/server.ts +53 -55
  268. package/src/compat/react/use.ts +32 -32
  269. package/src/compat/react/view-transition.ts +20 -20
  270. package/src/compat/register/actions.ts +35 -824
  271. package/src/compat/register/boot.ts +41 -41
  272. package/src/compat/register/build-tier.ts +5 -5
  273. package/src/compat/register/build.ts +74 -70
  274. package/src/compat/register/bundler.ts +161 -156
  275. package/src/compat/register/cache.ts +20 -20
  276. package/src/compat/register/client-errors.ts +3 -3
  277. package/src/compat/register/config.ts +6 -6
  278. package/src/compat/register/css-extras.ts +30 -34
  279. package/src/compat/register/edge-runtime.ts +3 -3
  280. package/src/compat/register/errors.ts +10 -12
  281. package/src/compat/register/export.ts +16 -16
  282. package/src/compat/register/font.ts +11 -11
  283. package/src/compat/register/hooks.ts +2 -2
  284. package/src/compat/register/image.ts +40 -40
  285. package/src/compat/register/index.ts +59 -62
  286. package/src/compat/register/instrumentation-client.ts +10 -10
  287. package/src/compat/register/lifecycle.ts +25 -28
  288. package/src/compat/register/mdx.ts +10 -10
  289. package/src/compat/register/middleware.ts +226 -16
  290. package/src/compat/register/otel.ts +80 -88
  291. package/src/compat/register/pages-api.ts +10 -463
  292. package/src/compat/register/ppr.ts +16 -16
  293. package/src/compat/register/protocol.ts +17 -18
  294. package/src/compat/register/proxy.ts +49 -51
  295. package/src/compat/register/render.ts +79 -76
  296. package/src/compat/register/routing.ts +162 -159
  297. package/src/compat/register/segment.ts +24 -1887
  298. package/src/compat/register/static-image.ts +3 -3
  299. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  300. package/src/compat/register/typed-routes.ts +14 -14
  301. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  302. package/src/compat/register/validation.ts +18 -18
  303. package/src/compat/segment/loading-boundary.ts +43 -45
  304. package/src/compat/segment/page-slot.ts +69 -69
  305. package/src/compat/segment/serve.ts +1884 -0
  306. package/src/compat/segment/tree.ts +113 -112
  307. package/src/compat/segment/vary-key.ts +38 -38
  308. package/src/compat/segment/vary-params.ts +138 -142
  309. package/src/compat/static-params.ts +14 -12
  310. package/src/compat/tsconfig-defaults.ts +87 -91
  311. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  312. package/src/compat/typecheck/worker.ts +15 -12
  313. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  314. package/src/compat/typed-routes/manifest.ts +174 -170
  315. package/src/compat/typed-routes/typegen.ts +127 -110
  316. package/src/compat/validation/errors.ts +16 -19
  317. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  318. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  319. package/src/compat-bootstrap.ts +16 -16
  320. package/src/config.ts +69 -69
  321. package/src/css/build.ts +230 -227
  322. package/src/css/postcss.ts +79 -80
  323. package/src/css/worker.ts +14 -15
  324. package/src/dev/client-actions.ts +10 -10
  325. package/src/dev/client-chunk-store.ts +27 -27
  326. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  327. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  328. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  329. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  330. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  331. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  332. package/src/dev/server.ts +804 -820
  333. package/src/env.ts +46 -43
  334. package/src/extensions.ts +491 -478
  335. package/src/index.ts +8 -8
  336. package/src/internal.ts +20 -23
  337. package/src/{islands → render}/boundary-error.ts +3 -3
  338. package/src/render/hooks.ts +71 -71
  339. package/src/render/island-context.ts +14 -14
  340. package/src/render/metadata.ts +310 -310
  341. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  342. package/src/{ppr.ts → render/ppr.ts} +244 -245
  343. package/src/render/renderer.ts +2076 -2082
  344. package/src/render/resource-hints.ts +16 -17
  345. package/src/render/slots.tsx +224 -235
  346. package/src/{islands → render}/static-children.ts +9 -12
  347. package/src/{islands → render}/static-slots.ts +37 -37
  348. package/src/{cache/context.ts → request/cache.ts} +20 -20
  349. package/src/request/context.ts +107 -107
  350. package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
  351. package/src/resolve/engine.ts +90 -77
  352. package/src/resolve/imports.ts +475 -463
  353. package/src/resolve/scan-facts.ts +442 -186
  354. package/src/resolve/source-text.ts +37 -37
  355. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  356. package/src/routing/forwarded.ts +19 -19
  357. package/src/routing/handler.ts +84 -91
  358. package/src/routing/href.ts +69 -70
  359. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  360. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  361. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  362. package/src/routing/routes.ts +833 -848
  363. package/src/routing/slots.ts +164 -160
  364. package/src/runtime/loader.ts +952 -0
  365. package/src/{dev → runtime}/module-cache.ts +309 -287
  366. package/src/{dev → runtime}/module-generations.ts +9 -9
  367. package/src/{dev → runtime}/module-transform.ts +81 -72
  368. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  369. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  370. package/src/runtime/vendor.ts +425 -404
  371. package/src/styles.d.ts +9 -0
  372. package/src/types.ts +320 -335
  373. package/src/utils/ansi.ts +5 -5
  374. package/src/utils/{source.ts → code.ts} +15 -12
  375. package/src/utils/content-type.ts +3 -3
  376. package/src/utils/decode.ts +2 -2
  377. package/src/utils/dev-profile.ts +13 -13
  378. package/src/utils/error-log.ts +6 -6
  379. package/src/utils/esbuild.ts +18 -18
  380. package/src/utils/fs-cache.ts +13 -13
  381. package/src/utils/fs.ts +57 -49
  382. package/src/utils/html.ts +20 -24
  383. package/src/utils/native-require.ts +8 -8
  384. package/src/utils/serialize.ts +139 -146
  385. package/src/utils/verbose.ts +18 -18
  386. package/src/cli/analyze-print.ts +0 -181
  387. package/src/compat/middleware/manifest.ts +0 -210
  388. package/src/compat/next/image-client.tsx +0 -215
  389. package/src/compat/next/link-usage.ts +0 -29
  390. package/src/css/index.ts +0 -2
  391. package/src/render/index.ts +0 -1
  392. package/src/style-modules.d.ts +0 -9
@@ -1,26 +1,26 @@
1
1
  // Shared shapes of the client router: fetched pages, navigation options, the
2
2
  // parallel-route nav state, and the entry-module handles the router imports.
3
3
  export interface PrefetchedPage {
4
- html: string;
5
- finalUrl: string;
6
- ok: boolean;
4
+ html: string
5
+ finalUrl: string
6
+ ok: boolean
7
7
  /** `x-nextjs-stale-time` from the response (seconds), when the server sent it. */
8
- staleTimeSeconds?: number;
8
+ staleTimeSeconds?: number
9
9
  /** Complete body segment was emitted from a prerendered route artifact. */
10
- segmentPrerendered?: boolean;
10
+ segmentPrerendered?: boolean
11
11
  /**
12
12
  * A partial-prefetch response: only the static shell, dynamic continuation
13
13
  * cut server-side (`x-nextjs-postponed` on a prefetch fetch). Contributes its
14
14
  * loading shell to the shell cache but must never commit as a document.
15
15
  */
16
- shellOnly?: boolean;
16
+ shellOnly?: boolean
17
17
  /**
18
18
  * This response arrived as a FRAMED segment payload and has already been filed with the per-segment
19
19
  * policy. A prefetch that came back as a whole document instead - a route the server does not serve
20
20
  * segments for, or a segment-unaware server - is recorded from its markup once it settles, so the
21
21
  * per-segment cache is fed by ordinary link prefetches either way.
22
22
  */
23
- segmentRecorded?: boolean;
23
+ segmentRecorded?: boolean
24
24
  /**
25
25
  * This SHELL response published no vary set, so how much of this URL it covers is UNKNOWN - the
26
26
  * route's baked fallback shell, rendered with every param hanging. It paints like any other shell,
@@ -28,272 +28,267 @@ export interface PrefetchedPage {
28
28
  * has never been fetched, so the URL's prefetch stays only as fresh as the dynamic window. A shell
29
29
  * that DOES publish its vary set is exact about its coverage and keeps the static window.
30
30
  */
31
- varyCoverageUnknown?: boolean;
31
+ varyCoverageUnknown?: boolean
32
32
  }
33
33
 
34
34
  export interface LoadingShellPrediction {
35
- html: string;
35
+ html: string
36
36
  route: {
37
37
  // Bracket-free colon form (`/:slug*`); `catchAllOptional` distinguishes an
38
38
  // optional catch-all so it survives being written back to __PNEXT_ROUTE__.
39
- route: string;
40
- params: Record<string, string | string[]>;
41
- catchAllOptional?: boolean;
42
- };
43
- prefetch?: 'shell' | 'eager';
39
+ route: string
40
+ params: Record<string, string | string[]>
41
+ catchAllOptional?: boolean
42
+ }
43
+ prefetch?: 'shell' | 'eager'
44
44
  /**
45
45
  * The predicted 'shell' route is RUNTIME-prefetched (request-sampled): its
46
46
  * shell content is derived from the sampled URL's params, so it is NOT shared
47
47
  * across the route's other URLs the way a static partial shell is.
48
48
  */
49
- runtimePrefetch?: boolean;
49
+ runtimePrefetch?: boolean
50
50
  }
51
51
 
52
52
  export interface NavigationScrollOptions {
53
- pop?: boolean;
54
- scroll?: boolean;
53
+ pop?: boolean
54
+ scroll?: boolean
55
55
  }
56
56
 
57
- export type NavigationScrollAction = (url: URL, options: NavigationScrollOptions) => void;
58
- export type StylesheetReconciler = (incoming: Document) => void;
57
+ export type NavigationScrollAction = (url: URL, options: NavigationScrollOptions) => void
58
+ export type StylesheetReconciler = (incoming: Document) => void
59
59
 
60
60
  export type LoadingShellPredictionPolicy = (
61
61
  url: URL,
62
62
  shells: ReadonlyMap<string, string>,
63
- ) => LoadingShellPrediction | undefined;
63
+ ) => LoadingShellPrediction | undefined
64
64
 
65
65
  export interface PrefetchOptions {
66
66
  /** Link element that triggered the prefetch; receives lifecycle events. */
67
- element?: Element;
67
+ element?: Element
68
68
  /** Public router.prefetch should match Next and throw for unparseable URLs. */
69
- strict?: boolean;
69
+ strict?: boolean
70
70
  /** `prefetch={true}` full-page prefetch — reuses for the static window. */
71
- full?: boolean;
71
+ full?: boolean
72
72
  /**
73
73
  * Hover/touch/focus intent: the prefetch rides the scheduler's reserved
74
74
  * Intent lane (most-recently-hovered link starts immediately, ahead of
75
75
  * queued viewport prefetches).
76
76
  */
77
- intent?: boolean;
77
+ intent?: boolean
78
78
  /**
79
79
  * unstable_dynamicOnHover upgrade: when the route's static shell is already
80
80
  * cached, ask the server for the dynamic continuation only (the response
81
81
  * must not re-send static content the client already holds) and merge it
82
82
  * into the cached shell.
83
83
  */
84
- hoverResume?: boolean;
84
+ hoverResume?: boolean
85
85
  /** Called once when this prefetch is invalidated. */
86
- onInvalidate?: () => void;
86
+ onInvalidate?: () => void
87
87
  /**
88
88
  * Seed the prefetch for the URL the browser is ALREADY on. Next embeds a runtime-prefetch stream in
89
89
  * the initial HTML of an allow-runtime route; pnext asks the server for the same payload instead,
90
90
  * which means prefetching the current URL - the one case the same-URL guards must not elide.
91
91
  */
92
- currentUrl?: boolean;
92
+ currentUrl?: boolean
93
93
  }
94
94
 
95
95
  export interface SoftNavigateOptions extends NavigationScrollOptions {
96
- replace?: boolean;
96
+ replace?: boolean
97
97
  /** Parallel-route state to send instead of the current document's (popstate). */
98
- navState?: DocumentNavState;
98
+ navState?: DocumentNavState
99
99
  /** Restore this document without fetching (popstate to a cached entry). */
100
- cachedPage?: PrefetchedPage;
100
+ cachedPage?: PrefetchedPage
101
101
  /** router.refresh()/revalidation surface: bypass caches, fetch fresh (internal). */
102
- refreshLike?: boolean;
102
+ refreshLike?: boolean
103
103
  /**
104
104
  * A same-URL LINK click: refresh the PAGE segments only. It takes the refresh-like path (no loading
105
105
  * flash, caches evicted, no new history entry) but KEEPS the live layout segments, so the request
106
106
  * may skip shared layouts exactly like any other navigation.
107
107
  */
108
- pageRefresh?: boolean;
108
+ pageRefresh?: boolean
109
109
  /**
110
110
  * Remount everything the incoming document renders - no client-page preservation. An error
111
111
  * boundary's reset() refreshes precisely to throw the failed tree away, so keeping it alive would
112
112
  * replay the error.
113
113
  */
114
- remount?: boolean;
114
+ remount?: boolean
115
115
  /**
116
116
  * The incoming document is freshly rendered server data that supersedes the live tree (the response
117
117
  * to a revalidating action, or the document a post-action redirect landed on): take ALL of its
118
118
  * server segments instead of grafting the live layouts over them, or the write would be invisible.
119
119
  * Island preservation is unaffected - useActionState must survive.
120
120
  */
121
- freshSegments?: boolean;
121
+ freshSegments?: boolean
122
122
  }
123
123
 
124
124
  /** Mirrors NavState in src/types.ts (kept local: this file ships to browsers). */
125
125
  export interface DocumentNavState {
126
- children?: string;
126
+ children?: string
127
127
  /** Search string the children tree rendered with (refetch-URL semantics). */
128
- childrenSearch?: string;
128
+ childrenSearch?: string
129
129
  /** Slot dir -> source URL (`path` or `path?query`) its content rendered from. */
130
- slots?: Record<string, string>;
130
+ slots?: Record<string, string>
131
131
  /**
132
132
  * The document is an interception HOST render (server-stamped): the URL is the intercepted target
133
133
  * but the children tree kept rendering the host page. Such a render is host-bound - never
134
134
  * origin-agnostic, never a direct target render.
135
135
  */
136
- hostRender?: boolean;
136
+ hostRender?: boolean
137
137
  }
138
138
 
139
139
  export interface ActiveEntry {
140
140
  /** `keepRoots`: live island roots the next document reuses — do not unmount. */
141
- unmount?: (keepRoots?: Set<Element>) => void;
141
+ unmount?: (keepRoots?: Set<Element>) => void
142
142
  }
143
143
 
144
144
  /** Mount container of a whole-page client route (element or marker-range proxy). */
145
145
  export interface ClientPageRoot {
146
- isConnected?: boolean;
146
+ isConnected?: boolean
147
147
  /** Page-slot comment anchors when the entry dissolved `div#pnext-page`. */
148
- __pnextAnchors?: [Comment, Comment];
148
+ __pnextAnchors?: [Comment, Comment]
149
149
  }
150
150
 
151
151
  export interface EntryModule {
152
- mountRoute?: () => Promise<unknown> | void;
152
+ mountRoute?: () => Promise<unknown> | void
153
153
  }
154
154
 
155
155
  declare global {
156
156
  interface Window {
157
- __PNEXT_ROUTER_INSTALLED__?: boolean;
158
- __PNEXT_ROUTER_IMPORTS__?: number;
159
- __PNEXT_ACTIVE_ENTRY__?: ActiveEntry;
157
+ __PNEXT_ROUTER_INSTALLED__?: boolean
158
+ __PNEXT_ROUTER_IMPORTS__?: number
159
+ __PNEXT_ACTIVE_ENTRY__?: ActiveEntry
160
160
  /** The entry's guarded remount hook — mounts only what a prior pass missed. */
161
- __PNEXT_MOUNT_ISLANDS__?: () => unknown;
161
+ __PNEXT_MOUNT_ISLANDS__?: () => unknown
162
162
  /**
163
163
  * The container a whole-page `'use client'` route is mounted on. A real
164
164
  * `#pnext-page` element in a nested/segment context; otherwise the virtual
165
165
  * container the entry builds over the dissolved page's comment anchors
166
166
  * (carried on `__pnextAnchors`). See matchPreservedClientPage.
167
167
  */
168
- __PNEXT_CLIENT_PAGE_ROOT__?: ClientPageRoot;
169
- __PNEXT_LOCATION_LISTENERS__?: Set<() => void>;
168
+ __PNEXT_CLIENT_PAGE_ROOT__?: ClientPageRoot
169
+ __PNEXT_LOCATION_LISTENERS__?: Set<() => void>
170
170
  next?: {
171
171
  router?: {
172
- push?: (href: string) => Promise<void>;
173
- replace?: (href: string) => Promise<void>;
174
- prefetch?: (href: string) => Promise<PrefetchedPage | null>;
175
- };
176
- };
172
+ push?: (href: string) => Promise<void>
173
+ replace?: (href: string) => Promise<void>
174
+ prefetch?: (href: string) => Promise<PrefetchedPage | null>
175
+ }
176
+ }
177
177
  }
178
178
  }
179
179
 
180
-
181
180
  export interface SegmentCacheRecord {
182
181
  /** Requested pathname (percent-encoding preserved). */
183
- pathname: string;
182
+ pathname: string
184
183
  /** Requested query string (leading `?` included, `_rsc` still present). */
185
- search: string;
184
+ search: string
186
185
  /** Segment request key the response answered (`/_index`, `/_head`, …). */
187
- segmentPath: string;
186
+ segmentPath: string
188
187
  /**
189
188
  * Wire shape of `body`: a framed segment payload (a prefetch response) or a
190
189
  * whole HTML document (a navigation response / the hard-loaded page). The
191
190
  * policy decodes its vary metadata differently for each.
192
191
  */
193
- kind?: 'segment' | 'document';
192
+ kind?: 'segment' | 'document'
194
193
  /** The raw segment payload text, for the policy's own decoding. */
195
- body: string;
194
+ body: string
196
195
  /** The payload the router committed for this segment. */
197
- html: string;
196
+ html: string
198
197
  /** Reuse window in milliseconds. */
199
- staleTimeMs: number;
198
+ staleTimeMs: number
200
199
  /** True when the payload is a whole document, not a truncated shell. */
201
- complete: boolean;
200
+ complete: boolean
202
201
  /** True when the bytes are a pure function of the URL (a prerender). */
203
- static: boolean;
202
+ static: boolean
204
203
  /** True when the payload came from a runtime (request-sampled) prefetch. */
205
- runtime: boolean;
204
+ runtime: boolean
206
205
  }
207
206
 
208
207
  export interface SegmentCacheLookup {
209
- pathname: string;
210
- search: string;
211
- segmentPath: string;
208
+ pathname: string
209
+ search: string
210
+ segmentPath: string
212
211
  }
213
212
 
214
213
  export interface SegmentCacheHit {
215
- html: string;
214
+ html: string
216
215
  /** True when this hit may commit a navigation with no network request. */
217
- networkFree: boolean;
216
+ networkFree: boolean
218
217
  /**
219
218
  * True when a PREFETCH of this URL has nothing left to fetch. Weaker than
220
219
  * `networkFree`: a shell shared across params satisfies the prefetch (its
221
220
  * static half is already cached) while the NAVIGATION still fetches the
222
221
  * dynamic remainder. Absent (older policies) reads as `networkFree`.
223
222
  */
224
- prefetchSatisfied?: boolean;
223
+ prefetchSatisfied?: boolean
225
224
  }
226
225
 
227
226
  export interface SegmentCachePolicy {
228
- record: (input: SegmentCacheRecord) => void;
229
- take: (input: SegmentCacheLookup) => SegmentCacheHit | null;
227
+ record: (input: SegmentCacheRecord) => void
228
+ take: (input: SegmentCacheLookup) => SegmentCacheHit | null
230
229
  /**
231
230
  * The route pattern (colon form) the server resolved `pathname` to, or null
232
231
  * when this exact pathname was never answered. The route-tree cache uses it
233
232
  * as its static-sibling guard.
234
233
  */
235
- routeFor?: (pathname: string) => string | null;
234
+ routeFor?: (pathname: string) => string | null
236
235
  /** True when the colon-form `route` pattern covers `pathname`. */
237
- matchesRoute?: (route: string, pathname: string) => boolean;
236
+ matchesRoute?: (route: string, pathname: string) => boolean
238
237
  /**
239
238
  * The cached bytes a PREFETCH of this segment would re-fetch verbatim: a DIFFERENT URL's entry whose
240
239
  * published vary set covers this one. Weaker than `take` - the entry may be a postponed shell, so it
241
240
  * never commits - but it is byte-identical by the server's own assertion, so the request is skipped.
242
241
  */
243
- prefetchCovered?: (input: SegmentCacheLookup) => { html: string } | null;
242
+ prefetchCovered?: (input: SegmentCacheLookup) => { html: string } | null
244
243
  /**
245
244
  * w9-segment-split: the PAGE frame is cached but the LAYOUT frame is not,
246
245
  * so only `/_layout` has to come off the network.
247
246
  */
248
- needsLayoutFrameOnly?: (input: { pathname: string; search: string }) => boolean;
247
+ needsLayoutFrameOnly?: (input: { pathname: string; search: string }) => boolean
249
248
  /**
250
249
  * Join a `/_layout` response with this URL's cached PAGE frame into the whole
251
250
  * document. Null when the two cannot be proven to line up.
252
251
  */
253
252
  composeLayoutFrame?: (input: {
254
- pathname: string;
255
- search: string;
256
- layoutHtml: string;
257
- }) => string | null;
253
+ pathname: string
254
+ search: string
255
+ layoutHtml: string
256
+ }) => string | null
258
257
  /**
259
258
  * True when a RUNTIME-prefetched page frame already covers this URL. Such a route's layout is not
260
259
  * statically prefetchable (only the page opted into allow-runtime), so a page-frame hit leaves the
261
260
  * prefetch with nothing to fetch - the layout arrives with the navigation's dynamic stage.
262
261
  */
263
- runtimePageFrameSatisfied?: (input: { pathname: string; search: string }) => boolean;
262
+ runtimePageFrameSatisfied?: (input: { pathname: string; search: string }) => boolean
264
263
  /**
265
264
  * w9-segment-split (G2): this URL's LAYOUT chain is already cached (or, for a
266
265
  * same-URL navigation, already on screen), so the navigation may fetch the
267
266
  * `/_page` frame alone. `sameUrl` is what authorises the live document's own
268
267
  * layout as the frame.
269
268
  */
270
- needsPageFrameOnly?: (input: {
271
- pathname: string;
272
- search: string;
273
- sameUrl: boolean;
274
- }) => boolean;
269
+ needsPageFrameOnly?: (input: { pathname: string; search: string; sameUrl: boolean }) => boolean
275
270
  /**
276
271
  * Splice a `/_page` response into that cached layout frame. Null means the
277
272
  * two could not be proven to line up — the caller fetches the whole document.
278
273
  */
279
274
  composePageFrame?: (input: {
280
- pathname: string;
281
- search: string;
282
- sameUrl: boolean;
283
- pageHtml: string;
284
- }) => string | null;
275
+ pathname: string
276
+ search: string
277
+ sameUrl: boolean
278
+ pageHtml: string
279
+ }) => string | null
285
280
  /**
286
281
  * File the LAYOUT frame of a committed whole document, so a later same-URL
287
282
  * navigation can refresh the page segments without re-fetching the layouts.
288
283
  */
289
284
  recordDocumentLayout?: (input: {
290
- pathname: string;
291
- search: string;
292
- html: string;
293
- staleTimeMs: number;
294
- }) => void;
285
+ pathname: string
286
+ search: string
287
+ html: string
288
+ staleTimeMs: number
289
+ }) => void
295
290
  /** A same-URL navigation refreshes page segments only. */
296
- evictPageSegments: () => void;
291
+ evictPageSegments: () => void
297
292
  /** A revalidation invalidates every segment entry. */
298
- clear: () => void;
293
+ clear: () => void
299
294
  }
@@ -1,11 +1,11 @@
1
- import path from 'node:path';
2
- import { realpathSync } from 'node:fs';
3
- import type { Plugin } from 'esbuild';
4
- import { readText } from '../../utils/fs';
5
- import { escapeRegex } from '../../utils/source';
6
- import { actionId } from './ids';
7
- import { moduleActionExports, moduleLevelUseCache, moduleLevelUseServer } from './detect';
8
- import { clientStubSource } from './client-stub';
1
+ import path from 'node:path'
2
+ import { realpathSync } from 'node:fs'
3
+ import type { Plugin } from 'esbuild'
4
+ import { readText } from '../../utils/fs'
5
+ import { escapeRegex } from '../../utils/code'
6
+ import { actionId } from './ids'
7
+ import { moduleActionExports, moduleLevelUseCache, moduleLevelUseServer } from './detect'
8
+ import { clientStubSource } from './client-stub'
9
9
 
10
10
  /**
11
11
  * Process-level set of `'use server'` module source paths (absolute) that the
@@ -18,24 +18,23 @@ import { clientStubSource } from './client-stub';
18
18
  * emits ids that match the server registry.
19
19
  */
20
20
  interface ClientActionState {
21
- root: string;
21
+ root: string
22
22
  /** Original (as-discovered) absolute paths — used for import identity. */
23
- files: Set<string>;
23
+ files: Set<string>
24
24
  /** Realpath-canonical paths — used to match esbuild's resolved paths. */
25
- canonicalFiles: Set<string>;
25
+ canonicalFiles: Set<string>
26
26
  }
27
27
 
28
- let clientActionState: ClientActionState | undefined;
28
+ let clientActionState: ClientActionState | undefined
29
29
 
30
30
  export function setClientActionModules(root: string, files: Iterable<string>) {
31
- const originals = new Set<string>();
32
- const canonicalFiles = new Set<string>();
31
+ const originals = new Set<string>()
32
+ const canonicalFiles = new Set<string>()
33
33
  for (const file of files) {
34
- originals.add(path.resolve(file));
35
- canonicalFiles.add(canonical(file));
34
+ originals.add(path.resolve(file))
35
+ canonicalFiles.add(canonical(file))
36
36
  }
37
- clientActionState =
38
- originals.size > 0 ? { root, files: originals, canonicalFiles } : undefined;
37
+ clientActionState = originals.size > 0 ? { root, files: originals, canonicalFiles } : undefined
39
38
  }
40
39
 
41
40
  // esbuild reports resolved paths through the OS realpath (e.g. /private on
@@ -43,50 +42,50 @@ export function setClientActionModules(root: string, files: Iterable<string>) {
43
42
  // used for id computation so the build, the client stub, and the render-side
44
43
  // form tagging all derive the same wire id from the same (realpath) basis.
45
44
  export function canonical(file: string) {
46
- const abs = path.resolve(file);
45
+ const abs = path.resolve(file)
47
46
  try {
48
- return realpathSync.native(abs);
47
+ return realpathSync.native(abs)
49
48
  } catch {
50
- return abs;
49
+ return abs
51
50
  }
52
51
  }
53
52
 
54
53
  export function clearClientActionModules() {
55
- clientActionState = undefined;
54
+ clientActionState = undefined
56
55
  }
57
56
 
58
57
  export function hasClientActionModules() {
59
- return clientActionState !== undefined && clientActionState.files.size > 0;
58
+ return clientActionState !== undefined && clientActionState.files.size > 0
60
59
  }
61
60
 
62
61
  function isActionModule(file: string) {
63
- if (!clientActionState) return false;
62
+ if (!clientActionState) return false
64
63
  // Match both the original and the realpath-canonical form: render passes the
65
64
  // original path; esbuild passes the realpath.
66
65
  return (
67
66
  clientActionState.files.has(path.resolve(file)) ||
68
67
  clientActionState.canonicalFiles.has(canonical(file))
69
- );
68
+ )
70
69
  }
71
70
 
72
71
  /** True when `file` is a discovered client-replaced action module. */
73
72
  export function isClientActionModule(file: string) {
74
- return isActionModule(file);
73
+ return isActionModule(file)
75
74
  }
76
75
 
77
76
  /** Root the client action ids were computed against (for stub id parity). */
78
77
  export function clientActionModulesRoot() {
79
- return clientActionState?.root;
78
+ return clientActionState?.root
80
79
  }
81
80
 
82
81
  /** All discovered action module source paths (absolute). */
83
82
  export function clientActionModuleFiles(): string[] {
84
- return clientActionState ? [...clientActionState.files] : [];
83
+ return clientActionState ? [...clientActionState.files] : []
85
84
  }
86
85
 
87
86
  /** Generate the client fetch-stub source for an action module file. */
88
87
  export function actionStubSourceFor(file: string, root?: string) {
89
- return stubSourceFor(file, root ?? clientActionState?.root);
88
+ return stubSourceFor(file, root ?? clientActionState?.root)
90
89
  }
91
90
 
92
91
  /**
@@ -99,30 +98,30 @@ export function actionStubSourceFor(file: string, root?: string) {
99
98
  export function actionClientStubPlugin(): Plugin {
100
99
  const paths = clientActionState
101
100
  ? [...clientActionState.files, ...clientActionState.canonicalFiles]
102
- : [];
103
- const filter = new RegExp(`^(?:${[...new Set(paths)].map(escapeRegex).join('|')})$`);
101
+ : []
102
+ const filter = new RegExp(`^(?:${[...new Set(paths)].map(escapeRegex).join('|')})$`)
104
103
  return {
105
104
  name: 'pnext-action-client-stub',
106
105
  setup(build) {
107
- if (paths.length === 0) return;
106
+ if (paths.length === 0) return
108
107
  build.onLoad({ filter, namespace: 'file' }, async args => {
109
- if (!isActionModule(args.path)) return undefined;
108
+ if (!isActionModule(args.path)) return undefined
110
109
  return {
111
110
  contents: await stubSourceFor(args.path, clientActionState?.root),
112
111
  loader: 'js',
113
- };
114
- });
112
+ }
113
+ })
115
114
  },
116
- };
115
+ }
117
116
  }
118
117
 
119
118
  async function stubSourceFor(file: string, root?: string) {
120
- const source = await readText(file);
121
- if (!moduleLevelUseServer(source) && !moduleLevelUseCache(source)) return 'export {};';
122
- const exports = moduleActionExports(source);
123
- const actionIds: Record<string, string> = {};
124
- for (const name of exports) actionIds[name] = canonicalActionId(file, name, root);
125
- return clientStubSource({ modulePath: file, exports, actionIds });
119
+ const source = await readText(file)
120
+ if (!moduleLevelUseServer(source) && !moduleLevelUseCache(source)) return 'export {};'
121
+ const exports = moduleActionExports(source)
122
+ const actionIds: Record<string, string> = {}
123
+ for (const name of exports) actionIds[name] = canonicalActionId(file, name, root)
124
+ return clientStubSource({ modulePath: file, exports, actionIds })
126
125
  }
127
126
 
128
127
  /**
@@ -131,5 +130,5 @@ async function stubSourceFor(file: string, root?: string) {
131
130
  * symlink/realpath differences (e.g. /private on macOS temp dirs).
132
131
  */
133
132
  export function canonicalActionId(file: string, exportName: string, root?: string): string {
134
- return actionId(canonical(file), exportName, root ? canonical(root) : undefined);
133
+ return actionId(canonical(file), exportName, root ? canonical(root) : undefined)
135
134
  }
@@ -4,9 +4,9 @@
4
4
  * and the precomputed wire id for each.
5
5
  */
6
6
  export interface ClientStubModule {
7
- modulePath: string;
8
- exports: readonly string[];
9
- actionIds: Record<string, string>;
7
+ modulePath: string
8
+ exports: readonly string[]
9
+ actionIds: Record<string, string>
10
10
  }
11
11
 
12
12
  /**
@@ -20,20 +20,20 @@ export interface ClientStubModule {
20
20
  * self-contained ES module with no imports, so it can be emitted to disk and bundled as-is.
21
21
  */
22
22
  export function clientStubSource(module: ClientStubModule): string {
23
- const lines: string[] = [];
23
+ const lines: string[] = []
24
24
 
25
- lines.push(`// Generated pnext server-action client stub.`);
26
- lines.push(`// Module: ${sanitizeComment(module.modulePath)}`);
27
- lines.push(RUNTIME);
25
+ lines.push(`// Generated pnext server-action client stub.`)
26
+ lines.push(`// Module: ${sanitizeComment(module.modulePath)}`)
27
+ lines.push(RUNTIME)
28
28
 
29
29
  for (const name of module.exports) {
30
- const id = module.actionIds[name];
31
- if (!id) continue;
32
- const decl = name === 'default' ? 'export default' : `export const ${name} =`;
33
- lines.push(`${decl} __pnextAction(${JSON.stringify(id)});`);
30
+ const id = module.actionIds[name]
31
+ if (!id) continue
32
+ const decl = name === 'default' ? 'export default' : `export const ${name} =`
33
+ lines.push(`${decl} __pnextAction(${JSON.stringify(id)});`)
34
34
  }
35
35
 
36
- return lines.join('\n') + '\n';
36
+ return lines.join('\n') + '\n'
37
37
  }
38
38
 
39
39
  const RUNTIME = `
@@ -58,8 +58,8 @@ function __pnextAction(id) {
58
58
  action.$$pnextActionId = id;
59
59
  return action;
60
60
  }
61
- `;
61
+ `
62
62
 
63
63
  function sanitizeComment(value: string): string {
64
- return value.replace(/\*\//g, '*\\/').replace(/[\r\n]/g, ' ');
64
+ return value.replace(/\*\//g, '*\\/').replace(/[\r\n]/g, ' ')
65
65
  }