theokit 0.48.13 → 0.50.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 (327) hide show
  1. package/README.md +1 -0
  2. package/dist/{actions-virtual-module-YQXRSSMW.js → actions-virtual-module-5WBVSDOM.js} +22 -12
  3. package/dist/actions-virtual-module-5WBVSDOM.js.map +1 -0
  4. package/dist/{actions-virtual-module-LB4NGONI.js → actions-virtual-module-ZYLMNW6K.js} +13 -8
  5. package/dist/{actions-virtual-module-LB4NGONI.js.map → actions-virtual-module-ZYLMNW6K.js.map} +1 -1
  6. package/dist/adapters/agent-mount.d.ts +127 -0
  7. package/dist/adapters/agent-mount.js +24 -0
  8. package/dist/adapters/security-headers.d.ts +132 -0
  9. package/dist/adapters/security-headers.js +64 -0
  10. package/dist/adapters/security-headers.js.map +1 -0
  11. package/dist/adapters/web-shim.d.ts +100 -13
  12. package/dist/adapters/web-shim.js +158 -54
  13. package/dist/adapters/web-shim.js.map +1 -1
  14. package/dist/agent-GKUEL6OH.js +15 -0
  15. package/dist/agent-scan-BZa-pagG.d.ts +16 -0
  16. package/dist/{app-typed-client-GHO3EWZK.js → app-typed-client-4LAIEGFX.js} +23 -13
  17. package/dist/app-typed-client-4LAIEGFX.js.map +1 -0
  18. package/dist/{app-typed-client-G3J5G7E5.js → app-typed-client-DQM3Y6YY.js} +14 -9
  19. package/dist/app-typed-client-DQM3Y6YY.js.map +1 -0
  20. package/dist/aws-lambda-VKMYUMP2.js +261 -0
  21. package/dist/aws-lambda-VKMYUMP2.js.map +1 -0
  22. package/dist/{build-WU6AKKIB.js → build-FLX6VF7Q.js} +71 -26
  23. package/dist/build-FLX6VF7Q.js.map +1 -0
  24. package/dist/{bun-33RD6K7O.js → bun-L7PP6ID5.js} +105 -13
  25. package/dist/bun-L7PP6ID5.js.map +1 -0
  26. package/dist/{check-45NKUVSQ.js → check-GIPZBFTX.js} +2 -2
  27. package/dist/{chunk-KD5G3YXI.js → chunk-2AMLGJJA.js} +35 -9
  28. package/dist/chunk-2AMLGJJA.js.map +1 -0
  29. package/dist/chunk-3PBAN2YE.js +146 -0
  30. package/dist/chunk-3PBAN2YE.js.map +1 -0
  31. package/dist/{chunk-HBU2GIMZ.js → chunk-3QPVEJ7D.js} +15 -9
  32. package/dist/chunk-3QPVEJ7D.js.map +1 -0
  33. package/dist/{chunk-47CINLWF.js → chunk-44J2ANQC.js} +2 -2
  34. package/dist/{chunk-IEES3CHD.js → chunk-47MM2JUK.js} +8 -2
  35. package/dist/chunk-47MM2JUK.js.map +1 -0
  36. package/dist/chunk-4X6H2BXP.js +108 -0
  37. package/dist/chunk-4X6H2BXP.js.map +1 -0
  38. package/dist/{chunk-A7JBF5FO.js → chunk-5K4TDLRG.js} +8 -5
  39. package/dist/chunk-5K4TDLRG.js.map +1 -0
  40. package/dist/chunk-5YPXXSYY.js +181 -0
  41. package/dist/chunk-5YPXXSYY.js.map +1 -0
  42. package/dist/{chunk-YGAXV5HR.js → chunk-6J4JWHDJ.js} +191 -112
  43. package/dist/chunk-6J4JWHDJ.js.map +1 -0
  44. package/dist/chunk-72DMJBXI.js +424 -0
  45. package/dist/chunk-72DMJBXI.js.map +1 -0
  46. package/dist/chunk-7PM6K5EV.js +513 -0
  47. package/dist/chunk-7PM6K5EV.js.map +1 -0
  48. package/dist/{chunk-MTEWLGVY.js → chunk-BPYMC7SU.js} +4 -48
  49. package/dist/chunk-BPYMC7SU.js.map +1 -0
  50. package/dist/chunk-BU6RJPPJ.js +421 -0
  51. package/dist/chunk-BU6RJPPJ.js.map +1 -0
  52. package/dist/{chunk-FB2HBNIC.js → chunk-BX6EUYHU.js} +6 -2
  53. package/dist/chunk-BX6EUYHU.js.map +1 -0
  54. package/dist/{chunk-BIVCP6X5.js → chunk-C62IZEJI.js} +465 -202
  55. package/dist/chunk-C62IZEJI.js.map +1 -0
  56. package/dist/chunk-D4VP2QPR.js +16 -0
  57. package/dist/chunk-D4VP2QPR.js.map +1 -0
  58. package/dist/{chunk-J5MXCGKA.js → chunk-DHAD2O3S.js} +6 -6
  59. package/dist/chunk-DHAD2O3S.js.map +1 -0
  60. package/dist/chunk-E43VJ3E5.js +188 -0
  61. package/dist/chunk-E43VJ3E5.js.map +1 -0
  62. package/dist/chunk-EVZKNA2W.js +110 -0
  63. package/dist/chunk-EVZKNA2W.js.map +1 -0
  64. package/dist/chunk-FD4ZDTQ6.js +181 -0
  65. package/dist/chunk-FD4ZDTQ6.js.map +1 -0
  66. package/dist/chunk-FDOOBTXJ.js +17 -0
  67. package/dist/chunk-FDOOBTXJ.js.map +1 -0
  68. package/dist/chunk-FH3SQR6P.js +275 -0
  69. package/dist/chunk-FH3SQR6P.js.map +1 -0
  70. package/dist/chunk-HJHGTFEJ.js +23 -0
  71. package/dist/chunk-HJHGTFEJ.js.map +1 -0
  72. package/dist/{chunk-LXAESF4Y.js → chunk-HK4AZBKX.js} +7 -4
  73. package/dist/chunk-HK4AZBKX.js.map +1 -0
  74. package/dist/{chunk-T5C46IIU.js → chunk-HWBRS4DZ.js} +28 -269
  75. package/dist/chunk-HWBRS4DZ.js.map +1 -0
  76. package/dist/chunk-IRQGAC4L.js +52 -0
  77. package/dist/chunk-IRQGAC4L.js.map +1 -0
  78. package/dist/{chunk-FNTLKHZ7.js → chunk-JDN5SAAD.js} +7 -4
  79. package/dist/chunk-JDN5SAAD.js.map +1 -0
  80. package/dist/{chunk-GXEX4CBH.js → chunk-JIKNR5LX.js} +673 -484
  81. package/dist/chunk-JIKNR5LX.js.map +1 -0
  82. package/dist/{chunk-GRI4XHBJ.js → chunk-JWRCZIA4.js} +266 -108
  83. package/dist/chunk-JWRCZIA4.js.map +1 -0
  84. package/dist/{chunk-E576KYYT.js → chunk-KI4DOTN4.js} +25 -2
  85. package/dist/chunk-KI4DOTN4.js.map +1 -0
  86. package/dist/{chunk-ZB7D62OA.js → chunk-KUZVRJ7M.js} +3 -3
  87. package/dist/chunk-L4VFNFDL.js +248 -0
  88. package/dist/chunk-L4VFNFDL.js.map +1 -0
  89. package/dist/chunk-M2WC5MF7.js +127 -0
  90. package/dist/chunk-M2WC5MF7.js.map +1 -0
  91. package/dist/{chunk-O3JIAU3V.js → chunk-MCTC6HSE.js} +157 -103
  92. package/dist/chunk-MCTC6HSE.js.map +1 -0
  93. package/dist/{chunk-PXFXSFJL.js → chunk-NZ5JU6D3.js} +9 -9
  94. package/dist/{chunk-YRBR424R.js → chunk-OAUI273L.js} +338 -165
  95. package/dist/chunk-OAUI273L.js.map +1 -0
  96. package/dist/chunk-OGLS76RN.js +43 -0
  97. package/dist/chunk-OGLS76RN.js.map +1 -0
  98. package/dist/{chunk-7LVM22VG.js → chunk-OQCRCXCP.js} +6 -6
  99. package/dist/chunk-OQCRCXCP.js.map +1 -0
  100. package/dist/{chunk-OLGPYOLO.js → chunk-P6OS7652.js} +5 -2
  101. package/dist/chunk-P6OS7652.js.map +1 -0
  102. package/dist/chunk-Q5L5EGWZ.js +26 -0
  103. package/dist/chunk-Q5L5EGWZ.js.map +1 -0
  104. package/dist/{chunk-S433N3CT.js → chunk-QTHVHNJJ.js} +6 -36
  105. package/dist/chunk-QTHVHNJJ.js.map +1 -0
  106. package/dist/chunk-RPET332G.js +84 -0
  107. package/dist/chunk-RPET332G.js.map +1 -0
  108. package/dist/{chunk-646CA6RV.js → chunk-RQW5YMH7.js} +12 -4
  109. package/dist/chunk-RQW5YMH7.js.map +1 -0
  110. package/dist/{chunk-XALU5LCU.js → chunk-RWNYIU6A.js} +550 -146
  111. package/dist/chunk-RWNYIU6A.js.map +1 -0
  112. package/dist/chunk-SL7YUHPV.js +111 -0
  113. package/dist/chunk-SL7YUHPV.js.map +1 -0
  114. package/dist/chunk-U5PWXS3J.js +39 -0
  115. package/dist/chunk-U5PWXS3J.js.map +1 -0
  116. package/dist/chunk-ULDCFL2O.js +273 -0
  117. package/dist/chunk-ULDCFL2O.js.map +1 -0
  118. package/dist/{chunk-RWNSW4FM.js → chunk-UMNXCU3K.js} +12 -6
  119. package/dist/{chunk-RWNSW4FM.js.map → chunk-UMNXCU3K.js.map} +1 -1
  120. package/dist/chunk-VI7ZANB3.js +193 -0
  121. package/dist/chunk-VI7ZANB3.js.map +1 -0
  122. package/dist/chunk-VQPHPQ5L.js +14 -0
  123. package/dist/chunk-VQPHPQ5L.js.map +1 -0
  124. package/dist/chunk-WNJTJRM6.js +147 -0
  125. package/dist/chunk-WNJTJRM6.js.map +1 -0
  126. package/dist/chunk-WOBSEO75.js +790 -0
  127. package/dist/chunk-WOBSEO75.js.map +1 -0
  128. package/dist/{chunk-BMHS4WAN.js → chunk-XS7EX55U.js} +156 -42
  129. package/dist/chunk-XS7EX55U.js.map +1 -0
  130. package/dist/chunk-YN4W7LCX.js +31 -0
  131. package/dist/chunk-YN4W7LCX.js.map +1 -0
  132. package/dist/chunk-YSJOZEI6.js +1 -0
  133. package/dist/{chunk-JA2ZAT5Q.js → chunk-Z4PJMZLM.js} +2 -2
  134. package/dist/chunk-Z4PJMZLM.js.map +1 -0
  135. package/dist/{chunk-7VPQHEAJ.js → chunk-ZNZISJDZ.js} +6 -2
  136. package/dist/chunk-ZNZISJDZ.js.map +1 -0
  137. package/dist/chunk-ZWN3AODA.js +11 -0
  138. package/dist/chunk-ZWN3AODA.js.map +1 -0
  139. package/dist/cli/index.js +25 -10
  140. package/dist/cli/index.js.map +1 -1
  141. package/dist/client/core.d.ts +1 -1
  142. package/dist/client/core.js +2 -0
  143. package/dist/client/core.js.map +1 -1
  144. package/dist/client/index.d.ts +44 -10
  145. package/dist/client/index.js +35 -0
  146. package/dist/client/index.js.map +1 -1
  147. package/dist/cloudflare-SIG42OIW.js +335 -0
  148. package/dist/cloudflare-SIG42OIW.js.map +1 -0
  149. package/dist/config-support-WQHQIJTA.js +104 -0
  150. package/dist/config-support-WQHQIJTA.js.map +1 -0
  151. package/dist/{csrf-BBrEZSBW.d.ts → csrf-Dgot9qSM.d.ts} +1 -1
  152. package/dist/deno-deploy-LQAYOOPW.js +196 -0
  153. package/dist/deno-deploy-LQAYOOPW.js.map +1 -0
  154. package/dist/{dev-MUWJAZRD.js → dev-ANDSEVLB.js} +28 -18
  155. package/dist/dev-ANDSEVLB.js.map +1 -0
  156. package/dist/{dev-emit-GWD6IXV7.js → dev-emit-BFNMDCPB.js} +5 -5
  157. package/dist/{dev-emit-NBT6JD7R.js → dev-emit-MVAJAFGX.js} +5 -3
  158. package/dist/dev-emit-MVAJAFGX.js.map +1 -0
  159. package/dist/engine-singleton-X4R7AZBJ.js +315 -0
  160. package/dist/engine-singleton-X4R7AZBJ.js.map +1 -0
  161. package/dist/{generate-Y3GWM57K.js → generate-EN6EDITF.js} +43 -4
  162. package/dist/generate-EN6EDITF.js.map +1 -0
  163. package/dist/index-CzxtQcnp.d.ts +1058 -0
  164. package/dist/index.d.ts +4 -0
  165. package/dist/index.js +24 -13
  166. package/dist/index.js.map +1 -1
  167. package/dist/{info-XW7HGUPH.js → info-Y55RWS42.js} +8 -6
  168. package/dist/{info-XW7HGUPH.js.map → info-Y55RWS42.js.map} +1 -1
  169. package/dist/{internal-api-V5L65YSJ.js → internal-api-IP35YU3G.js} +22 -12
  170. package/dist/{internal-api-WEOSTMSN.js → internal-api-OPU456AT.js} +30 -16
  171. package/dist/internal-api-OPU456AT.js.map +1 -0
  172. package/dist/load-config-4ATXQUN3.js +16 -0
  173. package/dist/match-DmGgxjIU.d.ts +44 -0
  174. package/dist/{mcp-ULUFJNSZ.js → mcp-5LLNAGKA.js} +7 -7
  175. package/dist/netlify-C2IRCZKI.js +245 -0
  176. package/dist/netlify-C2IRCZKI.js.map +1 -0
  177. package/dist/node-OSVPYQ3D.js +10 -0
  178. package/dist/nonce-BXt7Qu_C.d.ts +31 -0
  179. package/dist/observability-bootstrap-MZMSOE66.js +15 -0
  180. package/dist/{openapi-HZXR335W.js → openapi-VFPEZSRI.js} +13 -11
  181. package/dist/{openapi-HZXR335W.js.map → openapi-VFPEZSRI.js.map} +1 -1
  182. package/dist/{plugin-runner-BFEcgtmJ.d.ts → plugin-runner-BVMOSxvb.d.ts} +1 -1
  183. package/dist/{plugin-types-D69-lJZ9.d.ts → plugin-types-BUVfUQ0V.d.ts} +13 -1
  184. package/dist/preview-GHPT2EQ5.js +23 -0
  185. package/dist/preview-GHPT2EQ5.js.map +1 -0
  186. package/dist/provider-resolver-Dx6QuWrw.d.ts +128 -0
  187. package/dist/registry-KBZDCFVQ.js +23 -0
  188. package/dist/route-config-Cm_ZMA1C.d.ts +72 -0
  189. package/dist/route-policy-BxOycCDq.d.ts +65 -0
  190. package/dist/router/element-scroll-restoration.d.ts +28 -0
  191. package/dist/router/element-scroll-restoration.js +96 -0
  192. package/dist/router/element-scroll-restoration.js.map +1 -0
  193. package/dist/{routes-OLNQX7CT.js → routes-BPLU3ISV.js} +11 -9
  194. package/dist/{routes-OLNQX7CT.js.map → routes-BPLU3ISV.js.map} +1 -1
  195. package/dist/{scan-7MJC6PYU.js → scan-YJEE4KQK.js} +2 -2
  196. package/dist/{schema-ZO3OSWVG.js → schema-SOAD43RQ.js} +7 -5
  197. package/dist/schemas-4AXHQMV3.js +25 -0
  198. package/dist/schemas-4AXHQMV3.js.map +1 -0
  199. package/dist/security-headers-Ccj7ncNx.d.ts +129 -0
  200. package/dist/server/agent/index.d.ts +2 -90
  201. package/dist/server/agent/index.js +1 -1
  202. package/dist/server/auth/index.d.ts +2 -21
  203. package/dist/server/auth/index.js +3 -2
  204. package/dist/server/cron/index.js +4 -3
  205. package/dist/server/define/index.d.ts +51 -57
  206. package/dist/server/define/index.js +10 -1
  207. package/dist/server/http/index.d.ts +7 -5
  208. package/dist/server/http/index.js +56 -12
  209. package/dist/server/index.d.ts +47 -439
  210. package/dist/server/index.js +119 -201
  211. package/dist/server/index.js.map +1 -1
  212. package/dist/server/jobs/index.js +4 -3
  213. package/dist/server/observability/index.d.ts +109 -35
  214. package/dist/server/observability/index.js +10 -7
  215. package/dist/server/plugins/index.d.ts +3 -3
  216. package/dist/server/scan/index.d.ts +47 -12
  217. package/dist/server/scan/index.js +13 -4
  218. package/dist/server/security/index.d.ts +61 -103
  219. package/dist/server/security/index.js +15 -6
  220. package/dist/server/webhook/index.d.ts +90 -3
  221. package/dist/server/webhook/index.js +12 -2
  222. package/dist/server-boundary-6B4ZQUY7.js +148 -0
  223. package/dist/server-boundary-6B4ZQUY7.js.map +1 -0
  224. package/dist/server-boundary-7VZQRPPX.js +133 -0
  225. package/dist/server-boundary-7VZQRPPX.js.map +1 -0
  226. package/dist/{services-typed-client-PSAGRPFF.js → services-typed-client-XGT5SUUN.js} +2 -2
  227. package/dist/{start-KR2JJR7K.js → start-UZDMOT7I.js} +342 -111
  228. package/dist/start-UZDMOT7I.js.map +1 -0
  229. package/dist/{static-M2W4HUWS.js → static-SVDWIOXJ.js} +24 -13
  230. package/dist/static-SVDWIOXJ.js.map +1 -0
  231. package/dist/{theo-cloud-XAHWOUFK.js → theo-cloud-3ET4G5T6.js} +9 -2
  232. package/dist/theo-cloud-3ET4G5T6.js.map +1 -0
  233. package/dist/vercel-BMCQKCWE.js +277 -0
  234. package/dist/vercel-BMCQKCWE.js.map +1 -0
  235. package/dist/vite-plugin/index.js +24 -13
  236. package/dist/vite-plugin-VKCT2LF2.js +42 -0
  237. package/dist/vite-plugin-VKCT2LF2.js.map +1 -0
  238. package/package.json +19 -6
  239. package/dist/actions-virtual-module-YQXRSSMW.js.map +0 -1
  240. package/dist/agent-7JJW3TPB.js +0 -15
  241. package/dist/app-typed-client-G3J5G7E5.js.map +0 -1
  242. package/dist/app-typed-client-GHO3EWZK.js.map +0 -1
  243. package/dist/aws-lambda-CYNDGU5O.js +0 -172
  244. package/dist/aws-lambda-CYNDGU5O.js.map +0 -1
  245. package/dist/build-WU6AKKIB.js.map +0 -1
  246. package/dist/bun-33RD6K7O.js.map +0 -1
  247. package/dist/chunk-646CA6RV.js.map +0 -1
  248. package/dist/chunk-6E5WKMDS.js +0 -67
  249. package/dist/chunk-6E5WKMDS.js.map +0 -1
  250. package/dist/chunk-6GGWS7J3.js +0 -91
  251. package/dist/chunk-6GGWS7J3.js.map +0 -1
  252. package/dist/chunk-7LVM22VG.js.map +0 -1
  253. package/dist/chunk-7VPQHEAJ.js.map +0 -1
  254. package/dist/chunk-A7JBF5FO.js.map +0 -1
  255. package/dist/chunk-AM3QABW5.js +0 -161
  256. package/dist/chunk-AM3QABW5.js.map +0 -1
  257. package/dist/chunk-BIVCP6X5.js.map +0 -1
  258. package/dist/chunk-BMHS4WAN.js.map +0 -1
  259. package/dist/chunk-E576KYYT.js.map +0 -1
  260. package/dist/chunk-FB2HBNIC.js.map +0 -1
  261. package/dist/chunk-FNTLKHZ7.js.map +0 -1
  262. package/dist/chunk-GRI4XHBJ.js.map +0 -1
  263. package/dist/chunk-GVW5EKEU.js +0 -422
  264. package/dist/chunk-GVW5EKEU.js.map +0 -1
  265. package/dist/chunk-GXEX4CBH.js.map +0 -1
  266. package/dist/chunk-HBU2GIMZ.js.map +0 -1
  267. package/dist/chunk-IEES3CHD.js.map +0 -1
  268. package/dist/chunk-J5MXCGKA.js.map +0 -1
  269. package/dist/chunk-JA2ZAT5Q.js.map +0 -1
  270. package/dist/chunk-KD5G3YXI.js.map +0 -1
  271. package/dist/chunk-LNVMHQ2Z.js +0 -54
  272. package/dist/chunk-LNVMHQ2Z.js.map +0 -1
  273. package/dist/chunk-LXAESF4Y.js.map +0 -1
  274. package/dist/chunk-MTEWLGVY.js.map +0 -1
  275. package/dist/chunk-O3JIAU3V.js.map +0 -1
  276. package/dist/chunk-OJLL4YD6.js +0 -403
  277. package/dist/chunk-OJLL4YD6.js.map +0 -1
  278. package/dist/chunk-OLGPYOLO.js.map +0 -1
  279. package/dist/chunk-S433N3CT.js.map +0 -1
  280. package/dist/chunk-T5C46IIU.js.map +0 -1
  281. package/dist/chunk-U267AOWS.js +0 -28
  282. package/dist/chunk-U267AOWS.js.map +0 -1
  283. package/dist/chunk-UW2TEAGR.js +0 -77
  284. package/dist/chunk-UW2TEAGR.js.map +0 -1
  285. package/dist/chunk-WPJOTQA5.js +0 -1
  286. package/dist/chunk-XALU5LCU.js.map +0 -1
  287. package/dist/chunk-XR74JD4M.js +0 -457
  288. package/dist/chunk-XR74JD4M.js.map +0 -1
  289. package/dist/chunk-YGAXV5HR.js.map +0 -1
  290. package/dist/chunk-YRBR424R.js.map +0 -1
  291. package/dist/cloudflare-KYUWCEPL.js +0 -122
  292. package/dist/cloudflare-KYUWCEPL.js.map +0 -1
  293. package/dist/deno-deploy-CCTB7HGS.js +0 -107
  294. package/dist/deno-deploy-CCTB7HGS.js.map +0 -1
  295. package/dist/dev-MUWJAZRD.js.map +0 -1
  296. package/dist/dev-emit-NBT6JD7R.js.map +0 -1
  297. package/dist/generate-Y3GWM57K.js.map +0 -1
  298. package/dist/index-BEtEv6ZH.d.ts +0 -575
  299. package/dist/load-config-VKD6LKWU.js +0 -14
  300. package/dist/match-CfbEFRG4.d.ts +0 -26
  301. package/dist/netlify-AFMDNKT4.js +0 -150
  302. package/dist/netlify-AFMDNKT4.js.map +0 -1
  303. package/dist/node-ZJQEJSP3.js +0 -10
  304. package/dist/registry-GKR3EWRW.js +0 -23
  305. package/dist/start-KR2JJR7K.js.map +0 -1
  306. package/dist/static-M2W4HUWS.js.map +0 -1
  307. package/dist/theo-cloud-XAHWOUFK.js.map +0 -1
  308. package/dist/vercel-SRS2DH6O.js +0 -133
  309. package/dist/vercel-SRS2DH6O.js.map +0 -1
  310. package/dist/vite-plugin-VPJFD4HK.js +0 -36
  311. /package/dist/{chunk-WPJOTQA5.js.map → adapters/agent-mount.js.map} +0 -0
  312. /package/dist/{agent-7JJW3TPB.js.map → agent-GKUEL6OH.js.map} +0 -0
  313. /package/dist/{check-45NKUVSQ.js.map → check-GIPZBFTX.js.map} +0 -0
  314. /package/dist/{chunk-47CINLWF.js.map → chunk-44J2ANQC.js.map} +0 -0
  315. /package/dist/{chunk-ZB7D62OA.js.map → chunk-KUZVRJ7M.js.map} +0 -0
  316. /package/dist/{chunk-PXFXSFJL.js.map → chunk-NZ5JU6D3.js.map} +0 -0
  317. /package/dist/{internal-api-WEOSTMSN.js.map → chunk-YSJOZEI6.js.map} +0 -0
  318. /package/dist/{dev-emit-GWD6IXV7.js.map → dev-emit-BFNMDCPB.js.map} +0 -0
  319. /package/dist/{internal-api-V5L65YSJ.js.map → internal-api-IP35YU3G.js.map} +0 -0
  320. /package/dist/{load-config-VKD6LKWU.js.map → load-config-4ATXQUN3.js.map} +0 -0
  321. /package/dist/{mcp-ULUFJNSZ.js.map → mcp-5LLNAGKA.js.map} +0 -0
  322. /package/dist/{node-ZJQEJSP3.js.map → node-OSVPYQ3D.js.map} +0 -0
  323. /package/dist/{scan-7MJC6PYU.js.map → observability-bootstrap-MZMSOE66.js.map} +0 -0
  324. /package/dist/{registry-GKR3EWRW.js.map → registry-KBZDCFVQ.js.map} +0 -0
  325. /package/dist/{schema-ZO3OSWVG.js.map → scan-YJEE4KQK.js.map} +0 -0
  326. /package/dist/{vite-plugin-VPJFD4HK.js.map → schema-SOAD43RQ.js.map} +0 -0
  327. /package/dist/{services-typed-client-PSAGRPFF.js.map → services-typed-client-XGT5SUUN.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -183,6 +183,10 @@ declare const theoConfigSchema: z.ZodObject<{
183
183
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
184
184
  }, z.core.$strip>>>;
185
185
  }, z.core.$strip>>;
