@wular/pnext 0.0.4 → 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 -1992
  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 -1897
  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} +139 -139
  351. package/src/resolve/engine.ts +90 -77
  352. package/src/resolve/imports.ts +475 -463
  353. package/src/resolve/scan-facts.ts +318 -296
  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 +827 -815
  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
@@ -12,53 +12,53 @@
12
12
  //
13
13
  // When no tsconfig.json exists but the project contains TypeScript sources, one is created from scratch.
14
14
 
15
- import { existsSync, readdirSync } from 'node:fs';
16
- import { readFile } from 'node:fs/promises';
17
- import { writeFileAtomic } from '../utils/fs';
18
- import { createRequire } from 'node:module';
19
- import path from 'node:path';
20
- import type { ResolvedConfig } from '../config';
21
- import { getNextConfig } from './next/config-loader';
15
+ import { existsSync, readdirSync } from 'node:fs'
16
+ import { readFile } from 'node:fs/promises'
17
+ import { writeFileAtomic } from '../utils/fs'
18
+ import { createRequire } from 'node:module'
19
+ import path from 'node:path'
20
+ import type { ResolvedConfig } from '../config'
21
+ import { getNextConfig } from './next/config-loader'
22
22
 
23
23
  interface SuggestedOption {
24
- suggested: unknown;
25
- reason?: string;
24
+ suggested: unknown
25
+ reason?: string
26
26
  }
27
27
  interface RequiredOption {
28
- parsedValue?: unknown;
29
- parsedValues?: unknown[];
30
- value: unknown;
31
- reason: string;
28
+ parsedValue?: unknown
29
+ parsedValues?: unknown[]
30
+ value: unknown
31
+ reason: string
32
32
  }
33
- type DesiredOption = SuggestedOption | RequiredOption;
33
+ type DesiredOption = SuggestedOption | RequiredOption
34
34
 
35
35
  interface TsconfigShape {
36
- compilerOptions?: Record<string, unknown>;
37
- include?: unknown;
38
- exclude?: unknown;
39
- [key: string]: unknown;
36
+ compilerOptions?: Record<string, unknown>
37
+ include?: unknown
38
+ exclude?: unknown
39
+ [key: string]: unknown
40
40
  }
41
41
 
42
42
  // Whether the project carries any .ts/.tsx source (bounded walk skipping
43
43
  // node_modules/dot-dirs) — Next's TS-detection gate for first-time setup.
44
44
  function hasTypescriptSources(root: string, depth = 0): boolean {
45
- if (depth > 6) return false;
46
- let entries: import('node:fs').Dirent[];
45
+ if (depth > 6) return false
46
+ let entries: import('node:fs').Dirent[]
47
47
  try {
48
- entries = readdirSync(root, { withFileTypes: true });
48
+ entries = readdirSync(root, { withFileTypes: true })
49
49
  } catch {
50
- return false;
50
+ return false
51
51
  }
52
52
  for (const entry of entries) {
53
- if (entry.name.startsWith('.') || entry.name === 'node_modules') continue;
53
+ if (entry.name.startsWith('.') || entry.name === 'node_modules') continue
54
54
  if (entry.isFile() && /\.(ts|tsx|mts|cts)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
55
- return true;
55
+ return true
56
56
  }
57
57
  if (entry.isDirectory() && hasTypescriptSources(path.join(root, entry.name), depth + 1)) {
58
- return true;
58
+ return true
59
59
  }
60
60
  }
61
- return false;
61
+ return false
62
62
  }
63
63
 
64
64
  // The app's typescript version, else pnext's own. Read from package.json rather
