@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
@@ -2,76 +2,76 @@
2
2
  // independent scan of app-dir layouts/slots and the pages/ directory, plus the
3
3
  // redirects/rewrites from next.config. Feeds the Next-identical codegen in
4
4
  // ./typegen.ts. Compat-only.
5
- import { existsSync } from 'node:fs';
6
- import { readdir } from 'node:fs/promises';
7
- import path from 'node:path';
8
- import type { ResolvedConfig } from '../../config';
9
- import type { RouteManifestEntry } from '../../types';
10
- import { toPosixPath } from '../../utils/fs';
5
+ import { existsSync } from 'node:fs'
6
+ import { readdir } from 'node:fs/promises'
7
+ import path from 'node:path'
8
+ import type { ResolvedConfig } from '../../config'
9
+ import type { RouteManifestEntry } from '../../types'
10
+ import { toPosixPath } from '../../utils/fs'
11
11
 
12
12
  /** path-to-regexp group info, mirroring Next's `getRouteRegex().groups`. */
13
13
  export interface Group {
14
- pos: number;
15
- repeat: boolean;
16
- optional: boolean;
14
+ pos: number
15
+ repeat: boolean
16
+ optional: boolean
17
17
  }
18
18
 
19
19
  export interface ManifestRouteInfo {
20
- path: string;
21
- groups: Record<string, Group>;
20
+ path: string
21
+ groups: Record<string, Group>
22
22
  }
23
23
 
24
24
  export interface RouteTypesManifest {
25
- appRoutes: Record<string, ManifestRouteInfo>;
26
- pageRoutes: Record<string, ManifestRouteInfo>;
27
- layoutRoutes: Record<string, ManifestRouteInfo & { slots: string[] }>;
28
- appRouteHandlerRoutes: Record<string, ManifestRouteInfo>;
29
- redirectRoutes: Record<string, ManifestRouteInfo>;
30
- rewriteRoutes: Record<string, ManifestRouteInfo>;
31
- appPagePaths: Set<string>;
32
- pagesRouterPagePaths: Set<string>;
33
- layoutPaths: Set<string>;
34
- appRouteHandlers: Set<string>;
35
- pageApiRoutes: Set<string>;
36
- filePathToRoute: Map<string, string>;
25
+ appRoutes: Record<string, ManifestRouteInfo>
26
+ pageRoutes: Record<string, ManifestRouteInfo>
27
+ layoutRoutes: Record<string, ManifestRouteInfo & { slots: string[] }>
28
+ appRouteHandlerRoutes: Record<string, ManifestRouteInfo>
29
+ redirectRoutes: Record<string, ManifestRouteInfo>
30
+ rewriteRoutes: Record<string, ManifestRouteInfo>
31
+ appPagePaths: Set<string>
32
+ pagesRouterPagePaths: Set<string>
33
+ layoutPaths: Set<string>
34
+ appRouteHandlers: Set<string>
35
+ pageApiRoutes: Set<string>
36
+ filePathToRoute: Map<string, string>
37
37
  }
38
38
 
39
- const PAGE_EXTENSIONS = ['tsx', 'ts', 'jsx', 'js', 'mdx', 'md'];
40
- const LAYOUT_NAMES = new Set(PAGE_EXTENSIONS.map(ext => `layout.${ext}`));
39
+ const PAGE_EXTENSIONS = ['tsx', 'ts', 'jsx', 'js', 'mdx', 'md']
40
+ const LAYOUT_NAMES = new Set(PAGE_EXTENSIONS.map(ext => `layout.${ext}`))
41
41
 
42
42
  function isGroupSegment(name: string): boolean {
43
- return name.startsWith('(') && name.endsWith(')');
43
+ return name.startsWith('(') && name.endsWith(')')
44
44
  }
45
45
 
46
46
  function isSlotSegment(name: string): boolean {
47
- return name.startsWith('@');
47
+ return name.startsWith('@')
48
48
  }
49
49
 
50
50
  function decodeLiteral(segment: string): string {
51
- return segment.replace(/%5[Ff]/g, '_');
51
+ return segment.replace(/%5[Ff]/g, '_')
52
52
  }