186
+ observability: z.ZodOptional<z.ZodObject<{
187
+ enabled: z.ZodDefault<z.ZodBoolean>;
188
+ provider: z.ZodOptional<z.ZodCustom<unknown, unknown>>;
189
+ }, z.core.$strip>>;
186
190
  devtools: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodObject<{
187
191
  position: z.ZodOptional<z.ZodEnum<{
188
192
  "top-left": "top-left";
package/dist/index.js CHANGED
@@ -8,31 +8,42 @@ import {
8
8
  scanRoutes,
9
9
  theoConfigSchema,
10
10
  theoPlugin
11
- } from "./chunk-GXEX4CBH.js";
11
+ } from "./chunk-JIKNR5LX.js";
12
+ import "./chunk-VQPHPQ5L.js";
12
13
  import "./chunk-SSYDEKWF.js";
14
+ import "./chunk-SL7YUHPV.js";
13
15
  import "./chunk-OIGJOYX6.js";
14
- import "./chunk-OJLL4YD6.js";
15
- import "./chunk-XR74JD4M.js";
16
- import "./chunk-XALU5LCU.js";
16
+ import "./chunk-WOBSEO75.js";
17
+ import "./chunk-4X6H2BXP.js";
18
+ import "./chunk-OGLS76RN.js";
19
+ import "./chunk-RWNYIU6A.js";
17
20
  import "./chunk-47FFT43U.js";
18
21
  import "./chunk-NTDN54XO.js";
19
- import "./chunk-KD5G3YXI.js";
22
+ import "./chunk-MCTC6HSE.js";
23
+ import "./chunk-72DMJBXI.js";
20
24
  import "./chunk-VSLTKX5L.js";
21
25
  import "./chunk-TNI4MARH.js";
22
- import "./chunk-7LVM22VG.js";
23
- import "./chunk-YGAXV5HR.js";
26
+ import "./chunk-OQCRCXCP.js";
27
+ import "./chunk-6J4JWHDJ.js";
24
28
  import "./chunk-DV34VG3N.js";
25
- import "./chunk-FB2HBNIC.js";
26
- import "./chunk-MTEWLGVY.js";
27
- import "./chunk-OLGPYOLO.js";
29
+ import "./chunk-L4VFNFDL.js";
30
+ import "./chunk-BX6EUYHU.js";
31
+ import "./chunk-BPYMC7SU.js";
32
+ import "./chunk-IRQGAC4L.js";
33
+ import "./chunk-P6OS7652.js";
28
34
  import "./chunk-AVQU5CQF.js";
29
35
  import "./chunk-ACKBVBUI.js";
30
36
  import "./chunk-IZ3TIL6K.js";
31
37
  import "./chunk-YOIVCCZT.js";
32
- import "./chunk-6E5WKMDS.js";
33
- import "./chunk-JA2ZAT5Q.js";
38
+ import "./chunk-3PBAN2YE.js";
39
+ import "./chunk-YSJOZEI6.js";
40
+ import "./chunk-Z4PJMZLM.js";
41
+ import "./chunk-UMNXCU3K.js";
34
42
  import "./chunk-52PDWL5S.js";
35
- import "./chunk-U267AOWS.js";
43
+ import "./chunk-5K4TDLRG.js";
44
+ import "./chunk-ZWN3AODA.js";
45
+ import "./chunk-D4VP2QPR.js";
46
+ import "./chunk-YN4W7LCX.js";
36
47
  import "./chunk-XTHN6JBX.js";
37
48
 
38
49
  // src/config/define-config.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/define-config.ts","../src/config/config-builder.ts","../src/config/validate-structure.ts","../src/core/errors.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOO,SAAS,aAAaA,SAAkD;AAC7E,SAAOA;AACT;;;ACiCA,SAAS,kBAAkB,MAA0C;AACnE,QAAM,QAAQ,CAAC,UACb,kBAAkB,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;AACzC,SAAO;AAAA,IACL,MAAM,CAAC,UAAU,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,IACtC,WAAW,CAAC,UAAU,MAAM,EAAE,WAAW,MAAM,CAAC;AAAA,IAChD,QAAQ,CAAC,UAAU,MAAM,EAAE,QAAQ,MAAM,CAAC;AAAA,IAC1C,WAAW,CAAC,UAAU,MAAM,EAAE,WAAW,MAAM,CAAC;AAAA,IAChD,SAAS,CAAC,UAAU,MAAM,EAAE,SAAS,MAAM,CAAC;AAAA,IAC5C,MAAM,CAAC,UAAU,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,IACtC,MAAM,CAAC,UAAU,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,IACtC,KAAK,CAAC,UAAU,MAAM,EAAE,KAAK,MAAM,CAAC;AAAA,IACpC,KAAK,CAAC,YAAY,MAAM,OAAO;AAAA,IAC/B,OAAO,MAAM,aAAa,IAAI;AAAA,EAChC;AACF;AAKO,SAAS,SAAwB;AACtC,SAAO,kBAAkB,CAAC,CAAC;AAC7B;;;AC5DA,SAAS,kBAAkB;AAC3B,SAAS,YAAY;;;ACLd,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1B;AAAA,EACA;AAAA,EAEhB,YAAY,QAAkB,SAAiB;AAC7C,UAAM,aAAa,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI;AAE1D;AAAA,MACE;AAAA;AAAA,UACa,OAAO;AAAA;AAAA,KACjB,aAAa;AAAA,EAAc,UAAU;AAAA,IAAO;AAAA,IACjD;AAEA,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AACF;;;ADHA,IAAM,iBAAmC;AAAA,EACvC;AAAA,IACE,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AACF;AAIO,SAAS,yBAAyB,SAAiB,SAAS,OAAa;AAC9E,MAAI,CAAC,WAAW,OAAO,GAAG;AACxB,UAAM,IAAI,iBAAiB,CAAC,qCAAqC,OAAO,EAAE,GAAG,OAAO;AAAA,EACtF;AAEA,QAAM,SAAmB,CAAC;AAE1B,QAAM,eAAiC;AAAA,IACrC,EAAE,MAAM,QAAQ,cAAc,+BAA+B,MAAM,IAAI;AAAA,EACzE;AAEA,aAAW,QAAQ,cAAc;AAC/B,QAAI,CAAC,WAAW,KAAK,SAAS,KAAK,IAAI,CAAC,GAAG;AACzC,aAAO,KAAK,KAAK,YAAY;AAAA,IAC/B;AAAA,EACF;AAEA,aAAW,QAAQ,gBAAgB;AACjC,QAAI,CAAC,WAAW,KAAK,SAAS,KAAK,IAAI,CAAC,GAAG;AACzC,aAAO,KAAK,KAAK,YAAY;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI,iBAAiB,QAAQ,OAAO;AAAA,EAC5C;AACF;","names":["config"]}
1
+ {"version":3,"sources":["../src/config/define-config.ts","../src/config/config-builder.ts","../src/config/validate-structure.ts","../src/core/errors.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOO,SAAS,aAAaA,SAAkD;AAC7E,SAAOA;AACT;;;ACiCA,SAAS,kBAAkB,MAA0C;AACnE,QAAM,QAAQ,CAAC,UACb,kBAAkB,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;AACzC,SAAO;AAAA,IACL,MAAM,CAAC,UAAU,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,IACtC,WAAW,CAAC,UAAU,MAAM,EAAE,WAAW,MAAM,CAAC;AAAA,IAChD,QAAQ,CAAC,UAAU,MAAM,EAAE,QAAQ,MAAM,CAAC;AAAA,IAC1C,WAAW,CAAC,UAAU,MAAM,EAAE,WAAW,MAAM,CAAC;AAAA,IAChD,SAAS,CAAC,UAAU,MAAM,EAAE,SAAS,MAAM,CAAC;AAAA,IAC5C,MAAM,CAAC,UAAU,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,IACtC,MAAM,CAAC,UAAU,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,IACtC,KAAK,CAAC,UAAU,MAAM,EAAE,KAAK,MAAM,CAAC;AAAA,IACpC,KAAK,CAAC,YAAY,MAAM,OAAO;AAAA,IAC/B,OAAO,MAAM,aAAa,IAAI;AAAA,EAChC;AACF;AAKO,SAAS,SAAwB;AACtC,SAAO,kBAAkB,CAAC,CAAC;AAC7B;;;AC5DA,SAAS,kBAAkB;AAC3B,SAAS,YAAY;;;ACLd,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1B;AAAA,EACA;AAAA,EAEhB,YAAY,QAAkB,SAAiB;AAC7C,UAAM,aAAa,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI;AAE1D;AAAA,MACE;AAAA;AAAA,UACa,OAAO;AAAA;AAAA,KACjB,aAAa;AAAA,EAAc,UAAU;AAAA,IAAO;AAAA,IACjD;AAEA,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AACF;;;ADHA,IAAM,iBAAmC;AAAA,EACvC;AAAA,IACE,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AACF;AAIO,SAAS,yBAAyB,SAAiB,SAAS,OAAa;AAC9E,MAAI,CAAC,WAAW,OAAO,GAAG;AACxB,UAAM,IAAI,iBAAiB,CAAC,qCAAqC,OAAO,EAAE,GAAG,OAAO;AAAA,EACtF;AAEA,QAAM,SAAmB,CAAC;AAE1B,QAAM,eAAiC;AAAA,IACrC,EAAE,MAAM,QAAQ,cAAc,+BAA+B,MAAM,IAAI;AAAA,EACzE;AAEA,aAAW,QAAQ,cAAc;AAC/B,QAAI,CAAC,WAAW,KAAK,SAAS,KAAK,IAAI,CAAC,GAAG;AACzC,aAAO,KAAK,KAAK,YAAY;AAAA,IAC/B;AAAA,EACF;AAEA,aAAW,QAAQ,gBAAgB;AACjC,QAAI,CAAC,WAAW,KAAK,SAAS,KAAK,IAAI,CAAC,GAAG;AACzC,aAAO,KAAK,KAAK,YAAY;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI,iBAAiB,QAAQ,OAAO;AAAA,EAC5C;AACF;","names":["config"]}
@@ -2,13 +2,15 @@
2
2
  import "tsx/esm";
3
3
  import {
4
4
  scanRoutes
5
- } from "./chunk-IEES3CHD.js";
5
+ } from "./chunk-47MM2JUK.js";
6
6
  import {
7
7
  loadConfig
8
- } from "./chunk-S433N3CT.js";
9
- import "./chunk-HBU2GIMZ.js";
10
- import "./chunk-GVW5EKEU.js";
11
- import "./chunk-7VPQHEAJ.js";
8
+ } from "./chunk-QTHVHNJJ.js";
9
+ import "./chunk-3QPVEJ7D.js";
10
+ import "./chunk-U5PWXS3J.js";
11
+ import "./chunk-FH3SQR6P.js";
12
+ import "./chunk-ZNZISJDZ.js";
13
+ import "./chunk-VI7ZANB3.js";
12
14
 
