theokit 0.43.12 → 0.45.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 (305) hide show
  1. package/dist/{actions-virtual-module-RSFRPJQZ.js → actions-virtual-module-67K4POQ2.js} +20 -20
  2. package/dist/actions-virtual-module-67K4POQ2.js.map +1 -0
  3. package/dist/{actions-virtual-module-HG66SZ7T.js → actions-virtual-module-LLDDAQWY.js} +4 -3
  4. package/dist/{actions-virtual-module-HG66SZ7T.js.map → actions-virtual-module-LLDDAQWY.js.map} +1 -1
  5. package/dist/adapters/web-shim.js +1 -1
  6. package/dist/adapters/web-shim.js.map +1 -1
  7. package/dist/adapters/ws-shim.js +1 -1
  8. package/dist/adapters/ws-shim.js.map +1 -1
  9. package/dist/{agent-OXRRKB55.js → agent-WFULT3OB.js} +2 -2
  10. package/dist/{agents-typed-client-ZP7BKJB3.js → agents-typed-client-TNHCUU7Q.js} +2 -2
  11. package/dist/agents-typed-client-TNHCUU7Q.js.map +1 -0
  12. package/dist/{app-typed-client-USLAMN7X.js → app-typed-client-N5WUE2CP.js} +62 -24
  13. package/dist/app-typed-client-N5WUE2CP.js.map +1 -0
  14. package/dist/{app-typed-client-GDF2OMJ2.js → app-typed-client-S3VR4ZA3.js} +47 -8
  15. package/dist/app-typed-client-S3VR4ZA3.js.map +1 -0
  16. package/dist/{body-parser-web-NNEJGX6Y.js → body-parser-web-4Z2QTPDU.js} +2 -2
  17. package/dist/body-parser-web-4Z2QTPDU.js.map +1 -0
  18. package/dist/boot/index.js +4 -4
  19. package/dist/boot/index.js.map +1 -1
  20. package/dist/{broadcast-4SX7R5XE.js → broadcast-H64DJRBE.js} +3 -3
  21. package/dist/broadcast-H64DJRBE.js.map +1 -0
  22. package/dist/{build-MQHIJROR.js → build-YQ6MXOV6.js} +13 -4
  23. package/dist/build-YQ6MXOV6.js.map +1 -0
  24. package/dist/{build-request-body-preview-FVBQ7LCE.js → build-request-body-preview-CKWWBF2M.js} +2 -2
  25. package/dist/build-request-body-preview-CKWWBF2M.js.map +1 -0
  26. package/dist/{chunk-26ECIX74.js → chunk-2ADKT37V.js} +5 -5
  27. package/dist/chunk-2ADKT37V.js.map +1 -0
  28. package/dist/{chunk-JIL74SFK.js → chunk-37ZO643S.js} +9 -9
  29. package/dist/chunk-37ZO643S.js.map +1 -0
  30. package/dist/{chunk-ESC54TAK.js → chunk-3DGIANAN.js} +1 -1
  31. package/dist/chunk-3DGIANAN.js.map +1 -0
  32. package/dist/{chunk-6FK7FKY6.js → chunk-47FFT43U.js} +1 -1
  33. package/dist/chunk-47FFT43U.js.map +1 -0
  34. package/dist/{chunk-ZJQ4O76G.js → chunk-4FWBKX6G.js} +1 -1
  35. package/dist/chunk-4FWBKX6G.js.map +1 -0
  36. package/dist/{chunk-NM4WF3XD.js → chunk-4PBJ266F.js} +1 -1
  37. package/dist/chunk-4PBJ266F.js.map +1 -0
  38. package/dist/{chunk-7MQOHNHE.js → chunk-52PDWL5S.js} +1 -1
  39. package/dist/chunk-52PDWL5S.js.map +1 -0
  40. package/dist/{chunk-575PAX5L.js → chunk-5AMXBU2R.js} +62 -38
  41. package/dist/chunk-5AMXBU2R.js.map +1 -0
  42. package/dist/{chunk-JQJN6LFK.js → chunk-62EU2BVZ.js} +2 -2
  43. package/dist/chunk-62EU2BVZ.js.map +1 -0
  44. package/dist/{chunk-SJIRP73B.js → chunk-646CA6RV.js} +2 -2
  45. package/dist/chunk-646CA6RV.js.map +1 -0
  46. package/dist/{chunk-ASDXVRJD.js → chunk-6KDXP472.js} +4 -4
  47. package/dist/chunk-6KDXP472.js.map +1 -0
  48. package/dist/chunk-6LNIGF5P.js +46 -0
  49. package/dist/chunk-6LNIGF5P.js.map +1 -0
  50. package/dist/{chunk-IE6C4KZX.js → chunk-6VDYQ4I6.js} +11 -496
  51. package/dist/chunk-6VDYQ4I6.js.map +1 -0
  52. package/dist/chunk-7IHWXDJJ.js +1 -0
  53. package/dist/chunk-7IHWXDJJ.js.map +1 -0
  54. package/dist/{chunk-JQSKBMXP.js → chunk-7LVM22VG.js} +1 -1
  55. package/dist/chunk-7LVM22VG.js.map +1 -0
  56. package/dist/{chunk-UVXB2ER7.js → chunk-7SABX4DJ.js} +1 -1
  57. package/dist/chunk-7SABX4DJ.js.map +1 -0
  58. package/dist/{chunk-X32XEJXR.js → chunk-ACKBVBUI.js} +1 -1
  59. package/dist/chunk-ACKBVBUI.js.map +1 -0
  60. package/dist/{chunk-UUFYP2UM.js → chunk-AM3QABW5.js} +3 -3
  61. package/dist/chunk-AM3QABW5.js.map +1 -0
  62. package/dist/{chunk-FH3DYBAN.js → chunk-ANS4ELRH.js} +1 -1
  63. package/dist/chunk-ANS4ELRH.js.map +1 -0
  64. package/dist/{chunk-UD3LFGDL.js → chunk-AVQU5CQF.js} +1 -1
  65. package/dist/chunk-AVQU5CQF.js.map +1 -0
  66. package/dist/{chunk-CJNMJUHE.js → chunk-B7ONQ4QJ.js} +2 -2
  67. package/dist/{chunk-WSJKACWB.js → chunk-C34PMLSN.js} +1 -1
  68. package/dist/chunk-C34PMLSN.js.map +1 -0
  69. package/dist/{chunk-DJFMAWH5.js → chunk-EIRQM55C.js} +6 -5
  70. package/dist/chunk-EIRQM55C.js.map +1 -0
  71. package/dist/{chunk-ZEGYW52B.js → chunk-FB2HBNIC.js} +1 -1
  72. package/dist/chunk-FB2HBNIC.js.map +1 -0
  73. package/dist/chunk-FXZZS7YW.js +605 -0
  74. package/dist/chunk-FXZZS7YW.js.map +1 -0
  75. package/dist/{chunk-HGUZWG2C.js → chunk-FZG3JYB3.js} +8 -47
  76. package/dist/chunk-FZG3JYB3.js.map +1 -0
  77. package/dist/{chunk-V3LJN2GS.js → chunk-GAPBPRPP.js} +1 -1
  78. package/dist/chunk-GAPBPRPP.js.map +1 -0
  79. package/dist/chunk-GUBN5UTT.js +1 -0
  80. package/dist/chunk-GUBN5UTT.js.map +1 -0
  81. package/dist/{chunk-6OXCZMW3.js → chunk-HEK4SET7.js} +5 -5
  82. package/dist/chunk-HEK4SET7.js.map +1 -0
  83. package/dist/{chunk-N2D5AVRR.js → chunk-HRCNHWLP.js} +7 -109
  84. package/dist/chunk-HRCNHWLP.js.map +1 -0
  85. package/dist/{chunk-C3ZZ56YZ.js → chunk-JA2ZAT5Q.js} +1 -1
  86. package/dist/chunk-JA2ZAT5Q.js.map +1 -0
  87. package/dist/{chunk-L2S2R3TI.js → chunk-KBGGQK4I.js} +25 -8
  88. package/dist/chunk-KBGGQK4I.js.map +1 -0
  89. package/dist/{chunk-VPISAMXU.js → chunk-KD5G3YXI.js} +4 -4
  90. package/dist/chunk-KD5G3YXI.js.map +1 -0
  91. package/dist/{chunk-VMEWD57H.js → chunk-KPKLIUUL.js} +1 -1
  92. package/dist/chunk-KPKLIUUL.js.map +1 -0
  93. package/dist/{chunk-4HAU7AJM.js → chunk-L4Y6RJ4E.js} +3 -3
  94. package/dist/chunk-L4Y6RJ4E.js.map +1 -0
  95. package/dist/{chunk-OVHW23YC.js → chunk-L5Z6IY5U.js} +5 -5
  96. package/dist/chunk-L5Z6IY5U.js.map +1 -0
  97. package/dist/{chunk-JBCHWRKF.js → chunk-MTEWLGVY.js} +2 -2
  98. package/dist/chunk-MTEWLGVY.js.map +1 -0
  99. package/dist/{chunk-XZ6B2Y2R.js → chunk-MWP4YXWJ.js} +1 -1
  100. package/dist/chunk-MWP4YXWJ.js.map +1 -0
  101. package/dist/{chunk-5QW7IQQU.js → chunk-NTDN54XO.js} +1 -1
  102. package/dist/chunk-NTDN54XO.js.map +1 -0
  103. package/dist/{chunk-7BIM27LV.js → chunk-OIGJOYX6.js} +1 -1
  104. package/dist/chunk-OIGJOYX6.js.map +1 -0
  105. package/dist/{chunk-TSLSIRBR.js → chunk-OLGPYOLO.js} +2 -2
  106. package/dist/chunk-OLGPYOLO.js.map +1 -0
  107. package/dist/{chunk-6NEXVBPY.js → chunk-RWNSW4FM.js} +1 -1
  108. package/dist/chunk-RWNSW4FM.js.map +1 -0
  109. package/dist/{chunk-E25FBYJP.js → chunk-SAFGDIPQ.js} +1 -1
  110. package/dist/chunk-SAFGDIPQ.js.map +1 -0
  111. package/dist/{chunk-OP7QCTR5.js → chunk-SEELKQUM.js} +2 -2
  112. package/dist/chunk-SEELKQUM.js.map +1 -0
  113. package/dist/{chunk-4B2ZMX45.js → chunk-SSYDEKWF.js} +1 -1
  114. package/dist/chunk-SSYDEKWF.js.map +1 -0
  115. package/dist/{chunk-DQVBL2G4.js → chunk-SZU6BOMV.js} +75 -53
  116. package/dist/chunk-SZU6BOMV.js.map +1 -0
  117. package/dist/{chunk-65EFIUDD.js → chunk-U267AOWS.js} +1 -1
  118. package/dist/chunk-U267AOWS.js.map +1 -0
  119. package/dist/{chunk-FX72VHAE.js → chunk-U3H53IIN.js} +6 -6
  120. package/dist/chunk-U3H53IIN.js.map +1 -0
  121. package/dist/{chunk-OPLICDUB.js → chunk-UW2TEAGR.js} +1 -1
  122. package/dist/chunk-UW2TEAGR.js.map +1 -0
  123. package/dist/{chunk-2WH6SD3C.js → chunk-UYMCKHML.js} +4 -4
  124. package/dist/chunk-UYMCKHML.js.map +1 -0
  125. package/dist/{chunk-OI6DK6ZJ.js → chunk-VFU7DTUL.js} +6 -4
  126. package/dist/chunk-VFU7DTUL.js.map +1 -0
  127. package/dist/{chunk-IAJ2JVEH.js → chunk-VSLTKX5L.js} +1 -1
  128. package/dist/chunk-VSLTKX5L.js.map +1 -0
  129. package/dist/{chunk-YB5DJJ4U.js → chunk-VZTYCAO6.js} +1 -1
  130. package/dist/chunk-VZTYCAO6.js.map +1 -0
  131. package/dist/chunk-WDGYCBNI.js +65 -0
  132. package/dist/chunk-WDGYCBNI.js.map +1 -0
  133. package/dist/chunk-WPJOTQA5.js +1 -0
  134. package/dist/chunk-WPJOTQA5.js.map +1 -0
  135. package/dist/{chunk-DGUM43GV.js → chunk-XTHN6JBX.js} +1 -1
  136. package/dist/chunk-XTHN6JBX.js.map +1 -0
  137. package/dist/{chunk-HZ6USUHC.js → chunk-YOIVCCZT.js} +1 -1
  138. package/dist/chunk-YOIVCCZT.js.map +1 -0
  139. package/dist/cli/index.js +8 -8
  140. package/dist/client/core.d.ts +5 -259
  141. package/dist/client/core.js +13 -9
  142. package/dist/client/core.js.map +1 -1
  143. package/dist/client/index.d.ts +7 -96
  144. package/dist/client/index.js +19 -67
  145. package/dist/client/index.js.map +1 -1
  146. package/dist/{controller-swc-transform-JJRMTSDY.js → controller-swc-transform-T7ZTD55V.js} +2 -2
  147. package/dist/controller-swc-transform-T7ZTD55V.js.map +1 -0
  148. package/dist/{cookies-MJKMGJ7N.js → cookies-SOXUQJXG.js} +3 -3
  149. package/dist/cookies-SOXUQJXG.js.map +1 -0
  150. package/dist/{dev-WQ4LWCAW.js → dev-YNO26JS3.js} +8 -7
  151. package/dist/{dev-WQ4LWCAW.js.map → dev-YNO26JS3.js.map} +1 -1
  152. package/dist/{dev-emit-HLGJK3PP.js → dev-emit-F54Y5TIU.js} +5 -5
  153. package/dist/dev-emit-F54Y5TIU.js.map +1 -0
  154. package/dist/devtools/entry.js +61 -53
  155. package/dist/devtools/entry.js.map +1 -1
  156. package/dist/dispatcher-MXKF3CRH.js +8 -0
  157. package/dist/dispatcher-MXKF3CRH.js.map +1 -0
  158. package/dist/index.js +25 -25
  159. package/dist/index.js.map +1 -1
  160. package/dist/{info-75U6GCMD.js → info-ICDTPJDC.js} +3 -3
  161. package/dist/{internal-api-JFORKYLR.js → internal-api-NO24QAXC.js} +10 -8
  162. package/dist/{internal-api-DV3H5NNV.js → internal-api-S7WK2WCY.js} +20 -20
  163. package/dist/internal-api-S7WK2WCY.js.map +1 -0
  164. package/dist/{load-config-XP7NSSA7.js → load-config-ICCNMO74.js} +3 -3
  165. package/dist/{mcp-FF3NTCHB.js → mcp-3S6A4A4Q.js} +3 -3
  166. package/dist/{openapi-ZPXYRAM2.js → openapi-NIYA2VBG.js} +3 -3
  167. package/dist/react-query/index.js +2 -2
  168. package/dist/react-query/index.js.map +1 -1
  169. package/dist/{routes-ZVDKABXZ.js → routes-2RD4S5PZ.js} +3 -3
  170. package/dist/{schema-FBOTN46F.js → schema-S553QCAU.js} +2 -2
  171. package/dist/server/agent/index.d.ts +3 -72
  172. package/dist/server/agent/index.js +4 -4
  173. package/dist/server/agent/index.js.map +1 -1
  174. package/dist/server/auth/index.js +4 -4
  175. package/dist/server/auth/index.js.map +1 -1
  176. package/dist/server/cost/index.js +2 -2
  177. package/dist/server/cost/index.js.map +1 -1
  178. package/dist/server/cron/index.js +6 -6
  179. package/dist/server/cron/index.js.map +1 -1
  180. package/dist/server/define/index.d.ts +2 -2
  181. package/dist/server/define/index.js +4 -4
  182. package/dist/server/define/index.js.map +1 -1
  183. package/dist/server/http/index.js +11 -11
  184. package/dist/server/http/index.js.map +1 -1
  185. package/dist/server/index.d.ts +3 -3
  186. package/dist/server/index.js +41 -41
  187. package/dist/server/index.js.map +1 -1
  188. package/dist/server/jobs/index.js +7 -7
  189. package/dist/server/jobs/index.js.map +1 -1
  190. package/dist/server/observability/index.d.ts +8 -1
  191. package/dist/server/observability/index.js +5 -5
  192. package/dist/server/observability/index.js.map +1 -1
  193. package/dist/server/plugins/index.js +3 -3
  194. package/dist/server/plugins/index.js.map +1 -1
  195. package/dist/server/rate-limit/index.js +4 -4
  196. package/dist/server/rate-limit/index.js.map +1 -1
  197. package/dist/server/realtime/index.js +2 -2
  198. package/dist/server/realtime/index.js.map +1 -1
  199. package/dist/server/scan/index.js +7 -7
  200. package/dist/server/scan/index.js.map +1 -1
  201. package/dist/server/security/index.js +5 -5
  202. package/dist/server/security/index.js.map +1 -1
  203. package/dist/server/storage/index.js +2 -2
  204. package/dist/server/storage/index.js.map +1 -1
  205. package/dist/server/webhook/index.js +3 -3
  206. package/dist/server/webhook/index.js.map +1 -1
  207. package/dist/server-error-to-envelope-UM7DEVM4.js +8 -0
  208. package/dist/server-error-to-envelope-UM7DEVM4.js.map +1 -0
  209. package/dist/{server-routes-hmr-RI7SYNT2.js → server-routes-hmr-6CRNSEWF.js} +2 -2
  210. package/dist/server-routes-hmr-6CRNSEWF.js.map +1 -0
  211. package/dist/{services-typed-client-AU6DKXAO.js → services-typed-client-IXNOPVZA.js} +3 -3
  212. package/dist/services-typed-client-IXNOPVZA.js.map +1 -0
  213. package/dist/{start-2U3FUCJX.js → start-TVT7BZ4V.js} +35 -11
  214. package/dist/start-TVT7BZ4V.js.map +1 -0
  215. package/dist/vite-plugin/index.js +25 -25
  216. package/dist/vite-plugin/index.js.map +1 -1
  217. package/dist/{vite-plugin-D2NTPZNC.js → vite-plugin-K64KQZSU.js} +8 -7
  218. package/package.json +11 -10
  219. package/dist/actions-virtual-module-RSFRPJQZ.js.map +0 -1
  220. package/dist/agents-typed-client-ZP7BKJB3.js.map +0 -1
  221. package/dist/app-typed-client-GDF2OMJ2.js.map +0 -1
  222. package/dist/app-typed-client-USLAMN7X.js.map +0 -1
  223. package/dist/body-parser-web-NNEJGX6Y.js.map +0 -1
  224. package/dist/build-MQHIJROR.js.map +0 -1
  225. package/dist/build-request-body-preview-FVBQ7LCE.js.map +0 -1
  226. package/dist/chunk-26ECIX74.js.map +0 -1
  227. package/dist/chunk-2WH6SD3C.js.map +0 -1
  228. package/dist/chunk-4B2ZMX45.js.map +0 -1
  229. package/dist/chunk-4HAU7AJM.js.map +0 -1
  230. package/dist/chunk-575PAX5L.js.map +0 -1
  231. package/dist/chunk-5QW7IQQU.js.map +0 -1
  232. package/dist/chunk-65EFIUDD.js.map +0 -1
  233. package/dist/chunk-6FK7FKY6.js.map +0 -1
  234. package/dist/chunk-6NEXVBPY.js.map +0 -1
  235. package/dist/chunk-6OXCZMW3.js.map +0 -1
  236. package/dist/chunk-7BIM27LV.js.map +0 -1
  237. package/dist/chunk-7MQOHNHE.js.map +0 -1
  238. package/dist/chunk-ASDXVRJD.js.map +0 -1
  239. package/dist/chunk-C3ZZ56YZ.js.map +0 -1
  240. package/dist/chunk-DJFMAWH5.js.map +0 -1
  241. package/dist/chunk-DQVBL2G4.js.map +0 -1
  242. package/dist/chunk-E25FBYJP.js.map +0 -1
  243. package/dist/chunk-E3JH6YUM.js +0 -1
  244. package/dist/chunk-ESC54TAK.js.map +0 -1
  245. package/dist/chunk-FH3DYBAN.js.map +0 -1
  246. package/dist/chunk-FX72VHAE.js.map +0 -1
  247. package/dist/chunk-HGUZWG2C.js.map +0 -1
  248. package/dist/chunk-HZ6USUHC.js.map +0 -1
  249. package/dist/chunk-IAJ2JVEH.js.map +0 -1
  250. package/dist/chunk-IE6C4KZX.js.map +0 -1
  251. package/dist/chunk-JBCHWRKF.js.map +0 -1
  252. package/dist/chunk-JHEAWR3L.js +0 -1
  253. package/dist/chunk-JIL74SFK.js.map +0 -1
  254. package/dist/chunk-JQJN6LFK.js.map +0 -1
  255. package/dist/chunk-JQSKBMXP.js.map +0 -1
  256. package/dist/chunk-KPRJS3II.js +0 -505
  257. package/dist/chunk-KPRJS3II.js.map +0 -1
  258. package/dist/chunk-L2S2R3TI.js.map +0 -1
  259. package/dist/chunk-N2D5AVRR.js.map +0 -1
  260. package/dist/chunk-NM4WF3XD.js.map +0 -1
  261. package/dist/chunk-NPMCKOX4.js +0 -1
  262. package/dist/chunk-NPMCKOX4.js.map +0 -1
  263. package/dist/chunk-OI6DK6ZJ.js.map +0 -1
  264. package/dist/chunk-OP7QCTR5.js.map +0 -1
  265. package/dist/chunk-OPLICDUB.js.map +0 -1
  266. package/dist/chunk-OVHW23YC.js.map +0 -1
  267. package/dist/chunk-SJIRP73B.js.map +0 -1
  268. package/dist/chunk-TSLSIRBR.js.map +0 -1
  269. package/dist/chunk-UD3LFGDL.js.map +0 -1
  270. package/dist/chunk-UUFYP2UM.js.map +0 -1
  271. package/dist/chunk-UVXB2ER7.js.map +0 -1
  272. package/dist/chunk-V3LJN2GS.js.map +0 -1
  273. package/dist/chunk-VMEWD57H.js.map +0 -1
  274. package/dist/chunk-VPISAMXU.js.map +0 -1
  275. package/dist/chunk-WSJKACWB.js.map +0 -1
  276. package/dist/chunk-X32XEJXR.js.map +0 -1
  277. package/dist/chunk-XZ6B2Y2R.js.map +0 -1
  278. package/dist/chunk-YB5DJJ4U.js.map +0 -1
  279. package/dist/chunk-ZEGYW52B.js.map +0 -1
  280. package/dist/chunk-ZJQ4O76G.js.map +0 -1
  281. package/dist/controller-swc-transform-JJRMTSDY.js.map +0 -1
  282. package/dist/cookies-MJKMGJ7N.js.map +0 -1
  283. package/dist/dev-emit-HLGJK3PP.js.map +0 -1
  284. package/dist/dispatcher-DLKIXYNO.js +0 -8
  285. package/dist/dispatcher-DLKIXYNO.js.map +0 -1
  286. package/dist/internal-api-DV3H5NNV.js.map +0 -1
  287. package/dist/internal-api-JFORKYLR.js.map +0 -1
  288. package/dist/load-config-XP7NSSA7.js.map +0 -1
  289. package/dist/schema-FBOTN46F.js.map +0 -1
  290. package/dist/server-error-to-envelope-EOFUIUNB.js +0 -8
  291. package/dist/server-error-to-envelope-EOFUIUNB.js.map +0 -1
  292. package/dist/server-routes-hmr-RI7SYNT2.js.map +0 -1
  293. package/dist/services-typed-client-AU6DKXAO.js.map +0 -1
  294. package/dist/start-2U3FUCJX.js.map +0 -1
  295. package/dist/vite-plugin-D2NTPZNC.js.map +0 -1
  296. /package/dist/{agent-OXRRKB55.js.map → agent-WFULT3OB.js.map} +0 -0
  297. /package/dist/{chunk-CJNMJUHE.js.map → chunk-B7ONQ4QJ.js.map} +0 -0
  298. /package/dist/{info-75U6GCMD.js.map → info-ICDTPJDC.js.map} +0 -0
  299. /package/dist/{broadcast-4SX7R5XE.js.map → internal-api-NO24QAXC.js.map} +0 -0
  300. /package/dist/{chunk-DGUM43GV.js.map → load-config-ICCNMO74.js.map} +0 -0
  301. /package/dist/{mcp-FF3NTCHB.js.map → mcp-3S6A4A4Q.js.map} +0 -0
  302. /package/dist/{openapi-ZPXYRAM2.js.map → openapi-NIYA2VBG.js.map} +0 -0
  303. /package/dist/{routes-ZVDKABXZ.js.map → routes-2RD4S5PZ.js.map} +0 -0
  304. /package/dist/{chunk-E3JH6YUM.js.map → schema-S553QCAU.js.map} +0 -0
  305. /package/dist/{chunk-JHEAWR3L.js.map → vite-plugin-K64KQZSU.js.map} +0 -0
