@wular/coder 0.3.18 → 0.4.0

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 (473) hide show
  1. package/README.md +18 -16
  2. package/bin/coder.mjs +3 -1
  3. package/dist/actions-Mk3FSlpJ.js +20 -0
  4. package/dist/adapter-B0oYCI0S.js +1 -0
  5. package/dist/adapter-BKVzTDnn.js +1 -0
  6. package/dist/adapter-DPInwbJG.js +1 -0
  7. package/dist/adapter-DaiJMOYo.js +1 -0
  8. package/dist/adapter-PeKziOUg.js +1 -0
  9. package/dist/add-BxpLHnvD.js +1 -0
  10. package/dist/add-CE-70LFs.js +1 -0
  11. package/dist/add-U-pty9qJ.js +6 -0
  12. package/dist/add-ej0X9e3a.js +1 -0
  13. package/dist/add-json-CEa-6luW.js +1 -0
  14. package/dist/agent-BsYx3Odz.js +3 -0
  15. package/dist/agent-JdtZozvP.js +1 -0
  16. package/dist/alias-DX-Bm86x.js +2 -0
  17. package/dist/app-BT5f7zL5.js +1 -0
  18. package/dist/approvals-C-AvFt6s.js +2 -0
  19. package/dist/approve-DOmpQRNd.js +2 -0
  20. package/dist/apps-CjfrZyM5.js +1 -0
  21. package/dist/archive-BUB8gFKD.js +4 -0
  22. package/dist/archive-BziJ1rQ-.js +3 -0
  23. package/dist/archive-sweep-CtBcARgN.js +1 -0
  24. package/dist/args-BOEEdpWk.js +1 -0
  25. package/dist/ask-dE3U3ss2.js +4 -0
  26. package/dist/auth-BFny--17.js +1 -0
  27. package/dist/auth-DWHIzqbA.js +1 -0
  28. package/dist/builtin/coder/agent.json +24 -0
  29. package/dist/builtin/coder/system.md +17 -0
  30. package/dist/chat-3Znsevah.js +1 -0
  31. package/dist/chat-B_yhNTo0.js +13 -0
  32. package/dist/chat-bridge-BS9WtP3X.js +2 -0
  33. package/dist/cli-BilSDkvE.js +9 -0
  34. package/dist/cli.d.ts +71 -1
  35. package/dist/cli.js +1 -91
  36. package/dist/client-D9IoAuDD.js +1 -0
  37. package/dist/config-Da_cwoxI.js +3 -0
  38. package/dist/create-C_iMJV4Y.js +1 -0
  39. package/dist/credentials-B1jv6dkg.js +1 -0
  40. package/dist/dash/manifest.json +3427 -0
  41. package/dist/dash/public/assets/apple-touch-icon.png +0 -0
  42. package/dist/dash/public/assets/chunks/agent-pills-69c965aae1737cef.js +1 -0
  43. package/dist/dash/public/assets/chunks/agent-settings-form-a1ce70812eea3f20.js +1 -0
  44. package/dist/dash/public/assets/chunks/agents-grid-f62180478e43c192.js +1 -0
  45. package/dist/dash/public/assets/chunks/badge-d07f35e9abc80e14.js +1 -0
  46. package/dist/dash/public/assets/chunks/card-be04148b64223a52.js +1 -0
  47. package/dist/dash/public/assets/chunks/combo-32c321a7a84fa902.js +1 -0
  48. package/dist/dash/public/assets/chunks/composer-aec9c3c691f1f79a.js +1 -0
  49. package/dist/dash/public/assets/chunks/composer-data-6f7608fed13f3dd7.js +1 -0
  50. package/dist/dash/public/assets/chunks/composer-e56860d72742379e.js +1 -0
  51. package/dist/dash/public/assets/chunks/confirm-b4e2c16aef4b3431.js +1 -0
  52. package/dist/dash/public/assets/chunks/connect-apps-a5a63941e287c33f.js +1 -0
  53. package/dist/dash/public/assets/chunks/connect-repositories-e4c049b5b4384623.js +1 -0
  54. package/dist/dash/public/assets/chunks/credentials-list-2b7d0c771b89f9c5.js +2 -0
  55. package/dist/dash/public/assets/chunks/custom-range-53b70e0d9eeae84e.js +1 -0
  56. package/dist/dash/public/assets/chunks/editor-691d2bcecb1ecb87.js +7 -0
  57. package/dist/dash/public/assets/chunks/engines-list-a5fe1671601ce3b0.js +1 -0
  58. package/dist/dash/public/assets/chunks/field-9e12e5fc8774b6e5.js +1 -0
  59. package/dist/dash/public/assets/chunks/format-eb03fc9d9744d960.js +1 -0
  60. package/dist/dash/public/assets/chunks/heads-4041a925d63ab116.js +1 -0
  61. package/dist/dash/public/assets/chunks/instructions-4e0d18b9b40edbd7.js +2 -0
  62. package/dist/dash/public/assets/chunks/instructions-b00959bd4bb70502.js +1 -0
  63. package/dist/dash/public/assets/chunks/list-d7eb9e02cf261fbe.js +1 -0
  64. package/dist/dash/public/assets/chunks/mcp-list-a450533109045ef5.js +1 -0
  65. package/dist/dash/public/assets/chunks/model-options-15c53331a2f28a4f.js +1 -0
  66. package/dist/dash/public/assets/chunks/models-list-1e273c6843858148.js +1 -0
  67. package/dist/dash/public/assets/chunks/paged-bc6fa0c2b9d52ed7.js +1 -0
  68. package/dist/dash/public/assets/chunks/platform-actions-87f3f76ec1b840cb.js +1 -0
  69. package/dist/dash/public/assets/chunks/runners-list-fc7cdae4fa93e78b.js +1 -0
  70. package/dist/dash/public/assets/chunks/runtime-246221e985d863e5-1.js +2 -0
  71. package/dist/dash/public/assets/chunks/segmented-6091dfb2f954799f.js +1 -0
  72. package/dist/dash/public/assets/chunks/select-dd09a6b9544cfde2.js +1 -0
  73. package/dist/dash/public/assets/chunks/sentinel-ff7143a47fd22835.js +1 -0
  74. package/dist/dash/public/assets/chunks/shared-init-246221e985d863e5-2.js +1 -0
  75. package/dist/dash/public/assets/chunks/shared-init-8f2ac936c95a7f7b.js +1 -0
  76. package/dist/dash/public/assets/chunks/shared-init-986901c810947c12.js +5 -0
  77. package/dist/dash/public/assets/chunks/shared-init-baceed9fd2d43661.js +2 -0
  78. package/dist/dash/public/assets/chunks/tail-5a5bfcd308535d70.js +1 -0
  79. package/dist/dash/public/assets/chunks/task-actions-7919ca0e901131f4.js +1 -0
  80. package/dist/dash/public/assets/chunks/task-fa8b82e95e771c4a.js +1 -0
  81. package/dist/dash/public/assets/chunks/task-view-e8a0f99c992fa11e.js +3 -0
  82. package/dist/dash/public/assets/chunks/tasks-list-7b72f5b295349532.js +1 -0
  83. package/dist/dash/public/assets/chunks/toolbar-9b18a5d26dee37c3.js +1 -0
  84. package/dist/dash/public/assets/chunks/versions-list-8cdf3a41c56b2152.js +1 -0
  85. package/dist/dash/public/assets/chunks/wular-pnext-246221e985d863e5-0.js +1 -0
  86. package/dist/dash/public/assets/connect-382b1729a7ae7808.css +1 -0
  87. package/dist/dash/public/assets/dash-9e02d5d1a6d42ee3.css +1 -0
  88. package/dist/dash/public/assets/dash-account-04859899c1838ada.css +1 -0
  89. package/dist/dash/public/assets/dash-agents-9e678137267dec07.css +1 -0
  90. package/dist/dash/public/assets/dash-agents-new-26fa27b17ef9b8d8.css +1 -0
  91. package/dist/dash/public/assets/dash-agents-param-slug-b975c48f8abf3444.css +1 -0
  92. package/dist/dash/public/assets/dash-agents-param-slug-edit-e13fda599bb04843.css +1 -0
  93. package/dist/dash/public/assets/dash-agents-param-slug-platforms-70292932cb27bc96.css +1 -0
  94. package/dist/dash/public/assets/dash-agents-param-slug-settings-71f9a86251723fcc.css +1 -0
  95. package/dist/dash/public/assets/dash-agents-param-slug-tasks-fb8eb2ed71006601.css +1 -0
  96. package/dist/dash/public/assets/dash-agents-param-slug-usage-7c8740f1cdd52c71.css +1 -0
  97. package/dist/dash/public/assets/dash-settings-8eb818da462227e8.css +1 -0
  98. package/dist/dash/public/assets/dash-settings-param-tab-849a1a9542e273f5.css +1 -0
  99. package/dist/dash/public/assets/dash-tasks-81e510e0b6931b42.css +1 -0
  100. package/dist/dash/public/assets/dash-tasks-param-id-bbd2a83342f2ec10.css +1 -0
  101. package/dist/dash/public/assets/dash-usage-8e0259e03eaed1bd.css +1 -0
  102. package/dist/dash/public/assets/favicon.ico +0 -0
  103. package/dist/dash/public/assets/favicon.svg +1 -0
  104. package/dist/dash/public/assets/fonts/LICENSE-fira-code +93 -0
  105. package/dist/dash/public/assets/fonts/fira-code-latin-400-normal-717ee080.woff2 +0 -0
  106. package/dist/dash/public/assets/fonts/fira-code-latin-500-normal-530b6706.woff2 +0 -0
  107. package/dist/dash/public/assets/fonts/fira-code-latin-700-normal-98730669.woff2 +0 -0
  108. package/dist/dash/public/assets/global-d2adbf01910d9df5.css +1 -0
  109. package/dist/dash/public/assets/login-c129b1ce237be260.css +1 -0
  110. package/dist/dash/public/assets/pnext-client-073464b8f422ef57.js +1 -0
  111. package/dist/dash/public/assets/pnext-client-0b6720fdec66eeb0.js +1 -0
  112. package/dist/dash/public/assets/pnext-client-1e9cb2f4f6387a87.js +1 -0
  113. package/dist/dash/public/assets/pnext-client-2f0e78dd006fed0f.js +1 -0
  114. package/dist/dash/public/assets/pnext-client-3c62e2aa2cbe9fe1.js +1 -0
  115. package/dist/dash/public/assets/pnext-client-43a88896ed42dd39.js +1 -0
  116. package/dist/dash/public/assets/pnext-client-4cf2e27d0b9c0365.js +1 -0
  117. package/dist/dash/public/assets/pnext-client-587008fa987d3073.js +1 -0
  118. package/dist/dash/public/assets/pnext-client-676360cc86f31573.js +1 -0
  119. package/dist/dash/public/assets/pnext-client-813427605f424145.js +1 -0
  120. package/dist/dash/public/assets/pnext-client-82de7cf6dfc35b98.js +1 -0
  121. package/dist/dash/public/assets/pnext-client-831e8004c09f0b5b.js +1 -0
  122. package/dist/dash/public/assets/pnext-client-9b557fe468a45ca3.js +1 -0
  123. package/dist/dash/public/assets/pnext-client-ab7c900c802fe827.js +1 -0
  124. package/dist/dash/public/assets/pnext-client-d87d00e402811f0c.js +1 -0
  125. package/dist/dash/public/assets/pnext-client-fbdb7c1da7eda7e5.js +1 -0
  126. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/boot-B2MFTRO2.js +28 -0
  127. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/build-tier-XJJSL5FR.js +2702 -0
  128. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-2HFY3DQT.js +206 -0
  129. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-2ICEVELW.js +832 -0
  130. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-3UPROT2C.js +33 -0
  131. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-4P5CMIYT.js +1580 -0
  132. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-4TKZKZ3Q.js +129 -0
  133. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-5RDEILQB.js +435 -0
  134. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-62KEQM43.js +23 -0
  135. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-6KQSWT6D.js +829 -0
  136. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-7DCNCW6O.js +722 -0
  137. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-B4THCTQP.js +20 -0
  138. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-C2LIV2MM.js +170 -0
  139. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-CCATPVTW.js +376 -0
  140. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-COXJAPTU.js +87 -0
  141. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-E6IXL2NJ.js +6268 -0
  142. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-FLGRBFAH.js +1196 -0
  143. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-FTJVHFWD.js +59 -0
  144. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-H523KSIH.js +5149 -0
  145. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-HT6KKX6A.js +18 -0
  146. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-JESFYECC.js +436 -0
  147. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-JRPJM2XY.js +15 -0
  148. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-L2IWDUXG.js +105 -0
  149. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-L5P4Y4UC.js +181 -0
  150. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-NQE46AZN.js +645 -0
  151. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-PA4QEARJ.js +127 -0
  152. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-PZ5AXOLW.js +7144 -0
  153. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-SNVPTULL.js +2395 -0
  154. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-T3QZT3PG.js +218 -0
  155. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-VC5O2SDP.js +70 -0
  156. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-WZX4V6CM.js +229 -0
  157. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-XUUIDXY5.js +625 -0
  158. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/chunk-ZHFDO3PR.js +263 -0
  159. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/compile-CE2DN7ZA.js +16 -0
  160. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/config-UREY7XJT.js +14 -0
  161. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/config-loader-UI2XE3PZ.js +15 -0
  162. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/entry.js +217 -0
  163. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/generate-I2PPTDFD.js +14 -0
  164. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/modules-UVOCE4C2.js +46 -0
  165. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/pipeline-UW47K537.js +961 -0
  166. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/proxy-ITGOVJBW.js +24 -0
  167. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/register-4SA55SWT.js +12577 -0
  168. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/router-JNKHLBCZ.js +503 -0
  169. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/routes-PD6J2NXW.js +52 -0
  170. package/dist/dash/server/bundle-0.1.5-1508b6c99c0d1e68/tsconfig-defaults-ZXEH7RQK.js +13 -0
  171. package/dist/default-Bobztoxf.js +1 -0
  172. package/dist/default-vYPT26DR.js +1 -0
  173. package/dist/delete-D8gEwoOj.js +4 -0
  174. package/dist/delete-z1_86nf6.js +2 -0
  175. package/dist/disable-DVKd-0Xb.js +1 -0
  176. package/dist/discover-Df-a8K4R.js +3 -0
  177. package/dist/discover-Dvr_3_Xr.js +1 -0
  178. package/dist/dispatch-BKeAch9E.js +14 -0
  179. package/dist/docs-BX65z2Iu.js +2 -0
  180. package/dist/docs-DKJnqZqt.js +2 -0
  181. package/dist/enable-C8Zf_wpN.js +1 -0
  182. package/dist/env-CRf6wkM2.js +1 -0
  183. package/dist/exec-RZFLclKX.js +11 -0
  184. package/dist/executor-BvAA7Cgw.js +10 -0
  185. package/dist/flow/builtin/review.d.ts +157 -0
  186. package/dist/flow/builtin/review.js +19 -0
  187. package/dist/flow/index.d.ts +1 -1
  188. package/dist/flow/index.js +1 -1
  189. package/dist/flow-17k25MHt.js +1 -0
  190. package/dist/github-actions-DwUzm4hC.js +24 -0
  191. package/dist/http-Bkg_OQ6r.js +1 -0
  192. package/dist/{index-BQ-b77or.d.ts → index-DT7EST00.d.ts} +116 -238
  193. package/dist/init-CoMfFxbG.js +1 -0
  194. package/dist/integrations-5xCaXSd-.js +1 -0
  195. package/dist/integrations-BAgdVDhj.js +5 -0
  196. package/dist/lib/broker.js +3 -3
  197. package/dist/list-BAKvxSbh.js +4 -0
  198. package/dist/list-BYiG8Zav.js +2 -0
  199. package/dist/list-BxEywhHU.js +1 -0
  200. package/dist/list-C5w01-8q.js +1 -0
  201. package/dist/list-CIW2joV1.js +1 -0
  202. package/dist/list-DX-z3SBp.js +3 -0
  203. package/dist/list-DpCf4G-H.js +4 -0
  204. package/dist/list-VToARh3C.js +1 -0
  205. package/dist/load-BpEsAn51.js +2 -0
  206. package/dist/local-H3uvqEbq.js +1 -0
  207. package/dist/log-view-dg0TlKLA.js +1 -0
  208. package/dist/login-BFxX4jJy.js +1 -0
  209. package/dist/login-DkkslfBx.js +1 -0
  210. package/dist/logout-BHAtw4Z8.js +1 -0
  211. package/dist/maintenance-C5FklUw3.js +1 -0
  212. package/dist/match-CXAjDhg7.js +1 -0
  213. package/dist/mcp-BgKb2Cdk.js +1 -0
  214. package/dist/mcp-CCZOAo06.js +1 -0
  215. package/dist/mcp-server-DGzme0YX.js +1 -0
  216. package/dist/migrate-C4vM7DQN.js +2 -0
  217. package/dist/migrate-N-85_N7J.js +1 -0
  218. package/dist/model-Bs1StDo3.js +1 -0
  219. package/dist/models-_5LVGC3m.js +1 -0
  220. package/dist/output-BKeyLbvt.js +5 -0
  221. package/dist/prompt-CEuBMNhk.js +7 -0
  222. package/dist/push-CUC55Bqd.js +1 -0
  223. package/dist/queue-6io_NOP3.js +116 -0
  224. package/dist/refresh-BIrmrWYq.js +1 -0
  225. package/dist/remote-miQNTVRa.js +1 -0
  226. package/dist/remove-B93LNkZI.js +1 -0
  227. package/dist/remove-C5_xggx7.js +1 -0
  228. package/dist/remove-CuH8a3L9.js +1 -0
  229. package/dist/remove-eQ8y5C5p.js +1 -0
  230. package/dist/rename-CYfy03FE.js +1 -0
  231. package/dist/result-BEtQZHaY.js +5 -0
  232. package/dist/result-BzaM3inj.js +15 -0
  233. package/dist/resume-DYzKvyEw.js +3 -0
  234. package/dist/review-oIBeECZE.js +7 -0
  235. package/dist/rolldown-runtime-DT7IzrpZ.js +1 -0
  236. package/dist/rotate-key-IdMYH7gg.js +1 -0
  237. package/dist/run-BDYl0CKl.js +2 -0
  238. package/dist/run-CTtd0Znc.js +5 -0
  239. package/dist/run-CawRGnOg.js +2 -0
  240. package/dist/runner-D7ScbIHJ.js +1 -0
  241. package/dist/runner-sUpWJ_k0.js +1 -0
  242. package/dist/schema-CU2iFkp8.js +1 -0
  243. package/dist/sdk.d.ts +1166 -191
  244. package/dist/sdk.js +1 -1
  245. package/dist/serve-BTeomYxW.js +1 -0
  246. package/dist/serve-CE8YV2e9.js +1 -0
  247. package/dist/serve-CPnmrKyf.js +2 -0
  248. package/dist/serve-CQKZxzFE.js +4 -0
  249. package/dist/serve-GmRO89s5.js +12 -0
  250. package/dist/server-Kb22cWfF.js +1 -0
  251. package/dist/setup-host-GFTUzzZJ.js +6 -0
  252. package/dist/shared-DVtzWhUT.js +1 -0
  253. package/dist/show-CMUg8SJu.js +1 -0
  254. package/dist/show-COTZEYgc.js +1 -0
  255. package/dist/status-D26U--p8.js +1 -0
  256. package/dist/steer-C6uARLp5.js +4 -0
  257. package/dist/stop-BrGI3hSS.js +1 -0
  258. package/dist/stop-ByCAlbmN.js +3 -0
  259. package/dist/store-B94tSate.js +42 -0
  260. package/dist/store-DzqXS2wT.js +8 -0
  261. package/dist/task-C6VAg5WU.js +1 -0
  262. package/dist/task-CgOKgkEG.js +1 -0
  263. package/dist/task-DeglY79z.js +5 -0
  264. package/dist/test-NEbhlxvo.js +1 -0
  265. package/dist/tools-D0Zfs8Hx.js +1 -0
  266. package/dist/types-D0q15RJa.js +1 -0
  267. package/dist/types-Dve7Z0ZP.d.ts +389 -0
  268. package/dist/unalias-C9NqmSDq.js +1 -0
  269. package/dist/update-BTxYQj7Z.js +2 -0
  270. package/dist/upgrade-hA0yWBvx.js +2 -0
  271. package/dist/usage-BhqoCjvE.js +1 -0
  272. package/dist/usage-C4d9X2Uq.js +1 -0
  273. package/dist/watch-CSdj24ct.js +5 -0
  274. package/dist/watch-DtRuC0Wc.js +8 -0
  275. package/dist/wire-BeT1Axeo.js +1 -0
  276. package/dist/worker-CXndxmGF.js +9 -0
  277. package/dist/worker-DX7P9kWl.js +1 -0
  278. package/dist/workflow-Dcmdooi8.js +1 -0
  279. package/docs/agents/coder.md +26 -0
  280. package/docs/agents/index.md +120 -0
  281. package/docs/config.md +51 -30
  282. package/docs/dash.md +64 -0
  283. package/docs/flows.md +20 -15
  284. package/docs/mcp.md +62 -0
  285. package/docs/models.md +41 -23
  286. package/docs/review.md +41 -0
  287. package/docs/sdk.md +57 -38
  288. package/docs/self-host.md +188 -0
  289. package/migrations/0000_initial.sql +252 -0
  290. package/migrations/meta/0000_snapshot.json +1787 -0
  291. package/migrations/meta/_journal.json +13 -0
  292. package/package.json +37 -7
  293. package/plugins/agents/skills/coder/SKILL.md +14 -60
  294. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  295. package/plugins/claude/commands/setup.md +2 -2
  296. package/plugins/claude/skills/dispatch/SKILL.md +14 -58
  297. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  298. package/plugins/cursor/README.md +5 -5
  299. package/plugins/cursor/assets/logo.png +0 -0
  300. package/plugins/cursor/skills/coder/SKILL.md +14 -59
  301. package/src/client/index.ts +573 -0
  302. package/src/client/types.ts +506 -0
  303. package/src/core/errors.ts +72 -0
  304. package/src/core/task/log-view.ts +173 -0
  305. package/src/server/auth/sign-in.ts +14 -0
  306. package/src/server/dash/api/load.ts +62 -0
  307. package/src/server/dash/api/types.ts +11 -0
  308. package/src/server/dash/app/connect/page.tsx +42 -0
  309. package/src/server/dash/app/dash/account/loading.tsx +11 -0
  310. package/src/server/dash/app/dash/account/notify.tsx +42 -0
  311. package/src/server/dash/app/dash/account/page.css +81 -0
  312. package/src/server/dash/app/dash/account/page.tsx +126 -0
  313. package/src/server/dash/app/dash/account/sign-out.tsx +24 -0
  314. package/src/server/dash/app/dash/agents/(list)/agent-menu.tsx +10 -0
  315. package/src/server/dash/app/dash/agents/(list)/agents-grid.tsx +143 -0
  316. package/src/server/dash/app/dash/agents/(list)/connect-apps.tsx +46 -0
  317. package/src/server/dash/app/dash/agents/(list)/loading.tsx +14 -0
  318. package/src/server/dash/app/dash/agents/(list)/page.css +72 -0
  319. package/src/server/dash/app/dash/agents/(list)/page.tsx +89 -0
  320. package/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.tsx +135 -0
  321. package/src/server/dash/app/dash/agents/[slug]/(tabs)/loading.tsx +5 -0
  322. package/src/server/dash/app/dash/agents/[slug]/(tabs)/page.css +21 -0
  323. package/src/server/dash/app/dash/agents/[slug]/(tabs)/page.tsx +173 -0
  324. package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/loading.tsx +18 -0
  325. package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.css +87 -0
  326. package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.tsx +258 -0
  327. package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/platform-actions.tsx +111 -0
  328. package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.css +114 -0
  329. package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.tsx +294 -0
  330. package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/loading.tsx +5 -0
  331. package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.tsx +54 -0
  332. package/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/loading.tsx +5 -0
  333. package/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/page.tsx +14 -0
  334. package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/loading.tsx +31 -0
  335. package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.css +12 -0
  336. package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.tsx +163 -0
  337. package/src/server/dash/app/dash/agents/[slug]/(tabs)/versions-list.tsx +53 -0
  338. package/src/server/dash/app/dash/agents/[slug]/edit/loading.tsx +31 -0
  339. package/src/server/dash/app/dash/agents/[slug]/edit/page.tsx +91 -0
  340. package/src/server/dash/app/dash/agents/agent/agent-pills.css +27 -0
  341. package/src/server/dash/app/dash/agents/agent/agent-pills.tsx +133 -0
  342. package/src/server/dash/app/dash/agents/agent/hero.css +40 -0
  343. package/src/server/dash/app/dash/agents/agent/hero.tsx +60 -0
  344. package/src/server/dash/app/dash/agents/agent/instructions.css +29 -0
  345. package/src/server/dash/app/dash/agents/agent/instructions.tsx +82 -0
  346. package/src/server/dash/app/dash/agents/editor/connect-repositories.ts +16 -0
  347. package/src/server/dash/app/dash/agents/editor/editor.css +263 -0
  348. package/src/server/dash/app/dash/agents/editor/editor.tsx +774 -0
  349. package/src/server/dash/app/dash/agents/editor/import-picker.css +48 -0
  350. package/src/server/dash/app/dash/agents/editor/import-picker.tsx +253 -0
  351. package/src/server/dash/app/dash/agents/editor/names.ts +35 -0
  352. package/src/server/dash/app/dash/agents/new/loading.tsx +25 -0
  353. package/src/server/dash/app/dash/agents/new/page.tsx +72 -0
  354. package/src/server/dash/app/dash/layout.css +265 -0
  355. package/src/server/dash/app/dash/layout.tsx +332 -0
  356. package/src/server/dash/app/dash/page.tsx +14 -0
  357. package/src/server/dash/app/dash/settings/[tab]/credentials-list.css +94 -0
  358. package/src/server/dash/app/dash/settings/[tab]/credentials-list.tsx +619 -0
  359. package/src/server/dash/app/dash/settings/[tab]/credentials.tsx +36 -0
  360. package/src/server/dash/app/dash/settings/[tab]/engines-list.css +16 -0
  361. package/src/server/dash/app/dash/settings/[tab]/engines-list.tsx +135 -0
  362. package/src/server/dash/app/dash/settings/[tab]/list.css +98 -0
  363. package/src/server/dash/app/dash/settings/[tab]/list.tsx +215 -0
  364. package/src/server/dash/app/dash/settings/[tab]/loading.tsx +6 -0
  365. package/src/server/dash/app/dash/settings/[tab]/mcp-list.css +43 -0
  366. package/src/server/dash/app/dash/settings/[tab]/mcp-list.tsx +290 -0
  367. package/src/server/dash/app/dash/settings/[tab]/models-list.tsx +513 -0
  368. package/src/server/dash/app/dash/settings/[tab]/page.tsx +89 -0
  369. package/src/server/dash/app/dash/settings/[tab]/runners-list.css +153 -0
  370. package/src/server/dash/app/dash/settings/[tab]/runners-list.tsx +457 -0
  371. package/src/server/dash/app/dash/settings/layout.tsx +50 -0
  372. package/src/server/dash/app/dash/settings/model-options.ts +117 -0
  373. package/src/server/dash/app/dash/settings/page.tsx +7 -0
  374. package/src/server/dash/app/dash/settings/settings-head.tsx +24 -0
  375. package/src/server/dash/app/dash/settings/tunnel-guide.tsx +28 -0
  376. package/src/server/dash/app/dash/tasks/[id]/activity.tsx +202 -0
  377. package/src/server/dash/app/dash/tasks/[id]/loading.tsx +31 -0
  378. package/src/server/dash/app/dash/tasks/[id]/page.tsx +30 -0
  379. package/src/server/dash/app/dash/tasks/[id]/task-actions.tsx +164 -0
  380. package/src/server/dash/app/dash/tasks/[id]/task-view.css +407 -0
  381. package/src/server/dash/app/dash/tasks/[id]/task-view.tsx +513 -0
  382. package/src/server/dash/app/dash/tasks/composer-data.ts +96 -0
  383. package/src/server/dash/app/dash/tasks/composer.css +316 -0
  384. package/src/server/dash/app/dash/tasks/composer.tsx +890 -0
  385. package/src/server/dash/app/dash/tasks/list/status.css +50 -0
  386. package/src/server/dash/app/dash/tasks/list/status.tsx +20 -0
  387. package/src/server/dash/app/dash/tasks/list/task.ts +45 -0
  388. package/src/server/dash/app/dash/tasks/list/tasks-list.css +85 -0
  389. package/src/server/dash/app/dash/tasks/list/tasks-list.tsx +402 -0
  390. package/src/server/dash/app/dash/tasks/list/tasks-section.tsx +96 -0
  391. package/src/server/dash/app/dash/tasks/page.tsx +53 -0
  392. package/src/server/dash/app/dash/token-from-hash.tsx +17 -0
  393. package/src/server/dash/app/dash/usage/custom-range.tsx +63 -0
  394. package/src/server/dash/app/dash/usage/day-chart.css +109 -0
  395. package/src/server/dash/app/dash/usage/day-chart.tsx +110 -0
  396. package/src/server/dash/app/dash/usage/loading.tsx +17 -0
  397. package/src/server/dash/app/dash/usage/metric.ts +13 -0
  398. package/src/server/dash/app/dash/usage/page.tsx +117 -0
  399. package/src/server/dash/app/dash/usage/range-bar.css +13 -0
  400. package/src/server/dash/app/dash/usage/range-bar.tsx +69 -0
  401. package/src/server/dash/app/dash/usage/stats.css +52 -0
  402. package/src/server/dash/app/dash/usage/stats.tsx +19 -0
  403. package/src/server/dash/app/dash/usage/top-agents.css +40 -0
  404. package/src/server/dash/app/dash/usage/top-agents.tsx +138 -0
  405. package/src/server/dash/app/dash/usage/usage.css +0 -0
  406. package/src/server/dash/app/globals.css +692 -0
  407. package/src/server/dash/app/layout.tsx +52 -0
  408. package/src/server/dash/app/login/page.css +26 -0
  409. package/src/server/dash/app/login/page.tsx +57 -0
  410. package/src/server/dash/app/page.tsx +5 -0
  411. package/src/server/dash/app/responsive.css +49 -0
  412. package/src/server/dash/app/zone.tsx +13 -0
  413. package/src/server/dash/comps/frame/auth-panel.css +60 -0
  414. package/src/server/dash/comps/frame/auth-panel.tsx +44 -0
  415. package/src/server/dash/comps/frame/drawer.css +28 -0
  416. package/src/server/dash/comps/frame/drawer.tsx +39 -0
  417. package/src/server/dash/comps/frame/heads.ts +41 -0
  418. package/src/server/dash/comps/frame/loading-card.tsx +65 -0
  419. package/src/server/dash/comps/frame/page-head.css +83 -0
  420. package/src/server/dash/comps/frame/page-head.tsx +71 -0
  421. package/src/server/dash/comps/frame/stream.tsx +50 -0
  422. package/src/server/dash/comps/frame/task-toasts.tsx +214 -0
  423. package/src/server/dash/comps/frame/theme-choices.tsx +46 -0
  424. package/src/server/dash/comps/nav/current-link.tsx +53 -0
  425. package/src/server/dash/comps/nav/side-toggle.tsx +30 -0
  426. package/src/server/dash/comps/nav/to.ts +22 -0
  427. package/src/server/dash/comps/ui/badge.css +64 -0
  428. package/src/server/dash/comps/ui/badge.tsx +41 -0
  429. package/src/server/dash/comps/ui/card.css +93 -0
  430. package/src/server/dash/comps/ui/card.tsx +77 -0
  431. package/src/server/dash/comps/ui/collapse.css +32 -0
  432. package/src/server/dash/comps/ui/collapse.tsx +49 -0
  433. package/src/server/dash/comps/ui/combo.tsx +154 -0
  434. package/src/server/dash/comps/ui/confirm.css +36 -0
  435. package/src/server/dash/comps/ui/confirm.tsx +67 -0
  436. package/src/server/dash/comps/ui/field.css +25 -0
  437. package/src/server/dash/comps/ui/field.tsx +34 -0
  438. package/src/server/dash/comps/ui/icon.css +22 -0
  439. package/src/server/dash/comps/ui/icon.tsx +17 -0
  440. package/src/server/dash/comps/ui/icons.ts +44 -0
  441. package/src/server/dash/comps/ui/menu.css +178 -0
  442. package/src/server/dash/comps/ui/menu.tsx +152 -0
  443. package/src/server/dash/comps/ui/segmented.css +44 -0
  444. package/src/server/dash/comps/ui/segmented.tsx +58 -0
  445. package/src/server/dash/comps/ui/select.css +103 -0
  446. package/src/server/dash/comps/ui/select.tsx +250 -0
  447. package/src/server/dash/comps/ui/sentinel.css +58 -0
  448. package/src/server/dash/comps/ui/sentinel.tsx +67 -0
  449. package/src/server/dash/comps/ui/tabs.css +81 -0
  450. package/src/server/dash/comps/ui/tabs.tsx +32 -0
  451. package/src/server/dash/comps/ui/tail.css +12 -0
  452. package/src/server/dash/comps/ui/tail.tsx +37 -0
  453. package/src/server/dash/comps/ui/toast.css +72 -0
  454. package/src/server/dash/comps/ui/toolbar.css +143 -0
  455. package/src/server/dash/comps/ui/toolbar.tsx +93 -0
  456. package/src/server/dash/package.json +5 -0
  457. package/src/server/dash/pnext-env.d.ts +4 -0
  458. package/src/server/dash/pnext.config.ts +5 -0
  459. package/src/server/dash/public/assets/apple-touch-icon.png +0 -0
  460. package/src/server/dash/public/assets/favicon.ico +0 -0
  461. package/src/server/dash/public/assets/favicon.svg +1 -0
  462. package/src/server/dash/public/assets/fonts/LICENSE-fira-code +93 -0
  463. package/src/server/dash/public/assets/fonts/fira-code-latin-400-normal-717ee080.woff2 +0 -0
  464. package/src/server/dash/public/assets/fonts/fira-code-latin-500-normal-530b6706.woff2 +0 -0
  465. package/src/server/dash/public/assets/fonts/fira-code-latin-700-normal-98730669.woff2 +0 -0
  466. package/src/server/dash/tsconfig.json +10 -0
  467. package/src/server/dash/utils/client.ts +19 -0
  468. package/src/server/dash/utils/format.ts +75 -0
  469. package/src/server/dash/utils/paged.ts +184 -0
  470. package/src/server/dash/utils/range.ts +117 -0
  471. package/dist/app-server-CW93J9zJ.js +0 -3
  472. package/dist/runtime-D-U1DNkI.js +0 -26
  473. package/dist/upgrade-DOj06r5b.js +0 -37