13
15
  // src/cli/commands/info.ts
14
16
  import { existsSync, readFileSync } from "fs";
@@ -101,4 +103,4 @@ export {
101
103
  buildInfo,
102
104
  infoCommand
103
105
  };
104
- //# sourceMappingURL=info-XW7HGUPH.js.map
106
+ //# sourceMappingURL=info-Y55RWS42.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/info.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport { loadConfig } from '../../config/load-config.js'\nimport { scanRoutes } from '../../router/scan.js'\n\ninterface RuntimeInfo {\n name: 'node' | 'bun' | 'deno' | 'unknown'\n version: string\n}\n\ninterface PackageJsonMinimal {\n name?: string\n version?: string\n}\n\ninterface ConfigSummary {\n ok: boolean\n summary: string\n}\n\ninterface BuildInfoDeps {\n cwd: string\n readPackageJson?: () => PackageJsonMinimal | null\n detectRuntime?: () => RuntimeInfo\n loadConfig?: () => Promise<ConfigSummary>\n countRoutes?: () => number\n}\n\nfunction defaultDetectRuntime(): RuntimeInfo {\n const g = globalThis as { Bun?: { version: string }; Deno?: { version: { deno: string } } }\n if (g.Bun?.version) {\n return { name: 'bun', version: g.Bun.version }\n }\n if (g.Deno?.version) {\n return { name: 'deno', version: g.Deno.version.deno }\n }\n if (typeof process !== 'undefined' && process.versions.node) {\n return { name: 'node', version: process.versions.node }\n }\n return { name: 'unknown', version: '?' }\n}\n\nfunction defaultReadPackageJson(cwd: string): PackageJsonMinimal | null {\n const path = resolve(cwd, 'package.json')\n if (!existsSync(path)) return null\n try {\n const raw = readFileSync(path, 'utf-8')\n const parsed = JSON.parse(raw) as PackageJsonMinimal\n return parsed\n } catch {\n return null\n }\n}\n\nasync function defaultLoadConfig(cwd: string): Promise<ConfigSummary> {\n try {\n await loadConfig(cwd)\n return { ok: true, summary: 'config OK' }\n } catch (err) {\n return { ok: false, summary: (err as Error).message }\n }\n}\n\nfunction defaultCountRoutes(cwd: string): number {\n const appDir = resolve(cwd, 'app')\n if (!existsSync(appDir)) return 0\n const tree = scanRoutes(appDir)\n let count = 0\n function walk(node: { page?: string; children: { page?: string; children: unknown[] }[] }): void {\n if (node.page) count++\n for (const child of node.children) walk(child as never)\n }\n walk(tree)\n return count\n}\n\nexport async function buildInfo(deps: BuildInfoDeps): Promise<string> {\n const cwd = deps.cwd\n const readPkg = deps.readPackageJson ?? (() => defaultReadPackageJson(cwd))\n const runtime = (deps.detectRuntime ?? defaultDetectRuntime)()\n const loadCfg = deps.loadConfig ?? (() => defaultLoadConfig(cwd))\n const countRts = deps.countRoutes ?? (() => defaultCountRoutes(cwd))\n\n const pkg = readPkg()\n const config = await loadCfg()\n\n let routesCount = 0\n let scanError: string | null = null\n try {\n routesCount = countRts()\n } catch (err) {\n scanError = (err as Error).message\n }\n\n const projectLine = pkg?.name ? `${pkg.name}@${pkg.version ?? '?'}` : '(missing)'\n\n const configLine = config.ok ? 'OK' : `INVALID — ${config.summary}`\n\n const routesLine = scanError ? `Scan failed: ${scanError}` : `Routes: ${routesCount}`\n\n return [\n `# Theo info`,\n ``,\n `## Project`,\n `Project: ${projectLine}`,\n ``,\n `## Runtime`,\n `${runtime.name} ${runtime.version}`,\n ``,\n `## Config`,\n `Config: ${configLine}`,\n ``,\n `## App`,\n routesLine,\n ``,\n ].join('\\n')\n}\n\nexport async function infoCommand(): Promise<void> {\n const cwd = process.cwd()\n const output = await buildInfo({ cwd })\n console.log(output)\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,YAAY,oBAAoB;AACzC,SAAS,eAAe;AA4BxB,SAAS,uBAAoC;AAC3C,QAAM,IAAI;AACV,MAAI,EAAE,KAAK,SAAS;AAClB,WAAO,EAAE,MAAM,OAAO,SAAS,EAAE,IAAI,QAAQ;AAAA,EAC/C;AACA,MAAI,EAAE,MAAM,SAAS;AACnB,WAAO,EAAE,MAAM,QAAQ,SAAS,EAAE,KAAK,QAAQ,KAAK;AAAA,EACtD;AACA,MAAI,OAAO,YAAY,eAAe,QAAQ,SAAS,MAAM;AAC3D,WAAO,EAAE,MAAM,QAAQ,SAAS,QAAQ,SAAS,KAAK;AAAA,EACxD;AACA,SAAO,EAAE,MAAM,WAAW,SAAS,IAAI;AACzC;AAEA,SAAS,uBAAuB,KAAwC;AACtE,QAAM,OAAO,QAAQ,KAAK,cAAc;AACxC,MAAI,CAAC,WAAW,IAAI,EAAG,QAAO;AAC9B,MAAI;AACF,UAAM,MAAM,aAAa,MAAM,OAAO;AACtC,UAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,kBAAkB,KAAqC;AACpE,MAAI;AACF,UAAM,WAAW,GAAG;AACpB,WAAO,EAAE,IAAI,MAAM,SAAS,YAAY;AAAA,EAC1C,SAAS,KAAK;AACZ,WAAO,EAAE,IAAI,OAAO,SAAU,IAAc,QAAQ;AAAA,EACtD;AACF;AAEA,SAAS,mBAAmB,KAAqB;AAC/C,QAAM,SAAS,QAAQ,KAAK,KAAK;AACjC,MAAI,CAAC,WAAW,MAAM,EAAG,QAAO;AAChC,QAAM,OAAO,WAAW,MAAM;AAC9B,MAAI,QAAQ;AACZ,WAAS,KAAK,MAAmF;AAC/F,QAAI,KAAK,KAAM;AACf,eAAW,SAAS,KAAK,SAAU,MAAK,KAAc;AAAA,EACxD;AACA,OAAK,IAAI;AACT,SAAO;AACT;AAEA,eAAsB,UAAU,MAAsC;AACpE,QAAM,MAAM,KAAK;AACjB,QAAM,UAAU,KAAK,oBAAoB,MAAM,uBAAuB,GAAG;AACzE,QAAM,WAAW,KAAK,iBAAiB,sBAAsB;AAC7D,QAAM,UAAU,KAAK,eAAe,MAAM,kBAAkB,GAAG;AAC/D,QAAM,WAAW,KAAK,gBAAgB,MAAM,mBAAmB,GAAG;AAElE,QAAM,MAAM,QAAQ;AACpB,QAAM,SAAS,MAAM,QAAQ;AAE7B,MAAI,cAAc;AAClB,MAAI,YAA2B;AAC/B,MAAI;AACF,kBAAc,SAAS;AAAA,EACzB,SAAS,KAAK;AACZ,gBAAa,IAAc;AAAA,EAC7B;AAEA,QAAM,cAAc,KAAK,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,WAAW,GAAG,KAAK;AAEtE,QAAM,aAAa,OAAO,KAAK,OAAO,kBAAa,OAAO,OAAO;AAEjE,QAAM,aAAa,YAAY,gBAAgB,SAAS,KAAK,WAAW,WAAW;AAEnF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,WAAW;AAAA,IACvB;AAAA,IACA;AAAA,IACA,GAAG,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,IAClC;AAAA,IACA;AAAA,IACA,WAAW,UAAU;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,eAAsB,cAA6B;AACjD,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,SAAS,MAAM,UAAU,EAAE,IAAI,CAAC;AACtC,UAAQ,IAAI,MAAM;AACpB;","names":[]}
1
+ {"version":3,"sources":["../src/cli/commands/info.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport { loadConfig } from '../../config/load-config.js'\nimport { scanRoutes } from '../../router/scan.js'\n\ninterface RuntimeInfo {\n name: 'node' | 'bun' | 'deno' | 'unknown'\n version: string\n}\n\ninterface PackageJsonMinimal {\n name?: string\n version?: string\n}\n\ninterface ConfigSummary {\n ok: boolean\n summary: string\n}\n\ninterface BuildInfoDeps {\n cwd: string\n readPackageJson?: () => PackageJsonMinimal | null\n detectRuntime?: () => RuntimeInfo\n loadConfig?: () => Promise<ConfigSummary>\n countRoutes?: () => number\n}\n\nfunction defaultDetectRuntime(): RuntimeInfo {\n const g = globalThis as { Bun?: { version: string }; Deno?: { version: { deno: string } } }\n if (g.Bun?.version) {\n return { name: 'bun', version: g.Bun.version }\n }\n if (g.Deno?.version) {\n return { name: 'deno', version: g.Deno.version.deno }\n }\n if (typeof process !== 'undefined' && process.versions.node) {\n return { name: 'node', version: process.versions.node }\n }\n return { name: 'unknown', version: '?' }\n}\n\nfunction defaultReadPackageJson(cwd: string): PackageJsonMinimal | null {\n const path = resolve(cwd, 'package.json')\n if (!existsSync(path)) return null\n try {\n const raw = readFileSync(path, 'utf-8')\n const parsed = JSON.parse(raw) as PackageJsonMinimal\n return parsed\n } catch {\n return null\n }\n}\n\nasync function defaultLoadConfig(cwd: string): Promise<ConfigSummary> {\n try {\n await loadConfig(cwd)\n return { ok: true, summary: 'config OK' }\n } catch (err) {\n return { ok: false, summary: (err as Error).message }\n }\n}\n\nfunction defaultCountRoutes(cwd: string): number {\n const appDir = resolve(cwd, 'app')\n if (!existsSync(appDir)) return 0\n const tree = scanRoutes(appDir)\n let count = 0\n function walk(node: { page?: string; children: { page?: string; children: unknown[] }[] }): void {\n if (node.page) count++\n for (const child of node.children) walk(child as never)\n }\n walk(tree)\n return count\n}\n\nexport async function buildInfo(deps: BuildInfoDeps): Promise<string> {\n const cwd = deps.cwd\n const readPkg = deps.readPackageJson ?? (() => defaultReadPackageJson(cwd))\n const runtime = (deps.detectRuntime ?? defaultDetectRuntime)()\n const loadCfg = deps.loadConfig ?? (() => defaultLoadConfig(cwd))\n const countRts = deps.countRoutes ?? (() => defaultCountRoutes(cwd))\n\n const pkg = readPkg()\n const config = await loadCfg()\n\n let routesCount = 0\n let scanError: string | null = null\n try {\n routesCount = countRts()\n } catch (err) {\n scanError = (err as Error).message\n }\n\n const projectLine = pkg?.name ? `${pkg.name}@${pkg.version ?? '?'}` : '(missing)'\n\n const configLine = config.ok ? 'OK' : `INVALID — ${config.summary}`\n\n const routesLine = scanError ? `Scan failed: ${scanError}` : `Routes: ${routesCount}`\n\n return [\n `# Theo info`,\n ``,\n `## Project`,\n `Project: ${projectLine}`,\n ``,\n `## Runtime`,\n `${runtime.name} ${runtime.version}`,\n ``,\n `## Config`,\n `Config: ${configLine}`,\n ``,\n `## App`,\n routesLine,\n ``,\n ].join('\\n')\n}\n\nexport async function infoCommand(): Promise<void> {\n const cwd = process.cwd()\n const output = await buildInfo({ cwd })\n console.log(output)\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,YAAY,oBAAoB;AACzC,SAAS,eAAe;AA4BxB,SAAS,uBAAoC;AAC3C,QAAM,IAAI;AACV,MAAI,EAAE,KAAK,SAAS;AAClB,WAAO,EAAE,MAAM,OAAO,SAAS,EAAE,IAAI,QAAQ;AAAA,EAC/C;AACA,MAAI,EAAE,MAAM,SAAS;AACnB,WAAO,EAAE,MAAM,QAAQ,SAAS,EAAE,KAAK,QAAQ,KAAK;AAAA,EACtD;AACA,MAAI,OAAO,YAAY,eAAe,QAAQ,SAAS,MAAM;AAC3D,WAAO,EAAE,MAAM,QAAQ,SAAS,QAAQ,SAAS,KAAK;AAAA,EACxD;AACA,SAAO,EAAE,MAAM,WAAW,SAAS,IAAI;AACzC;AAEA,SAAS,uBAAuB,KAAwC;AACtE,QAAM,OAAO,QAAQ,KAAK,cAAc;AACxC,MAAI,CAAC,WAAW,IAAI,EAAG,QAAO;AAC9B,MAAI;AACF,UAAM,MAAM,aAAa,MAAM,OAAO;AACtC,UAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,kBAAkB,KAAqC;AACpE,MAAI;AACF,UAAM,WAAW,GAAG;AACpB,WAAO,EAAE,IAAI,MAAM,SAAS,YAAY;AAAA,EAC1C,SAAS,KAAK;AACZ,WAAO,EAAE,IAAI,OAAO,SAAU,IAAc,QAAQ;AAAA,EACtD;AACF;AAEA,SAAS,mBAAmB,KAAqB;AAC/C,QAAM,SAAS,QAAQ,KAAK,KAAK;AACjC,MAAI,CAAC,WAAW,MAAM,EAAG,QAAO;AAChC,QAAM,OAAO,WAAW,MAAM;AAC9B,MAAI,QAAQ;AACZ,WAAS,KAAK,MAAmF;AAC/F,QAAI,KAAK,KAAM;AACf,eAAW,SAAS,KAAK,SAAU,MAAK,KAAc;AAAA,EACxD;AACA,OAAK,IAAI;AACT,SAAO;AACT;AAEA,eAAsB,UAAU,MAAsC;AACpE,QAAM,MAAM,KAAK;AACjB,QAAM,UAAU,KAAK,oBAAoB,MAAM,uBAAuB,GAAG;AACzE,QAAM,WAAW,KAAK,iBAAiB,sBAAsB;AAC7D,QAAM,UAAU,KAAK,eAAe,MAAM,kBAAkB,GAAG;AAC/D,QAAM,WAAW,KAAK,gBAAgB,MAAM,mBAAmB,GAAG;AAElE,QAAM,MAAM,QAAQ;AACpB,QAAM,SAAS,MAAM,QAAQ;AAE7B,MAAI,cAAc;AAClB,MAAI,YAA2B;AAC/B,MAAI;AACF,kBAAc,SAAS;AAAA,EACzB,SAAS,KAAK;AACZ,gBAAa,IAAc;AAAA,EAC7B;AAEA,QAAM,cAAc,KAAK,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,WAAW,GAAG,KAAK;AAEtE,QAAM,aAAa,OAAO,KAAK,OAAO,kBAAa,OAAO,OAAO;AAEjE,QAAM,aAAa,YAAY,gBAAgB,SAAS,KAAK,WAAW,WAAW;AAEnF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,WAAW;AAAA,IACvB;AAAA,IACA;AAAA,IACA,GAAG,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,IAClC;AAAA,IACA;AAAA,IACA,WAAW,UAAU;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,eAAsB,cAA6B;AACjD,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,SAAS,MAAM,UAAU,EAAE,IAAI,CAAC;AACtC,UAAQ,IAAI,MAAM;AACpB;","names":[]}
@@ -4,7 +4,6 @@ import {
4
4
  BATCH_PATH,
5
5
  CSP_REPORT_PATH,
6
6
  CsrfReadinessStore,
7
- TRACE_HEADER,
8
7
  applySecurityHeaders,
9
8
  createCorsHandler,
10
9
  createPluginRunnerFromConfig,
@@ -12,39 +11,50 @@ import {
12
11
  createViteLoader,
13
12
  executeAction,
14
13
  executeRoute,
15
- extractTraceId,
16
14
  findSuggestion,
17
- generateNonce,
18
15
  handleBatchRequest,
19
16
  handleCspReport,
20
17
  handleCsrfReadiness,
21
18
  mountAgent
22
- } from "./chunk-BIVCP6X5.js";
19
+ } from "./chunk-C62IZEJI.js";
23
20
  import {
24
21
  resolveProvider
25
- } from "./chunk-6GGWS7J3.js";
22
+ } from "./chunk-5YPXXSYY.js";
26
23
  import {
27
24
  dispatchControllerRequest,
28
25
  incomingMessageToHandlerRequest,
29
- logRequest,
30
26
  sendError
31
- } from "./chunk-T5C46IIU.js";
27
+ } from "./chunk-HWBRS4DZ.js";
28
+ import {
29
+ generateNonce
30
+ } from "./chunk-RPET332G.js";
31
+ import {
32
+ TRACE_HEADER,
33
+ extractTraceId
34
+ } from "./chunk-7PM6K5EV.js";
35
+ import {
36
+ logRequest
37
+ } from "./chunk-2AMLGJJA.js";
32
38
  import {
33
39
  generateManifest
34
- } from "./chunk-ZB7D62OA.js";
40
+ } from "./chunk-KUZVRJ7M.js";
35
41
  import {
36
42
  scanAgents
37
- } from "./chunk-LNVMHQ2Z.js";
43
+ } from "./chunk-EVZKNA2W.js";
38
44
  import {
45
+ ACTION_SCHEMAS_DIR,
39
46
  matchRoute,
40
47
  scanServerActions,
41
48
  scanServerActionsEnriched,
42
49
  scanServerRoutes,
43
50
  scanWebSocketRoutes
44
- } from "./chunk-BMHS4WAN.js";
45
- import "./chunk-A7JBF5FO.js";
51
+ } from "./chunk-XS7EX55U.js";
52
+ import "./chunk-FD4ZDTQ6.js";
53
+ import "./chunk-U5PWXS3J.js";
54
+ import "./chunk-VI7ZANB3.js";
46
55
  import "./chunk-VQIUTCK2.js";