@@ -1,24 +1,24 @@
1
- import "./chunk-DJFMAWH5.js";
2
- import "./chunk-JIL74SFK.js";
3
- import "./chunk-6FK7FKY6.js";
4
- import "./chunk-5QW7IQQU.js";
5
- import "./chunk-VPISAMXU.js";
6
- import "./chunk-IAJ2JVEH.js";
7
- import "./chunk-VMEWD57H.js";
8
- import "./chunk-JQSKBMXP.js";
1
+ import "./chunk-EIRQM55C.js";
2
+ import "./chunk-37ZO643S.js";
3
+ import "./chunk-47FFT43U.js";
4
+ import "./chunk-NTDN54XO.js";
5
+ import "./chunk-KD5G3YXI.js";
6
+ import "./chunk-VSLTKX5L.js";
7
+ import "./chunk-KPKLIUUL.js";
8
+ import "./chunk-7LVM22VG.js";
9
9
  import {
10
10
  scanServerActionsEnriched
11
- } from "./chunk-4HAU7AJM.js";
12
- import "./chunk-WSJKACWB.js";
13
- import "./chunk-ZEGYW52B.js";
14
- import "./chunk-JBCHWRKF.js";
15
- import "./chunk-TSLSIRBR.js";
16
- import "./chunk-UD3LFGDL.js";
17
- import "./chunk-X32XEJXR.js";
18
- import "./chunk-UVXB2ER7.js";
19
- import "./chunk-C3ZZ56YZ.js";
20
- import "./chunk-65EFIUDD.js";
21
- import "./chunk-DGUM43GV.js";
11
+ } from "./chunk-L4Y6RJ4E.js";
12
+ import "./chunk-C34PMLSN.js";
13
+ import "./chunk-FB2HBNIC.js";
14
+ import "./chunk-MTEWLGVY.js";
15
+ import "./chunk-OLGPYOLO.js";
16
+ import "./chunk-AVQU5CQF.js";
17
+ import "./chunk-ACKBVBUI.js";
18
+ import "./chunk-7SABX4DJ.js";
19
+ import "./chunk-JA2ZAT5Q.js";
20
+ import "./chunk-U267AOWS.js";
21
+ import "./chunk-XTHN6JBX.js";
22
22
 