@@ -0,0 +1,829 @@
1
+ import { createRequire as __pnextCreateRequire } from "node:module";
2
+ const require = __pnextCreateRequire("file:///Users/muzam/Code/workshop/coder-workspace/node_modules/.bun/@wular+pnext@0.1.5+62547eec5a2188e3/node_modules/@wular/pnext/package.json");
3
+ import {
4
+ scanRootParamTypes
5
+ } from "./chunk-PA4QEARJ.js";
6
+ import {
7
+ getNextConfig
8
+ } from "./chunk-2ICEVELW.js";
9
+ import {
10
+ ensureDir,
11
+ toPosixPath
12
+ } from "./chunk-2HFY3DQT.js";
13
+
14
+ // ../node_modules/.bun/@wular+pnext@0.1.5+62547eec5a2188e3/node_modules/@wular/pnext/src/compat/typed-routes/generate.ts
15
+ import { existsSync as existsSync2 } from "node:fs";
16
+ import { readFile, writeFile } from "node:fs/promises";
17
+ import path2 from "node:path";
18
+
19
+ // ../node_modules/.bun/@wular+pnext@0.1.5+62547eec5a2188e3/node_modules/@wular/pnext/src/compat/typed-routes/manifest.ts
20
+ import { existsSync } from "node:fs";
21
+ import { readdir } from "node:fs/promises";
22
+ import path from "node:path";
23
+ var PAGE_EXTENSIONS = ["tsx", "ts", "jsx", "js", "mdx", "md"];
24
+ var LAYOUT_NAMES = new Set(PAGE_EXTENSIONS.map((ext) => `layout.${ext}`));
25
+ function isGroupSegment(name) {
26
+ return name.startsWith("(") && name.endsWith(")");
27
+ }
28
+ function isSlotSegment(name) {
29
+ return name.startsWith("@");
30
+ }
31
+ function decodeLiteral(segment) {
32
+ return segment.replace(/%5[Ff]/g, "_");
33
+ }
34
+ function groupsFromBracketRoute(route) {
35
+ const groups = {};
36
+ let pos = 1;
37
+ for (const segment of route.split("/").filter(Boolean)) {
38
+ const optionalCatchAll = /^\[\[\.\.\.(.+)\]\]$/.exec(segment);
39
+ if (optionalCatchAll?.[1]) {
40
+ groups[optionalCatchAll[1]] = { pos: pos++, repeat: true, optional: true };
41
+ continue;
42
+ }
43
+ const catchAll = /^\[\.\.\.(.+)\]$/.exec(segment);
44
+ if (catchAll?.[1]) {
45
+ groups[catchAll[1]] = { pos: pos++, repeat: true, optional: false };
46
+ continue;
47
+ }
48
+ const param = /^\[(.+)\]$/.exec(segment);
49
+ if (param?.[1]) {
50
+ groups[param[1]] = { pos: pos++, repeat: false, optional: false };
51
+ }
52
+ }
53
+ return groups;
54
+ }
55
+ function bracketRouteFromEntry(entry) {
56
+ const segments = entry.route.split("/").filter(Boolean).map((segment) => {
57
+ const catchAll = /^:(.+)\*$/.exec(segment);
58
+ if (catchAll?.[1]) {
59
+ const name = catchAll[1];
60
+ return name === entry.catchAll && entry.catchAllOptional ? `[[...${name}]]` : `[...${name}]`;
61
+ }
62
+ const param = /^:(.+)$/.exec(segment);
63
+ if (param?.[1]) return `[${param[1]}]`;
64
+ return segment;
65
+ });
66
+ return `/${segments.join("/")}`.replace(/\/$/, "") || "/";
67
+ }
68
+ function bracketRouteFromDir(relativeDir) {
69
+ const segments = [];
70
+ for (const segment of relativeDir.split("/").filter(Boolean)) {
71
+ if (isGroupSegment(segment) || isSlotSegment(segment)) continue;
72
+ if (/^\[\[?\.\.\..+\]\]?$/.test(segment) || /^\[.+\]$/.test(segment)) {
73
+ segments.push(segment);
74
+ } else {
75
+ segments.push(decodeLiteral(segment));
76
+ }
77
+ }
78
+ return `/${segments.join("/")}`.replace(/\/$/, "") || "/";
79
+ }
80
+ function pagesRouteFromRelative(relative) {
81
+ const withoutExt = relative.replace(/\.[^.]+$/, "");
82
+ const trimmed = withoutExt.replace(/\/index$/, "").replace(/^index$/, "");
83
+ const route = `/${trimmed}`.replace(/\/$/, "") || "/";
84
+ return route;
85
+ }
86
+ async function walkFiles(dir) {
87
+ if (!existsSync(dir)) return [];
88
+ const out = [];
89
+ const entries = await readdir(dir, { withFileTypes: true });
90
+ for (const entry of entries) {
91
+ const full = path.join(dir, entry.name);
92
+ if (entry.isDirectory()) out.push(...await walkFiles(full));
93
+ else out.push(full);
94
+ }
95
+ return out;
96
+ }
97
+ function isPrivate(relativeDir) {
98
+ return relativeDir.split("/").some((seg) => seg.startsWith("_") && !isGroupSegment(seg) && !isSlotSegment(seg));
99
+ }
100
+ function convertCustomRouteSource(source) {
101
+ const normalized = source.startsWith("/") ? source : `/${source}`;
102
+ const converted = normalized.split("/").map((segment) => {
103
+ const optional = /^:(.+)\*$/.exec(segment);
104
+ if (optional?.[1]) return `[[...${optional[1]}]]`;
105
+ const catchAll = /^:(.+)\+$/.exec(segment);
106
+ if (catchAll?.[1]) return `[...${catchAll[1]}]`;
107
+ const param = /^:([A-Za-z0-9_]+)$/.exec(segment);
108
+ if (param?.[1]) return `[${param[1]}]`;
109
+ return segment;
110
+ }).join("/");
111
+ return [converted.replace(/\/$/, "") || "/"];
112
+ }
113
+ async function buildRouteTypesManifest({
114
+ config,
115
+ routes,
116
+ nextConfig
117
+ }) {
118
+ const relApp = (file) => toPosixPath(path.relative(config.root, file));
119
+ const isHybrid = config.appPath.includes("pnext-pages-compat");
120
+ const sourceAppPath = (entry) => {
121
+ if (!isHybrid) return entry.file;
122
+ const basename = entry.kind === "page" ? /^page\.(?:tsx?|jsx?|mdx?)$/ : /^route\.(?:tsx?|jsx?)$/;
123
+ const source = entry.sourceFiles.find((file) => {
124
+ const normalized = toPosixPath(file);
125
+ return normalized.includes("/source-app/") && basename.test(path.basename(normalized));
126
+ });
127
+ if (!source) return void 0;
128
+ const relative = toPosixPath(source).split("/source-app/")[1];
129
+ return relative ? path.join(config.root, "app", relative) : void 0;
130
+ };
131
+ const manifest = {
132
+ appRoutes: {},
133
+ pageRoutes: {},
134
+ layoutRoutes: {},
135
+ appRouteHandlerRoutes: {},
136
+ redirectRoutes: {},
137
+ rewriteRoutes: {},
138
+ appPagePaths: /* @__PURE__ */ new Set(),
139
+ pagesRouterPagePaths: /* @__PURE__ */ new Set(),
140
+ layoutPaths: /* @__PURE__ */ new Set(),
141
+ appRouteHandlers: /* @__PURE__ */ new Set(),
142
+ pageApiRoutes: /* @__PURE__ */ new Set(),
143
+ filePathToRoute: /* @__PURE__ */ new Map()
144
+ };
145
+ const hybridFilteredRoutes = isHybrid ? routes.filter((entry) => {
146
+ const file = entry.file;
147
+ if (!file.includes("pnext-pages-compat")) return true;
148
+ const sourceFiles = entry.sourceFiles ?? [];
149
+ const isPagesWrapper = sourceFiles.some((sf) => sf.includes("source-pages"));
150
+ if (isPagesWrapper) return false;
151
+ return true;
152
+ }) : routes;
153
+ for (const entry of hybridFilteredRoutes) {
154
+ if (entry.synthetic || entry.interception || entry.metadataRoute) continue;
155
+ const source = sourceAppPath(entry);
156
+ if (!source) continue;
157
+ const bracket = bracketRouteFromEntry(entry);
158
+ const rel = relApp(source);
159
+ const info = { path: rel, groups: groupsFromBracketRoute(bracket) };
160
+ if (entry.kind === "page") {
161
+ if (!manifest.appRoutes[bracket]) manifest.appRoutes[bracket] = info;
162
+ } else {
163
+ if (!manifest.appRouteHandlerRoutes[bracket]) manifest.appRouteHandlerRoutes[bracket] = info;
164
+ manifest.appRouteHandlers.add(rel);
165
+ manifest.filePathToRoute.set(rel, bracket);
166
+ }
167
+ }
168
+ const appFiles = await walkFiles(isHybrid ? path.join(config.root, "app") : config.appPath);
169
+ const appPath = isHybrid ? path.join(config.root, "app") : config.appPath;
170
+ for (const file of appFiles) {
171
+ const relative = toPosixPath(path.relative(appPath, file));
172
+ const base = path.basename(relative);
173
+ if (!LAYOUT_NAMES.has(base)) continue;
174
+ const dir = path.dirname(relative) === "." ? "" : path.dirname(relative);
175
+ if (isPrivate(dir)) continue;
176
+ const bracket = bracketRouteFromDir(dir);
177
+ const rel = relApp(file);
178
+ if (!manifest.layoutRoutes[bracket]) {
179
+ manifest.layoutRoutes[bracket] = {
180
+ path: rel,
181
+ groups: groupsFromBracketRoute(bracket),
182
+ slots: []
183
+ };
184
+ }
185
+ manifest.layoutPaths.add(rel);
186
+ manifest.filePathToRoute.set(rel, bracket);
187
+ }
188
+ for (const file of appFiles) {
189
+ const relative = toPosixPath(path.relative(appPath, file));
190
+ const segments = relative.split("/");
191
+ let slotIndex = -1;
192
+ for (let i = segments.length - 1; i >= 0; i--) {
193
+ if (isSlotSegment(segments[i])) {
194
+ slotIndex = i;
195
+ break;
196
+ }
197
+ }
198
+ if (slotIndex === -1) continue;
199
+ const slotName = segments[slotIndex].slice(1);
200
+ const ownerDir = segments.slice(0, slotIndex).join("/");
201
+ if (isPrivate(ownerDir)) continue;
202
+ const ownerRoute = bracketRouteFromDir(ownerDir);
203
+ const layout = manifest.layoutRoutes[ownerRoute];
204
+ if (layout && !layout.slots.includes(slotName)) layout.slots.push(slotName);
205
+ }
206
+ const PAGE_BASENAMES = new Set(PAGE_EXTENSIONS.map((ext) => `page.${ext}`));
207
+ for (const file of appFiles) {
208
+ const relative = toPosixPath(path.relative(appPath, file));
209
+ if (!PAGE_BASENAMES.has(path.basename(relative))) continue;
210
+ const dir = path.dirname(relative) === "." ? "" : path.dirname(relative);
211
+ if (isPrivate(dir)) continue;
212
+ const route = bracketRouteFromDir(dir);
213
+ if (!manifest.appRoutes[route]) continue;
214
+ const rel = relApp(file);
215
+ manifest.appPagePaths.add(rel);
216
+ manifest.filePathToRoute.set(rel, route);
217
+ }
218
+ const pagesDir = path.join(config.root, "pages");
219
+ for (const file of await walkFiles(pagesDir)) {
220
+ const relative = toPosixPath(path.relative(pagesDir, file));
221
+ if (!PAGE_EXTENSIONS.some((ext) => relative.endsWith(`.${ext}`))) continue;
222
+ const base = path.basename(relative);
223
+ if (base.startsWith("_app.") || base.startsWith("_document.") || base.startsWith("_error.")) {
224
+ continue;
225
+ }
226
+ const rel = relApp(file);
227
+ const isApi = relative === "api" || relative.startsWith("api/");
228
+ const route = pagesRouteFromRelative(relative);
229
+ if (isApi) {
230
+ manifest.pageApiRoutes.add(rel);
231
+ manifest.filePathToRoute.set(rel, route);
232
+ } else {
233
+ manifest.pageRoutes[route] = { path: rel, groups: groupsFromBracketRoute(route) };
234
+ manifest.pagesRouterPagePaths.add(rel);
235
+ manifest.filePathToRoute.set(rel, route);
236
+ }
237
+ }
238
+ const redirects = nextConfig.redirects;
239
+ if (typeof redirects === "function") {
240
+ const list = await redirects();
241
+ for (const item of list ?? []) {
242
+ for (const route of convertCustomRouteSource(item.source)) {
243
+ manifest.redirectRoutes[route] = { path: route, groups: groupsFromBracketRoute(route) };
244
+ }
245
+ }
246
+ }
247
+ const rewrites = nextConfig.rewrites;
248
+ if (typeof rewrites === "function") {
249
+ const result = await rewrites();
250
+ const sources = Array.isArray(result) ? result : [...result?.beforeFiles ?? [], ...result?.afterFiles ?? [], ...result?.fallback ?? []];
251
+ for (const item of sources) {
252
+ for (const route of convertCustomRouteSource(item.source)) {
253
+ manifest.rewriteRoutes[route] = { path: route, groups: groupsFromBracketRoute(route) };
254
+ }
255
+ }
256
+ }
257
+ return manifest;
258
+ }
259
+
260
+ // ../node_modules/.bun/@wular+pnext@0.1.5+62547eec5a2188e3/node_modules/@wular/pnext/src/compat/typed-routes/typegen.ts
261
+ function isDynamicRoute(route) {
262
+ return /\[.+\]/.test(route);
263
+ }
264
+ function generateRouteTypes(manifest) {
265
+ const appRoutes = Object.keys(manifest.appRoutes).sort();
266
+ const pageRoutes = Object.keys(manifest.pageRoutes).sort();
267
+ const layoutRoutes = Object.keys(manifest.layoutRoutes).sort();
268
+ const redirectRoutes = Object.keys(manifest.redirectRoutes).sort();
269
+ const rewriteRoutes = Object.keys(manifest.rewriteRoutes).sort();
270
+ const appRouteHandlerRoutes = Object.keys(manifest.appRouteHandlerRoutes).sort();
271
+ const hasAppRouteHandlers = appRouteHandlerRoutes.length > 0;
272
+ const union = (list) => list.map((route) => JSON.stringify(route)).join(" | ");
273
+ let result = "";
274
+ result += appRoutes.length > 0 ? `type AppRoutes = ${union(appRoutes)}
275
+ ` : "type AppRoutes = never\n";
276
+ if (hasAppRouteHandlers) {
277
+ result += `type AppRouteHandlerRoutes = ${union(appRouteHandlerRoutes)}
278
+ `;
279
+ }
280
+ result += pageRoutes.length > 0 ? `type PageRoutes = ${union(pageRoutes)}
281
+ ` : "type PageRoutes = never\n";
282
+ result += layoutRoutes.length > 0 ? `type LayoutRoutes = ${union(layoutRoutes)}
283
+ ` : "type LayoutRoutes = never\n";
284
+ result += redirectRoutes.length > 0 ? `type RedirectRoutes = ${union(redirectRoutes)}
285
+ ` : "type RedirectRoutes = never\n";
286
+ result += rewriteRoutes.length > 0 ? `type RewriteRoutes = ${union(rewriteRoutes)}
287
+ ` : "type RewriteRoutes = never\n";
288
+ const routeUnionParts = [
289
+ "AppRoutes",
290
+ "PageRoutes",
291
+ "LayoutRoutes",
292
+ "RedirectRoutes",
293
+ "RewriteRoutes"
294
+ ];
295
+ if (hasAppRouteHandlers) routeUnionParts.push("AppRouteHandlerRoutes");
296
+ result += `type Routes = ${routeUnionParts.join(" | ")}
297
+ `;
298
+ return result;
299
+ }
300
+ function generateParamTypes(manifest) {
301
+ const allRoutes = {
302
+ ...manifest.appRoutes,
303
+ ...manifest.appRouteHandlerRoutes,
304
+ ...manifest.pageRoutes,
305
+ ...manifest.layoutRoutes,
306
+ ...manifest.redirectRoutes,
307
+ ...manifest.rewriteRoutes
308
+ };
309
+ let paramTypes = "interface ParamMap {\n";
310
+ const sortedRoutes = Object.entries(allRoutes).sort(([a], [b]) => a.localeCompare(b));
311
+ for (const [route, routeInfo] of sortedRoutes) {
312
+ const groups = routeInfo.groups;
313
+ if (!isDynamicRoute(route) || Object.keys(groups ?? {}).length === 0) {
314
+ paramTypes += ` ${JSON.stringify(route)}: {}
315
+ `;
316
+ continue;
317
+ }
318
+ let paramType = "{";
319
+ for (const [key, group] of Object.entries(groups)) {
320
+ const escapedKey = JSON.stringify(key);
321
+ if (group.repeat) {
322
+ paramType += group.optional ? ` ${escapedKey}?: string[];` : ` ${escapedKey}: string[];`;
323
+ } else {
324
+ paramType += group.optional ? ` ${escapedKey}?: string;` : ` ${escapedKey}: string;`;
325
+ }
326
+ }
327
+ paramType += " }";
328
+ paramTypes += ` ${JSON.stringify(route)}: ${paramType}
329
+ `;
330
+ }
331
+ paramTypes += "}\n";
332
+ return paramTypes;
333
+ }
334
+ function generateLayoutSlotMap(manifest) {
335
+ let slotMap = "interface LayoutSlotMap {\n";
336
+ const sorted = Object.entries(manifest.layoutRoutes).sort(([a], [b]) => a.localeCompare(b));
337
+ for (const [route, routeInfo] of sorted) {
338
+ const slots = [...routeInfo.slots].sort();
339
+ slotMap += slots.length > 0 ? ` ${JSON.stringify(route)}: ${slots.map((slot) => JSON.stringify(slot)).join(" | ")}
340
+ ` : ` ${JSON.stringify(route)}: never
341
+ `;
342
+ }
343
+ slotMap += "}\n";
344
+ return slotMap;
345
+ }
346
+ function formatRouteToRouteType(route) {
347
+ const isDynamic = isDynamicRoute(route);
348
+ let routeType = route;
349
+ if (isDynamic) {
350
+ routeType = route.split("/").map((part) => {
351
+ if (part.startsWith("[") && part.endsWith("]")) {
352
+ if (part.startsWith("[[...") && part.endsWith("]]")) return "${OptionalCatchAllSlug<T>}";
353
+ if (part.startsWith("[...")) return "${CatchAllSlug<T>}";
354
+ return "${SafeSlug<T>}";
355
+ }
356
+ return part;
357
+ }).join("/");
358
+ }
359
+ return { isDynamic, routeType };
360
+ }
361
+ function serializeRouteTypes(routeTypes) {
362
+ routeTypes.sort(([a], [b]) => a.localeCompare(b));
363
+ let union = "";
364
+ for (const [route, cause] of routeTypes) {
365
+ union += `
366
+ | \`${route}\` // ${cause}`;
367
+ }
368
+ return union;
369
+ }
370
+ function generateRouteTypesFile(manifest) {
371
+ const routeTypes = generateRouteTypes(manifest);
372
+ const paramTypes = generateParamTypes(manifest);
373
+ const layoutSlotMap = generateLayoutSlotMap(manifest);
374
+ const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0;
375
+ const routeExports = [
376
+ "AppRoutes",
377
+ "PageRoutes",
378
+ "LayoutRoutes",
379
+ "RedirectRoutes",
380
+ "RewriteRoutes",
381
+ "ParamMap"
382
+ ];
383
+ if (hasAppRouteHandlers) routeExports.push("AppRouteHandlerRoutes");
384
+ const exportStatement = `export type { ${routeExports.join(", ")} }`;
385
+ const routeContextInterface = hasAppRouteHandlers ? `
386
+
387
+ /**
388
+ * Context for Next.js App Router route handlers
389
+ * @example
390
+ * \`\`\`tsx
391
+ * export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) {
392
+ * const { id } = await context.params
393
+ * return Response.json({ id })
394
+ * }
395
+ * \`\`\`
396
+ */
397
+ interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {
398
+ params: Promise<ParamMap[AppRouteHandlerRoute]>
399
+ }` : "";
400
+ return `// This file is generated automatically by Next.js
401
+ // Do not edit this file manually
402
+
403
+ ${routeTypes}
404
+
405
+ ${paramTypes}
406
+
407
+ export type ParamsOf<Route extends Routes> = ParamMap[Route]
408
+
409
+ ${layoutSlotMap}
410
+
411
+ ${exportStatement}
412
+
413
+ declare global {
414
+ /**
415
+ * Props for Next.js App Router page components
416
+ * @example
417
+ * \`\`\`tsx
418
+ * export default function Page(props: PageProps<'/blog/[slug]'>) {
419
+ * const { slug } = await props.params
420
+ * return <div>Blog post: {slug}</div>
421
+ * }
422
+ * \`\`\`
423
+ */
424
+ interface PageProps<AppRoute extends AppRoutes> {
425
+ params: Promise<ParamMap[AppRoute]>
426
+ searchParams: Promise<Record<string, string | string[] | undefined>>
427
+ }
428
+
429
+ /**
430
+ * Props for Next.js App Router layout components
431
+ * @example
432
+ * \`\`\`tsx
433
+ * export default function Layout(props: LayoutProps<'/dashboard'>) {
434
+ * return <div>{props.children}</div>
435
+ * }
436
+ * \`\`\`
437
+ */
438
+ type LayoutProps<LayoutRoute extends LayoutRoutes> = {
439
+ params: Promise<ParamMap[LayoutRoute]>
440
+ searchParams: Promise<Record<string, string | string[] | undefined>>
441
+ children: React.ReactNode
442
+ } & {
443
+ [K in LayoutSlotMap[LayoutRoute]]: React.ReactNode
444
+ }${routeContextInterface}
445
+ }
446
+ `;
447
+ }
448
+ function generateLinkTypesFile(manifest) {
449
+ const visited = /* @__PURE__ */ new Set();
450
+ const staticRouteTypes = [];
451
+ const dynamicRouteTypes = [];
452
+ for (const routeMap of [
453
+ manifest.appRoutes,
454
+ manifest.pageRoutes,
455
+ manifest.redirectRoutes,
456
+ manifest.rewriteRoutes,
457
+ manifest.appRouteHandlerRoutes
458
+ ]) {
459
+ for (const route in routeMap) {
460
+ if (visited.has(route)) continue;
461
+ visited.add(route);
462
+ const { isDynamic, routeType } = formatRouteToRouteType(route);
463
+ const cause = routeMap[route].path;
464
+ (isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, cause]);
465
+ }
466
+ }
467
+ for (const filePath of manifest.pageApiRoutes) {
468
+ if (visited.has(filePath)) continue;
469
+ visited.add(filePath);
470
+ const { isDynamic, routeType } = formatRouteToRouteType(filePath);
471
+ (isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, filePath]);
472
+ }
473
+ const serializedStaticRouteTypes = serializeRouteTypes(staticRouteTypes);
474
+ const serializedDynamicRouteTypes = serializeRouteTypes(dynamicRouteTypes);
475
+ const routeTypesFallback = !serializedStaticRouteTypes && !serializedDynamicRouteTypes ? "string & {}" : "";
476
+ return `// This file is generated automatically by Next.js
477
+ // Do not edit this file manually
478
+
479
+ // Type definitions for Next.js routes
480
+
481
+ /**
482
+ * Internal types used by the Next.js router and Link component.
483
+ * These types are not meant to be used directly.
484
+ * @internal
485
+ */
486
+ declare namespace __next_route_internal_types__ {
487
+ type SearchOrHash = \`?\${string}\` | \`#\${string}\`
488
+ type WithProtocol = \`\${string}:\${string}\`
489
+
490
+ type Suffix = '' | SearchOrHash
491
+
492
+ type SafeSlug<S extends string> = S extends \`\${string}/\${string}\`
493
+ ? never
494
+ : S extends \`\${string}\${SearchOrHash}\`
495
+ ? never
496
+ : S extends ''
497
+ ? never
498
+ : S
499
+
500
+ type CatchAllSlug<S extends string> = S extends \`\${string}\${SearchOrHash}\`
501
+ ? never
502
+ : S extends ''
503
+ ? never
504
+ : S
505
+
506
+ type OptionalCatchAllSlug<S extends string> =
507
+ S extends \`\${string}\${SearchOrHash}\` ? never : S
508
+
509
+ type StaticRoutes = ${serializedStaticRouteTypes || "never"}
510
+ type DynamicRoutes<T extends string = string> = ${serializedDynamicRouteTypes || "never"}
511
+
512
+ type RouteImpl<T> = ${routeTypesFallback || `
513
+ ${"| StaticRoutes"}
514
+ | SearchOrHash
515
+ | WithProtocol
516
+ | \`\${StaticRoutes}\${SearchOrHash}\`
517
+ | (T extends \`\${DynamicRoutes<infer _>}\${Suffix}\` ? T : never)
518
+ `}
519
+ }
520
+
521
+ declare module 'next' {
522
+ export { default } from 'next/types.js'
523
+ export * from 'next/types.js'
524
+
525
+ export type Route<T extends string = string> =
526
+ __next_route_internal_types__.RouteImpl<T>
527
+ }
528
+
529
+ declare module 'next/link' {
530
+ export { useLinkStatus } from 'next/dist/client/link.js'
531
+
532
+ import type { LinkProps as OriginalLinkProps } from 'next/dist/client/link.js'
533
+ import type { AnchorHTMLAttributes, DetailedHTMLProps } from 'react'
534
+ import type { UrlObject } from 'url'
535
+
536
+ type LinkRestProps = Omit<
537
+ Omit<
538
+ DetailedHTMLProps<
539
+ AnchorHTMLAttributes<HTMLAnchorElement>,
540
+ HTMLAnchorElement
541
+ >,
542
+ keyof OriginalLinkProps
543
+ > &
544
+ OriginalLinkProps,
545
+ 'href'
546
+ >
547
+
548
+ export type LinkProps<RouteInferType> = LinkRestProps & {
549
+ /**
550
+ * The path or URL to navigate to. This is the only required prop. It can also be an object.
551
+ * @see https://nextjs.org/docs/api-reference/next/link
552
+ */
553
+ href: __next_route_internal_types__.RouteImpl<RouteInferType> | UrlObject
554
+ }
555
+
556
+ export default function Link<RouteType>(props: LinkProps<RouteType>): JSX.Element
557
+ }
558
+
559
+ declare module 'next/navigation' {
560
+ export * from 'next/dist/client/components/navigation.js'
561
+
562
+ import type { NavigateOptions, PrefetchOptions, AppRouterInstance as OriginalAppRouterInstance } from 'next/dist/shared/lib/app-router-context.shared-runtime.js'
563
+ import type { RedirectType } from 'next/dist/client/components/redirect-error.js'
564
+
565
+ interface AppRouterInstance extends OriginalAppRouterInstance {
566
+ /**
567
+ * Navigate to the provided href.
568
+ * Pushes a new history entry.
569
+ */
570
+ push<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>, options?: NavigateOptions): void
571
+ /**
572
+ * Navigate to the provided href.
573
+ * Replaces the current history entry.
574
+ */
575
+ replace<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>, options?: NavigateOptions): void
576
+ /**
577
+ * Prefetch the provided href.
578
+ */
579
+ prefetch<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>, options?: PrefetchOptions): void
580
+ }
581
+
582
+ export function useRouter(): AppRouterInstance;
583
+
584
+ export function redirect<RouteType>(
585
+ url: __next_route_internal_types__.RouteImpl<RouteType>,
586
+ type?: RedirectType
587
+ ): never;
588
+
589
+ export function permanentRedirect<RouteType>(
590
+ url: __next_route_internal_types__.RouteImpl<RouteType>,
591
+ type?: RedirectType
592
+ ): never;
593
+ }
594
+
595
+ declare module 'next/form' {
596
+ import type { FormProps as OriginalFormProps } from 'next/dist/client/form.js'
597
+
598
+ type FormRestProps = Omit<OriginalFormProps, 'action'>
599
+
600
+ export type FormProps<RouteInferType> = {
601
+ action: __next_route_internal_types__.RouteImpl<RouteInferType> | ((formData: FormData) => void)
602
+ } & FormRestProps
603
+
604
+ export default function Form<RouteType>(props: FormProps<RouteType>): JSX.Element
605
+ }
606
+ `;
607
+ }
608
+ function generateValidatorFile(manifest, toImportSpecifier) {
609
+ const generateValidations = (paths, type, pathToRouteMap) => paths.sort().filter((filePath) => filePath.endsWith(".ts") || filePath.endsWith(".tsx")).filter(
610
+ (filePath) => type !== "AppPageConfig" || filePath.endsWith("page.ts") || filePath.endsWith("page.tsx")
611
+ ).map((filePath) => {
612
+ const importPath = toImportSpecifier(filePath);
613
+ const route = pathToRouteMap?.get(filePath);
614
+ const typeWithRoute = route && (type === "AppPageConfig" || type === "LayoutConfig" || type === "RouteHandlerConfig") ? `${type}<${JSON.stringify(route)}>` : type;
615
+ return `// Validate ${filePath}
616
+ {
617
+ type __IsExpected<Specific extends ${typeWithRoute}> = Specific
618
+ const handler = {} as typeof import(${JSON.stringify(importPath.replace(/\.tsx?$/, ".js"))})
619
+ type __Check = __IsExpected<typeof handler>
620
+ // @ts-ignore
621
+ type __Unused = __Check
622
+ }`;
623
+ }).join("\n\n");
624
+ const appPageValidations = generateValidations(
625
+ [...manifest.appPagePaths].sort(),
626
+ "AppPageConfig",
627
+ manifest.filePathToRoute
628
+ );
629
+ const appRouteHandlerValidations = generateValidations(
630
+ [...manifest.appRouteHandlers].sort(),
631
+ "RouteHandlerConfig",
632
+ manifest.filePathToRoute
633
+ );
634
+ const pagesRouterPageValidations = generateValidations(
635
+ [...manifest.pagesRouterPagePaths].sort(),
636
+ "PagesPageConfig"
637
+ );
638
+ const pagesApiRouteValidations = generateValidations(
639
+ [...manifest.pageApiRoutes].sort(),
640
+ "ApiRouteConfig"
641
+ );
642
+ const layoutValidations = generateValidations(
643
+ [...manifest.layoutPaths].sort(),
644
+ "LayoutConfig",
645
+ manifest.filePathToRoute
646
+ );
647
+ const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0;
648
+ let typeDefinitions = "";
649
+ if (appPageValidations) {
650
+ typeDefinitions += `type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
651
+ default: React.JSXElementConstructor<PageProps<Route>> | ((props: { params: Promise<ParamMap[Route]>, searchParams: Promise<any> }) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
652
+ generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
653
+ generateMetadata?: (
654
+ props: { params: Promise<ParamMap[Route]> } & any,
655
+ parent: ResolvingMetadata
656
+ ) => Promise<any> | any
657
+ generateViewport?: (
658
+ props: { params: Promise<ParamMap[Route]> } & any,
659
+ parent: ResolvingViewport
660
+ ) => Promise<any> | any
661
+ metadata?: any
662
+ viewport?: any
663
+ }
664
+
665
+ `;
666
+ }
667
+ if (pagesRouterPageValidations) {
668
+ typeDefinitions += `type PagesPageConfig = {
669
+ default: React.ComponentType<any> | ((props: any) => React.ReactNode | Promise<React.ReactNode> | never | void)
670
+ getStaticProps?: (context: any) => Promise<any> | any
671
+ getStaticPaths?: (context: any) => Promise<any> | any
672
+ getServerSideProps?: (context: any) => Promise<any> | any
673
+ getInitialProps?: (context: any) => Promise<any> | any
674
+ /**
675
+ * Segment configuration for legacy Pages Router pages.
676
+ * Validated at build-time by parsePagesSegmentConfig.
677
+ */
678
+ config?: {
679
+ maxDuration?: number
680
+ runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const
681
+ regions?: string[]
682
+ }
683
+ }
684
+
685
+ `;
686
+ }
687
+ if (layoutValidations) {
688
+ typeDefinitions += `type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
689
+ default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
690
+ generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
691
+ generateMetadata?: (
692
+ props: { params: Promise<ParamMap[Route]> } & any,
693
+ parent: ResolvingMetadata
694
+ ) => Promise<any> | any
695
+ generateViewport?: (
696
+ props: { params: Promise<ParamMap[Route]> } & any,
697
+ parent: ResolvingViewport
698
+ ) => Promise<any> | any
699
+ metadata?: any
700
+ viewport?: any
701
+ }
702
+
703
+ `;
704
+ }
705
+ if (appRouteHandlerValidations) {
706
+ typeDefinitions += `type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {
707
+ GET?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
708
+ POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
709
+ PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
710
+ PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
711
+ DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
712
+ HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
713
+ OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
714
+ }
715
+
716
+ `;
717
+ }
718
+ if (pagesApiRouteValidations) {
719
+ typeDefinitions += `type ApiRouteConfig = {
720
+ default: (req: any, res: any) => ReturnType<NextApiHandler>
721
+ config?: {
722
+ api?: {
723
+ bodyParser?: boolean | { sizeLimit?: number | string }
724
+ responseLimit?: string | number | boolean
725
+ externalResolver?: boolean
726
+ }
727
+ runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const
728
+ maxDuration?: number
729
+ }
730
+ }
731
+
732
+ `;
733
+ }
734
+ const routeImports = [];
735
+ if (appPageValidations) routeImports.push("AppRoutes");
736
+ if (layoutValidations) routeImports.push("LayoutRoutes");
737
+ if (appPageValidations || layoutValidations || appRouteHandlerValidations)
738
+ routeImports.push("ParamMap");
739
+ if (hasAppRouteHandlers) routeImports.push("AppRouteHandlerRoutes");
740
+ const routeImportStatement = routeImports.length > 0 ? `import type { ${routeImports.join(", ")} } from "./routes.js"` : "";
741
+ const nextRequestImport = hasAppRouteHandlers ? "import type { NextRequest } from 'next/server.js'\n" : "";
742
+ const nextTypes = [];
743
+ if (pagesApiRouteValidations) nextTypes.push("NextApiHandler");
744
+ if (appPageValidations || layoutValidations)
745
+ nextTypes.push("ResolvingMetadata", "ResolvingViewport");
746
+ const nextTypesImport = nextTypes.length > 0 ? `import type { ${nextTypes.join(", ")} } from "next/types.js"
747
+ ` : "";
748
+ return `// This file is generated automatically by Next.js
749
+ // Do not edit this file manually
750
+ // This file validates that all pages and layouts export the correct types
751
+
752
+ ${routeImportStatement}
753
+ ${nextTypesImport}${nextRequestImport}
754
+ ${typeDefinitions}
755
+ ${appPageValidations}
756
+
757
+ ${appRouteHandlerValidations}
758
+
759
+ ${pagesRouterPageValidations}
760
+
761
+ ${pagesApiRouteValidations}
762
+
763
+ ${layoutValidations}
764
+ `;
765
+ }
766
+
767
+ // ../node_modules/.bun/@wular+pnext@0.1.5+62547eec5a2188e3/node_modules/@wular/pnext/src/compat/typed-routes/generate.ts
768
+ async function writeIfChanged(file, source) {
769
+ if (existsSync2(file) && await readFile(file, "utf8") === source) return;
770
+ await ensureDir(path2.dirname(file));
771
+ await writeFile(file, source);
772
+ }
773
+ async function generateTypedRoutes(config, routes) {
774
+ const nextConfig = getNextConfig();
775
+ const typedRoutes = nextConfig.typedRoutes === true;
776
+ const manifest = await buildRouteTypesManifest({ config, routes, nextConfig });
777
+ const typesDir = path2.join(config.root, ".next", "types");
778
+ await writeIfChanged(path2.join(typesDir, "routes.d.ts"), generateRouteTypesFile(manifest));
779
+ const toImportSpecifier = (rootRelativePath) => {
780
+ const abs = path2.join(config.root, rootRelativePath);
781
+ const rel = toPosixPath(path2.relative(typesDir, abs));
782
+ return rel.startsWith(".") ? rel : `./${rel}`;
783
+ };
784
+ await writeIfChanged(
785
+ path2.join(typesDir, "validator.ts"),
786
+ generateValidatorFile(manifest, toImportSpecifier)
787
+ );
788
+ if (typedRoutes) {
789
+ await writeIfChanged(path2.join(typesDir, "link.d.ts"), generateLinkTypesFile(manifest));
790
+ }
791
+ await writeIfChanged(
792
+ path2.join(typesDir, "root-params.d.ts"),
793
+ rootParamsTypesFile(scanRootParamTypes(path2.join(config.root, "app")))
794
+ );
795
+ await writeNextEnv(config.root, typedRoutes);
796
+ }
797
+ function rootParamsTypesFile(rootParams) {
798
+ if (rootParams.size === 0) {
799
+ return `// Type definitions for Next.js root params (next/root-params)
800
+ // No root params detected.
801
+ export {}
802
+ `;
803
+ }
804
+ const order = ["string", "string[]", "undefined"];
805
+ const getters = [...rootParams.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([name, types]) => {
806
+ const union = order.filter((type) => types.has(type)).join(" | ");
807
+ return ` export function ${name}(): Promise<${union}>`;
808
+ });
809
+ return `// Type definitions for Next.js root params (next/root-params)
810
+
811
+ declare module 'next/root-params' {
812
+ ${getters.join("\n")}
813
+ }
814
+ `;
815
+ }
816
+ async function writeNextEnv(root, typedRoutes) {
817
+ const lines = [
818
+ '/// <reference types="next" />',
819
+ 'import "./.next/types/routes.d.ts";',
820
+ 'import "./.next/types/root-params.d.ts";'
821
+ ];
822
+ if (typedRoutes) lines.push('import "./.next/types/link.d.ts";');
823
+ lines.push("", "// NOTE: This file should not be edited", "");
824
+ await writeIfChanged(path2.join(root, "next-env.d.ts"), lines.join("\n"));
825
+ }
826
+
827
+ export {
828
+ generateTypedRoutes
829
+ };