47
56
  export {
57
+ ACTION_SCHEMAS_DIR,
48
58
  BATCH_PATH,
49
59
  CSP_REPORT_PATH,
50
60
  CsrfReadinessStore,
@@ -76,4 +86,4 @@ export {
76
86
  scanWebSocketRoutes,
77
87
  sendError
78
88
  };
79
- //# sourceMappingURL=internal-api-V5L65YSJ.js.map
89
+ //# sourceMappingURL=internal-api-IP35YU3G.js.map
@@ -1,25 +1,28 @@
1
1
  import {
2
- dispatchControllerRequest,
2
+ dispatchControllerRequest
3
+ } from "./chunk-SL7YUHPV.js";
4
+ import {
3
5
  mountAgent
4
- } from "./chunk-OJLL4YD6.js";
6
+ } from "./chunk-WOBSEO75.js";
5
7
  import {
6
8
  BATCH_PATH,
7
- TRACE_HEADER,
8
9
  createCorsHandler,
9
10
  executeAction,
10
11
  executeRoute,
11
- extractTraceId,
12
12
  handleBatchRequest,
13
13
  incomingMessageToHandlerRequest,
14
14
  sendError
15
- } from "./chunk-XALU5LCU.js";
15
+ } from "./chunk-RWNYIU6A.js";
16
16
  import "./chunk-47FFT43U.js";