@@ -67,19 +67,19 @@ function hasTypescriptSources(root: string, depth = 0): boolean {
67
67
  function appTypescriptVersion(root: string): string {
68
68
  for (const base of [root, import.meta.dirname]) {
69
69
  try {
70
- const require = createRequire(path.join(base, 'noop.js'));
71
- const pkg = require('typescript/package.json') as { version?: string };
72
- if (typeof pkg.version === 'string') return pkg.version;
70
+ const require = createRequire(path.join(base, 'noop.js'))
71
+ const pkg = require('typescript/package.json') as { version?: string }
72
+ if (typeof pkg.version === 'string') return pkg.version
73
73
  } catch {
74
74
  // keep looking
75
75
  }
76
76
  }
77
- return '5.9.0';
77
+ return '5.9.0'
78
78
  }
79
79
 
80
80
  function versionGte(version: string, major: number, minor: number): boolean {
81
- const [maj = 0, min = 0] = version.split('.').map(part => Number.parseInt(part, 10));
82
- return maj > major || (maj === major && min >= minor);
81
+ const [maj = 0, min = 0] = version.split('.').map(part => Number.parseInt(part, 10))
82
+ return maj > major || (maj === major && min >= minor)
83
83
  }
84
84
 
85
85
  function getDesiredCompilerOptions(
@@ -89,12 +89,12 @@ function getDesiredCompilerOptions(
89
89
  const configuredModule =
90
90
  typeof userTsConfig.compilerOptions?.module === 'string'
91
91
  ? userTsConfig.compilerOptions.module.toLowerCase()
92
- : undefined;
92
+ : undefined
93
93
  const preferBundlerResolution =
94
94
  versionGte(typescriptVersion, 5, 0) &&
95
95
  configuredModule !== 'commonjs' &&
96
- configuredModule !== 'amd';
97
- const modulePreserve = versionGte(typescriptVersion, 5, 4) && configuredModule === 'preserve';
96
+ configuredModule !== 'amd'
97
+ const modulePreserve = versionGte(typescriptVersion, 5, 4) && configuredModule === 'preserve'
98
98
 
99
99
  return {
100
100
  target: {
@@ -148,7 +148,7 @@ function getDesiredCompilerOptions(
148
148
  value: 'react-jsx',
149
149
  reason: 'next.js uses the React automatic runtime',
150
150
  },
151
- };
151
+ }
152
152
  }
153
153
 
154
154
  // `<distDir>/types/**` plus the dev-mode variant, shortest first (Next sorts by
@@ -156,7 +156,7 @@ function getDesiredCompilerOptions(
156
156
  function typeDefinitionGlobPatterns(distDir: string): string[] {
157
157
  return [`${distDir}/types/**/*.ts`, `${distDir}/dev/types/**/*.ts`].sort(
158
158
  (a, b) => a.length - b.length,
159
- );
159
+ )
160
160
  }
161
161
 
162
162
  /**
@@ -166,80 +166,80 @@ function typeDefinitionGlobPatterns(distDir: string): string[] {
166
166
  * every requirement.
167
167
  */
168
168
  export async function writeTsconfigDefaults(config: ResolvedConfig): Promise<void> {
169
- const tsConfigPath = path.join(config.root, 'tsconfig.json');
170
- let isFirstTimeSetup = false;
169
+ const tsConfigPath = path.join(config.root, 'tsconfig.json')
170
+ let isFirstTimeSetup = false
171
171
  if (!existsSync(tsConfigPath)) {
172
- if (!hasTypescriptSources(config.root)) return;
173
- isFirstTimeSetup = true;
172
+ if (!hasTypescriptSources(config.root)) return
173
+ isFirstTimeSetup = true
174
174
  // Atomic: the client build's tsconfig-paths reader runs in a parallel phase
175
175
  // and must never see a truncated file.
176
- await writeFileAtomic(tsConfigPath, '{}\n');
176
+ await writeFileAtomic(tsConfigPath, '{}\n')
177
177
  }
178
178
 
179
- let userTsConfig: TsconfigShape;
179
+ let userTsConfig: TsconfigShape
180
180
  try {
181
- userTsConfig = JSON.parse(await readFile(tsConfigPath, 'utf8')) as TsconfigShape;
181
+ userTsConfig = JSON.parse(await readFile(tsConfigPath, 'utf8')) as TsconfigShape
182
182
  } catch {
183
- return; // JSONC / invalid — leave the user's file alone
183
+ return // JSONC / invalid — leave the user's file alone
184
184
  }
185
- if (userTsConfig === null || typeof userTsConfig !== 'object') return;
185
+ if (userTsConfig === null || typeof userTsConfig !== 'object') return
186
186
  // Automatic setup would clobber inherited options; Next bails here too.
187
- if ('extends' in userTsConfig || 'references' in userTsConfig) return;
187
+ if ('extends' in userTsConfig || 'references' in userTsConfig) return
188
188
 
189
- if (userTsConfig.compilerOptions == null) userTsConfig.compilerOptions = {};
190
- const compilerOptions = userTsConfig.compilerOptions;
189
+ if (userTsConfig.compilerOptions == null) userTsConfig.compilerOptions = {}
190
+ const compilerOptions = userTsConfig.compilerOptions
191
191
 
192
- const desired = getDesiredCompilerOptions(appTypescriptVersion(config.root), userTsConfig);
192
+ const desired = getDesiredCompilerOptions(appTypescriptVersion(config.root), userTsConfig)
193
193
 
194
- const suggestedActions: string[] = [];
195
- const requiredActions: string[] = [];
194
+ const suggestedActions: string[] = []
195
+ const requiredActions: string[] = []
196
196
  for (const [optionKey, check] of Object.entries(desired)) {
197
197
  if ('suggested' in check) {
198
198
  if (!(optionKey in compilerOptions)) {
199
- compilerOptions[optionKey] = check.suggested;
199
+ compilerOptions[optionKey] = check.suggested
200
200
  suggestedActions.push(
201
201
  `${optionKey} was set to ${JSON.stringify(check.suggested)}` +
202
202
  (check.reason ? ` (${check.reason})` : ''),
203
- );
203
+ )
204
204
  }
205
- continue;
205
+ continue
206
206
  }
207
- let existingValue = compilerOptions[optionKey];
208
- if (typeof existingValue === 'string') existingValue = existingValue.toLowerCase();
207
+ let existingValue = compilerOptions[optionKey]
208
+ if (typeof existingValue === 'string') existingValue = existingValue.toLowerCase()
209
209
  const satisfied = check.parsedValues
210
210
  ? check.parsedValues.includes(existingValue)
211
- : (check.parsedValue ?? check.value) === existingValue;
211
+ : (check.parsedValue ?? check.value) === existingValue
212
212
  if (!satisfied) {
213
- compilerOptions[optionKey] = check.value;
214
- requiredActions.push(`${optionKey} was set to ${String(check.value)} (${check.reason})`);
213
+ compilerOptions[optionKey] = check.value
214
+ requiredActions.push(`${optionKey} was set to ${String(check.value)} (${check.reason})`)
215
215
  }
216
216
  }
217
217
 
218
218
  const hasAppDir =
219
- existsSync(path.join(config.root, 'app')) || existsSync(path.join(config.root, 'src', 'app'));
219
+ existsSync(path.join(config.root, 'app')) || existsSync(path.join(config.root, 'src', 'app'))
220
220
  const hasPagesDir =
221
221
  existsSync(path.join(config.root, 'pages')) ||
222
- existsSync(path.join(config.root, 'src', 'pages'));
222
+ existsSync(path.join(config.root, 'src', 'pages'))
223
223
  // eslint-disable-next-line turbo/no-undeclared-env-vars
224
- const strictRouteTypes = process.env.__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES === 'true';
224
+ const strictRouteTypes = process.env.__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES === 'true'
225
225
  const distDir =
226
- typeof getNextConfig().distDir === 'string' ? (getNextConfig().distDir as string) : '.next';
227
- const nextTypes = typeDefinitionGlobPatterns(distDir);
226
+ typeof getNextConfig().distDir === 'string' ? (getNextConfig().distDir as string) : '.next'
227
+ const nextTypes = typeDefinitionGlobPatterns(distDir)
228
228
 
229
229
  if (!('include' in userTsConfig)) {
230
230
  const defaultInclude =
231
231
  hasAppDir && !strictRouteTypes
232
232
  ? ['next-env.d.ts', ...nextTypes, '**/*.mts', '**/*.ts', '**/*.tsx']
233
- : ['next-env.d.ts', '**/*.mts', '**/*.ts', '**/*.tsx'];
234
- userTsConfig.include = defaultInclude;
233
+ : ['next-env.d.ts', '**/*.mts', '**/*.ts', '**/*.tsx']
234
+ userTsConfig.include = defaultInclude
235
235
  suggestedActions.push(
236
236
  `include was set to [${defaultInclude.map(type => `'${type}'`).join(', ')}]`,
237
- );
237
+ )
238
238
  } else if (hasAppDir && !strictRouteTypes && Array.isArray(userTsConfig.include)) {
239
239
  for (const type of nextTypes) {
240
240
  if (!userTsConfig.include.includes(type)) {
241
- userTsConfig.include.push(type);
242
- suggestedActions.push(`include was updated to add '${type}'`);
241
+ userTsConfig.include.push(type)
242
+ suggestedActions.push(`include was updated to add '${type}'`)
243
243
  }
244
244
  }
245
245
  }
@@ -248,36 +248,32 @@ export async function writeTsconfigDefaults(config: ResolvedConfig): Promise<voi
248
248
  const plugins = [
249
249
  ...(Array.isArray(userTsConfig.plugins) ? (userTsConfig.plugins as unknown[]) : []),
250
250
  ...(Array.isArray(compilerOptions.plugins) ? (compilerOptions.plugins as unknown[]) : []),
251
- ] as { name?: string }[];
251
+ ] as { name?: string }[]
252
252
  if (!plugins.some(plugin => plugin?.name === 'next')) {
253
- if (!Array.isArray(compilerOptions.plugins)) compilerOptions.plugins = [];
254
- (compilerOptions.plugins as unknown[]).push({ name: 'next' });
255
- suggestedActions.push(`plugins was updated to add { name: 'next' }`);
253
+ if (!Array.isArray(compilerOptions.plugins)) compilerOptions.plugins = []
254
+ ;(compilerOptions.plugins as unknown[]).push({ name: 'next' })
255
+ suggestedActions.push(`plugins was updated to add { name: 'next' }`)
256
256
  }