23
23
  // src/vite-plugin/actions-virtual-module.ts
24
24
  import { existsSync, mkdirSync, renameSync, watch as fsWatch, writeFileSync } from "fs";
@@ -221,4 +221,4 @@ export const actions = manifest
221
221
  export {
222
222
  actionsVirtualModule
223
223
  };
224
- //# sourceMappingURL=actions-virtual-module-RSFRPJQZ.js.map
224
+ //# sourceMappingURL=actions-virtual-module-67K4POQ2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vite-plugin/actions-virtual-module.ts"],"mappings":"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","names":[]}
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import "tsx/esm";
3
- import "./chunk-N2D5AVRR.js";
4
- import "./chunk-IE6C4KZX.js";
3
+ import "./chunk-HRCNHWLP.js";
4
+ import "./chunk-6VDYQ4I6.js";
5
5
  import "./chunk-TDNNBLGW.js";
6
+ import "./chunk-FXZZS7YW.js";
6
7
  import "./chunk-OXCALO3W.js";
7
8
  import "./chunk-LNVMHQ2Z.js";
8
9
  import {
@@ -212,4 +213,4 @@ export const actions = manifest
212
213
  export {
213
214
  actionsVirtualModule
214
215
  };
215
- //# sourceMappingURL=actions-virtual-module-HG66SZ7T.js.map
216
+ //# sourceMappingURL=actions-virtual-module-LLDDAQWY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vite-plugin/actions-virtual-module.ts"],"sourcesContent":["/**\n * Vite plugin: resolves `@theo/actions` virtual module and emits a typed\n * Proxy facade that calls `theoFetch('/_actions/<name>', body)` against the\n * server-side action handlers.\n *\n * Per plan g3-server-actions-and-useaction v1.2 § Phase 3 / T3.1 + ADR D4.\n * Astro `vite-plugin-actions.ts` modular pattern. Single focused plugin\n * (not monolithic), virtual module + `configureServer` watcher.\n *\n * Module shape emitted on client environment: thin proxy that forwards\n * `actions.<name>(input)` to `POST /_actions/<name>` with JSON or\n * FormData body. On server environment: re-export of the manifest for\n * SSR / module-loader access (T1.3 sub-C consumer).\n *\n * EC-15 (DOCUMENT): HMR uses Vite default invalidation — coarse but\n * correct. Optimization (fine-grained invalidation of only consumers of\n * `@theo/actions`) deferred to G3.1 if dev-server p95 reload > 500ms.\n */\nimport { existsSync, mkdirSync, renameSync, watch as fsWatch, writeFileSync } from 'node:fs'\nimport { dirname, join, posix, resolve } from 'node:path'\n\nimport type { Plugin, ViteDevServer } from 'vite'\n\nimport { scanServerActionsEnriched, type ActionManifestEntry } from '../server/internal-api.js'\n\nconst VIRTUAL_ID = '@theo/actions'\nconst RESOLVED_ID = `\\0${VIRTUAL_ID}`\n\ninterface ActionsVirtualModuleOptions {\n /** Path to server directory (where `actions/` lives). */\n serverDir: string\n /**\n * Optional `.theokit/` output dir for emitting `actions.d.ts`. When provided,\n * the plugin writes an ambient `declare module '@theo/actions'` so TS in\n * consumer apps can resolve the virtual module import. Mirrors the G1\n * `app-typed-client` emit pattern.\n */\n distDir?: string\n}\n\nexport function actionsVirtualModule(opts: ActionsVirtualModuleOptions): Plugin {\n const { serverDir, distDir } = opts\n\n function emitActionsDts(): void {\n if (distDir === undefined) return\n const entries = safeScan(serverDir)\n const dtsPath = posix.join(resolve(distDir).replace(/\\\\/g, '/'), 'actions.d.ts')\n const content = generateActionsDts(entries)\n try {\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time derived path\n mkdirSync(dirname(dtsPath), { recursive: true })\n const tmp = `${dtsPath}.${process.pid}.tmp`\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time derived path\n writeFileSync(tmp, content)\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time derived path\n renameSync(tmp, dtsPath)\n } catch (err) {\n console.error('[theokit:actions-virtual-module] dts emit error:', err)\n }\n }\n\n return {\n name: 'theo:actions-virtual-module',\n enforce: 'pre',\n configResolved() {\n emitActionsDts()\n },\n buildEnd() {\n emitActionsDts()\n },\n resolveId(id: string) {\n if (id === VIRTUAL_ID) return RESOLVED_ID\n return undefined\n },\n load(id: string) {\n if (id !== RESOLVED_ID) return undefined\n const entries = safeScan(serverDir)\n const ctx = this as unknown as { environment?: { name?: string } } | undefined\n const envName = ctx?.environment?.name\n const isClient = envName === 'client' || envName === undefined\n return isClient ? generateClientFacade(entries) : generateServerManifest(entries)\n },\n configureServer(server: ViteDevServer) {\n const actionsDir = join(serverDir, 'actions')\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time derived path\n if (!existsSync(actionsDir)) return\n // EC-15: coarse invalidation — invalidate ALL modules on actions file change.\n // Optimization deferred per plan ADR D4 note.\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time path\n const watcher = fsWatch(actionsDir, { recursive: true }, () => {\n emitActionsDts()\n const mod = server.moduleGraph.getModuleById(RESOLVED_ID)\n if (mod) {\n server.moduleGraph.invalidateModule(mod)\n }\n server.ws.send({ type: 'full-reload' })\n })\n server.httpServer?.once('close', () => {\n watcher.close()\n })\n },\n }\n}\n\n/**\n * Emit `.theokit/actions.d.ts` — ambient declaration of `@theo/actions` so\n * consumer TS apps can `import { actions } from '@theo/actions'` and get\n * typed completions for each scanned action name. Each entry maps name to\n * a generic `(input: unknown) => Promise<{data, error}>` invoker — the full\n * input/output inference from defineAction would require either monomorphic\n * dts-bundle or virtual type emit (deferred to a future plan).\n */\nfunction generateActionsDts(entries: readonly ActionManifestEntry[]): string {\n const lines = entries\n .map((entry) => {\n const invokerType = `(input: unknown) => Promise<{ data: unknown; error: undefined } | { data: undefined; error: { code: string; message: string; fields?: Record<string, string[]>; type?: string } }>`\n // P#4 plugin-forms typed __zodSchema (per plan p4-plugin-forms v1.1 EC-3).\n // When schemaFilePath present, emit intersection type so consumers see both\n // the callable invoker AND the __zodSchema field with the exact schema type.\n if (entry.schemaFilePath !== undefined) {\n const schemaImportPath = entry.schemaFilePath\n .replace(/\\\\/g, '/')\n .replace(/\\.(ts|tsx|js|jsx)$/, '.js')\n return ` ${JSON.stringify(entry.name)}: (${invokerType}) & { readonly __zodSchema: typeof import(${JSON.stringify(schemaImportPath)}).schema }`\n }\n return ` ${JSON.stringify(entry.name)}: ${invokerType}`\n })\n .join('\\n')\n return `// AUTO-GENERATED by @theo/actions virtual module. DO NOT EDIT MANUALLY.\ndeclare module '@theo/actions' {\n export const actions: {\n${lines}\n }\n}\n`\n}\n\nfunction safeScan(serverDir: string): ActionManifestEntry[] {\n try {\n return scanServerActionsEnriched(serverDir)\n } catch {\n // ActionScanError surfaces at build time; for HMR keep an empty manifest\n // so the dev server doesn't crash mid-edit.\n return []\n }\n}\n\n/**\n * Client-side module: emits a Proxy facade. For each action `name` in\n * manifest, `actions.<name>(input)` POSTs to `/_actions/<name>` with JSON\n * body (or FormData when input is a FormData instance) and parses the\n * `application/json+devalue` response via the runtime helper.\n */\nfunction generateClientFacade(entries: ActionManifestEntry[]): string {\n const entryLines = entries\n .map((entry) => ` ${JSON.stringify(entry.name)}: ${JSON.stringify(entry.urlPath)},`)\n .join('\\n')\n\n // P#4 plugin-forms shared-schema convention (per plan p4-plugin-forms v1.1 T1.1).\n // Emit ESM imports + ACTION_SCHEMA_MAP so the Proxy can attach __zodSchema.\n // Vite resolves absolute filesystem paths via its module graph; schema files\n // are isomorphic (zod-only, no server APIs) so they bundle into the client.\n const schemaEntries = entries.filter((e) => e.schemaFilePath !== undefined)\n const schemaImports = schemaEntries\n .map((entry, idx) => {\n // schemaEntries was filtered by `e.schemaFilePath !== undefined` above,\n // so the assertion is provably safe in this scope.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const importPath = entry.schemaFilePath!.replace(/\\\\/g, '/')\n return `import { schema as __theoSchema${idx} } from ${JSON.stringify(importPath)}`\n })\n .join('\\n')\n const schemaMapLines = schemaEntries\n .map((entry, idx) => ` ${JSON.stringify(entry.name)}: __theoSchema${idx},`)\n .join('\\n')\n\n return `// AUTO-GENERATED by @theo/actions virtual module\n/* eslint-disable */\n${schemaImports}\n\nconst ACTION_URL_MAP = {\n${entryLines}\n}\n\nconst ACTION_SCHEMA_MAP = {\n${schemaMapLines}\n}\n\n// Devtools telemetry — fires in the SAME realm as the Overlay React tree\n// (browser), so the Actions tab updates immediately on each call.\n// The Overlay component installs \\`window.__theoDevtoolsDispatcher\\` on\n// mount (dev only; prod tree-shakes the Overlay entirely). Reading the\n// global avoids a cross-package dynamic import that Vite's virtual-module\n// resolver cannot trace. Same pattern as React DevTools'\n// \\`__REACT_DEVTOOLS_GLOBAL_HOOK__\\`.\nfunction emitTelemetry(name, startedAt, input, outcome) {\n if (typeof window === 'undefined') return\n const dispatcher = window.__theoDevtoolsDispatcher\n if (!dispatcher || typeof dispatcher.onActionCall !== 'function') return\n try {\n dispatcher.onActionCall({\n id: 'act-' + String(Date.now()) + '-' + Math.random().toString(36).slice(2, 8),\n timestamp: startedAt,\n name,\n input,\n output: outcome.status === 'success' ? outcome.data : undefined,\n error: outcome.status === 'error' ? outcome.error : undefined,\n durationMs: Date.now() - startedAt,\n status: outcome.status,\n })\n } catch (_) {\n // dispatcher threw — devtools UI bug; never bubble to consumer code\n }\n}\n\nasync function callAction(name, url, input) {\n const startedAt = Date.now()\n const isForm = typeof FormData !== 'undefined' && input instanceof FormData\n const headers = { 'x-theo-action': '1' }\n const body = isForm ? input : JSON.stringify(input ?? {})\n if (!isForm) headers['content-type'] = 'application/json'\n let response\n try {\n response = await fetch(url, { method: 'POST', headers, body, credentials: 'same-origin' })\n } catch (e) {\n const err = { code: 'NETWORK_ERROR', message: e && e.message ? e.message : 'fetch failed' }\n emitTelemetry(name, startedAt, input, { status: 'error', error: err })\n return { data: undefined, error: err }\n }\n const contentType = response.headers.get('content-type') ?? ''\n let result\n if (response.status === 204) {\n result = { data: undefined, error: undefined }\n } else if (contentType.startsWith('application/json+devalue')) {\n const text = await response.text()\n const { parse } = await import('devalue')\n result = { data: parse(text, { URL: (h) => new URL(h) }), error: undefined }\n } else if (contentType.startsWith('application/json')) {\n const json = await response.json()\n result = response.ok ? { data: json, error: undefined } : { data: undefined, error: json }\n } else {\n result = { data: undefined, error: { code: 'INTERNAL_SERVER_ERROR', message: await response.text() } }\n }\n emitTelemetry(name, startedAt, input, result.error\n ? { status: 'error', error: result.error }\n : { status: 'success', data: result.data })\n return result\n}\n\n// P#4 plugin-forms cache: callable proxies must be stable per action so that\n// repeated property access does not allocate + reset the __zodSchema attach.\nconst ACTION_CALLABLE_CACHE = {}\n\nexport const actions = new Proxy({}, {\n get(target, prop) {\n if (typeof prop !== 'string') return undefined\n const url = ACTION_URL_MAP[prop]\n if (!url) return undefined\n if (!ACTION_CALLABLE_CACHE[prop]) {\n const callable = (input) => callAction(prop, url, input)\n const schema = ACTION_SCHEMA_MAP[prop]\n if (schema !== undefined) {\n Object.defineProperty(callable, '__zodSchema', {\n value: schema,\n enumerable: false,\n writable: false,\n configurable: false,\n })\n }\n ACTION_CALLABLE_CACHE[prop] = callable\n }\n return ACTION_CALLABLE_CACHE[prop]\n },\n})\n`\n}\n\n/**\n * Server-side module: re-exports the manifest entries for SSR / module-\n * loader consumption (T1.3 sub-C in action-execute.ts will route requests\n * via this manifest).\n */\nfunction generateServerManifest(entries: ActionManifestEntry[]): string {\n return `// AUTO-GENERATED by @theo/actions virtual module (server env)\n/* eslint-disable */\nexport const manifest = ${JSON.stringify(entries, null, 2)}\nexport const actions = manifest\n`\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,SAAS,YAAY,WAAW,YAAY,SAAS,SAAS,qBAAqB;AACnF,SAAS,SAAS,MAAM,OAAO,eAAe;AAM9C,IAAM,aAAa;AACnB,IAAM,cAAc,KAAK,UAAU;AAc5B,SAAS,qBAAqB,MAA2C;AAC9E,QAAM,EAAE,WAAW,QAAQ,IAAI;AAE/B,WAAS,iBAAuB;AAC9B,QAAI,YAAY,OAAW;AAC3B,UAAM,UAAU,SAAS,SAAS;AAClC,UAAM,UAAU,MAAM,KAAK,QAAQ,OAAO,EAAE,QAAQ,OAAO,GAAG,GAAG,cAAc;AAC/E,UAAM,UAAU,mBAAmB,OAAO;AAC1C,QAAI;AAEF,gBAAU,QAAQ,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;AAC/C,YAAM,MAAM,GAAG,OAAO,IAAI,QAAQ,GAAG;AAErC,oBAAc,KAAK,OAAO;AAE1B,iBAAW,KAAK,OAAO;AAAA,IACzB,SAAS,KAAK;AACZ,cAAQ,MAAM,oDAAoD,GAAG;AAAA,IACvE;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,iBAAiB;AACf,qBAAe;AAAA,IACjB;AAAA,IACA,WAAW;AACT,qBAAe;AAAA,IACjB;AAAA,IACA,UAAU,IAAY;AACpB,UAAI,OAAO,WAAY,QAAO;AAC9B,aAAO;AAAA,IACT;AAAA,IACA,KAAK,IAAY;AACf,UAAI,OAAO,YAAa,QAAO;AAC/B,YAAM,UAAU,SAAS,SAAS;AAClC,YAAM,MAAM;AACZ,YAAM,UAAU,KAAK,aAAa;AAClC,YAAM,WAAW,YAAY,YAAY,YAAY;AACrD,aAAO,WAAW,qBAAqB,OAAO,IAAI,uBAAuB,OAAO;AAAA,IAClF;AAAA,IACA,gBAAgB,QAAuB;AACrC,YAAM,aAAa,KAAK,WAAW,SAAS;AAE5C,UAAI,CAAC,WAAW,UAAU,EAAG;AAI7B,YAAM,UAAU,QAAQ,YAAY,EAAE,WAAW,KAAK,GAAG,MAAM;AAC7D,uBAAe;AACf,cAAM,MAAM,OAAO,YAAY,cAAc,WAAW;AACxD,YAAI,KAAK;AACP,iBAAO,YAAY,iBAAiB,GAAG;AAAA,QACzC;AACA,eAAO,GAAG,KAAK,EAAE,MAAM,cAAc,CAAC;AAAA,MACxC,CAAC;AACD,aAAO,YAAY,KAAK,SAAS,MAAM;AACrC,gBAAQ,MAAM;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAUA,SAAS,mBAAmB,SAAiD;AAC3E,QAAM,QAAQ,QACX,IAAI,CAAC,UAAU;AACd,UAAM,cAAc;AAIpB,QAAI,MAAM,mBAAmB,QAAW;AACtC,YAAM,mBAAmB,MAAM,eAC5B,QAAQ,OAAO,GAAG,EAClB,QAAQ,sBAAsB,KAAK;AACtC,aAAO,OAAO,KAAK,UAAU,MAAM,IAAI,CAAC,MAAM,WAAW,6CAA6C,KAAK,UAAU,gBAAgB,CAAC;AAAA,IACxI;AACA,WAAO,OAAO,KAAK,UAAU,MAAM,IAAI,CAAC,KAAK,WAAW;AAAA,EAC1D,CAAC,EACA,KAAK,IAAI;AACZ,SAAO;AAAA;AAAA;AAAA,EAGP,KAAK;AAAA;AAAA;AAAA;AAIP;AAEA,SAAS,SAAS,WAA0C;AAC1D,MAAI;AACF,WAAO,0BAA0B,SAAS;AAAA,EAC5C,QAAQ;AAGN,WAAO,CAAC;AAAA,EACV;AACF;AAQA,SAAS,qBAAqB,SAAwC;AACpE,QAAM,aAAa,QAChB,IAAI,CAAC,UAAU,KAAK,KAAK,UAAU,MAAM,IAAI,CAAC,KAAK,KAAK,UAAU,MAAM,OAAO,CAAC,GAAG,EACnF,KAAK,IAAI;AAMZ,QAAM,gBAAgB,QAAQ,OAAO,CAAC,MAAM,EAAE,mBAAmB,MAAS;AAC1E,QAAM,gBAAgB,cACnB,IAAI,CAAC,OAAO,QAAQ;AAInB,UAAM,aAAa,MAAM,eAAgB,QAAQ,OAAO,GAAG;AAC3D,WAAO,kCAAkC,GAAG,WAAW,KAAK,UAAU,UAAU,CAAC;AAAA,EACnF,CAAC,EACA,KAAK,IAAI;AACZ,QAAM,iBAAiB,cACpB,IAAI,CAAC,OAAO,QAAQ,KAAK,KAAK,UAAU,MAAM,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAC1E,KAAK,IAAI;AAEZ,SAAO;AAAA;AAAA,EAEP,aAAa;AAAA;AAAA;AAAA,EAGb,UAAU;AAAA;AAAA;AAAA;AAAA,EAIV,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0FhB;AAOA,SAAS,uBAAuB,SAAwC;AACtE,SAAO;AAAA;AAAA,0BAEiB,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA;AAAA;AAG1D;","names":[]}
1
+ {"version":3,"sources":["../src/vite-plugin/actions-virtual-module.ts"],"sourcesContent":["/**\n * Vite plugin: resolves `@theo/actions` virtual module and emits a typed\n * Proxy facade that calls `theoFetch('/_actions/<name>', body)` against the\n * server-side action handlers.\n *\n * Per plan g3-server-actions-and-useaction v1.2 § Phase 3 / T3.1 + ADR D4.\n * Astro `vite-plugin-actions.ts` modular pattern. Single focused plugin\n * (not monolithic), virtual module + `configureServer` watcher.\n *\n * Module shape emitted on client environment: thin proxy that forwards\n * `actions.<name>(input)` to `POST /_actions/<name>` with JSON or\n * FormData body. On server environment: re-export of the manifest for\n * SSR / module-loader access (T1.3 sub-C consumer).\n *\n * EC-15 (DOCUMENT): HMR uses Vite default invalidation — coarse but\n * correct. Optimization (fine-grained invalidation of only consumers of\n * `@theo/actions`) deferred to G3.1 if dev-server p95 reload > 500ms.\n */\nimport { existsSync, mkdirSync, renameSync, watch as fsWatch, writeFileSync } from 'node:fs'\nimport { dirname, join, posix, resolve } from 'node:path'\n\nimport type { Plugin, ViteDevServer } from 'vite'\n\nimport { scanServerActionsEnriched, type ActionManifestEntry } from '../server/internal-api.js'\n\nconst VIRTUAL_ID = '@theo/actions'\nconst RESOLVED_ID = `\\0${VIRTUAL_ID}`\n\ninterface ActionsVirtualModuleOptions {\n /** Path to server directory (where `actions/` lives). */\n serverDir: string\n /**\n * Optional `.theokit/` output dir for emitting `actions.d.ts`. When provided,\n * the plugin writes an ambient `declare module '@theo/actions'` so TS in\n * consumer apps can resolve the virtual module import. Mirrors the G1\n * `app-typed-client` emit pattern.\n */\n distDir?: string\n}\n\nexport function actionsVirtualModule(opts: ActionsVirtualModuleOptions): Plugin {\n const { serverDir, distDir } = opts\n\n function emitActionsDts(): void {\n if (distDir === undefined) return\n const entries = safeScan(serverDir)\n const dtsPath = posix.join(resolve(distDir).replace(/\\\\/g, '/'), 'actions.d.ts')\n const content = generateActionsDts(entries)\n try {\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time derived path\n mkdirSync(dirname(dtsPath), { recursive: true })\n const tmp = `${dtsPath}.${process.pid}.tmp`\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time derived path\n writeFileSync(tmp, content)\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time derived path\n renameSync(tmp, dtsPath)\n } catch (err) {\n console.error('[theokit:actions-virtual-module] dts emit error:', err)\n }\n }\n\n return {\n name: 'theo:actions-virtual-module',\n enforce: 'pre',\n configResolved() {\n emitActionsDts()\n },\n buildEnd() {\n emitActionsDts()\n },\n resolveId(id: string) {\n if (id === VIRTUAL_ID) return RESOLVED_ID\n return undefined\n },\n load(id: string) {\n if (id !== RESOLVED_ID) return undefined\n const entries = safeScan(serverDir)\n const ctx = this as unknown as { environment?: { name?: string } } | undefined\n const envName = ctx?.environment?.name\n const isClient = envName === 'client' || envName === undefined\n return isClient ? generateClientFacade(entries) : generateServerManifest(entries)\n },\n configureServer(server: ViteDevServer) {\n const actionsDir = join(serverDir, 'actions')\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time derived path\n if (!existsSync(actionsDir)) return\n // EC-15: coarse invalidation — invalidate ALL modules on actions file change.\n // Optimization deferred per plan ADR D4 note.\n // eslint-disable-next-line security/detect-non-literal-fs-filename -- build-time path\n const watcher = fsWatch(actionsDir, { recursive: true }, () => {\n emitActionsDts()\n const mod = server.moduleGraph.getModuleById(RESOLVED_ID)\n if (mod) {\n server.moduleGraph.invalidateModule(mod)\n }\n server.ws.send({ type: 'full-reload' })\n })\n server.httpServer?.once('close', () => {\n watcher.close()\n })\n },\n }\n}\n\n/**\n * Emit `.theokit/actions.d.ts` — ambient declaration of `@theo/actions` so\n * consumer TS apps can `import { actions } from '@theo/actions'` and get\n * typed completions for each scanned action name. Each entry maps name to\n * a generic `(input: unknown) => Promise<{data, error}>` invoker — the full\n * input/output inference from defineAction would require either monomorphic\n * dts-bundle or virtual type emit (deferred to a future plan).\n */\nfunction generateActionsDts(entries: readonly ActionManifestEntry[]): string {\n const lines = entries\n .map((entry) => {\n const invokerType = `(input: unknown) => Promise<{ data: unknown; error: undefined } | { data: undefined; error: { code: string; message: string; fields?: Record<string, string[]>; type?: string } }>`\n // P#4 plugin-forms typed __zodSchema (per plan p4-plugin-forms v1.1 EC-3).\n // When schemaFilePath present, emit intersection type so consumers see both\n // the callable invoker AND the __zodSchema field with the exact schema type.\n if (entry.schemaFilePath !== undefined) {\n const schemaImportPath = entry.schemaFilePath\n .replace(/\\\\/g, '/')\n .replace(/\\.(ts|tsx|js|jsx)$/, '.js')\n return ` ${JSON.stringify(entry.name)}: (${invokerType}) & { readonly __zodSchema: typeof import(${JSON.stringify(schemaImportPath)}).schema }`\n }\n return ` ${JSON.stringify(entry.name)}: ${invokerType}`\n })\n .join('\\n')\n return `// AUTO-GENERATED by @theo/actions virtual module. DO NOT EDIT MANUALLY.\ndeclare module '@theo/actions' {\n export const actions: {\n${lines}\n }\n}\n`\n}\n\nfunction safeScan(serverDir: string): ActionManifestEntry[] {\n try {\n return scanServerActionsEnriched(serverDir)\n } catch {\n // ActionScanError surfaces at build time; for HMR keep an empty manifest\n // so the dev server doesn't crash mid-edit.\n return []\n }\n}\n\n/**\n * Client-side module: emits a Proxy facade. For each action `name` in\n * manifest, `actions.<name>(input)` POSTs to `/_actions/<name>` with JSON\n * body (or FormData when input is a FormData instance) and parses the\n * `application/json+devalue` response via the runtime helper.\n */\nfunction generateClientFacade(entries: ActionManifestEntry[]): string {\n const entryLines = entries\n .map((entry) => ` ${JSON.stringify(entry.name)}: ${JSON.stringify(entry.urlPath)},`)\n .join('\\n')\n\n // P#4 plugin-forms shared-schema convention (per plan p4-plugin-forms v1.1 T1.1).\n // Emit ESM imports + ACTION_SCHEMA_MAP so the Proxy can attach __zodSchema.\n // Vite resolves absolute filesystem paths via its module graph; schema files\n // are isomorphic (zod-only, no server APIs) so they bundle into the client.\n const schemaEntries = entries.filter((e) => e.schemaFilePath !== undefined)\n const schemaImports = schemaEntries\n .map((entry, idx) => {\n // schemaEntries was filtered by `e.schemaFilePath !== undefined` above,\n // so the assertion is provably safe in this scope.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const importPath = entry.schemaFilePath!.replace(/\\\\/g, '/')\n return `import { schema as __theoSchema${idx} } from ${JSON.stringify(importPath)}`\n })\n .join('\\n')\n const schemaMapLines = schemaEntries\n .map((entry, idx) => ` ${JSON.stringify(entry.name)}: __theoSchema${idx},`)\n .join('\\n')\n\n return `// AUTO-GENERATED by @theo/actions virtual module\n/* eslint-disable */\n${schemaImports}\n\nconst ACTION_URL_MAP = {\n${entryLines}\n}\n\nconst ACTION_SCHEMA_MAP = {\n${schemaMapLines}\n}\n\n// Devtools telemetry — fires in the SAME realm as the Overlay React tree\n// (browser), so the Actions tab updates immediately on each call.\n// The Overlay component installs \\`window.__theoDevtoolsDispatcher\\` on\n// mount (dev only; prod tree-shakes the Overlay entirely). Reading the\n// global avoids a cross-package dynamic import that Vite's virtual-module\n// resolver cannot trace. Same pattern as React DevTools'\n// \\`__REACT_DEVTOOLS_GLOBAL_HOOK__\\`.\nfunction emitTelemetry(name, startedAt, input, outcome) {\n if (typeof window === 'undefined') return\n const dispatcher = window.__theoDevtoolsDispatcher\n if (!dispatcher || typeof dispatcher.onActionCall !== 'function') return\n try {\n dispatcher.onActionCall({\n id: 'act-' + String(Date.now()) + '-' + Math.random().toString(36).slice(2, 8),\n timestamp: startedAt,\n name,\n input,\n output: outcome.status === 'success' ? outcome.data : undefined,\n error: outcome.status === 'error' ? outcome.error : undefined,\n durationMs: Date.now() - startedAt,\n status: outcome.status,\n })\n } catch (_) {\n // dispatcher threw — devtools UI bug; never bubble to consumer code\n }\n}\n\nasync function callAction(name, url, input) {\n const startedAt = Date.now()\n const isForm = typeof FormData !== 'undefined' && input instanceof FormData\n const headers = { 'x-theo-action': '1' }\n const body = isForm ? input : JSON.stringify(input ?? {})\n if (!isForm) headers['content-type'] = 'application/json'\n let response\n try {\n response = await fetch(url, { method: 'POST', headers, body, credentials: 'same-origin' })\n } catch (e) {\n const err = { code: 'NETWORK_ERROR', message: e && e.message ? e.message : 'fetch failed' }\n emitTelemetry(name, startedAt, input, { status: 'error', error: err })\n return { data: undefined, error: err }\n }\n const contentType = response.headers.get('content-type') ?? ''\n let result\n if (response.status === 204) {\n result = { data: undefined, error: undefined }\n } else if (contentType.startsWith('application/json+devalue')) {\n const text = await response.text()\n const { parse } = await import('devalue')\n result = { data: parse(text, { URL: (h) => new URL(h) }), error: undefined }\n } else if (contentType.startsWith('application/json')) {\n const json = await response.json()\n result = response.ok ? { data: json, error: undefined } : { data: undefined, error: json }\n } else {\n result = { data: undefined, error: { code: 'INTERNAL_SERVER_ERROR', message: await response.text() } }\n }\n emitTelemetry(name, startedAt, input, result.error\n ? { status: 'error', error: result.error }\n : { status: 'success', data: result.data })\n return result\n}\n\n// P#4 plugin-forms cache: callable proxies must be stable per action so that\n// repeated property access does not allocate + reset the __zodSchema attach.\nconst ACTION_CALLABLE_CACHE = {}\n\nexport const actions = new Proxy({}, {\n get(target, prop) {\n if (typeof prop !== 'string') return undefined\n const url = ACTION_URL_MAP[prop]\n if (!url) return undefined\n if (!ACTION_CALLABLE_CACHE[prop]) {\n const callable = (input) => callAction(prop, url, input)\n const schema = ACTION_SCHEMA_MAP[prop]\n if (schema !== undefined) {\n Object.defineProperty(callable, '__zodSchema', {\n value: schema,\n enumerable: false,\n writable: false,\n configurable: false,\n })\n }\n ACTION_CALLABLE_CACHE[prop] = callable\n }\n return ACTION_CALLABLE_CACHE[prop]\n },\n})\n`\n}\n\n/**\n * Server-side module: re-exports the manifest entries for SSR / module-\n * loader consumption (T1.3 sub-C in action-execute.ts will route requests\n * via this manifest).\n */\nfunction generateServerManifest(entries: ActionManifestEntry[]): string {\n return `// AUTO-GENERATED by @theo/actions virtual module (server env)\n/* eslint-disable */\nexport const manifest = ${JSON.stringify(entries, null, 2)}\nexport const actions = manifest\n`\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import "../chunk-DGUM43GV.js";
1
+ import "../chunk-XTHN6JBX.js";
2
2
 
3
3
  // src/adapters/web-shim.ts
4
4
  function resolveRemoteAddress(headers, policy) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/web-shim.ts"],"sourcesContent":["/**\n * Web-to-Node bridge used by adapters whose runtimes provide a `Request`\n * (Web Standard) but where TheoKit's `executeRoute` expects a Node-style\n * IncomingMessage/ServerResponse pair.\n *\n * Used by adapters that target Node-compatible runtimes (Bun, Netlify\n * Functions, AWS Lambda Node). Cloudflare uses an inline version of the same\n * pattern — long-term it should consolidate here too.\n *\n * NOT used by Deno Deploy: Deno's stdlib does not have `Buffer`/`node:http`\n * by default and forcing the shim there bloats the bundle. Deno wiring is\n * tracked separately and will likely require executeRoute to accept Web\n * Standard Request directly.\n */\n\nexport interface ShimRequest {\n method: string\n url: string\n headers: Record<string, string>\n socket: { remoteAddress: string }\n on: (event: 'data' | 'end' | 'error', cb: (chunk?: unknown) => void) => unknown\n}\n\nexport interface ShimResponse {\n statusCode: number\n headersSent: boolean\n writableEnded: boolean\n writeHead: (status: number, headers?: Record<string, string>) => void\n setHeader: (key: string, value: string) => void\n getHeader: (key: string) => string | undefined\n write: (chunk: Uint8Array | string) => boolean\n end: (body?: Uint8Array | string) => void\n}\n\nexport interface ShimContext {\n req: ShimRequest\n res: ShimResponse\n /** Resolves to a Web Standard Response once `res.end()` is called. */\n toResponse: () => Promise<Response>\n}\n\nexport interface CreateWebShimOptions {\n /**\n * CR-018 fix: how to resolve the client IP from forwarded headers.\n *\n * - `'platform'` (default for `cf-connecting-ip`): trust runtime-injected\n * headers only (`cf-connecting-ip` on Cloudflare, `x-real-ip` on\n * Netlify/Vercel when the platform writes it). Ignores\n * `x-forwarded-for` because clients can spoof it.\n * - `'trusted-proxy'`: read the **rightmost** entry of `x-forwarded-for`.\n * Only safe when the request literally went through a trusted proxy\n * that strips client-set headers and appends the real client IP last.\n * - `'none'`: skip all forwarded-header lookups and report\n * `'0.0.0.0'`. Force this when the adapter has no reliable way to\n * identify the client (rate-limiters then must use a different key).\n *\n * Default: `'platform'`.\n */\n trustedProxy?: 'platform' | 'trusted-proxy' | 'none'\n}\n\nfunction resolveRemoteAddress(\n headers: Record<string, string>,\n policy: NonNullable<CreateWebShimOptions['trustedProxy']>,\n): string {\n if (policy === 'none') return '0.0.0.0'\n\n // Runtime-injected headers — these come from the platform itself and\n // cannot be set by the client.\n const cf = headers['cf-connecting-ip']\n if (cf) return cf\n\n if (policy === 'trusted-proxy') {\n // Take the RIGHTMOST entry of x-forwarded-for. The rightmost is the\n // hop nearest the application, which a trusted proxy appended; entries\n // to the left may have been forged by the client.\n const xff = headers['x-forwarded-for']\n if (xff) {\n const parts = xff\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean)\n if (parts.length > 0) return parts[parts.length - 1]\n }\n // x-real-ip is typically platform-set (NGINX/Netlify/Vercel).\n const xri = headers['x-real-ip']\n if (xri) return xri\n }\n\n return '0.0.0.0'\n}\n\n/**\n * Build Node-style req/res objects around a Web Standard Request.\n * `toResponse()` returns a Promise that resolves when `res.end()` has been\n * invoked, materializing a Web Standard Response with the accumulated body\n * + headers + status.\n */\nexport function createWebShim(request: Request, options?: CreateWebShimOptions): ShimContext {\n const url = new URL(request.url)\n const headers: Record<string, string> = {}\n request.headers.forEach((value, key) => {\n headers[key] = value\n })\n\n const pumpState = { consumed: false }\n\n // Consume the request body once, then dispatch data/end events to whatever\n // listener attaches later (executeRoute's body parser).\n const dataListeners: ((chunk: Uint8Array) => void)[] = []\n const endListeners: (() => void)[] = []\n const errorListeners: ((err: unknown) => void)[] = []\n\n async function pumpBody(): Promise<void> {\n if (pumpState.consumed) return\n pumpState.consumed = true\n if (!request.body) {\n for (const cb of endListeners) cb()\n return\n }\n try {\n const reader = request.body.getReader()\n let done = false\n while (!done) {\n const chunk = await reader.read()\n done = chunk.done\n if (!done && chunk.value) {\n for (const cb of dataListeners) cb(chunk.value)\n }\n }\n for (const cb of endListeners) cb()\n } catch (err) {\n for (const cb of errorListeners) cb(err)\n }\n }\n\n const trustedProxy = options?.trustedProxy ?? 'platform'\n\n const req: ShimRequest = {\n method: request.method,\n url: url.pathname + url.search,\n headers,\n socket: {\n remoteAddress: resolveRemoteAddress(headers, trustedProxy),\n },\n on(event, cb) {\n if (event === 'data') dataListeners.push(cb)\n if (event === 'end') endListeners.push(cb)\n if (event === 'error') errorListeners.push(cb)\n // Lazily start pumping when end is registered (executeRoute always\n // listens for end before doing anything with the body).\n if (event === 'end') void pumpBody()\n return req\n },\n }\n\n const responseChunks: Uint8Array[] = []\n const responseHeaders: Record<string, string> = {}\n let responseStatus = 200\n let resolveResponse!: (r: Response) => void\n const responsePromise = new Promise<Response>((resolve) => {\n resolveResponse = resolve\n })\n\n function chunkToBytes(chunk: Uint8Array | string): Uint8Array {\n if (typeof chunk === 'string') return new TextEncoder().encode(chunk)\n return chunk\n }\n\n const res: ShimResponse = {\n statusCode: 200,\n headersSent: false,\n writableEnded: false,\n writeHead(status, headers) {\n responseStatus = status\n this.statusCode = status\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n responseHeaders[k.toLowerCase()] = v\n }\n }\n this.headersSent = true\n },\n setHeader(key, value) {\n responseHeaders[key.toLowerCase()] = value\n },\n getHeader(key) {\n return responseHeaders[key.toLowerCase()]\n },\n write(chunk) {\n responseChunks.push(chunkToBytes(chunk))\n return true\n },\n end(body) {\n if (body !== undefined) responseChunks.push(chunkToBytes(body))\n this.writableEnded = true\n const totalLength = responseChunks.reduce((n, c) => n + c.length, 0)\n const concat = new Uint8Array(totalLength)\n let offset = 0\n for (const c of responseChunks) {\n concat.set(c, offset)\n offset += c.length\n }\n resolveResponse(\n new Response(concat, {\n status: responseStatus,\n headers: responseHeaders,\n }),\n )\n },\n }\n\n return {\n req,\n res,\n toResponse: () => responsePromise,\n }\n}\n"],"mappings":"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","names":["headers"]}
1
+ {"version":3,"sources":["../../src/adapters/web-shim.ts"],"mappings":"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","names":["headers"]}
@@ -1,4 +1,4 @@
1
- import "../chunk-DGUM43GV.js";
1
+ import "../chunk-XTHN6JBX.js";
2
2
 
3
3
  // src/adapters/ws-shim.ts
4
4
  function createNodeWsBridge(handler) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/ws-shim.ts"],"sourcesContent":["/**\n * T3.1 — WebSocket cross-runtime bridges.\n *\n * Exports 4 bridges (Node `ws` package, Bun.serve, Deno.upgradeWebSocket,\n * Cloudflare WebSocketPair) that adapt each runtime's native WebSocket API\n * to a common `WebSocketLike` interface that user handlers (`defineWebSocket`)\n * can consume uniformly.\n */\n\nexport interface WebSocketLike {\n send(data: string | Uint8Array | ArrayBuffer): void\n close(code?: number, reason?: string): void\n on(event: 'message' | 'close' | 'error', cb: (data?: unknown) => void): void\n}\n\nexport interface WsHandler {\n onOpen?: (ws: WebSocketLike) => void\n onMessage?: (ws: WebSocketLike, data: unknown) => void\n onClose?: (ws: WebSocketLike, code?: number, reason?: string) => void\n onError?: (ws: WebSocketLike, err: unknown) => void\n}\n\n// ============================================================\n// Node bridge — wraps `ws` package WebSocket\n// ============================================================\n\ninterface NodeWsLike {\n on(event: string, cb: (arg?: unknown) => void): unknown\n send(data: unknown): void\n close(code?: number, reason?: string): void\n}\n\nexport function createNodeWsBridge(handler: WsHandler): {\n attach(nativeWs: NodeWsLike): WebSocketLike\n} {\n return {\n attach(nativeWs: NodeWsLike): WebSocketLike {\n const wsLike: WebSocketLike = {\n send: (data) => {\n nativeWs.send(data)\n },\n close: (code, reason) => {\n nativeWs.close(code, reason)\n },\n on: (event, cb) => {\n nativeWs.on(event, cb)\n },\n }\n nativeWs.on('open', () => handler.onOpen?.(wsLike))\n nativeWs.on('message', (data) => handler.onMessage?.(wsLike, data))\n nativeWs.on('close', (codeMaybe) => {\n const code = typeof codeMaybe === 'number' ? codeMaybe : undefined\n handler.onClose?.(wsLike, code)\n })\n nativeWs.on('error', (err) => handler.onError?.(wsLike, err))\n return wsLike\n },\n }\n}\n\n// ============================================================\n// Bun bridge — returns config for Bun.serve({ websocket })\n// ============================================================\n\ninterface BunWsContext {\n send(data: unknown): void\n close(code?: number, reason?: string): void\n}\n\nexport interface BunWebSocketConfig {\n open: (ws: BunWsContext) => void\n message: (ws: BunWsContext, message: unknown) => void\n close: (ws: BunWsContext, code?: number, reason?: string) => void\n}\n\nfunction bunCtxToWsLike(bunWs: BunWsContext): WebSocketLike {\n return {\n send: (data) => {\n bunWs.send(data)\n },\n close: (code, reason) => {\n bunWs.close(code, reason)\n },\n on: () => {\n // Bun pushes events via the config handlers — no per-instance on()\n },\n }\n}\n\nexport function createBunWsBridge(handler: WsHandler): BunWebSocketConfig {\n return {\n open(bunWs) {\n handler.onOpen?.(bunCtxToWsLike(bunWs))\n },\n message(bunWs, msg) {\n handler.onMessage?.(bunCtxToWsLike(bunWs), msg)\n },\n close(bunWs, code, reason) {\n handler.onClose?.(bunCtxToWsLike(bunWs), code, reason)\n },\n }\n}\n\n// ============================================================\n// Deno bridge — uses Deno.upgradeWebSocket(request)\n// ============================================================\n\ninterface DenoLike {\n upgradeWebSocket(req: Request): {\n response: Response\n socket: {\n send(data: unknown): void\n close(code?: number, reason?: string): void\n addEventListener(event: string, cb: (e: unknown) => void): void\n }\n }\n}\n\nexport function createDenoWsBridge(\n handler: WsHandler,\n denoNs: DenoLike,\n): { handle(request: Request): Response } {\n return {\n handle(request: Request): Response {\n const { response, socket } = denoNs.upgradeWebSocket(request)\n const wsLike: WebSocketLike = {\n send: (data) => {\n socket.send(data)\n },\n close: (code, reason) => {\n socket.close(code, reason)\n },\n on: () => {\n // Deno uses addEventListener — adapter dispatches below\n },\n }\n socket.addEventListener('open', () => handler.onOpen?.(wsLike))\n socket.addEventListener('message', (e) => {\n const data = (e as { data?: unknown }).data\n handler.onMessage?.(wsLike, data)\n })\n socket.addEventListener('close', (e) => {\n const ev = e as { code?: number; reason?: string }\n handler.onClose?.(wsLike, ev.code, ev.reason)\n })\n socket.addEventListener('error', (err) => handler.onError?.(wsLike, err))\n return response\n },\n }\n}\n\n// ============================================================\n// Cloudflare bridge — uses globalThis.WebSocketPair\n// ============================================================\n\ninterface CfServerWs {\n accept(): void\n addEventListener(event: string, cb: (e: unknown) => void): void\n send(data: unknown): void\n close(code?: number, reason?: string): void\n}\n\nexport function createCloudflareWsBridge(handler: WsHandler): {\n handle(request: Request): Response\n} {\n return {\n handle(_request: Request): Response {\n const g = globalThis as {\n WebSocketPair?: new () => { 0: unknown; 1: CfServerWs }\n }\n if (!g.WebSocketPair) {\n throw new Error('WebSocketPair is not available — Cloudflare Workers runtime expected.')\n }\n const pair = new g.WebSocketPair()\n const client = pair[0]\n const server = pair[1]\n server.accept()\n const wsLike: WebSocketLike = {\n send: (data) => {\n server.send(data)\n },\n close: (code, reason) => {\n server.close(code, reason)\n },\n // Cloudflare's WebSocketPair exposes events via addEventListener;\n // the WebSocketLike `on` contract is for Node-style ws. We leave\n // it as a no-op so user handlers that expect Node-style `on(...)`\n // do not crash — but the events flow through addEventListener\n // below, not through this method.\n on: (): void => {\n /* intentional no-op on Cloudflare; see comment above */\n },\n }\n server.addEventListener('open', () => handler.onOpen?.(wsLike))\n server.addEventListener('message', (e) => {\n const data = (e as { data?: unknown }).data\n handler.onMessage?.(wsLike, data)\n })\n server.addEventListener('close', (e) => {\n const ev = e as { code?: number; reason?: string }\n handler.onClose?.(wsLike, ev.code, ev.reason)\n })\n server.addEventListener('error', (err) => handler.onError?.(wsLike, err))\n // CF requires returning Response with status 101 and webSocket pair.\n // Node's Response throws on 101; fall back to a plain object that\n // satisfies the CF runtime's protocol but matches our test shape.\n try {\n return new Response(null, {\n status: 101,\n webSocket: client,\n } as ResponseInit & { webSocket: unknown })\n } catch {\n return { status: 101, webSocket: client } as unknown as Response\n }\n },\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/adapters/ws-shim.ts"],"mappings":";;;AAgCO,SAAS,mBAAmB,SAEjC;AACA,SAAO;AAAA,IACL,OAAO,UAAqC;AAC1C,YAAM,SAAwB;AAAA,QAC5B,MAAM,CAAC,SAAS;AACd,mBAAS,KAAK,IAAI;AAAA,QACpB;AAAA,QACA,OAAO,CAAC,MAAM,WAAW;AACvB,mBAAS,MAAM,MAAM,MAAM;AAAA,QAC7B;AAAA,QACA,IAAI,CAAC,OAAO,OAAO;AACjB,mBAAS,GAAG,OAAO,EAAE;AAAA,QACvB;AAAA,MACF;AACA,eAAS,GAAG,QAAQ,MAAM,QAAQ,SAAS,MAAM,CAAC;AAClD,eAAS,GAAG,WAAW,CAAC,SAAS,QAAQ,YAAY,QAAQ,IAAI,CAAC;AAClE,eAAS,GAAG,SAAS,CAAC,cAAc;AAClC,cAAM,OAAO,OAAO,cAAc,WAAW,YAAY;AACzD,gBAAQ,UAAU,QAAQ,IAAI;AAAA,MAChC,CAAC;AACD,eAAS,GAAG,SAAS,CAAC,QAAQ,QAAQ,UAAU,QAAQ,GAAG,CAAC;AAC5D,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAiBA,SAAS,eAAe,OAAoC;AAC1D,SAAO;AAAA,IACL,MAAM,CAAC,SAAS;AACd,YAAM,KAAK,IAAI;AAAA,IACjB;AAAA,IACA,OAAO,CAAC,MAAM,WAAW;AACvB,YAAM,MAAM,MAAM,MAAM;AAAA,IAC1B;AAAA,IACA,IAAI,MAAM;AAAA,IAEV;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,SAAwC;AACxE,SAAO;AAAA,IACL,KAAK,OAAO;AACV,cAAQ,SAAS,eAAe,KAAK,CAAC;AAAA,IACxC;AAAA,IACA,QAAQ,OAAO,KAAK;AAClB,cAAQ,YAAY,eAAe,KAAK,GAAG,GAAG;AAAA,IAChD;AAAA,IACA,MAAM,OAAO,MAAM,QAAQ;AACzB,cAAQ,UAAU,eAAe,KAAK,GAAG,MAAM,MAAM;AAAA,IACvD;AAAA,EACF;AACF;AAiBO,SAAS,mBACd,SACA,QACwC;AACxC,SAAO;AAAA,IACL,OAAO,SAA4B;AACjC,YAAM,EAAE,UAAU,OAAO,IAAI,OAAO,iBAAiB,OAAO;AAC5D,YAAM,SAAwB;AAAA,QAC5B,MAAM,CAAC,SAAS;AACd,iBAAO,KAAK,IAAI;AAAA,QAClB;AAAA,QACA,OAAO,CAAC,MAAM,WAAW;AACvB,iBAAO,MAAM,MAAM,MAAM;AAAA,QAC3B;AAAA,QACA,IAAI,MAAM;AAAA,QAEV;AAAA,MACF;AACA,aAAO,iBAAiB,QAAQ,MAAM,QAAQ,SAAS,MAAM,CAAC;AAC9D,aAAO,iBAAiB,WAAW,CAAC,MAAM;AACxC,cAAM,OAAQ,EAAyB;AACvC,gBAAQ,YAAY,QAAQ,IAAI;AAAA,MAClC,CAAC;AACD,aAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,cAAM,KAAK;AACX,gBAAQ,UAAU,QAAQ,GAAG,MAAM,GAAG,MAAM;AAAA,MAC9C,CAAC;AACD,aAAO,iBAAiB,SAAS,CAAC,QAAQ,QAAQ,UAAU,QAAQ,GAAG,CAAC;AACxE,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAaO,SAAS,yBAAyB,SAEvC;AACA,SAAO;AAAA,IACL,OAAO,UAA6B;AAClC,YAAM,IAAI;AAGV,UAAI,CAAC,EAAE,eAAe;AACpB,cAAM,IAAI,MAAM,4EAAuE;AAAA,MACzF;AACA,YAAM,OAAO,IAAI,EAAE,cAAc;AACjC,YAAM,SAAS,KAAK,CAAC;AACrB,YAAM,SAAS,KAAK,CAAC;AACrB,aAAO,OAAO;AACd,YAAM,SAAwB;AAAA,QAC5B,MAAM,CAAC,SAAS;AACd,iBAAO,KAAK,IAAI;AAAA,QAClB;AAAA,QACA,OAAO,CAAC,MAAM,WAAW;AACvB,iBAAO,MAAM,MAAM,MAAM;AAAA,QAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,IAAI,MAAY;AAAA,QAEhB;AAAA,MACF;AACA,aAAO,iBAAiB,QAAQ,MAAM,QAAQ,SAAS,MAAM,CAAC;AAC9D,aAAO,iBAAiB,WAAW,CAAC,MAAM;AACxC,cAAM,OAAQ,EAAyB;AACvC,gBAAQ,YAAY,QAAQ,IAAI;AAAA,MAClC,CAAC;AACD,aAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,cAAM,KAAK;AACX,gBAAQ,UAAU,QAAQ,GAAG,MAAM,GAAG,MAAM;AAAA,MAC9C,CAAC;AACD,aAAO,iBAAiB,SAAS,CAAC,QAAQ,QAAQ,UAAU,QAAQ,GAAG,CAAC;AAIxE,UAAI;AACF,eAAO,IAAI,SAAS,MAAM;AAAA,UACxB,QAAQ;AAAA,UACR,WAAW;AAAA,QACb,CAA0C;AAAA,MAC5C,QAAQ;AACN,eAAO,EAAE,QAAQ,KAAK,WAAW,OAAO;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -3,7 +3,7 @@ import "tsx/esm";
3
3
  import {
4
4
  agentCommand,
5
5
  createAgentSsrLoader
6
- } from "./chunk-2WH6SD3C.js";
6
+ } from "./chunk-UYMCKHML.js";
7
7
  import "./chunk-GDN3PXFH.js";
8
8
  import "./chunk-TDNNBLGW.js";
9
9
  import "./chunk-LNVMHQ2Z.js";
@@ -12,4 +12,4 @@ export {
12
12
  agentCommand,
13
13
  createAgentSsrLoader
14
14
  };
15
- //# sourceMappingURL=agent-OXRRKB55.js.map
15
+ //# sourceMappingURL=agent-WFULT3OB.js.map
@@ -1,4 +1,4 @@
1
- import "./chunk-DGUM43GV.js";
1
+ import "./chunk-XTHN6JBX.js";
2
2
 
3
3
  // src/vite-plugin/agents-typed-client.ts
4
4
  import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "fs";
@@ -173,4 +173,4 @@ export {
173
173
  generateAgentsDts,
174
174
  generateAgentsRuntimeModule
175
175
  };
176
- //# sourceMappingURL=agents-typed-client-ZP7BKJB3.js.map
176
+ //# sourceMappingURL=agents-typed-client-TNHCUU7Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vite-plugin/agents-typed-client.ts"],"mappings":"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","names":[]}
@@ -1,28 +1,28 @@
1
1
  import {
2
2
  scanControllerModules
3
- } from "./chunk-DJFMAWH5.js";
4
- import "./chunk-JIL74SFK.js";
5
- import "./chunk-6FK7FKY6.js";
6
- import "./chunk-5QW7IQQU.js";
7
- import "./chunk-VPISAMXU.js";
8
- import "./chunk-IAJ2JVEH.js";
9
- import "./chunk-VMEWD57H.js";
10
- import "./chunk-JQSKBMXP.js";
3
+ } from "./chunk-EIRQM55C.js";
4
+ import "./chunk-37ZO643S.js";
5
+ import "./chunk-47FFT43U.js";
6
+ import "./chunk-NTDN54XO.js";
7
+ import "./chunk-KD5G3YXI.js";
8
+ import "./chunk-VSLTKX5L.js";
9
+ import "./chunk-KPKLIUUL.js";
10
+ import "./chunk-7LVM22VG.js";
11
11
  import {
12
12
  generateManifest
13
- } from "./chunk-4HAU7AJM.js";
13
+ } from "./chunk-L4Y6RJ4E.js";
14
14
  import {
15
15
  HTTP_METHODS
16
- } from "./chunk-WSJKACWB.js";
17
- import "./chunk-ZEGYW52B.js";
18
- import "./chunk-JBCHWRKF.js";
19
- import "./chunk-TSLSIRBR.js";
20
- import "./chunk-UD3LFGDL.js";
21
- import "./chunk-X32XEJXR.js";
22
- import "./chunk-UVXB2ER7.js";
23
- import "./chunk-C3ZZ56YZ.js";
24
- import "./chunk-65EFIUDD.js";
25
- import "./chunk-DGUM43GV.js";
16
+ } from "./chunk-C34PMLSN.js";
17
+ import "./chunk-FB2HBNIC.js";
18
+ import "./chunk-MTEWLGVY.js";
19
+ import "./chunk-OLGPYOLO.js";
20
+ import "./chunk-AVQU5CQF.js";
21
+ import "./chunk-ACKBVBUI.js";
22
+ import "./chunk-7SABX4DJ.js";
23
+ import "./chunk-JA2ZAT5Q.js";
24
+ import "./chunk-U267AOWS.js";
25
+ import "./chunk-XTHN6JBX.js";
26
26
 