17
17
  import {
18
18
  findSuggestion
19
19
  } from "./chunk-NTDN54XO.js";
20
+ import "./chunk-MCTC6HSE.js";
20
21
  import {
22
+ TRACE_HEADER,
23
+ extractTraceId,
21
24
  logRequest
22
- } from "./chunk-KD5G3YXI.js";
25
+ } from "./chunk-72DMJBXI.js";
23
26
  import {
24
27
  createPluginRunnerFromConfig
25
28
  } from "./chunk-VSLTKX5L.js";
@@ -28,38 +31,49 @@ import {
28
31
  } from "./chunk-TNI4MARH.js";
29
32
  import {
30
33
  createViteLoader
31
- } from "./chunk-7LVM22VG.js";
34
+ } from "./chunk-OQCRCXCP.js";
32
35
  import {
36
+ ACTION_SCHEMAS_DIR,
33
37
  generateManifest,
34
38
  matchRoute,
35
- scanAgents,
36
39
  scanServerActions,
37
40
  scanServerActionsEnriched,
38
41
  scanServerRoutes,
39
42
  scanWebSocketRoutes
40
- } from "./chunk-YGAXV5HR.js";
43
+ } from "./chunk-6J4JWHDJ.js";
41
44
  import "./chunk-DV34VG3N.js";