53
53
 
54
54
  /** Extract groups (param name -> shape) from a bracket-syntax route. */
55
55
  function groupsFromBracketRoute(route: string): Record<string, Group> {
56
- const groups: Record<string, Group> = {};
57
- let pos = 1;
56
+ const groups: Record<string, Group> = {}
57
+ let pos = 1
58
58
  for (const segment of route.split('/').filter(Boolean)) {
59
- const optionalCatchAll = /^\[\[\.\.\.(.+)\]\]$/.exec(segment);
59
+ const optionalCatchAll = /^\[\[\.\.\.(.+)\]\]$/.exec(segment)
60
60
  if (optionalCatchAll?.[1]) {
61
- groups[optionalCatchAll[1]] = { pos: pos++, repeat: true, optional: true };
62
- continue;
61
+ groups[optionalCatchAll[1]] = { pos: pos++, repeat: true, optional: true }
62
+ continue
63
63
  }
64
- const catchAll = /^\[\.\.\.(.+)\]$/.exec(segment);
64
+ const catchAll = /^\[\.\.\.(.+)\]$/.exec(segment)
65
65
  if (catchAll?.[1]) {
66
- groups[catchAll[1]] = { pos: pos++, repeat: true, optional: false };
67
- continue;
66
+ groups[catchAll[1]] = { pos: pos++, repeat: true, optional: false }
67
+ continue
68
68
  }
69
- const param = /^\[(.+)\]$/.exec(segment);
69
+ const param = /^\[(.+)\]$/.exec(segment)
70
70
  if (param?.[1]) {
71
- groups[param[1]] = { pos: pos++, repeat: false, optional: false };
71
+ groups[param[1]] = { pos: pos++, repeat: false, optional: false }
72
72
  }
73
73
  }
74
- return groups;
74
+ return groups
75
75
  }
76
76
 
77
77
  /**
@@ -79,52 +79,53 @@ function groupsFromBracketRoute(route: string): Record<string, Group> {
79
79
  * `%5F` decoded) plus its catch-all flags into Next bracket syntax.
80
80
  */
81
81
  function bracketRouteFromEntry(entry: RouteManifestEntry): string {
82
- const segments = entry.route.split('/').filter(Boolean).map(segment => {
83
- const catchAll = /^:(.+)\*$/.exec(segment);
84
- if (catchAll?.[1]) {
85
- const name = catchAll[1];
86
- return name === entry.catchAll && entry.catchAllOptional
87
- ? `[[...${name}]]`
88
- : `[...${name}]`;
89
- }
90
- const param = /^:(.+)$/.exec(segment);
91
- if (param?.[1]) return `[${param[1]}]`;
92
- return segment;
93
- });
94
- return `/${segments.join('/')}`.replace(/\/$/, '') || '/';
82
+ const segments = entry.route
83
+ .split('/')
84
+ .filter(Boolean)
85
+ .map(segment => {
86
+ const catchAll = /^:(.+)\*$/.exec(segment)
87
+ if (catchAll?.[1]) {
88
+ const name = catchAll[1]
89
+ return name === entry.catchAll && entry.catchAllOptional ? `[[...${name}]]` : `[...${name}]`
90
+ }
91
+ const param = /^:(.+)$/.exec(segment)
92
+ if (param?.[1]) return `[${param[1]}]`
93
+ return segment
94
+ })
95
+ return `/${segments.join('/')}`.replace(/\/$/, '') || '/'
95
96
  }
96
97
 
97
98
  /** Bracket route derived from a directory path relative to app/ (for layouts). */
98
99
  function bracketRouteFromDir(relativeDir: string): string {
99
- const segments: string[] = [];
100
+ const segments: string[] = []
100
101
  for (const segment of relativeDir.split('/').filter(Boolean)) {
101
- if (isGroupSegment(segment) || isSlotSegment(segment)) continue;
102
+ if (isGroupSegment(segment) || isSlotSegment(segment)) continue
102
103
  if (/^\[\[?\.\.\..+\]\]?$/.test(segment) || /^\[.+\]$/.test(segment)) {
103
- segments.push(segment);
104
+ segments.push(segment)
104
105
  } else {
105
- segments.push(decodeLiteral(segment));
106
+ segments.push(decodeLiteral(segment))
106
107
  }
107
108
  }
108
- return `/${segments.join('/')}`.replace(/\/$/, '') || '/';
109
+ return `/${segments.join('/')}`.replace(/\/$/, '') || '/'
109
110
  }