27
27
  // src/vite-plugin/app-typed-client.ts
28
28
  import { mkdirSync, readFileSync, renameSync, writeFileSync, existsSync } from "fs";
@@ -30,19 +30,34 @@ import { dirname, isAbsolute, posix, relative, resolve } from "path";
30
30
 
31
31
  // src/vite-plugin/controller-client-emit.ts
32
32
  import { loadControllerWithSwc, walkControllerMetadata } from "@theokit/http";
33
+ function exportedNameOf(schema, moduleExports) {
34
+ if (schema === void 0 || schema === null) return void 0;
35
+ for (const [name, value] of Object.entries(moduleExports)) {
36
+ if (value === schema) return name;
37
+ }
38
+ return void 0;
39
+ }
33
40
  async function collectControllerRouteData(opts) {
34
41
  const loader = opts.loadModule ?? loadControllerWithSwc;
35
42
  const modules = await scanControllerModules(opts.controllersDir, loader);
36
43
  const out = [];
37
- for (const { filePath, cls } of modules) {
44
+ for (const { filePath, cls, exports } of modules) {
38
45
  const className = cls.name;
39
46
  for (const walk of walkControllerMetadata(cls)) {
47
+ const bodySchemaExport = exportedNameOf(walk.bodySchema, exports);
48
+ const queryEntry = walk.paramEntries.find(
49
+ (e) => e.source === "query" && e.schema !== void 0
50
+ );
51
+ const querySchemaExport = exportedNameOf(queryEntry?.schema, exports);
40
52
  out.push({
41
53
  filePath,
42
54
  className,
43
55
  fullPath: walk.fullPath,
44
56
  verb: walk.verb,
45
- methodName: String(walk.propertyKey)
57
+ methodName: String(walk.propertyKey),
58
+ ...bodySchemaExport !== void 0 ? { bodySchemaExport } : {},
59
+ ...querySchemaExport !== void 0 ? { querySchemaExport } : {},
60
+ ...walk.bodySchema !== void 0 && bodySchemaExport === void 0 || queryEntry?.schema !== void 0 && querySchemaExport === void 0 ? { schemaNotExported: true } : {}
46
61
  });
47
62
  }
48
63
  }
@@ -152,7 +167,28 @@ function buildOneController(cr, classAlias, ctx) {
152
167
  );
153
168
  return;
154
169
  }
155
- node.controllerMethods.set(method, { classAlias, methodName: cr.methodName });
170
+ if (cr.schemaNotExported === true) {
171
+ const note = `NOTE (#124): ${cr.className}.${cr.methodName} validates with a schema that is not exported, so its request type falls back to \`unknown\`. To get the type, export the schema (\`export const zX = z.object({...})\`).`;
172
+ if (!ctx.warnings.includes(note)) ctx.warnings.push(note);
173
+ }
174
+ node.controllerMethods.set(method, {
175
+ classAlias,
176
+ methodName: cr.methodName,
177
+ // theokit#124 — an EXPORTED schema is referenceable from the emitted `.d.ts`; an inline one is
178
+ // not, and falls through to the documented `unknown`.
179
+ ...cr.bodySchemaExport !== void 0 ? {
180
+ bodySchema: {
181
+ importPath: importPathFor(ctx.dtsOutPath, cr.filePath),
182
+ exportName: cr.bodySchemaExport
183
+ }
184
+ } : {},
185
+ ...cr.querySchemaExport !== void 0 ? {
186
+ querySchema: {
187
+ importPath: importPathFor(ctx.dtsOutPath, cr.filePath),
188
+ exportName: cr.querySchemaExport
189
+ }
190
+ } : {}
191
+ });
156
192
  }