42
- import "./chunk-FB2HBNIC.js";
45
+ import {
46
+ scanAgents
47
+ } from "./chunk-L4VFNFDL.js";
48
+ import "./chunk-BX6EUYHU.js";
43
49
  import {
44
50
  CSP_REPORT_PATH,
45
51
  CsrfReadinessStore,
46
52
  applySecurityHeaders,
47
53
  handleCspReport,
48
54
  handleCsrfReadiness
49
- } from "./chunk-MTEWLGVY.js";
50
- import "./chunk-OLGPYOLO.js";
55
+ } from "./chunk-BPYMC7SU.js";
56
+ import "./chunk-IRQGAC4L.js";
57
+ import "./chunk-P6OS7652.js";
51
58
  import "./chunk-AVQU5CQF.js";
52
59
  import "./chunk-ACKBVBUI.js";
53
60
  import "./chunk-IZ3TIL6K.js";
54
61
  import {
55
62
  resolveProvider
56
- } from "./chunk-6E5WKMDS.js";
63
+ } from "./chunk-3PBAN2YE.js";
64
+ import "./chunk-YSJOZEI6.js";
57
65
  import {
58
66
  generateNonce
59
- } from "./chunk-JA2ZAT5Q.js";
60
- import "./chunk-U267AOWS.js";
67
+ } from "./chunk-Z4PJMZLM.js";
68
+ import "./chunk-UMNXCU3K.js";
69
+ import "./chunk-52PDWL5S.js";
70
+ import "./chunk-5K4TDLRG.js";
71
+ import "./chunk-ZWN3AODA.js";
72
+ import "./chunk-D4VP2QPR.js";
73
+ import "./chunk-YN4W7LCX.js";
61
74
  import "./chunk-XTHN6JBX.js";