110
111
 
111
112
  function pagesRouteFromRelative(relative: string): string {
112
- const withoutExt = relative.replace(/\.[^.]+$/, '');
113
- const trimmed = withoutExt.replace(/\/index$/, '').replace(/^index$/, '');
114
- const route = `/${trimmed}`.replace(/\/$/, '') || '/';
115
- return route;
113
+ const withoutExt = relative.replace(/\.[^.]+$/, '')
114
+ const trimmed = withoutExt.replace(/\/index$/, '').replace(/^index$/, '')
115
+ const route = `/${trimmed}`.replace(/\/$/, '') || '/'
116
+ return route
116
117
  }
117
118
 
118
119
  async function walkFiles(dir: string): Promise<string[]> {
119
- if (!existsSync(dir)) return [];
120
- const out: string[] = [];
121
- const entries = await readdir(dir, { withFileTypes: true });
120
+ if (!existsSync(dir)) return []
121
+ const out: string[] = []
122
+ const entries = await readdir(dir, { withFileTypes: true })
122
123
  for (const entry of entries) {
123
- const full = path.join(dir, entry.name);
124
- if (entry.isDirectory()) out.push(...(await walkFiles(full)));
125
- else out.push(full);
124
+ const full = path.join(dir, entry.name)
125
+ if (entry.isDirectory()) out.push(...(await walkFiles(full)))
126
+ else out.push(full)
126
127
  }
127
- return out;
128
+ return out
128
129
  }
129
130
 