257
- if (
258
- hasPagesDir &&
259
- !compilerOptions.strict &&
260
- !('strictNullChecks' in compilerOptions)
261
- ) {
262
- compilerOptions.strictNullChecks = true;
263
- suggestedActions.push('strictNullChecks was set to true');
257
+ if (hasPagesDir && !compilerOptions.strict && !('strictNullChecks' in compilerOptions)) {
258
+ compilerOptions.strictNullChecks = true
259
+ suggestedActions.push('strictNullChecks was set to true')
264
260
  }
265
261
  }
266
262
 
267
263
  if (!('exclude' in userTsConfig)) {
268
- userTsConfig.exclude = ['node_modules'];
269
- suggestedActions.push(`exclude was set to ['node_modules']`);
264
+ userTsConfig.exclude = ['node_modules']
265
+ suggestedActions.push(`exclude was set to ['node_modules']`)
270
266
  }
271
267
 
272
- if (suggestedActions.length === 0 && requiredActions.length === 0) return;
268
+ if (suggestedActions.length === 0 && requiredActions.length === 0) return
273
269
 
274
- await writeFileAtomic(tsConfigPath, `${JSON.stringify(userTsConfig, null, 2)}\n`);
270
+ await writeFileAtomic(tsConfigPath, `${JSON.stringify(userTsConfig, null, 2)}\n`)
275
271
 