62
75
  export {
76
+ ACTION_SCHEMAS_DIR,
63
77
  BATCH_PATH,
64
78
  CSP_REPORT_PATH,
65
79
  CsrfReadinessStore,
@@ -91,4 +105,4 @@ export {
91
105
  scanWebSocketRoutes,
92
106
  sendError
93
107
  };
94
- //# sourceMappingURL=internal-api-WEOSTMSN.js.map
108
+ //# sourceMappingURL=internal-api-OPU456AT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"mappings":"","names":[]}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import "tsx/esm";
3
+ import {
4
+ deepMerge,
5
+ loadConfig
6
+ } from "./chunk-QTHVHNJJ.js";
7
+ import "./chunk-3QPVEJ7D.js";
8
+ import "./chunk-U5PWXS3J.js";
9
+ import "./chunk-FH3SQR6P.js";
10
+ import "./chunk-ZNZISJDZ.js";
11
+ import "./chunk-VI7ZANB3.js";
12
+ export {
13
+ deepMerge,
14
+ loadConfig
15
+ };
16
+ //# sourceMappingURL=load-config-4ATXQUN3.js.map
@@ -0,0 +1,44 @@
1
+ import { ViteDevServer } from 'vite';
2
+
3
+ type LoadModule = (path: string) => Promise<Record<string, unknown>>;
4
+ declare function createViteLoader(vite: ViteDevServer): LoadModule;
5
+ /**
6
+ * The loader `theokit start` uses to read user-authored modules off disk.
7
+ *
8
+ * It delegates to {@link importUserModule} rather than calling `import()` itself
9
+ * (usetheokit/theokit#418). The raw call worked only because the CLI bin starts with
10
+ * `import "tsx/esm"`, registering a global ESM hook — so this function depended on a side effect it
11
+ * never performed, from a module it does not reference. Any caller that reached it another way (a
12
+ * test booting the real handler, an app embedding the framework) got
13
+ * `ERR_UNKNOWN_FILE_EXTENSION` for a `.ts` file, or `__filename is not defined in ES module scope`
14
+ * from tsx's CJS output.
15
+ *
16
+ * That was invisible above Node 22.18, where native type stripping loads the file regardless, which
17
+ * is how it survived on a project declaring `engines.node: ">=22.12.0"`.
18
+ *
19
+ * Production is unchanged in cost: `importUserModule` tries the native import FIRST, so with the
20
+ * hook registered it takes exactly the path this used to take, and the fallback only runs where the
21
+ * raw call would have thrown.
22
+ */
23
+ declare function createProductionLoader(): LoadModule;
24
+
25
+ interface ServerRouteNode {
26
+ filePath: string;
27
+ routePath: string;
28
+ paramNames: string[];
29
+ pattern: RegExp;
30
+ /** HTTP methods (uppercase) the route file exports. Optional for backward
31
+ * compatibility with manifests generated before G1. Empty array means the
32
+ * file has no HTTP exports (util-only); undefined means "not detected". */
33
+ methods?: string[];
34
+ }
35
+ declare function compilePattern(routePath: string): {
36
+ pattern: RegExp;
37
+ paramNames: string[];
38
+ };
39
+ declare function matchRoute(url: string, routes: ServerRouteNode[]): {
40
+ route: ServerRouteNode;
41
+ params: Record<string, string>;
42
+ } | null;
43
+
44
+ export { type LoadModule as L, type ServerRouteNode as S, createProductionLoader as a, createViteLoader as b, compilePattern as c, matchRoute as m };
@@ -2,17 +2,17 @@
2
2
  import "tsx/esm";
3
3
  import {
4
4
  createAgentSsrLoader
5
- } from "./chunk-PXFXSFJL.js";
5
+ } from "./chunk-NZ5JU6D3.js";
6
6
  import {
7
7
  extractAppResources,
8
8
  handleMcpJsonRpc
9
9
  } from "./chunk-2CVV6CNN.js";
10
- import "./chunk-HBU2GIMZ.js";
11
- import "./chunk-6GGWS7J3.js";
10
+ import "./chunk-5YPXXSYY.js";
12
11
  import {
13
12
  scanAgents
14
- } from "./chunk-LNVMHQ2Z.js";
15
- import "./chunk-A7JBF5FO.js";
13
+ } from "./chunk-EVZKNA2W.js";
14
+ import "./chunk-FD4ZDTQ6.js";
15
+ import "./chunk-3QPVEJ7D.js";
16
16
 
17
17
  // src/cli/commands/mcp.ts
18
18
  import { createInterface } from "readline";