157
193
  function resolveCollisions(node, pathPrefix, warnings) {
158
194
  const methodLowerNames = /* @__PURE__ */ new Set();
@@ -198,8 +234,10 @@ function renderTreeNode(node, indent, _isRoot) {
198
234
  const paramsList = node.paramNamesAccumulated.map((p) => `${p}: string`).join("; ");
199
235
  const paramsField = node.paramNamesAccumulated.length > 0 ? `{ params: { ${paramsList} } } & ` : "";
200
236
  const optionalMark = node.paramNamesAccumulated.length === 0 ? "?" : "";
237
+ const bodyType = leaf.bodySchema === void 0 ? "body?: unknown" : `body: import('zod').infer<typeof import('${leaf.bodySchema.importPath}').${leaf.bodySchema.exportName}>`;
238
+ const queryType = leaf.querySchema === void 0 ? "query?: Record<string, string>" : `query: import('zod').infer<typeof import('${leaf.querySchema.importPath}').${leaf.querySchema.exportName}>`;
201
239
  lines.push(
202
- `${indent} ${lower}: (opts${optionalMark}: ${paramsField}{ body?: unknown; query?: Record<string, string> }) => Promise<Awaited<ReturnType<InstanceType<typeof ${leaf.classAlias}>['${leaf.methodName}']>>>`
240
+ `${indent} ${lower}: (opts${optionalMark}: ${paramsField}{ ${bodyType}; ${queryType} }) => Promise<Awaited<ReturnType<InstanceType<typeof ${leaf.classAlias}>['${leaf.methodName}']>>>`
203
241
  );
204
242
  }
205
243
  for (const [name, child] of node.children) {
@@ -385,4 +423,4 @@ export {
385
423
  generateClientDts,
386
424
  shouldReemitForFile
387
425
  };
388
- //# sourceMappingURL=app-typed-client-USLAMN7X.js.map
426
+ //# sourceMappingURL=app-typed-client-N5WUE2CP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vite-plugin/app-typed-client.ts","../src/vite-plugin/controller-client-emit.ts"],"mappings":"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","names":[]}
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import "tsx/esm";
3
+ import "./chunk-HRCNHWLP.js";
4
+ import "./chunk-6VDYQ4I6.js";
5
+ import "./chunk-TDNNBLGW.js";
3
6
  import {
4
7
  scanControllerModules
5
- } from "./chunk-N2D5AVRR.js";
6
- import "./chunk-IE6C4KZX.js";
7
- import "./chunk-TDNNBLGW.js";
8
+ } from "./chunk-FXZZS7YW.js";
8
9
  import {
9
10
  generateManifest
10
11
  } from "./chunk-OXCALO3W.js";
@@ -21,19 +22,34 @@ import { dirname, isAbsolute, posix, relative, resolve } from "path";
21
22
 
22
23
  // src/vite-plugin/controller-client-emit.ts
23
24
  import { loadControllerWithSwc, walkControllerMetadata } from "@theokit/http";
25
+ function exportedNameOf(schema, moduleExports) {
26
+ if (schema === void 0 || schema === null) return void 0;
27
+ for (const [name, value] of Object.entries(moduleExports)) {
28
+ if (value === schema) return name;
29
+ }
30
+ return void 0;
31
+ }
24
32
  async function collectControllerRouteData(opts) {
25
33
  const loader = opts.loadModule ?? loadControllerWithSwc;
26
34
  const modules = await scanControllerModules(opts.controllersDir, loader);
27
35
  const out = [];
28
- for (const { filePath, cls } of modules) {
36
+ for (const { filePath, cls, exports } of modules) {
29
37
  const className = cls.name;
30
38
  for (const walk of walkControllerMetadata(cls)) {
39
+ const bodySchemaExport = exportedNameOf(walk.bodySchema, exports);
40
+ const queryEntry = walk.paramEntries.find(
41
+ (e) => e.source === "query" && e.schema !== void 0
42
+ );
43
+ const querySchemaExport = exportedNameOf(queryEntry?.schema, exports);
31
44
  out.push({
32
45
  filePath,
33
46
  className,
34
47
  fullPath: walk.fullPath,
35
48
  verb: walk.verb,
36
- methodName: String(walk.propertyKey)
49
+ methodName: String(walk.propertyKey),
50
+ ...bodySchemaExport !== void 0 ? { bodySchemaExport } : {},
51
+ ...querySchemaExport !== void 0 ? { querySchemaExport } : {},
52
+ ...walk.bodySchema !== void 0 && bodySchemaExport === void 0 || queryEntry?.schema !== void 0 && querySchemaExport === void 0 ? { schemaNotExported: true } : {}
37
53
  });
38
54
  }
39
55
  }
@@ -143,7 +159,28 @@ function buildOneController(cr, classAlias, ctx) {
143
159
  );
144
160
  return;
145
161
  }
146
- node.controllerMethods.set(method, { classAlias, methodName: cr.methodName });
162
+ if (cr.schemaNotExported === true) {
163
+ const note = `NOTE (#124): ${cr.className}.${cr.methodName} validates with a schema that is not exported, so its request type falls back to \`unknown\`. To get the type, export the schema (\`export const zX = z.object({...})\`).`;
164
+ if (!ctx.warnings.includes(note)) ctx.warnings.push(note);
165
+ }
166
+ node.controllerMethods.set(method, {
167
+ classAlias,
168
+ methodName: cr.methodName,
169
+ // theokit#124 — an EXPORTED schema is referenceable from the emitted `.d.ts`; an inline one is
170
+ // not, and falls through to the documented `unknown`.
171
+ ...cr.bodySchemaExport !== void 0 ? {
172
+ bodySchema: {
173
+ importPath: importPathFor(ctx.dtsOutPath, cr.filePath),
174
+ exportName: cr.bodySchemaExport
175
+ }
176
+ } : {},
177
+ ...cr.querySchemaExport !== void 0 ? {
178
+ querySchema: {
179
+ importPath: importPathFor(ctx.dtsOutPath, cr.filePath),
180
+ exportName: cr.querySchemaExport
181
+ }
182
+ } : {}
183
+ });
147
184
  }
148
185
  function resolveCollisions(node, pathPrefix, warnings) {
149
186
  const methodLowerNames = /* @__PURE__ */ new Set();
@@ -189,8 +226,10 @@ function renderTreeNode(node, indent, _isRoot) {
189
226
  const paramsList = node.paramNamesAccumulated.map((p) => `${p}: string`).join("; ");
190
227
  const paramsField = node.paramNamesAccumulated.length > 0 ? `{ params: { ${paramsList} } } & ` : "";
191
228
  const optionalMark = node.paramNamesAccumulated.length === 0 ? "?" : "";
229
+ const bodyType = leaf.bodySchema === void 0 ? "body?: unknown" : `body: import('zod').infer<typeof import('${leaf.bodySchema.importPath}').${leaf.bodySchema.exportName}>`;
230
+ const queryType = leaf.querySchema === void 0 ? "query?: Record<string, string>" : `query: import('zod').infer<typeof import('${leaf.querySchema.importPath}').${leaf.querySchema.exportName}>`;
192
231
  lines.push(
193
- `${indent} ${lower}: (opts${optionalMark}: ${paramsField}{ body?: unknown; query?: Record<string, string> }) => Promise<Awaited<ReturnType<InstanceType<typeof ${leaf.classAlias}>['${leaf.methodName}']>>>`
232
+ `${indent} ${lower}: (opts${optionalMark}: ${paramsField}{ ${bodyType}; ${queryType} }) => Promise<Awaited<ReturnType<InstanceType<typeof ${leaf.classAlias}>['${leaf.methodName}']>>>`
194
233
  );
195
234
  }
196
235
  for (const [name, child] of node.children) {
@@ -376,4 +415,4 @@ export {
376
415
  generateClientDts,
377
416
  shouldReemitForFile
378
417
  };
379
- //# sourceMappingURL=app-typed-client-GDF2OMJ2.js.map
418
+ //# sourceMappingURL=app-typed-client-S3VR4ZA3.js.map