130
131
  /**
@@ -134,41 +135,44 @@ async function walkFiles(dir: string): Promise<string[]> {
134
135
  function isPrivate(relativeDir: string): boolean {
135
136
  return relativeDir
136
137
  .split('/')
137
- .some(seg => seg.startsWith('_') && !isGroupSegment(seg) && !isSlotSegment(seg));
138
+ .some(seg => seg.startsWith('_') && !isGroupSegment(seg) && !isSlotSegment(seg))
138
139
  }
139
140
 
140
141
  // path-to-regexp custom-route source -> bracket routes. The fixture only uses
141
142
  // `:name`, `:name+`, `:name*`; other modifiers/patterns are skipped like Next.
142
143
  function convertCustomRouteSource(source: string): string[] {
143
- const normalized = source.startsWith('/') ? source : `/${source}`;
144
+ const normalized = source.startsWith('/') ? source : `/${source}`
144
145
  const converted = normalized
145
146
  .split('/')
146
147
  .map(segment => {
147
- const optional = /^:(.+)\*$/.exec(segment);
148
- if (optional?.[1]) return `[[...${optional[1]}]]`;
149
- const catchAll = /^:(.+)\+$/.exec(segment);
150
- if (catchAll?.[1]) return `[...${catchAll[1]}]`;
151
- const param = /^:([A-Za-z0-9_]+)$/.exec(segment);
152
- if (param?.[1]) return `[${param[1]}]`;
153
- return segment;
148
+ const optional = /^:(.+)\*$/.exec(segment)
149
+ if (optional?.[1]) return `[[...${optional[1]}]]`
150
+ const catchAll = /^:(.+)\+$/.exec(segment)
151
+ if (catchAll?.[1]) return `[...${catchAll[1]}]`
152
+ const param = /^:([A-Za-z0-9_]+)$/.exec(segment)
153
+ if (param?.[1]) return `[${param[1]}]`
154
+ return segment
154
155
  })
155
- .join('/');
156
- return [converted.replace(/\/$/, '') || '/'];
156
+ .join('/')
157
+ return [converted.replace(/\/$/, '') || '/']
157
158
  }
158
159
 
159
160
  interface CustomRoute {
160
- source: string;
161
+ source: string
161
162
  }
162
- type RedirectsFn = () => Promise<CustomRoute[]> | CustomRoute[];
163
+ type RedirectsFn = () => Promise<CustomRoute[]> | CustomRoute[]
163
164
  type RewritesFn = () =>
164
- | Promise<CustomRoute[] | { beforeFiles?: CustomRoute[]; afterFiles?: CustomRoute[]; fallback?: CustomRoute[] }>
165
+ | Promise<
166
+ | CustomRoute[]
167
+ | { beforeFiles?: CustomRoute[]; afterFiles?: CustomRoute[]; fallback?: CustomRoute[] }
168
+ >
165
169
  | CustomRoute[]
166
- | { beforeFiles?: CustomRoute[]; afterFiles?: CustomRoute[]; fallback?: CustomRoute[] };
170
+ | { beforeFiles?: CustomRoute[]; afterFiles?: CustomRoute[]; fallback?: CustomRoute[] }
167
171
 
168
172
  export interface BuildManifestInput {
169
- config: ResolvedConfig;
170
- routes: RouteManifestEntry[];
171
- nextConfig: { redirects?: unknown; rewrites?: unknown };
173
+ config: ResolvedConfig
174
+ routes: RouteManifestEntry[]
175
+ nextConfig: { redirects?: unknown; rewrites?: unknown }
172
176
  }
173
177
 
174
178
  export async function buildRouteTypesManifest({
@@ -176,19 +180,19 @@ export async function buildRouteTypesManifest({
176
180
  routes,
177
181
  nextConfig,
178
182
  }: BuildManifestInput): Promise<RouteTypesManifest> {
179
- const relApp = (file: string) => toPosixPath(path.relative(config.root, file));
180
- const isHybrid = config.appPath.includes('pnext-pages-compat');
183
+ const relApp = (file: string) => toPosixPath(path.relative(config.root, file))
184
+ const isHybrid = config.appPath.includes('pnext-pages-compat')
181
185
  const sourceAppPath = (entry: RouteManifestEntry): string | undefined => {
182
- if (!isHybrid) return entry.file;
183
- const basename = entry.kind === 'page' ? /^page\.(?:tsx?|jsx?|mdx?)$/ : /^route\.(?:tsx?|jsx?)$/;
186
+ if (!isHybrid) return entry.file
187
+ const basename = entry.kind === 'page' ? /^page\.(?:tsx?|jsx?|mdx?)$/ : /^route\.(?:tsx?|jsx?)$/
184
188
  const source = entry.sourceFiles.find(file => {
185
- const normalized = toPosixPath(file);
186
- return normalized.includes('/source-app/') && basename.test(path.basename(normalized));
187
- });
188
- if (!source) return undefined;
189
- const relative = toPosixPath(source).split('/source-app/')[1];
190
- return relative ? path.join(config.root, 'app', relative) : undefined;
191
- };
189
+ const normalized = toPosixPath(file)
190
+ return normalized.includes('/source-app/') && basename.test(path.basename(normalized))
191
+ })
192
+ if (!source) return undefined
193
+ const relative = toPosixPath(source).split('/source-app/')[1]
194
+ return relative ? path.join(config.root, 'app', relative) : undefined
195
+ }
192
196
 
193
197
  const manifest: RouteTypesManifest = {
194
198
  appRoutes: {},
@@ -203,7 +207,7 @@ export async function buildRouteTypesManifest({
203
207
  appRouteHandlers: new Set(),
204
208
  pageApiRoutes: new Set(),
205
209
  filePathToRoute: new Map(),
206
- };
210
+ }
207
211
 
208
212
  // App pages + route handlers from pnext's scanned entries. Skip synthetic /
209
213
  // interception entries (typegen resolves interceptors to their canonical page
@@ -213,55 +217,55 @@ export async function buildRouteTypesManifest({
213
217
  // wrappers which belong in PageRoutes.
214
218
  const hybridFilteredRoutes = isHybrid
215
219
  ? routes.filter(entry => {
216
- const file = entry.file;
217
- if (!file.includes('pnext-pages-compat')) return true;
218
- const sourceFiles = (entry as { sourceFiles?: string[] }).sourceFiles ?? [];
219
- const isPagesWrapper = sourceFiles.some(sf => sf.includes('source-pages'));
220
- if (isPagesWrapper) return false;
221
- return true;
220
+ const file = entry.file
221
+ if (!file.includes('pnext-pages-compat')) return true
222
+ const sourceFiles = (entry as { sourceFiles?: string[] }).sourceFiles ?? []
223
+ const isPagesWrapper = sourceFiles.some(sf => sf.includes('source-pages'))
224
+ if (isPagesWrapper) return false
225
+ return true
222
226
  })
223
- : routes;
227
+ : routes
224
228
 
225
229
  for (const entry of hybridFilteredRoutes) {
226
- if (entry.synthetic || entry.interception || entry.metadataRoute) continue;
227
- const source = sourceAppPath(entry);
228
- if (!source) continue;
229
- const bracket = bracketRouteFromEntry(entry);
230
- const rel = relApp(source);
231
- const info: ManifestRouteInfo = { path: rel, groups: groupsFromBracketRoute(bracket) };
230
+ if (entry.synthetic || entry.interception || entry.metadataRoute) continue
231
+ const source = sourceAppPath(entry)
232
+ if (!source) continue
233
+ const bracket = bracketRouteFromEntry(entry)
234
+ const rel = relApp(source)
235
+ const info: ManifestRouteInfo = { path: rel, groups: groupsFromBracketRoute(bracket) }
232
236
  if (entry.kind === 'page') {
233
- if (!manifest.appRoutes[bracket]) manifest.appRoutes[bracket] = info;
237
+ if (!manifest.appRoutes[bracket]) manifest.appRoutes[bracket] = info
234
238
  // appPagePaths/filePathToRoute (the validator inputs) are populated by an independent filesystem scan
235
239
  // below, NOT from runtime entries: pnext's scanner collapses parallel-route slot pages onto a single
236
240
  // representative route entry, which mis-maps a slot page's route and drops its siblings, breaking the
237
241
  // generated validator's tsc.
238
242
  } else {
239
- if (!manifest.appRouteHandlerRoutes[bracket]) manifest.appRouteHandlerRoutes[bracket] = info;
240
- manifest.appRouteHandlers.add(rel);
241
- manifest.filePathToRoute.set(rel, bracket);
243
+ if (!manifest.appRouteHandlerRoutes[bracket]) manifest.appRouteHandlerRoutes[bracket] = info
244
+ manifest.appRouteHandlers.add(rel)
245
+ manifest.filePathToRoute.set(rel, bracket)
242
246
  }
243
247
  }
244
248
 
245
249
  // Layouts + slots: independent app-dir scan (pnext entries don't carry them).
246
- const appFiles = await walkFiles(isHybrid ? path.join(config.root, 'app') : config.appPath);
247
- const appPath = isHybrid ? path.join(config.root, 'app') : config.appPath;
250
+ const appFiles = await walkFiles(isHybrid ? path.join(config.root, 'app') : config.appPath)
251
+ const appPath = isHybrid ? path.join(config.root, 'app') : config.appPath
248
252
  for (const file of appFiles) {
249
- const relative = toPosixPath(path.relative(appPath, file));
250
- const base = path.basename(relative);
251
- if (!LAYOUT_NAMES.has(base)) continue;
252
- const dir = path.dirname(relative) === '.' ? '' : path.dirname(relative);
253
- if (isPrivate(dir)) continue;
254
- const bracket = bracketRouteFromDir(dir);
255
- const rel = relApp(file);
253
+ const relative = toPosixPath(path.relative(appPath, file))
254
+ const base = path.basename(relative)
255
+ if (!LAYOUT_NAMES.has(base)) continue
256
+ const dir = path.dirname(relative) === '.' ? '' : path.dirname(relative)
257
+ if (isPrivate(dir)) continue
258
+ const bracket = bracketRouteFromDir(dir)
259
+ const rel = relApp(file)
256
260
  if (!manifest.layoutRoutes[bracket]) {
257
261
  manifest.layoutRoutes[bracket] = {
258
262
  path: rel,
259
263
  groups: groupsFromBracketRoute(bracket),
260
264
  slots: [],
261
- };
265
+ }
262
266
  }
263
- manifest.layoutPaths.add(rel);
264
- manifest.filePathToRoute.set(rel, bracket);
267
+ manifest.layoutPaths.add(rel)
268
+ manifest.filePathToRoute.set(rel, bracket)
265
269
  }
266
270
 
267
271
  // Slots: `@name` dirs whose nearest ancestor layout owns them. A path can
@@ -269,22 +273,22 @@ export async function buildRouteTypesManifest({
269
273
  // the slot that owns a given file is the deepest (last) one on the path,
270
274
  // not the first, since the layout receiving the prop lives directly under it.
271
275
  for (const file of appFiles) {
272
- const relative = toPosixPath(path.relative(appPath, file));
273
- const segments = relative.split('/');
274
- let slotIndex = -1;
276
+ const relative = toPosixPath(path.relative(appPath, file))
277
+ const segments = relative.split('/')
278
+ let slotIndex = -1
275
279
  for (let i = segments.length - 1; i >= 0; i--) {
276
280
  if (isSlotSegment(segments[i]!)) {
277
- slotIndex = i;
278
- break;
281
+ slotIndex = i
282
+ break
279
283
  }
280
284
  }
281
- if (slotIndex === -1) continue;
282
- const slotName = segments[slotIndex]!.slice(1);
283
- const ownerDir = segments.slice(0, slotIndex).join('/');
284
- if (isPrivate(ownerDir)) continue;
285
- const ownerRoute = bracketRouteFromDir(ownerDir);
286
- const layout = manifest.layoutRoutes[ownerRoute];
287
- if (layout && !layout.slots.includes(slotName)) layout.slots.push(slotName);
285
+ if (slotIndex === -1) continue
286
+ const slotName = segments[slotIndex]!.slice(1)
287
+ const ownerDir = segments.slice(0, slotIndex).join('/')
288
+ if (isPrivate(ownerDir)) continue
289
+ const ownerRoute = bracketRouteFromDir(ownerDir)
290
+ const layout = manifest.layoutRoutes[ownerRoute]
291
+ if (layout && !layout.slots.includes(slotName)) layout.slots.push(slotName)
288
292
  }
289
293
 
290
294
  // App pages for the validator: an independent filesystem scan of every `page.{ext}` (including
@@ -293,64 +297,64 @@ export async function buildRouteTypesManifest({
293
297
  // `dashboard/@analytics/page.tsx` renders at `/dashboard`, so it must validate against `/dashboard`.
294
298
  // Guarded to routes that are actually routable, so private and interception pages are excluded - the
295
299
  // AppPageConfig<Route> constraint requires `Route extends AppRoutes`.
296
- const PAGE_BASENAMES = new Set(PAGE_EXTENSIONS.map(ext => `page.${ext}`));
300
+ const PAGE_BASENAMES = new Set(PAGE_EXTENSIONS.map(ext => `page.${ext}`))
297
301
  for (const file of appFiles) {
298
- const relative = toPosixPath(path.relative(appPath, file));
299
- if (!PAGE_BASENAMES.has(path.basename(relative))) continue;
300
- const dir = path.dirname(relative) === '.' ? '' : path.dirname(relative);
301
- if (isPrivate(dir)) continue;
302
- const route = bracketRouteFromDir(dir);
303
- if (!manifest.appRoutes[route]) continue;
304
- const rel = relApp(file);
305
- manifest.appPagePaths.add(rel);
306
- manifest.filePathToRoute.set(rel, route);
302
+ const relative = toPosixPath(path.relative(appPath, file))
303
+ if (!PAGE_BASENAMES.has(path.basename(relative))) continue
304
+ const dir = path.dirname(relative) === '.' ? '' : path.dirname(relative)
305
+ if (isPrivate(dir)) continue
306
+ const route = bracketRouteFromDir(dir)
307
+ if (!manifest.appRoutes[route]) continue
308
+ const rel = relApp(file)
309
+ manifest.appPagePaths.add(rel)
310
+ manifest.filePathToRoute.set(rel, route)
307
311
  }
308
312
 
309
313
  // Pages Router: pages/*.{ext} (non-api) -> pageRoutes; pages/api/** -> pageApiRoutes.
310
- const pagesDir = path.join(config.root, 'pages');
314
+ const pagesDir = path.join(config.root, 'pages')
311
315
  for (const file of await walkFiles(pagesDir)) {
312
- const relative = toPosixPath(path.relative(pagesDir, file));
313
- if (!PAGE_EXTENSIONS.some(ext => relative.endsWith(`.${ext}`))) continue;
314
- const base = path.basename(relative);
316
+ const relative = toPosixPath(path.relative(pagesDir, file))
317
+ if (!PAGE_EXTENSIONS.some(ext => relative.endsWith(`.${ext}`))) continue
318
+ const base = path.basename(relative)
315
319
  if (base.startsWith('_app.') || base.startsWith('_document.') || base.startsWith('_error.')) {
316
- continue;
320
+ continue
317
321
  }
318
- const rel = relApp(file);
319
- const isApi = relative === 'api' || relative.startsWith('api/');
320
- const route = pagesRouteFromRelative(relative);
322
+ const rel = relApp(file)
323
+ const isApi = relative === 'api' || relative.startsWith('api/')
324
+ const route = pagesRouteFromRelative(relative)
321
325
  if (isApi) {
322
- manifest.pageApiRoutes.add(rel);
323
- manifest.filePathToRoute.set(rel, route);
326
+ manifest.pageApiRoutes.add(rel)
327
+ manifest.filePathToRoute.set(rel, route)
324
328
  } else {
325
- manifest.pageRoutes[route] = { path: rel, groups: groupsFromBracketRoute(route) };
326
- manifest.pagesRouterPagePaths.add(rel);
327
- manifest.filePathToRoute.set(rel, route);
329
+ manifest.pageRoutes[route] = { path: rel, groups: groupsFromBracketRoute(route) }
330
+ manifest.pagesRouterPagePaths.add(rel)
331
+ manifest.filePathToRoute.set(rel, route)
328
332
  }
329
333
  }
330
334
 
331
335
  // redirects / rewrites from next.config.
332
- const redirects = nextConfig.redirects;
336
+ const redirects = nextConfig.redirects
333
337
  if (typeof redirects === 'function') {
334
- const list = await (redirects as RedirectsFn)();
338
+ const list = await (redirects as RedirectsFn)()
335
339
  for (const item of list ?? []) {
336
340
  for (const route of convertCustomRouteSource(item.source)) {
337
- manifest.redirectRoutes[route] = { path: route, groups: groupsFromBracketRoute(route) };
341
+ manifest.redirectRoutes[route] = { path: route, groups: groupsFromBracketRoute(route) }
338
342
  }
339
343
  }
340
344
  }
341
345
 
342
- const rewrites = nextConfig.rewrites;
346
+ const rewrites = nextConfig.rewrites
343
347
  if (typeof rewrites === 'function') {
344
- const result = await (rewrites as RewritesFn)();
348
+ const result = await (rewrites as RewritesFn)()
345
349
  const sources = Array.isArray(result)
346
350
  ? result
347
- : [...(result?.beforeFiles ?? []), ...(result?.afterFiles ?? []), ...(result?.fallback ?? [])];
351
+ : [...(result?.beforeFiles ?? []), ...(result?.afterFiles ?? []), ...(result?.fallback ?? [])]
348
352
  for (const item of sources) {
349
353
  for (const route of convertCustomRouteSource(item.source)) {
350
- manifest.rewriteRoutes[route] = { path: route, groups: groupsFromBracketRoute(route) };
354
+ manifest.rewriteRoutes[route] = { path: route, groups: groupsFromBracketRoute(route) }
351
355
  }
352
356
  }
353
357
  }
354
358
 
355
- return manifest;
359
+ return manifest
356
360
  }