@@ -46,7 +46,7 @@ async function serveMcpStdio(mod, name, appResources, streams) {
46
46
  // src/cli/commands/mcp.ts
47
47
  async function mcpCommand(name, deps = {}) {
48
48
  const projectRoot = deps.projectRoot ?? process.cwd();
49
- const agentsDir = deps.agentsDir ?? (await (await import("./load-config-VKD6LKWU.js")).loadConfig(projectRoot)).agentsDir;
49
+ const agentsDir = deps.agentsDir ?? (await (await import("./load-config-4ATXQUN3.js")).loadConfig(projectRoot)).agentsDir;
50
50
  const agent = scanAgents(projectRoot, agentsDir).find((a) => a.name === name);
51
51
  if (!agent) {
52
52
  const names = scanAgents(projectRoot, agentsDir).map((a) => a.name).join(", ");
@@ -75,4 +75,4 @@ async function mcpCommand(name, deps = {}) {
75
75
  export {
76
76
  mcpCommand
77
77
  };
78
- //# sourceMappingURL=mcp-ULUFJNSZ.js.map
78
+ //# sourceMappingURL=mcp-5LLNAGKA.js.map
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env node
2
+ import "tsx/esm";
3
+ import {
4
+ deployedCorsFragment,
5
+ deployedCsrfFragment,
6
+ deployedRuntimeConfigFragment,
7
+ deployedTraceFragment,
8
+ describeDeployedSecurityHeaders,
9
+ renderSecurityHeadersConfigLiteral
10
+ } from "./chunk-E43VJ3E5.js";
11
+ import {
12
+ nodeAdapter
13
+ } from "./chunk-KI4DOTN4.js";
14
+ import {
15
+ buildSecurityHeaders
16
+ } from "./chunk-RPET332G.js";
17
+ import {
18
+ assertServicesUnsupported,
19
+ readManifest
20
+ } from "./chunk-ZNZISJDZ.js";
21
+
22
+ // src/adapters/netlify.ts
23
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
24
+ import { resolve } from "path";
25
+ var NetlifyConflictError = class extends Error {
26
+ constructor(path, currentTo) {
27
+ super(
28
+ `netlify.toml has a conflicting redirect: "${path}" \u2192 "${currentTo}". Remove it manually or edit it to point to "/.netlify/functions/theo" before running the Netlify adapter again.`
29
+ );
30
+ this.name = "NetlifyConflictError";
31
+ }
32
+ };
33
+ function renderNetlifyFunction(opts = {}) {
34
+ const runtimeConfig = deployedRuntimeConfigFragment(opts);
35
+ return [
36
+ `// Generated by Theo \u2014 Netlify Functions adapter`,
37
+ `import { resolve } from 'node:path'`,
38
+ `import { scanServerRoutes, matchRoute, executeRoute, createProductionLoader, extractTraceIdFromRequest, TRACE_HEADER, createCorsWebHandler } from 'theokit/server'`,
39
+ `import { createWebShim } from 'theokit/adapters/web-shim'`,
40
+ `import { buildSecurityHeaders, withSecurityHeaders } from 'theokit/adapters/security-headers'`,
41
+ ``,
42
+ `const cwd = process.cwd()`,
43
+ `const serverDir = resolve(cwd, 'server')`,
44
+ `let routesCache = null`,
45
+ `let loaderCache = null`,
46
+ ``,
47
+ `// #410 \u2014 the security baseline \`theokit start\` puts on every response,`,
48
+ `// carried here as a literal because the deployed function has no`,
49
+ `// theo.config.ts to read. The netlify.toml redirect routes only /api/* here,`,
50
+ `// so this covers the API and not the document Netlify's static host serves`,
51
+ `// (usetheokit/theokit#412).`,
52
+ `const SECURITY_HEADERS_CONFIG = ${renderSecurityHeadersConfigLiteral(opts.securityHeaders)}`,
53
+ `const SECURITY_HEADERS = buildSecurityHeaders(SECURITY_HEADERS_CONFIG, { production: true })`,
54
+ ``,
55
+ ...runtimeConfig.imports,
56
+ ...runtimeConfig.declarations,
57
+ ...deployedCsrfFragment(opts),
58
+ ``,
59
+ ...deployedCorsFragment(opts.cors, "netlify"),
60
+ ``,
61
+ `export default async (request, context) => {`,
62
+ ` // #409 \u2014 the preflight is answered BEFORE anything routes: an OPTIONS the router`,
63
+ ` // handles is an OPTIONS the browser never gets a CORS answer to.`,
64
+ ` const preflight = corsPreflight(request)`,
65
+ ` if (preflight !== null) return withSecurityHeaders(preflight, SECURITY_HEADERS)`,
66
+ ` return withCors(request, withSecurityHeaders(await handleRequest(request), SECURITY_HEADERS))`,
67
+ `}`,
68
+ ``,
69
+ `async function handleRequest(request) {`,
70
+ ` const url = new URL(request.url)`,
71
+ ` if (!url.pathname.startsWith('/api/')) {`,
72
+ ` return new Response('Not Found', { status: 404 })`,
73
+ ` }`,
74
+ ``,
75
+ ` if (!routesCache) routesCache = scanServerRoutes(serverDir)`,
76
+ ` if (!loaderCache) loaderCache = createProductionLoader()`,
77
+ ``,
78
+ ` const match = matchRoute(url.pathname, routesCache)`,
79
+ ` if (!match) {`,
80
+ ` return new Response(JSON.stringify({ error: { code: 'NOT_FOUND' } }), {`,
81
+ ` status: 404,`,
82
+ ` headers: { 'content-type': 'application/json' },`,
83
+ ` })`,
84
+ ` }`,
85
+ ``,
86
+ ` const { req, res, toResponse } = createWebShim(request)`,
87
+ ...deployedTraceFragment("request", " "),
88
+ ` const method = request.method.toUpperCase()`,
89
+ ` // #382 \u2014 the run is not awaited: toResponse() settles at the headers and`,
90
+ ` // carries a live body, so Netlify streams while the handler writes.`,
91
+ ` return toResponse(executeRoute({ route: match.route, method, params: match.params, req, res, loadModule: loaderCache, serverDir, requestId, ...CSRF_CONFIG, ${runtimeConfig.executeRouteSpread} }))`,
92
+ `}`
93
+ ].join("\n");
94
+ }
95
+ var THEO_REDIRECT_FROM = "/api/*";
96
+ var THEO_REDIRECT_TO = "/.netlify/functions/theo";
97
+ function parseRedirectBlocks(lines) {
98
+ const blocks = [];
99
+ let current = null;
100
+ for (let i = 0; i < lines.length; i++) {
101
+ const trimmed = lines[i].trim();
102
+ if (trimmed === "[[redirects]]") {
103
+ if (current) {
104
+ current.endLine = i - 1;
105
+ blocks.push(current);
106
+ }
107
+ current = { startLine: i, endLine: i };
108
+ continue;
109
+ }
110
+ if (current && /^\[(\[|[^[])/.test(trimmed)) {
111
+ current.endLine = i - 1;
112
+ blocks.push(current);
113
+ current = null;
114
+ }
115
+ if (current) {
116
+ const fromMatch = /^from\s*=\s*"([^"]+)"/.exec(trimmed);
117
+ if (fromMatch) current.from = fromMatch[1];
118
+ const toMatch = /^to\s*=\s*"([^"]+)"/.exec(trimmed);
119
+ if (toMatch) current.to = toMatch[1];
120
+ current.endLine = i;
121
+ }
122
+ }
123
+ if (current) blocks.push(current);
124
+ return blocks;
125
+ }
126
+ var THEO_REDIRECT_TARGET = [
127
+ "[[redirects]]",
128
+ ' from = "/api/*"',
129
+ ' to = "/.netlify/functions/theo"',
130
+ " status = 200",
131
+ " force = true"
132
+ ].join("\n");
133
+ var THEO_HEADERS_MARKER = "# Generated by Theo \u2014 security baseline (usetheokit/theokit#412)";
134
+ function renderHeadersBlock(securityHeaders) {
135
+ const values = buildSecurityHeaders(securityHeaders ?? {}, { production: true });
136
+ return [
137
+ THEO_HEADERS_MARKER,
138
+ "[[headers]]",
139
+ ' for = "/*"',
140
+ " [headers.values]",
141
+ ...Object.entries(values).map(([k, v]) => ` ${k} = ${JSON.stringify(v)}`)
142
+ ].join("\n");
143
+ }
144
+ function withoutGeneratedHeaders(source) {
145
+ const lines = source.split(/\r?\n/);
146
+ const start = lines.indexOf(THEO_HEADERS_MARKER);
147
+ if (start < 0) return source;
148
+ const opensSection = (line) => (line ?? "").startsWith("[");
149
+ let end = start + 1;
150
+ while (end < lines.length && !opensSection(lines[end])) end += 1;
151
+ end += 1;
152
+ while (end < lines.length && !opensSection(lines[end])) end += 1;
153
+ return [...lines.slice(0, start), ...lines.slice(end)].join("\n").replace(/\n{3,}/gu, "\n\n");
154
+ }
155
+ function mergeNetlifyToml(existing, securityHeaders) {
156
+ const headersBlock = renderHeadersBlock(securityHeaders);
157
+ if (existing === null || existing.trim().length === 0) {
158
+ return `${THEO_REDIRECT_TARGET}
159
+
160
+ ${headersBlock}
161
+ `;
162
+ }
163
+ existing = withoutGeneratedHeaders(existing);
164
+ const blocks = parseRedirectBlocks(existing.split(/\r?\n/));
165
+ for (const b of blocks) {
166
+ if (b.from !== THEO_REDIRECT_FROM) continue;
167
+ if (b.to === THEO_REDIRECT_TO) {
168
+ const sep2 = existing.endsWith("\n") ? "" : "\n";
169
+ return `${existing}${sep2}
170
+ ${headersBlock}
171
+ `;
172
+ }
173
+ throw new NetlifyConflictError(b.from, b.to ?? "(unknown)");
174
+ }
175
+ const sep = existing.endsWith("\n") ? "" : "\n";
176
+ return `${existing}${sep}
177
+ ${THEO_REDIRECT_TARGET}
178
+
179
+ ${headersBlock}
180
+ `;
181
+ }
182
+ async function buildNetlify(config, cwd, deps = {}, ctx) {
183
+ assertServicesUnsupported("netlify", readManifest(cwd));
184
+ const runNodeBuild = deps.runNodeBuild ?? nodeAdapter.build.bind(nodeAdapter);
185
+ await runNodeBuild(config, cwd, ctx);
186
+ const ensureDir = deps.ensureDir ?? ((p) => mkdirSync(p, { recursive: true }));
187
+ const writeFile = deps.writeFile ?? ((p, c) => {
188
+ writeFileSync(p, c);
189
+ });
190
+ const readTomlIfExists = deps.readTomlIfExists ?? (() => {
191
+ const p = resolve(cwd, "netlify.toml");
192
+ return existsSync(p) ? readFileSync(p, "utf-8") : null;
193
+ });
194
+ const fnDir = resolve(cwd, ".netlify/functions");
195
+ ensureDir(fnDir);
196
+ writeFile(
197
+ resolve(fnDir, "theo.mjs"),
198
+ renderNetlifyFunction({
199
+ securityHeaders: config.security?.headers,
200
+ csrf: config.security?.csrf,
201
+ disallowed: config.security?.disallowed,
202
+ cors: config.security?.cors,
203
+ // #425 — a selector, not a transformer, so it rides as a literal like the values above.
204
+ serialization: config.serialization
205
+ })
206
+ );
207
+ const existingToml = readTomlIfExists();
208
+ const merged = mergeNetlifyToml(existingToml, config.security?.headers);
209
+ writeFile(resolve(cwd, "netlify.toml"), merged);
210
+ console.log("\n \u2713 Netlify output \u2192 .netlify/functions/theo.mjs + netlify.toml");
211
+ console.log(
212
+ `${describeDeployedSecurityHeaders({
213
+ target: "netlify",
214
+ securityHeaders: config.security?.headers,
215
+ mintsNonce: false,
216
+ documentHeaders: "platform-configured"
217
+ })}
218
+ `
219
+ );
220
+ }
221
+ var netlifyAdapter = {
222
+ name: "netlify",
223
+ streamsResponses: true,
224
+ // #409 / #410 — the generated entry calls `executeRoute` with routes, loader
225
+ // and serverDir only. CSRF, route policy, file middleware and Zod validation
226
+ // still run because they live inside `executeRoute`; none of the remaining
227
+ // configurable concerns reach it. Declared explicitly rather than omitted so
228
+ // the gap is a statement in the source and not an absence.
229
+ //
230
+ // `securityHeaders` IS applied -- to every response this function returns.
231
+ // The document is served by Netlify's static host and does not pass through
232
+ // it (usetheokit/theokit#412).
233
+ appliesConfig: ["securityHeaders", "csrf", "disallowed", "cors", "serialization"],
234
+ build(config, cwd, ctx) {
235
+ return buildNetlify(config, cwd, {}, ctx);
236
+ }
237
+ };
238
+ export {
239
+ NetlifyConflictError,
240
+ buildNetlify,
241
+ mergeNetlifyToml,
242
+ netlifyAdapter,
243
+ renderNetlifyFunction
244
+ };
245
+ //# sourceMappingURL=netlify-C2IRCZKI.js.map