276
272
  if (isFirstTimeSetup) {
277
273
  console.log(
278
274
  '\nWe detected TypeScript in your project and created a tsconfig.json file for you.',
279
- );
280
- return;
275
+ )
276
+ return
281
277
  }
282
278
 
283
279
  const lines = [
@@ -285,20 +281,20 @@ export async function writeTsconfigDefaults(config: ResolvedConfig): Promise<voi
285
281
  `We detected TypeScript in your project and reconfigured your tsconfig.json file for you.${
286
282
  compilerOptions.strict ? '' : ' Strict-mode is set to false by default.'
287
283
  }`,
288
- ];
284
+ ]
289
285
  if (suggestedActions.length > 0) {
290
286
  lines.push(
291
287
  `The following suggested values were added to your tsconfig.json. These values can be changed to fit your project's needs:\n`,
292
288
  ...suggestedActions.map(action => `\t- ${action}`),
293
289
  '',
294
- );
290
+ )
295
291
  }
296
292
  if (requiredActions.length > 0) {
297
293
  lines.push(
298
294
  `The following mandatory changes were made to your tsconfig.json:\n`,
299
295
  ...requiredActions.map(action => `\t- ${action}`),
300
296
  '',
301
- );
297
+ )
302
298
  }
303
- console.log(lines.join('\n'));
299
+ console.log(lines.join('\n'))
304
300
  }