@sonordev/site-kit 5.7.0 → 5.8.1

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 (752) hide show
  1. package/README.md +3 -3
  2. package/agent-manifest.json +14 -2
  3. package/dist/AnalyticsProvider-ERNSZ4DH.mjs +12 -0
  4. package/dist/{AnalyticsProvider-EWF7JN2X.mjs.map → AnalyticsProvider-ERNSZ4DH.mjs.map} +1 -1
  5. package/dist/AnalyticsProvider-HE6V5UJD.js +33 -0
  6. package/dist/{AnalyticsProvider-GJFG7YXA.js.map → AnalyticsProvider-HE6V5UJD.js.map} +1 -1
  7. package/dist/{BlogViewTracker-CKYG6MYU.mjs → BlogViewTracker-2NQ5LBVR.mjs} +13 -10
  8. package/dist/BlogViewTracker-2NQ5LBVR.mjs.map +1 -0
  9. package/dist/{BlogViewTracker-2D3IJPJK.js → BlogViewTracker-4OGWSC2Q.js} +14 -11
  10. package/dist/BlogViewTracker-4OGWSC2Q.js.map +1 -0
  11. package/dist/ChatWidget-67CHHONZ.js +24 -0
  12. package/dist/{ChatWidget-AWP6GBVW.js.map → ChatWidget-67CHHONZ.js.map} +1 -1
  13. package/dist/ChatWidget-T4RICLLT.mjs +15 -0
  14. package/dist/{ChatWidget-Z5QXDZP3.mjs.map → ChatWidget-T4RICLLT.mjs.map} +1 -1
  15. package/dist/EngageWidget-TDW2ZI3Q.js +21 -0
  16. package/dist/{EngageWidget-VT4DYXVO.js.map → EngageWidget-TDW2ZI3Q.js.map} +1 -1
  17. package/dist/EngageWidget-WXEQTV4X.mjs +12 -0
  18. package/dist/{EngageWidget-BKEY5TPO.mjs.map → EngageWidget-WXEQTV4X.mjs.map} +1 -1
  19. package/dist/{FileField-62ZWZMQK.js → FileField-DEVOXJSO.js} +6 -6
  20. package/dist/{FileField-62ZWZMQK.js.map → FileField-DEVOXJSO.js.map} +1 -1
  21. package/dist/{FileField-JJN5QKDL.mjs → FileField-Y5YM365S.mjs} +5 -5
  22. package/dist/{FileField-JJN5QKDL.mjs.map → FileField-Y5YM365S.mjs.map} +1 -1
  23. package/dist/{FormSpotlight-URS4XRS7.js → FormSpotlight-4Q5FM3YS.js} +25 -21
  24. package/dist/FormSpotlight-4Q5FM3YS.js.map +1 -0
  25. package/dist/{FormSpotlight-OTFB6QM5.mjs → FormSpotlight-T3ASGUYB.mjs} +11 -7
  26. package/dist/FormSpotlight-T3ASGUYB.mjs.map +1 -0
  27. package/dist/{FormStage-FVKMIV73.js → FormStage-PSAIPZBS.js} +20 -15
  28. package/dist/FormStage-PSAIPZBS.js.map +1 -0
  29. package/dist/{FormStage-VPGOCMAV.mjs → FormStage-U5V4MI5Q.mjs} +9 -4
  30. package/dist/FormStage-U5V4MI5Q.mjs.map +1 -0
  31. package/dist/ManagedForm-EAZOMNSL.mjs +16 -0
  32. package/dist/{ManagedForm-CXVDJMHN.mjs.map → ManagedForm-EAZOMNSL.mjs.map} +1 -1
  33. package/dist/ManagedForm-R6DJXU34.js +25 -0
  34. package/dist/{ManagedForm-FGNTDGED.js.map → ManagedForm-R6DJXU34.js.map} +1 -1
  35. package/dist/{ManagedNewsletterForm-SQYB4BZU.mjs → ManagedNewsletterForm-5RY3TWPQ.mjs} +9 -7
  36. package/dist/ManagedNewsletterForm-5RY3TWPQ.mjs.map +1 -0
  37. package/dist/{ManagedNewsletterForm-3O5L44AZ.js → ManagedNewsletterForm-VX6GMZXJ.js} +10 -8
  38. package/dist/ManagedNewsletterForm-VX6GMZXJ.js.map +1 -0
  39. package/dist/{SignalCore-RFBOBNLQ.js → SignalCore-MWHF2WG4.js} +14 -20
  40. package/dist/SignalCore-MWHF2WG4.js.map +1 -0
  41. package/dist/{SignalCore-M2PKKIGH.mjs → SignalCore-ZT6EQGV3.mjs} +8 -14
  42. package/dist/SignalCore-ZT6EQGV3.mjs.map +1 -0
  43. package/dist/SitemapSync-OG4TQLDB.mjs +9 -0
  44. package/dist/{SitemapSync-4OVMIIGC.mjs.map → SitemapSync-OG4TQLDB.mjs.map} +1 -1
  45. package/dist/SitemapSync-Z62BGZMV.js +18 -0
  46. package/dist/{SitemapSync-RK3SQ4M2.js.map → SitemapSync-Z62BGZMV.js.map} +1 -1
  47. package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
  48. package/dist/analytics/index.js +10 -9
  49. package/dist/analytics/index.mjs +5 -4
  50. package/dist/api-D745LGGU.mjs +0 -1
  51. package/dist/api-XR5APCH3.js +0 -1
  52. package/dist/blog/BlogLayout.d.ts +3 -1
  53. package/dist/blog/BlogLayout.d.ts.map +1 -1
  54. package/dist/blog/BlogList.d.ts +7 -1
  55. package/dist/blog/BlogList.d.ts.map +1 -1
  56. package/dist/blog/BlogPost.d.ts +20 -1
  57. package/dist/blog/BlogPost.d.ts.map +1 -1
  58. package/dist/blog/BlogSidebar.d.ts +3 -1
  59. package/dist/blog/BlogSidebar.d.ts.map +1 -1
  60. package/dist/blog/BlogViewTracker.d.ts +8 -2
  61. package/dist/blog/BlogViewTracker.d.ts.map +1 -1
  62. package/dist/blog/ClusterLandingPage.d.ts +3 -1
  63. package/dist/blog/ClusterLandingPage.d.ts.map +1 -1
  64. package/dist/blog/ClusterNavigation.d.ts +5 -2
  65. package/dist/blog/ClusterNavigation.d.ts.map +1 -1
  66. package/dist/blog/RelatedPosts.d.ts +3 -1
  67. package/dist/blog/RelatedPosts.d.ts.map +1 -1
  68. package/dist/blog/index.d.ts +1 -1
  69. package/dist/blog/index.d.ts.map +1 -1
  70. package/dist/blog/index.js +40 -31
  71. package/dist/blog/index.js.map +1 -1
  72. package/dist/blog/index.mjs +11 -6
  73. package/dist/blog/index.mjs.map +1 -1
  74. package/dist/blog/processBlogHtml.d.ts +19 -2
  75. package/dist/blog/processBlogHtml.d.ts.map +1 -1
  76. package/dist/blog/public-reads.d.ts +27 -0
  77. package/dist/blog/public-reads.d.ts.map +1 -0
  78. package/dist/blog/server-core.d.ts +76 -10
  79. package/dist/blog/server-core.d.ts.map +1 -1
  80. package/dist/blog/server-ui.js +29 -23
  81. package/dist/blog/server-ui.js.map +1 -1
  82. package/dist/blog/server-ui.mjs +12 -6
  83. package/dist/blog/server-ui.mjs.map +1 -1
  84. package/dist/blog/server.d.ts +76 -10
  85. package/dist/blog/server.d.ts.map +1 -1
  86. package/dist/blog/server.js +54 -47
  87. package/dist/blog/server.mjs +5 -2
  88. package/dist/brand/extract-brand-profile.d.ts +36 -2
  89. package/dist/brand/extract-brand-profile.d.ts.map +1 -1
  90. package/dist/{chunk-MW2M6O7A.mjs → chunk-26EKSVXM.mjs} +4 -4
  91. package/dist/{chunk-MW2M6O7A.mjs.map → chunk-26EKSVXM.mjs.map} +1 -1
  92. package/dist/{chunk-D553G64G.js → chunk-2HPQTRUB.js} +13 -13
  93. package/dist/{chunk-D553G64G.js.map → chunk-2HPQTRUB.js.map} +1 -1
  94. package/dist/{chunk-BFJOZ3MU.mjs → chunk-3EY5E35M.mjs} +36 -71
  95. package/dist/chunk-3EY5E35M.mjs.map +1 -0
  96. package/dist/{chunk-BUJWXSYZ.mjs → chunk-3TQUARVN.mjs} +4 -4
  97. package/dist/{chunk-BUJWXSYZ.mjs.map → chunk-3TQUARVN.mjs.map} +1 -1
  98. package/dist/{chunk-OYOO2OO5.js → chunk-3VRWKKTD.js} +10 -10
  99. package/dist/{chunk-OYOO2OO5.js.map → chunk-3VRWKKTD.js.map} +1 -1
  100. package/dist/{chunk-BFM5PEFV.js → chunk-43I7U5AI.js} +56 -177
  101. package/dist/chunk-43I7U5AI.js.map +1 -0
  102. package/dist/{chunk-ILNCUSXW.mjs → chunk-4L7OHRWB.mjs} +12 -9
  103. package/dist/chunk-4L7OHRWB.mjs.map +1 -0
  104. package/dist/chunk-4LYW6PMU.mjs +72 -0
  105. package/dist/chunk-4LYW6PMU.mjs.map +1 -0
  106. package/dist/chunk-4TLFZ6NR.mjs +16 -0
  107. package/dist/chunk-4TLFZ6NR.mjs.map +1 -0
  108. package/dist/{chunk-JQ7M6CVL.mjs → chunk-4VSDMNQU.mjs} +3 -3
  109. package/dist/{chunk-JQ7M6CVL.mjs.map → chunk-4VSDMNQU.mjs.map} +1 -1
  110. package/dist/{chunk-4B4S56WJ.mjs → chunk-5B4J3IBX.mjs} +75 -21
  111. package/dist/chunk-5B4J3IBX.mjs.map +1 -0
  112. package/dist/{chunk-M5GY2AI3.mjs → chunk-5K6B4LWV.mjs} +4 -10
  113. package/dist/chunk-5K6B4LWV.mjs.map +1 -0
  114. package/dist/chunk-5SANRSX3.mjs +17 -0
  115. package/dist/chunk-5SANRSX3.mjs.map +1 -0
  116. package/dist/chunk-5XFFUP6D.js +100 -0
  117. package/dist/chunk-5XFFUP6D.js.map +1 -0
  118. package/dist/chunk-5YA6SI4Z.mjs +0 -1
  119. package/dist/{chunk-TDJKGN5Q.mjs → chunk-62Y4W4LR.mjs} +216 -103
  120. package/dist/chunk-62Y4W4LR.mjs.map +1 -0
  121. package/dist/{chunk-3CLP35TT.mjs → chunk-6S3JE66D.mjs} +62 -97
  122. package/dist/chunk-6S3JE66D.mjs.map +1 -0
  123. package/dist/{chunk-4A5V73SR.mjs → chunk-6WEZWYRU.mjs} +9 -9
  124. package/dist/{chunk-4A5V73SR.mjs.map → chunk-6WEZWYRU.mjs.map} +1 -1
  125. package/dist/{chunk-JTF4DFUF.mjs → chunk-7AEVA667.mjs} +4 -4
  126. package/dist/{chunk-JTF4DFUF.mjs.map → chunk-7AEVA667.mjs.map} +1 -1
  127. package/dist/{chunk-H65OX263.js → chunk-7DV7Y7BZ.js} +15 -15
  128. package/dist/{chunk-H65OX263.js.map → chunk-7DV7Y7BZ.js.map} +1 -1
  129. package/dist/{chunk-7ZX6TO6C.mjs → chunk-7H4HB4UZ.mjs} +50 -26
  130. package/dist/chunk-7H4HB4UZ.mjs.map +1 -0
  131. package/dist/{chunk-FO4KGPGF.js → chunk-7TC3GRXQ.js} +73 -38
  132. package/dist/chunk-7TC3GRXQ.js.map +1 -0
  133. package/dist/{chunk-UQ5YULFU.mjs → chunk-AUHUEIBB.mjs} +4 -4
  134. package/dist/{chunk-UQ5YULFU.mjs.map → chunk-AUHUEIBB.mjs.map} +1 -1
  135. package/dist/{chunk-BQGEVMIR.mjs → chunk-AWF73RU2.mjs} +5 -5
  136. package/dist/{chunk-BQGEVMIR.mjs.map → chunk-AWF73RU2.mjs.map} +1 -1
  137. package/dist/{chunk-ELQ4SRRR.js → chunk-BHBW2SZF.js} +15 -15
  138. package/dist/{chunk-ELQ4SRRR.js.map → chunk-BHBW2SZF.js.map} +1 -1
  139. package/dist/{chunk-RNAGCAIB.js → chunk-BIGXEYKT.js} +7 -7
  140. package/dist/{chunk-RNAGCAIB.js.map → chunk-BIGXEYKT.js.map} +1 -1
  141. package/dist/chunk-BQP6JIE2.mjs +28 -0
  142. package/dist/chunk-BQP6JIE2.mjs.map +1 -0
  143. package/dist/{chunk-VFGEY6FJ.js → chunk-BY35X57A.js} +223 -110
  144. package/dist/chunk-BY35X57A.js.map +1 -0
  145. package/dist/{chunk-3YQILJKJ.js → chunk-CGCUHIAR.js} +60 -35
  146. package/dist/chunk-CGCUHIAR.js.map +1 -0
  147. package/dist/chunk-CUNZAD46.js +53 -0
  148. package/dist/chunk-CUNZAD46.js.map +1 -0
  149. package/dist/{chunk-FEWWGEQF.js → chunk-CWUYI6LI.js} +4 -4
  150. package/dist/{chunk-FEWWGEQF.js.map → chunk-CWUYI6LI.js.map} +1 -1
  151. package/dist/chunk-CXAXZFFW.js +157 -0
  152. package/dist/chunk-CXAXZFFW.js.map +1 -0
  153. package/dist/{chunk-H4OBGC43.mjs → chunk-DA7IANFG.mjs} +14 -3
  154. package/dist/chunk-DA7IANFG.mjs.map +1 -0
  155. package/dist/{chunk-57AFHENV.mjs → chunk-EHAUNF4V.mjs} +3 -3
  156. package/dist/{chunk-57AFHENV.mjs.map → chunk-EHAUNF4V.mjs.map} +1 -1
  157. package/dist/{chunk-2N27LCZH.js → chunk-FEKPEI2G.js} +9 -9
  158. package/dist/{chunk-2N27LCZH.js.map → chunk-FEKPEI2G.js.map} +1 -1
  159. package/dist/{chunk-LC7AM4J5.js → chunk-FHPW7XVH.js} +77 -20
  160. package/dist/chunk-FHPW7XVH.js.map +1 -0
  161. package/dist/{chunk-JNRHTZL4.js → chunk-FVW6FT6L.js} +73 -29
  162. package/dist/chunk-FVW6FT6L.js.map +1 -0
  163. package/dist/{chunk-YKUEFRZI.js → chunk-FWW4K6QP.js} +14 -14
  164. package/dist/{chunk-YKUEFRZI.js.map → chunk-FWW4K6QP.js.map} +1 -1
  165. package/dist/{chunk-JNAXDFC4.mjs → chunk-GF4LV5LX.mjs} +38 -156
  166. package/dist/chunk-GF4LV5LX.mjs.map +1 -0
  167. package/dist/{chunk-C563AHZZ.mjs → chunk-GKFTJ5AF.mjs} +3 -3
  168. package/dist/{chunk-C563AHZZ.mjs.map → chunk-GKFTJ5AF.mjs.map} +1 -1
  169. package/dist/{chunk-OZ3FU4BT.js → chunk-H5NBFNND.js} +2 -2
  170. package/dist/chunk-H5NBFNND.js.map +1 -0
  171. package/dist/chunk-HCN3IKMW.mjs +106 -0
  172. package/dist/chunk-HCN3IKMW.mjs.map +1 -0
  173. package/dist/{chunk-6FC5Q4KU.mjs → chunk-HOJ4J4X2.mjs} +30 -12
  174. package/dist/chunk-HOJ4J4X2.mjs.map +1 -0
  175. package/dist/{chunk-H6YVT3BL.js → chunk-I3ND4XYW.js} +12 -9
  176. package/dist/chunk-I3ND4XYW.js.map +1 -0
  177. package/dist/chunk-I7AZC5ZQ.js +0 -1
  178. package/dist/{chunk-V5THCFPG.mjs → chunk-JFJ7NHS3.mjs} +4 -4
  179. package/dist/{chunk-V5THCFPG.mjs.map → chunk-JFJ7NHS3.mjs.map} +1 -1
  180. package/dist/{chunk-KXGD4E7G.js → chunk-JI4EUPHB.js} +7 -7
  181. package/dist/{chunk-KXGD4E7G.js.map → chunk-JI4EUPHB.js.map} +1 -1
  182. package/dist/{chunk-GZJE23Y5.mjs → chunk-JLVCWC6A.mjs} +2 -2
  183. package/dist/chunk-JLVCWC6A.mjs.map +1 -0
  184. package/dist/chunk-JOYMIGR2.mjs +0 -1
  185. package/dist/chunk-JS75ORH7.js +0 -1
  186. package/dist/{chunk-Q7347KP6.mjs → chunk-JX5SM2MX.mjs} +6 -12
  187. package/dist/chunk-JX5SM2MX.mjs.map +1 -0
  188. package/dist/chunk-K4TCEAUX.js +52 -0
  189. package/dist/chunk-K4TCEAUX.js.map +1 -0
  190. package/dist/chunk-KV7XXLJV.mjs +30 -0
  191. package/dist/chunk-KV7XXLJV.mjs.map +1 -0
  192. package/dist/{chunk-JTCQJKJE.js → chunk-LIAISQUE.js} +76 -111
  193. package/dist/chunk-LIAISQUE.js.map +1 -0
  194. package/dist/{chunk-CPY74A4F.js → chunk-LMEUYRRR.js} +72 -106
  195. package/dist/chunk-LMEUYRRR.js.map +1 -0
  196. package/dist/{chunk-4WBTM6YE.js → chunk-LOEP76MQ.js} +4 -4
  197. package/dist/{chunk-4WBTM6YE.js.map → chunk-LOEP76MQ.js.map} +1 -1
  198. package/dist/chunk-LVGSOW2F.js +32 -0
  199. package/dist/chunk-LVGSOW2F.js.map +1 -0
  200. package/dist/{chunk-DOB37PV4.js → chunk-M45AL7EA.js} +37 -19
  201. package/dist/chunk-M45AL7EA.js.map +1 -0
  202. package/dist/{chunk-RCSTDJUH.js → chunk-M4UVFUFR.js} +8 -13
  203. package/dist/chunk-M4UVFUFR.js.map +1 -0
  204. package/dist/{chunk-R2SXXFXZ.mjs → chunk-MI2SRBCR.mjs} +3 -3
  205. package/dist/{chunk-R2SXXFXZ.mjs.map → chunk-MI2SRBCR.mjs.map} +1 -1
  206. package/dist/chunk-MLVHVKFT.mjs +148 -0
  207. package/dist/chunk-MLVHVKFT.mjs.map +1 -0
  208. package/dist/{chunk-L7ACQ6PC.js → chunk-MOAYT3KN.js} +4 -4
  209. package/dist/{chunk-L7ACQ6PC.js.map → chunk-MOAYT3KN.js.map} +1 -1
  210. package/dist/chunk-NG2TTI7D.js +8 -0
  211. package/dist/{chunk-5TXXTYXL.js.map → chunk-NG2TTI7D.js.map} +1 -1
  212. package/dist/{chunk-C4PZ2R3B.js → chunk-NLDN6PYM.js} +10 -10
  213. package/dist/{chunk-C4PZ2R3B.js.map → chunk-NLDN6PYM.js.map} +1 -1
  214. package/dist/chunk-NN2YE5WT.js +0 -1
  215. package/dist/chunk-NNZDWY3L.mjs +0 -1
  216. package/dist/chunk-NRBITVDK.js +114 -0
  217. package/dist/chunk-NRBITVDK.js.map +1 -0
  218. package/dist/{chunk-TSZIACRC.js → chunk-OBKYF4TP.js} +6 -12
  219. package/dist/chunk-OBKYF4TP.js.map +1 -0
  220. package/dist/{chunk-TP7H6BSK.mjs → chunk-OE7CTIOU.mjs} +73 -30
  221. package/dist/chunk-OE7CTIOU.mjs.map +1 -0
  222. package/dist/chunk-OESGRWI4.mjs +6 -0
  223. package/dist/{chunk-QRBPT6Z6.mjs.map → chunk-OESGRWI4.mjs.map} +1 -1
  224. package/dist/{chunk-UJ6CHZAI.mjs → chunk-OEW2LFOV.js} +169 -25
  225. package/dist/chunk-OEW2LFOV.js.map +1 -0
  226. package/dist/chunk-P4Y75QSU.js +19 -0
  227. package/dist/chunk-P4Y75QSU.js.map +1 -0
  228. package/dist/{chunk-47XQWV4S.mjs → chunk-PQVQAX67.mjs} +3 -3
  229. package/dist/{chunk-47XQWV4S.mjs.map → chunk-PQVQAX67.mjs.map} +1 -1
  230. package/dist/chunk-QRHVMTHF.mjs +94 -0
  231. package/dist/chunk-QRHVMTHF.mjs.map +1 -0
  232. package/dist/{chunk-FBDHKYNF.mjs → chunk-R4B3DFF4.mjs} +3 -3
  233. package/dist/{chunk-FBDHKYNF.mjs.map → chunk-R4B3DFF4.mjs.map} +1 -1
  234. package/dist/chunk-R7GHP3FY.js +81 -0
  235. package/dist/chunk-R7GHP3FY.js.map +1 -0
  236. package/dist/{chunk-4UVM7E2W.js → chunk-S5VL7AWW.js} +3 -3
  237. package/dist/{chunk-4UVM7E2W.js.map → chunk-S5VL7AWW.js.map} +1 -1
  238. package/dist/{chunk-P4TB4ROG.js → chunk-SEP5D4MI.js} +8 -2
  239. package/dist/chunk-SEP5D4MI.js.map +1 -0
  240. package/dist/{chunk-L4V6TKMJ.mjs → chunk-U2V542EO.mjs} +7 -3
  241. package/dist/chunk-U2V542EO.mjs.map +1 -0
  242. package/dist/{chunk-HBN4A2N4.mjs → chunk-U6H5ZY3B.mjs} +3 -3
  243. package/dist/{chunk-HBN4A2N4.mjs.map → chunk-U6H5ZY3B.mjs.map} +1 -1
  244. package/dist/{chunk-H7274TKR.mjs → chunk-VJV7WUR2.mjs} +12 -4
  245. package/dist/chunk-VJV7WUR2.mjs.map +1 -0
  246. package/dist/{chunk-F3AKYZOH.js → chunk-WED6ZDVS.js} +6 -13
  247. package/dist/chunk-WED6ZDVS.js.map +1 -0
  248. package/dist/{chunk-5B4FABFK.js → chunk-WS7MH3GD.js} +14 -2
  249. package/dist/chunk-WS7MH3GD.js.map +1 -0
  250. package/dist/{chunk-XLPU3TEE.mjs → chunk-X22BGNVL.mjs} +4 -4
  251. package/dist/{chunk-XLPU3TEE.mjs.map → chunk-X22BGNVL.mjs.map} +1 -1
  252. package/dist/{chunk-IPV2TUAT.js → chunk-XA2GJFVM.js} +12 -4
  253. package/dist/chunk-XA2GJFVM.js.map +1 -0
  254. package/dist/chunk-XBX2K3GA.js +33 -0
  255. package/dist/chunk-XBX2K3GA.js.map +1 -0
  256. package/dist/{chunk-ABZGEHTC.mjs → chunk-XSAHJ2BB.mjs} +3 -3
  257. package/dist/{chunk-ABZGEHTC.mjs.map → chunk-XSAHJ2BB.mjs.map} +1 -1
  258. package/dist/{chunk-6CJP7BFM.js → chunk-XZO5I4RS.mjs} +147 -20
  259. package/dist/chunk-XZO5I4RS.mjs.map +1 -0
  260. package/dist/chunk-Y5QZPUL3.mjs +47 -0
  261. package/dist/chunk-Y5QZPUL3.mjs.map +1 -0
  262. package/dist/{chunk-NOU3JQJK.js → chunk-Y6Z2W45H.js} +8 -8
  263. package/dist/{chunk-NOU3JQJK.js.map → chunk-Y6Z2W45H.js.map} +1 -1
  264. package/dist/{chunk-YYDZ2TYR.js → chunk-YCFYQN2Q.js} +3 -3
  265. package/dist/{chunk-YYDZ2TYR.js.map → chunk-YCFYQN2Q.js.map} +1 -1
  266. package/dist/chunk-YN7QHLWF.js +19 -0
  267. package/dist/chunk-YN7QHLWF.js.map +1 -0
  268. package/dist/{chunk-O2VJZOR2.mjs → chunk-YRNDASQY.mjs} +6 -11
  269. package/dist/chunk-YRNDASQY.mjs.map +1 -0
  270. package/dist/chunk-YU7QZ3PP.mjs +45 -0
  271. package/dist/chunk-YU7QZ3PP.mjs.map +1 -0
  272. package/dist/{chunk-3S5JN6KL.js → chunk-ZV6HIQRQ.js} +6 -6
  273. package/dist/{chunk-3S5JN6KL.js.map → chunk-ZV6HIQRQ.js.map} +1 -1
  274. package/dist/{chunk-RVRN5U7W.mjs → chunk-ZVI7MBVF.mjs} +73 -38
  275. package/dist/chunk-ZVI7MBVF.mjs.map +1 -0
  276. package/dist/cli/agent/checks.d.ts +15 -1
  277. package/dist/cli/agent/checks.d.ts.map +1 -1
  278. package/dist/cli/commands/doctor.d.ts.map +1 -1
  279. package/dist/cli/commands/og.d.ts +26 -8
  280. package/dist/cli/commands/og.d.ts.map +1 -1
  281. package/dist/cli/index.js +683 -323
  282. package/dist/cli/index.mjs +604 -244
  283. package/dist/client/index.js +6 -6
  284. package/dist/client/index.mjs +5 -5
  285. package/dist/commerce/CheckoutForm.d.ts.map +1 -1
  286. package/dist/commerce/ProductDetail.d.ts.map +1 -1
  287. package/dist/commerce/api.d.ts +14 -0
  288. package/dist/commerce/api.d.ts.map +1 -1
  289. package/dist/commerce/index.d.ts +1 -1
  290. package/dist/commerce/index.d.ts.map +1 -1
  291. package/dist/commerce/index.js +61 -56
  292. package/dist/commerce/index.mjs +6 -5
  293. package/dist/config/index.js +3 -3
  294. package/dist/config/index.mjs +1 -1
  295. package/dist/discover-CYXYKHZ2.mjs +4 -0
  296. package/dist/{discover-FGTKWOL3.mjs.map → discover-CYXYKHZ2.mjs.map} +1 -1
  297. package/dist/discover-NGEPXZOD.js +21 -0
  298. package/dist/{discover-NJZPWTDL.js.map → discover-NGEPXZOD.js.map} +1 -1
  299. package/dist/engage/index.js +12 -10
  300. package/dist/engage/index.js.map +1 -1
  301. package/dist/engage/index.mjs +9 -7
  302. package/dist/engage/index.mjs.map +1 -1
  303. package/dist/fleet/index.js +8 -8
  304. package/dist/fleet/index.mjs +4 -4
  305. package/dist/forms/FormClient.d.ts.map +1 -1
  306. package/dist/forms/FormField.d.ts +7 -1
  307. package/dist/forms/FormField.d.ts.map +1 -1
  308. package/dist/forms/FormSpotlight.d.ts +1 -1
  309. package/dist/forms/FormSpotlight.d.ts.map +1 -1
  310. package/dist/forms/FormStage.d.ts +1 -1
  311. package/dist/forms/FormStage.d.ts.map +1 -1
  312. package/dist/forms/experience-plan.d.ts +0 -1
  313. package/dist/forms/experience-plan.d.ts.map +1 -1
  314. package/dist/forms/field-interactions.d.ts +63 -0
  315. package/dist/forms/field-interactions.d.ts.map +1 -0
  316. package/dist/forms/field-rules.d.ts +41 -0
  317. package/dist/forms/field-rules.d.ts.map +1 -0
  318. package/dist/forms/index.js +25 -23
  319. package/dist/forms/index.js.map +1 -1
  320. package/dist/forms/index.mjs +13 -11
  321. package/dist/forms/index.mjs.map +1 -1
  322. package/dist/forms/server.js +11 -11
  323. package/dist/forms/server.mjs +9 -9
  324. package/dist/forms/static.js +8 -8
  325. package/dist/forms/static.mjs +7 -7
  326. package/dist/forms/tracking-session.d.ts +48 -3
  327. package/dist/forms/tracking-session.d.ts.map +1 -1
  328. package/dist/forms/types.d.ts +11 -0
  329. package/dist/forms/types.d.ts.map +1 -1
  330. package/dist/forms/useForm.d.ts +8 -0
  331. package/dist/forms/useForm.d.ts.map +1 -1
  332. package/dist/forms/useFormTracking.d.ts +29 -4
  333. package/dist/forms/useFormTracking.d.ts.map +1 -1
  334. package/dist/images/index.js +11 -11
  335. package/dist/images/index.mjs +4 -4
  336. package/dist/index.js +72 -68
  337. package/dist/index.js.map +1 -1
  338. package/dist/index.mjs +14 -10
  339. package/dist/index.mjs.map +1 -1
  340. package/dist/layout/client.js +10 -10
  341. package/dist/layout/client.mjs +9 -9
  342. package/dist/layout/index.js +13 -12
  343. package/dist/layout/index.js.map +1 -1
  344. package/dist/layout/index.mjs +11 -10
  345. package/dist/layout/index.mjs.map +1 -1
  346. package/dist/lib-6HOOMENJ.js +0 -1
  347. package/dist/lib-BGAWCSUH.js +0 -1
  348. package/dist/lib-R7IQ4ZHE.mjs +0 -1
  349. package/dist/lib-RSDMEKDQ.mjs +0 -1
  350. package/dist/llms/aiRobots.d.ts +20 -4
  351. package/dist/llms/aiRobots.d.ts.map +1 -1
  352. package/dist/llms/api.d.ts +8 -3
  353. package/dist/llms/api.d.ts.map +1 -1
  354. package/dist/llms/discovery-headers.d.ts +24 -0
  355. package/dist/llms/discovery-headers.d.ts.map +1 -1
  356. package/dist/llms/generateLLMsTxt.d.ts.map +1 -1
  357. package/dist/llms/index.d.ts +2 -2
  358. package/dist/llms/index.d.ts.map +1 -1
  359. package/dist/llms/index.js +45 -96
  360. package/dist/llms/index.js.map +1 -1
  361. package/dist/llms/index.mjs +11 -81
  362. package/dist/llms/index.mjs.map +1 -1
  363. package/dist/llms/links.d.ts +26 -0
  364. package/dist/llms/links.d.ts.map +1 -0
  365. package/dist/llms/types.d.ts +15 -0
  366. package/dist/llms/types.d.ts.map +1 -1
  367. package/dist/llms/wiring.d.ts +22 -0
  368. package/dist/llms/wiring.d.ts.map +1 -1
  369. package/dist/llms/writeLLMsTxt.d.ts +9 -0
  370. package/dist/llms/writeLLMsTxt.d.ts.map +1 -1
  371. package/dist/maps/index.js +5 -5
  372. package/dist/maps/index.mjs +3 -3
  373. package/dist/motion/gsap.d.ts +54 -0
  374. package/dist/motion/gsap.d.ts.map +1 -1
  375. package/dist/motion/gsap.js +34 -4
  376. package/dist/motion/gsap.js.map +1 -1
  377. package/dist/motion/gsap.mjs +33 -5
  378. package/dist/motion/gsap.mjs.map +1 -1
  379. package/dist/og/config.d.ts +6 -0
  380. package/dist/og/config.d.ts.map +1 -1
  381. package/dist/og/contrast.d.ts +33 -0
  382. package/dist/og/contrast.d.ts.map +1 -0
  383. package/dist/og/index.d.ts +2 -0
  384. package/dist/og/index.d.ts.map +1 -1
  385. package/dist/og/index.js +26 -8
  386. package/dist/og/index.mjs +3 -1
  387. package/dist/og/pages.d.ts +101 -0
  388. package/dist/og/pages.d.ts.map +1 -1
  389. package/dist/og/route-copy.d.ts +34 -0
  390. package/dist/og/route-copy.d.ts.map +1 -0
  391. package/dist/og/route-fit.d.ts +77 -0
  392. package/dist/og/route-fit.d.ts.map +1 -0
  393. package/dist/og/route.d.ts +80 -20
  394. package/dist/og/route.d.ts.map +1 -1
  395. package/dist/og/route.js +195 -25
  396. package/dist/og/route.js.map +1 -1
  397. package/dist/og/route.mjs +193 -26
  398. package/dist/og/route.mjs.map +1 -1
  399. package/dist/og/template.d.ts.map +1 -1
  400. package/dist/og/wiring.d.ts +43 -3
  401. package/dist/og/wiring.d.ts.map +1 -1
  402. package/dist/proxy/index.d.ts.map +1 -1
  403. package/dist/proxy/index.js +15 -10
  404. package/dist/proxy/index.js.map +1 -1
  405. package/dist/proxy/index.mjs +12 -7
  406. package/dist/proxy/index.mjs.map +1 -1
  407. package/dist/redirects/index.d.ts +24 -0
  408. package/dist/redirects/index.d.ts.map +1 -1
  409. package/dist/redirects/index.js +11 -8
  410. package/dist/redirects/index.mjs +4 -1
  411. package/dist/redirects/not-found.js +8 -5
  412. package/dist/redirects/not-found.js.map +1 -1
  413. package/dist/redirects/not-found.mjs +4 -1
  414. package/dist/redirects/not-found.mjs.map +1 -1
  415. package/dist/robots/index.d.ts +2 -0
  416. package/dist/robots/index.d.ts.map +1 -1
  417. package/dist/robots/index.js +23 -3
  418. package/dist/robots/index.js.map +1 -1
  419. package/dist/robots/index.mjs +2 -2
  420. package/dist/robots/index.mjs.map +1 -1
  421. package/dist/search/index.js +4 -4
  422. package/dist/search/index.mjs +3 -3
  423. package/dist/seo/ManagedContent.d.ts +4 -2
  424. package/dist/seo/ManagedContent.d.ts.map +1 -1
  425. package/dist/seo/ManagedFAQ.d.ts.map +1 -1
  426. package/dist/seo/ManagedInternalLinks.d.ts.map +1 -1
  427. package/dist/seo/ManagedSchema.d.ts.map +1 -1
  428. package/dist/seo/client.js +6 -6
  429. package/dist/seo/client.mjs +5 -5
  430. package/dist/seo/getManagedMetadata.d.ts.map +1 -1
  431. package/dist/seo/index.js +59 -49
  432. package/dist/seo/index.js.map +1 -1
  433. package/dist/seo/index.mjs +29 -19
  434. package/dist/seo/index.mjs.map +1 -1
  435. package/dist/seo/register-sitemap-cli-impl.d.ts +32 -0
  436. package/dist/seo/register-sitemap-cli-impl.d.ts.map +1 -1
  437. package/dist/seo/register-sitemap-cli.d.ts +7 -0
  438. package/dist/seo/register-sitemap-cli.d.ts.map +1 -1
  439. package/dist/seo/register-sitemap-cli.js +273 -57
  440. package/dist/seo/register-sitemap-cli.mjs +269 -53
  441. package/dist/seo/register-sitemap-request.d.ts +36 -0
  442. package/dist/seo/register-sitemap-request.d.ts.map +1 -0
  443. package/dist/seo/routing.d.ts +2 -0
  444. package/dist/seo/routing.d.ts.map +1 -1
  445. package/dist/seo/schema-filter.d.ts +43 -0
  446. package/dist/seo/schema-filter.d.ts.map +1 -0
  447. package/dist/seo/server-api.d.ts +15 -2
  448. package/dist/seo/server-api.d.ts.map +1 -1
  449. package/dist/seo/server.js +23 -18
  450. package/dist/seo/server.mjs +7 -2
  451. package/dist/seo/types.d.ts +30 -0
  452. package/dist/seo/types.d.ts.map +1 -1
  453. package/dist/seo-meta/contract.d.ts +60 -0
  454. package/dist/seo-meta/contract.d.ts.map +1 -0
  455. package/dist/seo-meta/contract.js +41 -0
  456. package/dist/seo-meta/contract.js.map +1 -0
  457. package/dist/seo-meta/contract.mjs +4 -0
  458. package/dist/seo-meta/contract.mjs.map +1 -0
  459. package/dist/server/index.js +4 -3
  460. package/dist/server/index.mjs +3 -2
  461. package/dist/server/mint-site-token.d.ts +2 -32
  462. package/dist/server/mint-site-token.d.ts.map +1 -1
  463. package/dist/{server-api-RG3ZL3DV.mjs → server-api-A2EFCTZX.mjs} +7 -3
  464. package/dist/{server-api-RG3ZL3DV.mjs.map → server-api-A2EFCTZX.mjs.map} +1 -1
  465. package/dist/{server-api-RYJQAUGO.js → server-api-IWTZ7C3O.js} +25 -21
  466. package/dist/{server-api-RYJQAUGO.js.map → server-api-IWTZ7C3O.js.map} +1 -1
  467. package/dist/shared/build-entries.d.ts +2 -0
  468. package/dist/shared/build-entries.d.ts.map +1 -1
  469. package/dist/shared/fresh-fetch.d.ts +64 -0
  470. package/dist/shared/fresh-fetch.d.ts.map +1 -0
  471. package/dist/shared/next-files.d.ts +7 -0
  472. package/dist/shared/next-files.d.ts.map +1 -1
  473. package/dist/shared/page-leave.d.ts +27 -0
  474. package/dist/shared/page-leave.d.ts.map +1 -0
  475. package/dist/shared/source-graph.d.ts +63 -0
  476. package/dist/shared/source-graph.d.ts.map +1 -0
  477. package/dist/shared/version.d.ts +1 -1
  478. package/dist/signal/SignalCore.d.ts.map +1 -1
  479. package/dist/signal/index.js +11 -11
  480. package/dist/signal/index.mjs +2 -2
  481. package/dist/sitemap/index.d.ts +19 -4
  482. package/dist/sitemap/index.d.ts.map +1 -1
  483. package/dist/sitemap/index.js +53 -43
  484. package/dist/sitemap/index.js.map +1 -1
  485. package/dist/sitemap/index.mjs +37 -27
  486. package/dist/sitemap/index.mjs.map +1 -1
  487. package/dist/sitemap/shared.d.ts +65 -0
  488. package/dist/sitemap/shared.d.ts.map +1 -1
  489. package/dist/sites/resolve.d.ts.map +1 -1
  490. package/dist/sites/site-param.d.ts +16 -0
  491. package/dist/sites/site-param.d.ts.map +1 -0
  492. package/dist/sync/index.js +17 -17
  493. package/dist/sync/index.mjs +4 -4
  494. package/dist/writeLLMsTxt-CQ7A4AAL.js +19 -0
  495. package/dist/writeLLMsTxt-NX5MSPYX.mjs +10 -0
  496. package/package.json +9 -4
  497. package/dist/AnalyticsProvider-EWF7JN2X.mjs +0 -11
  498. package/dist/AnalyticsProvider-GJFG7YXA.js +0 -32
  499. package/dist/BlogViewTracker-2D3IJPJK.js.map +0 -1
  500. package/dist/BlogViewTracker-CKYG6MYU.mjs.map +0 -1
  501. package/dist/ChatWidget-AWP6GBVW.js +0 -22
  502. package/dist/ChatWidget-Z5QXDZP3.mjs +0 -13
  503. package/dist/EngageWidget-BKEY5TPO.mjs +0 -12
  504. package/dist/EngageWidget-VT4DYXVO.js +0 -21
  505. package/dist/FormSpotlight-OTFB6QM5.mjs.map +0 -1
  506. package/dist/FormSpotlight-URS4XRS7.js.map +0 -1
  507. package/dist/FormStage-FVKMIV73.js.map +0 -1
  508. package/dist/FormStage-VPGOCMAV.mjs.map +0 -1
  509. package/dist/ManagedForm-CXVDJMHN.mjs +0 -14
  510. package/dist/ManagedForm-FGNTDGED.js +0 -23
  511. package/dist/ManagedNewsletterForm-3O5L44AZ.js.map +0 -1
  512. package/dist/ManagedNewsletterForm-SQYB4BZU.mjs.map +0 -1
  513. package/dist/SignalCore-M2PKKIGH.mjs.map +0 -1
  514. package/dist/SignalCore-RFBOBNLQ.js.map +0 -1
  515. package/dist/SitemapSync-4OVMIIGC.mjs +0 -9
  516. package/dist/SitemapSync-RK3SQ4M2.js +0 -18
  517. package/dist/analytics/send-gate.test.d.ts +0 -20
  518. package/dist/analytics/send-gate.test.d.ts.map +0 -1
  519. package/dist/api-D745LGGU.mjs.map +0 -1
  520. package/dist/api-XR5APCH3.js.map +0 -1
  521. package/dist/blog/artwork-components.test.d.ts +0 -2
  522. package/dist/blog/artwork-components.test.d.ts.map +0 -1
  523. package/dist/blog/artwork.test.d.ts +0 -2
  524. package/dist/blog/artwork.test.d.ts.map +0 -1
  525. package/dist/blog/author-social.test.d.ts +0 -2
  526. package/dist/blog/author-social.test.d.ts.map +0 -1
  527. package/dist/blog/blog-tables.test.d.ts +0 -2
  528. package/dist/blog/blog-tables.test.d.ts.map +0 -1
  529. package/dist/blog/blog-view-tracker.test.d.ts +0 -2
  530. package/dist/blog/blog-view-tracker.test.d.ts.map +0 -1
  531. package/dist/blog/category-metadata.test.d.ts +0 -2
  532. package/dist/blog/category-metadata.test.d.ts.map +0 -1
  533. package/dist/blog/metadata-images.test.d.ts +0 -2
  534. package/dist/blog/metadata-images.test.d.ts.map +0 -1
  535. package/dist/blog/newsletter-widget.test.d.ts +0 -2
  536. package/dist/blog/newsletter-widget.test.d.ts.map +0 -1
  537. package/dist/blog/publication-render.test.d.ts +0 -2
  538. package/dist/blog/publication-render.test.d.ts.map +0 -1
  539. package/dist/blog/publication-routes.test.d.ts +0 -2
  540. package/dist/blog/publication-routes.test.d.ts.map +0 -1
  541. package/dist/blog/reading-time.test.d.ts +0 -2
  542. package/dist/blog/reading-time.test.d.ts.map +0 -1
  543. package/dist/blog/sanitize-excerpt.test.d.ts +0 -2
  544. package/dist/blog/sanitize-excerpt.test.d.ts.map +0 -1
  545. package/dist/blog/server-core-contract.test.d.ts +0 -2
  546. package/dist/blog/server-core-contract.test.d.ts.map +0 -1
  547. package/dist/blog/static-params.test.d.ts +0 -2
  548. package/dist/blog/static-params.test.d.ts.map +0 -1
  549. package/dist/blog/tag-links.test.d.ts +0 -2
  550. package/dist/blog/tag-links.test.d.ts.map +0 -1
  551. package/dist/blog/types-wire-shape.test.d.ts +0 -2
  552. package/dist/blog/types-wire-shape.test.d.ts.map +0 -1
  553. package/dist/brand/status-contrast.test.d.ts +0 -2
  554. package/dist/brand/status-contrast.test.d.ts.map +0 -1
  555. package/dist/chunk-3CLP35TT.mjs.map +0 -1
  556. package/dist/chunk-3UC6JETG.js +0 -32
  557. package/dist/chunk-3UC6JETG.js.map +0 -1
  558. package/dist/chunk-3YQILJKJ.js.map +0 -1
  559. package/dist/chunk-4B4S56WJ.mjs.map +0 -1
  560. package/dist/chunk-5B4FABFK.js.map +0 -1
  561. package/dist/chunk-5TXXTYXL.js +0 -8
  562. package/dist/chunk-5YA6SI4Z.mjs.map +0 -1
  563. package/dist/chunk-6CJP7BFM.js.map +0 -1
  564. package/dist/chunk-6FC5Q4KU.mjs.map +0 -1
  565. package/dist/chunk-7ZX6TO6C.mjs.map +0 -1
  566. package/dist/chunk-AWK57R5S.mjs +0 -29
  567. package/dist/chunk-AWK57R5S.mjs.map +0 -1
  568. package/dist/chunk-BFJOZ3MU.mjs.map +0 -1
  569. package/dist/chunk-BFM5PEFV.js.map +0 -1
  570. package/dist/chunk-CPY74A4F.js.map +0 -1
  571. package/dist/chunk-DOB37PV4.js.map +0 -1
  572. package/dist/chunk-F3AKYZOH.js.map +0 -1
  573. package/dist/chunk-FO4KGPGF.js.map +0 -1
  574. package/dist/chunk-GZJE23Y5.mjs.map +0 -1
  575. package/dist/chunk-H4OBGC43.mjs.map +0 -1
  576. package/dist/chunk-H6YVT3BL.js.map +0 -1
  577. package/dist/chunk-H7274TKR.mjs.map +0 -1
  578. package/dist/chunk-I7AZC5ZQ.js.map +0 -1
  579. package/dist/chunk-ILNCUSXW.mjs.map +0 -1
  580. package/dist/chunk-IPV2TUAT.js.map +0 -1
  581. package/dist/chunk-JEOKDUPQ.js +0 -45
  582. package/dist/chunk-JEOKDUPQ.js.map +0 -1
  583. package/dist/chunk-JNAXDFC4.mjs.map +0 -1
  584. package/dist/chunk-JNRHTZL4.js.map +0 -1
  585. package/dist/chunk-JOYMIGR2.mjs.map +0 -1
  586. package/dist/chunk-JS75ORH7.js.map +0 -1
  587. package/dist/chunk-JTCQJKJE.js.map +0 -1
  588. package/dist/chunk-L4V6TKMJ.mjs.map +0 -1
  589. package/dist/chunk-LC7AM4J5.js.map +0 -1
  590. package/dist/chunk-M5GY2AI3.mjs.map +0 -1
  591. package/dist/chunk-NN2YE5WT.js.map +0 -1
  592. package/dist/chunk-NNZDWY3L.mjs.map +0 -1
  593. package/dist/chunk-O2VJZOR2.mjs.map +0 -1
  594. package/dist/chunk-OZ3FU4BT.js.map +0 -1
  595. package/dist/chunk-P4TB4ROG.js.map +0 -1
  596. package/dist/chunk-Q7347KP6.mjs.map +0 -1
  597. package/dist/chunk-QJU6HBSK.mjs +0 -39
  598. package/dist/chunk-QJU6HBSK.mjs.map +0 -1
  599. package/dist/chunk-QRBPT6Z6.mjs +0 -6
  600. package/dist/chunk-RCSTDJUH.js.map +0 -1
  601. package/dist/chunk-RVRN5U7W.mjs.map +0 -1
  602. package/dist/chunk-TDJKGN5Q.mjs.map +0 -1
  603. package/dist/chunk-TP7H6BSK.mjs.map +0 -1
  604. package/dist/chunk-TSZIACRC.js.map +0 -1
  605. package/dist/chunk-UJ6CHZAI.mjs.map +0 -1
  606. package/dist/chunk-VFGEY6FJ.js.map +0 -1
  607. package/dist/cli/agent/envelope.test.d.ts +0 -2
  608. package/dist/cli/agent/envelope.test.d.ts.map +0 -1
  609. package/dist/cli/agent/ssr-bailout.test.d.ts +0 -2
  610. package/dist/cli/agent/ssr-bailout.test.d.ts.map +0 -1
  611. package/dist/cli/codemod/diff.test.d.ts +0 -2
  612. package/dist/cli/codemod/diff.test.d.ts.map +0 -1
  613. package/dist/cli/codemod/transforms.test.d.ts +0 -2
  614. package/dist/cli/codemod/transforms.test.d.ts.map +0 -1
  615. package/dist/cli/commands/config-regression.test.d.ts +0 -2
  616. package/dist/cli/commands/config-regression.test.d.ts.map +0 -1
  617. package/dist/cli/commands/geo.test.d.ts +0 -2
  618. package/dist/cli/commands/geo.test.d.ts.map +0 -1
  619. package/dist/cli/commands/og.test.d.ts +0 -2
  620. package/dist/cli/commands/og.test.d.ts.map +0 -1
  621. package/dist/cli/config.test.d.ts +0 -2
  622. package/dist/cli/config.test.d.ts.map +0 -1
  623. package/dist/cli/generators/index.test.d.ts +0 -2
  624. package/dist/cli/generators/index.test.d.ts.map +0 -1
  625. package/dist/cli/index.js.map +0 -1
  626. package/dist/cli/index.mjs.map +0 -1
  627. package/dist/cli/state.test.d.ts +0 -2
  628. package/dist/cli/state.test.d.ts.map +0 -1
  629. package/dist/commerce/events-extras.test.d.ts +0 -2
  630. package/dist/commerce/events-extras.test.d.ts.map +0 -1
  631. package/dist/commerce/server-result.test.d.ts +0 -2
  632. package/dist/commerce/server-result.test.d.ts.map +0 -1
  633. package/dist/discover-FGTKWOL3.mjs +0 -4
  634. package/dist/discover-NJZPWTDL.js +0 -21
  635. package/dist/engage/chat-launcher.test.d.ts +0 -2
  636. package/dist/engage/chat-launcher.test.d.ts.map +0 -1
  637. package/dist/engage/dependency-contract.test.d.ts +0 -2
  638. package/dist/engage/dependency-contract.test.d.ts.map +0 -1
  639. package/dist/engage/launcher-placement.test.d.ts +0 -2
  640. package/dist/engage/launcher-placement.test.d.ts.map +0 -1
  641. package/dist/fleet/contract.test.d.ts +0 -2
  642. package/dist/fleet/contract.test.d.ts.map +0 -1
  643. package/dist/fleet/heartbeat.test.d.ts +0 -2
  644. package/dist/fleet/heartbeat.test.d.ts.map +0 -1
  645. package/dist/forms/contract.test.d.ts +0 -2
  646. package/dist/forms/contract.test.d.ts.map +0 -1
  647. package/dist/forms/ga4-identity.test.d.ts +0 -2
  648. package/dist/forms/ga4-identity.test.d.ts.map +0 -1
  649. package/dist/forms/native-fallback.test.d.ts +0 -2
  650. package/dist/forms/native-fallback.test.d.ts.map +0 -1
  651. package/dist/forms/stage.test.d.ts +0 -2
  652. package/dist/forms/stage.test.d.ts.map +0 -1
  653. package/dist/forms/static-form.test.d.ts +0 -2
  654. package/dist/forms/static-form.test.d.ts.map +0 -1
  655. package/dist/forms/tracking-session.test.d.ts +0 -22
  656. package/dist/forms/tracking-session.test.d.ts.map +0 -1
  657. package/dist/landing/contract.test.d.ts +0 -2
  658. package/dist/landing/contract.test.d.ts.map +0 -1
  659. package/dist/landing/server-entry.test.d.ts +0 -2
  660. package/dist/landing/server-entry.test.d.ts.map +0 -1
  661. package/dist/lib-6HOOMENJ.js.map +0 -1
  662. package/dist/lib-BGAWCSUH.js.map +0 -1
  663. package/dist/lib-R7IQ4ZHE.mjs.map +0 -1
  664. package/dist/lib-RSDMEKDQ.mjs.map +0 -1
  665. package/dist/llms/aiRobots.test.d.ts +0 -2
  666. package/dist/llms/aiRobots.test.d.ts.map +0 -1
  667. package/dist/llms/contract.test.d.ts +0 -2
  668. package/dist/llms/contract.test.d.ts.map +0 -1
  669. package/dist/llms/discovery-headers.test.d.ts +0 -2
  670. package/dist/llms/discovery-headers.test.d.ts.map +0 -1
  671. package/dist/llms/generateLLMsTxt.test.d.ts +0 -2
  672. package/dist/llms/generateLLMsTxt.test.d.ts.map +0 -1
  673. package/dist/llms/handlers.test.d.ts +0 -2
  674. package/dist/llms/handlers.test.d.ts.map +0 -1
  675. package/dist/llms/humanize-industry.test.d.ts +0 -2
  676. package/dist/llms/humanize-industry.test.d.ts.map +0 -1
  677. package/dist/llms/sourcedFacts.test.d.ts +0 -2
  678. package/dist/llms/sourcedFacts.test.d.ts.map +0 -1
  679. package/dist/llms/wiring.test.d.ts +0 -2
  680. package/dist/llms/wiring.test.d.ts.map +0 -1
  681. package/dist/llms/writeLLMsTxt.test.d.ts +0 -2
  682. package/dist/llms/writeLLMsTxt.test.d.ts.map +0 -1
  683. package/dist/mcp/protocol.test.d.ts +0 -2
  684. package/dist/mcp/protocol.test.d.ts.map +0 -1
  685. package/dist/motion/motion.test.d.ts +0 -16
  686. package/dist/motion/motion.test.d.ts.map +0 -1
  687. package/dist/og/pages.test.d.ts +0 -2
  688. package/dist/og/pages.test.d.ts.map +0 -1
  689. package/dist/og/template.test.d.ts +0 -2
  690. package/dist/og/template.test.d.ts.map +0 -1
  691. package/dist/og/wiring.test.d.ts +0 -2
  692. package/dist/og/wiring.test.d.ts.map +0 -1
  693. package/dist/portfolio/contract.test.d.ts +0 -2
  694. package/dist/portfolio/contract.test.d.ts.map +0 -1
  695. package/dist/proxy/securityHeaders.test.d.ts +0 -2
  696. package/dist/proxy/securityHeaders.test.d.ts.map +0 -1
  697. package/dist/proxy/segment.test.d.ts +0 -2
  698. package/dist/proxy/segment.test.d.ts.map +0 -1
  699. package/dist/robots/index.test.d.ts +0 -2
  700. package/dist/robots/index.test.d.ts.map +0 -1
  701. package/dist/seo/register-sitemap-cli-impl.test.d.ts +0 -2
  702. package/dist/seo/register-sitemap-cli-impl.test.d.ts.map +0 -1
  703. package/dist/seo/register-sitemap-cli.js.map +0 -1
  704. package/dist/seo/register-sitemap-cli.mjs.map +0 -1
  705. package/dist/seo-pages/contract.test.d.ts +0 -2
  706. package/dist/seo-pages/contract.test.d.ts.map +0 -1
  707. package/dist/server/mint-site-token.test.d.ts +0 -2
  708. package/dist/server/mint-site-token.test.d.ts.map +0 -1
  709. package/dist/server/server-fetch.test.d.ts +0 -2
  710. package/dist/server/server-fetch.test.d.ts.map +0 -1
  711. package/dist/shared/client-entry-boundary.test.d.ts +0 -2
  712. package/dist/shared/client-entry-boundary.test.d.ts.map +0 -1
  713. package/dist/shared/next-files.test.d.ts +0 -2
  714. package/dist/shared/next-files.test.d.ts.map +0 -1
  715. package/dist/shared/no-cjs-require.test.d.ts +0 -2
  716. package/dist/shared/no-cjs-require.test.d.ts.map +0 -1
  717. package/dist/shared/publishCredential.test.d.ts +0 -2
  718. package/dist/shared/publishCredential.test.d.ts.map +0 -1
  719. package/dist/shared/raw-browser-api-guard.test.d.ts +0 -15
  720. package/dist/shared/raw-browser-api-guard.test.d.ts.map +0 -1
  721. package/dist/shared/siteToken.test.d.ts +0 -2
  722. package/dist/shared/siteToken.test.d.ts.map +0 -1
  723. package/dist/shared/sonorFetch.test.d.ts +0 -2
  724. package/dist/shared/sonorFetch.test.d.ts.map +0 -1
  725. package/dist/shared/uuid.test.d.ts +0 -2
  726. package/dist/shared/uuid.test.d.ts.map +0 -1
  727. package/dist/shared/version.test.d.ts +0 -2
  728. package/dist/shared/version.test.d.ts.map +0 -1
  729. package/dist/shared/visual-viewport-gap.test.d.ts +0 -2
  730. package/dist/shared/visual-viewport-gap.test.d.ts.map +0 -1
  731. package/dist/sitemap/discover.test.d.ts +0 -2
  732. package/dist/sitemap/discover.test.d.ts.map +0 -1
  733. package/dist/sitemap/shared.test.d.ts +0 -2
  734. package/dist/sitemap/shared.test.d.ts.map +0 -1
  735. package/dist/sitemap/site-scope.test.d.ts +0 -2
  736. package/dist/sitemap/site-scope.test.d.ts.map +0 -1
  737. package/dist/sites/contract.test.d.ts +0 -2
  738. package/dist/sites/contract.test.d.ts.map +0 -1
  739. package/dist/slots/ManagedSlot.test.d.ts +0 -2
  740. package/dist/slots/ManagedSlot.test.d.ts.map +0 -1
  741. package/dist/slots/contract.test.d.ts +0 -2
  742. package/dist/slots/contract.test.d.ts.map +0 -1
  743. package/dist/slots/revalidate.test.d.ts +0 -2
  744. package/dist/slots/revalidate.test.d.ts.map +0 -1
  745. package/dist/slots/server-api.test.d.ts +0 -2
  746. package/dist/slots/server-api.test.d.ts.map +0 -1
  747. package/dist/sync/add-to-calendar.test.d.ts +0 -2
  748. package/dist/sync/add-to-calendar.test.d.ts.map +0 -1
  749. package/dist/sync/api-errors.test.d.ts +0 -2
  750. package/dist/sync/api-errors.test.d.ts.map +0 -1
  751. package/dist/sync/booking-flow.test.d.ts +0 -2
  752. package/dist/sync/booking-flow.test.d.ts.map +0 -1
@@ -1,16 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { traverse, isJSXIdentifier, isJSXAttribute, isFunctionDeclaration, isVariableDeclarator, isIdentifier, isStringLiteral, isJSXMemberExpression, isJSXExpressionContainer, isTemplateLiteral, isArrayExpression, isObjectExpression, isJSXText } from '../chunk-JOYMIGR2.mjs';
3
3
  import { parse } from '../chunk-5YA6SI4Z.mjs';
4
- import { buildOgHtml, TITLE_MAX_PX, OG_REPORT_ATTR } from '../chunk-UJ6CHZAI.mjs';
4
+ import { paramCardKeys, unmatchedCardKeys, DYNAMIC, PARAM_CARD_DIR, buildOgHtml, pageCardConfig, paramCardUrl } from '../chunk-XZO5I4RS.mjs';
5
+ import { TITLE_MAX_PX, OG_REPORT_ATTR } from '../chunk-YU7QZ3PP.mjs';
5
6
  import { require_main } from '../chunk-NNZDWY3L.mjs';
6
- import { findAppDirForDiscovery, NEXT_PROXY_FILES, NEXT_MIDDLEWARE_FILES, findConventionFile, NEXT_APP_DIRS, findSitemapRoute, findProxyFiles, findRootLayout, discoverNextJsRoutes, hasPageFile } from '../chunk-L4V6TKMJ.mjs';
7
- import { SITE_KIT_VERSION } from '../chunk-QRBPT6Z6.mjs';
7
+ import { findAppDirForDiscovery, NEXT_PROXY_FILES, NEXT_MIDDLEWARE_FILES, findConventionFile, NEXT_APP_DIRS, findSitemapRoute, findProxyFiles, findNextConfig, findRootLayout, discoverNextJsRoutes, hasPageFile, NEXT_SOURCE_EXTENSIONS } from '../chunk-U2V542EO.mjs';
8
+ import { applyTrailingSlash } from '../chunk-4LYW6PMU.mjs';
9
+ import { SITE_KIT_VERSION } from '../chunk-OESGRWI4.mjs';
8
10
  import { __commonJS, __require, __toESM, __export, __privateAdd, __publicField, __privateGet, __privateMethod, __privateSet, __privateWrapper } from '../chunk-BEXTDHO4.mjs';
9
11
  import { EventEmitter } from 'events';
10
12
  import childProcess, { execFile as execFile$1, execSync, spawnSync, spawn } from 'child_process';
11
13
  import path12, { win32, posix } from 'path';
12
- import * as fs from 'fs';
13
- import fs__default, { realpathSync, existsSync, readFileSync, readdirSync, statSync, readlinkSync, readdir as readdir$1, lstatSync, rmSync, mkdtempSync, writeFileSync } from 'fs';
14
+ import * as fs20 from 'fs';
15
+ import fs20__default, { realpathSync, existsSync, readFileSync, readdirSync, statSync, readlinkSync, readdir as readdir$1, lstatSync, rmSync, mkdtempSync, writeFileSync } from 'fs';
14
16
  import process2 from 'process';
15
17
  import { styleText, promisify, stripVTControlCharacters } from 'util';
16
18
  import os from 'os';
@@ -19,7 +21,7 @@ import { AsyncLocalStorage, AsyncResource } from 'async_hooks';
19
21
  import * as readline3 from 'readline';
20
22
  import readline3__default from 'readline';
21
23
  import { randomUUID } from 'crypto';
22
- import fs3, { realpath, readlink, readdir, lstat, constants } from 'fs/promises';
24
+ import fs3, { realpath as realpath$1, readlink, readdir, lstat, constants } from 'fs/promises';
23
25
  import { fileURLToPath, URL as URL$1 } from 'url';
24
26
  import { Buffer as Buffer$1 } from 'buffer';
25
27
  import http from 'http';
@@ -6202,10 +6204,10 @@ var require_lib2 = __commonJS({
6202
6204
  exports.analyse = analyse;
6203
6205
  var detectFile = (filepath, opts = {}) => new Promise((resolve, reject) => {
6204
6206
  let fd;
6205
- const fs30 = (0, node_1.default)();
6207
+ const fs31 = (0, node_1.default)();
6206
6208
  const handler = (err, buffer) => {
6207
6209
  if (fd) {
6208
- fs30.closeSync(fd);
6210
+ fs31.closeSync(fd);
6209
6211
  }
6210
6212
  if (err) {
6211
6213
  reject(err);
@@ -6217,9 +6219,9 @@ var require_lib2 = __commonJS({
6217
6219
  };
6218
6220
  const sampleSize = (opts === null || opts === void 0 ? void 0 : opts.sampleSize) || 0;
6219
6221
  if (sampleSize > 0) {
6220
- fd = fs30.openSync(filepath, "r");
6222
+ fd = fs31.openSync(filepath, "r");
6221
6223
  let sample = Buffer.allocUnsafe(sampleSize);
6222
- fs30.read(fd, sample, 0, sampleSize, opts.offset, (err, bytesRead) => {
6224
+ fs31.read(fd, sample, 0, sampleSize, opts.offset, (err, bytesRead) => {
6223
6225
  if (err) {
6224
6226
  handler(err, null);
6225
6227
  } else {
@@ -6231,22 +6233,22 @@ var require_lib2 = __commonJS({
6231
6233
  });
6232
6234
  return;
6233
6235
  }
6234
- fs30.readFile(filepath, handler);
6236
+ fs31.readFile(filepath, handler);
6235
6237
  });
6236
6238
  exports.detectFile = detectFile;
6237
6239
  var detectFileSync = (filepath, opts = {}) => {
6238
- const fs30 = (0, node_1.default)();
6240
+ const fs31 = (0, node_1.default)();
6239
6241
  if (opts && opts.sampleSize) {
6240
- const fd = fs30.openSync(filepath, "r");
6242
+ const fd = fs31.openSync(filepath, "r");
6241
6243
  let sample = Buffer.allocUnsafe(opts.sampleSize);
6242
- const bytesRead = fs30.readSync(fd, sample, 0, opts.sampleSize, opts.offset);
6244
+ const bytesRead = fs31.readSync(fd, sample, 0, opts.sampleSize, opts.offset);
6243
6245
  if (bytesRead < opts.sampleSize) {
6244
6246
  sample = sample.subarray(0, bytesRead);
6245
6247
  }
6246
- fs30.closeSync(fd);
6248
+ fs31.closeSync(fd);
6247
6249
  return (0, exports.detect)(sample);
6248
6250
  }
6249
- return (0, exports.detect)(fs30.readFileSync(filepath));
6251
+ return (0, exports.detect)(fs31.readFileSync(filepath));
6250
6252
  };
6251
6253
  exports.detectFileSync = detectFileSync;
6252
6254
  exports.default = {
@@ -12247,7 +12249,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
12247
12249
  * @param {string} subcommandName
12248
12250
  */
12249
12251
  _checkForMissingExecutable(executableFile, executableDir, subcommandName) {
12250
- if (fs__default.existsSync(executableFile)) return;
12252
+ if (fs20__default.existsSync(executableFile)) return;
12251
12253
  const executableDirMessage = executableDir ? `searched for local subcommand relative to directory '${executableDir}'` : "no directory for search for local subcommand, use .executableDir() to supply a custom directory";
12252
12254
  const executableMissing = `'${executableFile}' does not exist
12253
12255
  - if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
@@ -12265,10 +12267,10 @@ Expecting one of '${allowedValues.join("', '")}'`);
12265
12267
  const sourceExt = [".js", ".ts", ".tsx", ".mjs", ".cjs"];
12266
12268
  function findFile(baseDir, baseName) {
12267
12269
  const localBin = path12.resolve(baseDir, baseName);
12268
- if (fs__default.existsSync(localBin)) return localBin;
12270
+ if (fs20__default.existsSync(localBin)) return localBin;
12269
12271
  if (sourceExt.includes(path12.extname(baseName))) return void 0;
12270
12272
  const foundExt = sourceExt.find(
12271
- (ext2) => fs__default.existsSync(`${localBin}${ext2}`)
12273
+ (ext2) => fs20__default.existsSync(`${localBin}${ext2}`)
12272
12274
  );
12273
12275
  if (foundExt) return `${localBin}${foundExt}`;
12274
12276
  return void 0;
@@ -12280,7 +12282,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
12280
12282
  if (this._scriptPath) {
12281
12283
  let resolvedScriptPath;
12282
12284
  try {
12283
- resolvedScriptPath = fs__default.realpathSync(this._scriptPath);
12285
+ resolvedScriptPath = fs20__default.realpathSync(this._scriptPath);
12284
12286
  } catch {
12285
12287
  resolvedScriptPath = this._scriptPath;
12286
12288
  }
@@ -13236,9 +13238,9 @@ Expecting one of '${allowedValues.join("', '")}'`);
13236
13238
  * @param {string} [path]
13237
13239
  * @return {(string|null|Command)}
13238
13240
  */
13239
- executableDir(path30) {
13240
- if (path30 === void 0) return this._executableDir;
13241
- this._executableDir = path30;
13241
+ executableDir(path31) {
13242
+ if (path31 === void 0) return this._executableDir;
13243
+ this._executableDir = path31;
13242
13244
  return this;
13243
13245
  }
13244
13246
  /**
@@ -20345,9 +20347,9 @@ function observableToAsyncIterable(source) {
20345
20347
 
20346
20348
  // node_modules/.pnpm/inquirer@14.0.2_@types+node@26.2.0/node_modules/inquirer/dist/ui/prompt.js
20347
20349
  var _ = {
20348
- set: (obj, path30 = "", value) => {
20350
+ set: (obj, path31 = "", value) => {
20349
20351
  let pointer = obj;
20350
- path30.split(".").forEach((key, index, arr) => {
20352
+ path31.split(".").forEach((key, index, arr) => {
20351
20353
  if (key === "__proto__" || key === "constructor")
20352
20354
  return;
20353
20355
  if (index === arr.length - 1) {
@@ -20358,8 +20360,8 @@ var _ = {
20358
20360
  pointer = pointer[key];
20359
20361
  });
20360
20362
  },
20361
- get: (obj, path30 = "", defaultValue) => {
20362
- const travel = (regexp) => String.prototype.split.call(path30, regexp).filter(Boolean).reduce(
20363
+ get: (obj, path31 = "", defaultValue) => {
20364
+ const travel = (regexp) => String.prototype.split.call(path31, regexp).filter(Boolean).reduce(
20363
20365
  // @ts-expect-error implicit any on res[key]
20364
20366
  (res, key) => res == null ? res : res[key],
20365
20367
  obj
@@ -20716,18 +20718,18 @@ function scanForForms(ast, content, filePath) {
20716
20718
  const forms = [];
20717
20719
  content.split("\n");
20718
20720
  traverse(ast, {
20719
- JSXElement(path30) {
20720
- const opening = path30.node.openingElement;
20721
+ JSXElement(path31) {
20722
+ const opening = path31.node.openingElement;
20721
20723
  if (isJSXIdentifier(opening.name) && opening.name.name === "form") {
20722
- const fields = extractFieldsFromForm(path30);
20724
+ const fields = extractFieldsFromForm(path31);
20723
20725
  const hasOnSubmit = opening.attributes.some(
20724
20726
  (attr) => isJSXAttribute(attr) && isJSXIdentifier(attr.name) && attr.name.name === "onSubmit"
20725
20727
  );
20726
20728
  if (hasOnSubmit && fields.length > 0) {
20727
- const startLine = path30.node.loc?.start.line || 0;
20728
- const endLine = path30.node.loc?.end.line || 0;
20729
+ const startLine = path31.node.loc?.start.line || 0;
20730
+ const endLine = path31.node.loc?.end.line || 0;
20729
20731
  let componentName = "UnknownForm";
20730
- let current = path30.parentPath;
20732
+ let current = path31.parentPath;
20731
20733
  while (current) {
20732
20734
  if (isFunctionDeclaration(current.node) && current.node.id) {
20733
20735
  componentName = current.node.id.name;
@@ -20760,7 +20762,7 @@ function scanForForms(ast, content, filePath) {
20760
20762
  }
20761
20763
  if (isJSXIdentifier(opening.name) && opening.name.name === "Form") {
20762
20764
  if (content.includes("Formik") || content.includes("formik")) {
20763
- const fields = extractFieldsFromFormik(path30);
20765
+ const fields = extractFieldsFromFormik(path31);
20764
20766
  if (fields.length > 0) {
20765
20767
  forms.push({
20766
20768
  filePath,
@@ -20771,8 +20773,8 @@ function scanForForms(ast, content, filePath) {
20771
20773
  submitsTo: null,
20772
20774
  complexity: "moderate",
20773
20775
  suggestedAction: "assisted",
20774
- startLine: path30.node.loc?.start.line || 0,
20775
- endLine: path30.node.loc?.end.line || 0
20776
+ startLine: path31.node.loc?.start.line || 0,
20777
+ endLine: path31.node.loc?.end.line || 0
20776
20778
  });
20777
20779
  }
20778
20780
  }
@@ -20790,8 +20792,8 @@ function extractFieldsFromForm(formPath) {
20790
20792
  const radioGroups = /* @__PURE__ */ new Map();
20791
20793
  const checkboxGroups = /* @__PURE__ */ new Map();
20792
20794
  formPath.traverse({
20793
- JSXElement(path30) {
20794
- const opening = path30.node.openingElement;
20795
+ JSXElement(path31) {
20796
+ const opening = path31.node.openingElement;
20795
20797
  const tagName = isJSXIdentifier(opening.name) ? opening.name.name : null;
20796
20798
  if (["input", "textarea", "select"].includes(tagName || "")) {
20797
20799
  const attrs = opening.attributes;
@@ -20838,7 +20840,7 @@ function extractFieldsFromForm(formPath) {
20838
20840
  }
20839
20841
  if (tagName === "select") {
20840
20842
  const selectOptions = [];
20841
- path30.traverse({
20843
+ path31.traverse({
20842
20844
  JSXElement(optionPath) {
20843
20845
  const optOpening = optionPath.node.openingElement;
20844
20846
  const optTagName = isJSXIdentifier(optOpening.name) ? optOpening.name.name : null;
@@ -20913,8 +20915,8 @@ function extractFieldsFromForm(formPath) {
20913
20915
  function extractFieldsFromFormik(formPath, content) {
20914
20916
  const fields = [];
20915
20917
  formPath.traverse({
20916
- JSXElement(path30) {
20917
- const opening = path30.node.openingElement;
20918
+ JSXElement(path31) {
20919
+ const opening = path31.node.openingElement;
20918
20920
  const tagName = isJSXIdentifier(opening.name) ? opening.name.name : null;
20919
20921
  if (tagName === "Field" || tagName === "FastField") {
20920
20922
  const attrs = opening.attributes;
@@ -21033,11 +21035,11 @@ function scanForMetadata(ast, content, filePath) {
21033
21035
  }
21034
21036
  let hasHeadComponent = false;
21035
21037
  traverse(ast, {
21036
- JSXElement(path30) {
21037
- const opening = path30.node.openingElement;
21038
+ JSXElement(path31) {
21039
+ const opening = path31.node.openingElement;
21038
21040
  if (isJSXIdentifier(opening.name) && opening.name.name === "Head") {
21039
21041
  hasHeadComponent = true;
21040
- path30.stop();
21042
+ path31.stop();
21041
21043
  }
21042
21044
  }
21043
21045
  });
@@ -21072,8 +21074,8 @@ function scanForWidgets(ast, content, filePath) {
21072
21074
  for (const { pattern, type } of widgetPatterns) {
21073
21075
  if (pattern.test(content)) {
21074
21076
  traverse(ast, {
21075
- JSXElement(path30) {
21076
- const opening = path30.node.openingElement;
21077
+ JSXElement(path31) {
21078
+ const opening = path31.node.openingElement;
21077
21079
  if (isJSXIdentifier(opening.name) && (opening.name.name === "script" || opening.name.name === "Script")) {
21078
21080
  const srcAttr = opening.attributes.find(
21079
21081
  (attr) => isJSXAttribute(attr) && isJSXIdentifier(attr.name) && attr.name.name === "src"
@@ -21088,8 +21090,8 @@ function scanForWidgets(ast, content, filePath) {
21088
21090
  filePath,
21089
21091
  widgetType: type,
21090
21092
  scriptTag: src,
21091
- startLine: path30.node.loc?.start.line || 0,
21092
- endLine: path30.node.loc?.end.line || 0
21093
+ startLine: path31.node.loc?.start.line || 0,
21094
+ endLine: path31.node.loc?.end.line || 0
21093
21095
  });
21094
21096
  }
21095
21097
  }
@@ -21228,8 +21230,8 @@ function scanForSchemas(ast, content, filePath) {
21228
21230
  return schemas;
21229
21231
  }
21230
21232
  traverse(ast, {
21231
- JSXElement(path30) {
21232
- const opening = path30.node.openingElement;
21233
+ JSXElement(path31) {
21234
+ const opening = path31.node.openingElement;
21233
21235
  if (isJSXIdentifier(opening.name) && (opening.name.name === "script" || opening.name.name === "Script")) {
21234
21236
  const typeAttr = opening.attributes.find(
21235
21237
  (attr) => isJSXAttribute(attr) && isJSXIdentifier(attr.name) && attr.name.name === "type"
@@ -21256,8 +21258,8 @@ function scanForSchemas(ast, content, filePath) {
21256
21258
  filePath,
21257
21259
  type: detectedType,
21258
21260
  schemaType,
21259
- startLine: path30.node.loc?.start.line || 0,
21260
- endLine: path30.node.loc?.end.line || 0
21261
+ startLine: path31.node.loc?.start.line || 0,
21262
+ endLine: path31.node.loc?.end.line || 0
21261
21263
  });
21262
21264
  }
21263
21265
  }
@@ -21290,8 +21292,8 @@ function scanForFAQs(ast, content, filePath) {
21290
21292
  /questions?\s*(?:and|&)?\s*answers?/i
21291
21293
  ];
21292
21294
  traverse(ast, {
21293
- JSXElement(path30) {
21294
- const opening = path30.node.openingElement;
21295
+ JSXElement(path31) {
21296
+ const opening = path31.node.openingElement;
21295
21297
  let tagName = "";
21296
21298
  if (isJSXIdentifier(opening.name)) {
21297
21299
  tagName = opening.name.name;
@@ -21304,8 +21306,8 @@ function scanForFAQs(ast, content, filePath) {
21304
21306
  faqs.push({
21305
21307
  filePath,
21306
21308
  type: "details-summary",
21307
- startLine: path30.node.loc?.start.line || 0,
21308
- endLine: path30.node.loc?.end.line || 0,
21309
+ startLine: path31.node.loc?.start.line || 0,
21310
+ endLine: path31.node.loc?.end.line || 0,
21309
21311
  hasSchema: content.includes("FAQPage") || content.includes("application/ld+json")
21310
21312
  });
21311
21313
  return;
@@ -21313,7 +21315,7 @@ function scanForFAQs(ast, content, filePath) {
21313
21315
  for (const pattern of faqPatterns) {
21314
21316
  if (pattern.test(tagName)) {
21315
21317
  let itemCount = 0;
21316
- path30.traverse({
21318
+ path31.traverse({
21317
21319
  JSXElement(itemPath) {
21318
21320
  const itemOpening = itemPath.node.openingElement;
21319
21321
  if (isJSXIdentifier(itemOpening.name)) {
@@ -21329,8 +21331,8 @@ function scanForFAQs(ast, content, filePath) {
21329
21331
  type: "accordion",
21330
21332
  componentName: tagName,
21331
21333
  itemCount: itemCount || void 0,
21332
- startLine: path30.node.loc?.start.line || 0,
21333
- endLine: path30.node.loc?.end.line || 0,
21334
+ startLine: path31.node.loc?.start.line || 0,
21335
+ endLine: path31.node.loc?.end.line || 0,
21334
21336
  hasSchema: content.includes("FAQPage") || content.includes("application/ld+json")
21335
21337
  });
21336
21338
  return;
@@ -21453,8 +21455,8 @@ function scanForImages(ast, content, filePath) {
21453
21455
  return images;
21454
21456
  }
21455
21457
  traverse(ast, {
21456
- JSXElement(path30) {
21457
- const opening = path30.node.openingElement;
21458
+ JSXElement(path31) {
21459
+ const opening = path31.node.openingElement;
21458
21460
  if (!isJSXIdentifier(opening.name)) return;
21459
21461
  const tagName = opening.name.name;
21460
21462
  if (tagName === "img" || tagName === "Image") {
@@ -21482,8 +21484,8 @@ function scanForImages(ast, content, filePath) {
21482
21484
  src: src || void 0,
21483
21485
  alt: alt || void 0,
21484
21486
  isLocal,
21485
- startLine: path30.node.loc?.start.line || 0,
21486
- endLine: path30.node.loc?.end.line || 0
21487
+ startLine: path31.node.loc?.start.line || 0,
21488
+ endLine: path31.node.loc?.end.line || 0
21487
21489
  });
21488
21490
  }
21489
21491
  }
@@ -22374,18 +22376,18 @@ async function migrateFile(filePath, options) {
22374
22376
  let componentName = "Form";
22375
22377
  const traverse2 = (await import('../lib-RSDMEKDQ.mjs')).default;
22376
22378
  traverse2(ast, {
22377
- ExportNamedDeclaration(path30) {
22378
- const decl = path30.node.declaration;
22379
+ ExportNamedDeclaration(path31) {
22380
+ const decl = path31.node.declaration;
22379
22381
  if (decl && decl.type === "FunctionDeclaration" && decl.id) {
22380
22382
  componentName = decl.id.name;
22381
- path30.stop();
22383
+ path31.stop();
22382
22384
  }
22383
22385
  },
22384
- ExportDefaultDeclaration(path30) {
22385
- const decl = path30.node.declaration;
22386
+ ExportDefaultDeclaration(path31) {
22387
+ const decl = path31.node.declaration;
22386
22388
  if (decl && decl.type === "FunctionDeclaration" && decl.id) {
22387
22389
  componentName = decl.id.name;
22388
- path30.stop();
22390
+ path31.stop();
22389
22391
  }
22390
22392
  }
22391
22393
  });
@@ -22540,7 +22542,7 @@ async function findLayoutFile() {
22540
22542
  var isDockerCached;
22541
22543
  function hasDockerEnv() {
22542
22544
  try {
22543
- fs__default.statSync("/.dockerenv");
22545
+ fs20__default.statSync("/.dockerenv");
22544
22546
  return true;
22545
22547
  } catch {
22546
22548
  return false;
@@ -22548,7 +22550,7 @@ function hasDockerEnv() {
22548
22550
  }
22549
22551
  function hasDockerCGroup() {
22550
22552
  try {
22551
- return fs__default.readFileSync("/proc/self/cgroup", "utf8").includes("docker");
22553
+ return fs20__default.readFileSync("/proc/self/cgroup", "utf8").includes("docker");
22552
22554
  } catch {
22553
22555
  return false;
22554
22556
  }
@@ -22564,7 +22566,7 @@ function isDocker() {
22564
22566
  var cachedResult;
22565
22567
  var hasContainerEnv = () => {
22566
22568
  try {
22567
- fs__default.statSync("/run/.containerenv");
22569
+ fs20__default.statSync("/run/.containerenv");
22568
22570
  return true;
22569
22571
  } catch {
22570
22572
  return false;
@@ -22589,12 +22591,12 @@ var isWsl = () => {
22589
22591
  return true;
22590
22592
  }
22591
22593
  try {
22592
- if (fs__default.readFileSync("/proc/version", "utf8").toLowerCase().includes("microsoft")) {
22594
+ if (fs20__default.readFileSync("/proc/version", "utf8").toLowerCase().includes("microsoft")) {
22593
22595
  return !isInsideContainer();
22594
22596
  }
22595
22597
  } catch {
22596
22598
  }
22597
- if (fs__default.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop") || fs__default.existsSync("/run/WSL")) {
22599
+ if (fs20__default.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop") || fs20__default.existsSync("/run/WSL")) {
22598
22600
  return !isInsideContainer();
22599
22601
  }
22600
22602
  return false;
@@ -22697,15 +22699,15 @@ var wslDefaultBrowser = async () => {
22697
22699
  const { stdout } = await executePowerShell(command, { powerShellPath: psPath });
22698
22700
  return stdout.trim();
22699
22701
  };
22700
- var convertWslPathToWindows = async (path30) => {
22701
- if (/^[a-z]+:\/\//i.test(path30)) {
22702
- return path30;
22702
+ var convertWslPathToWindows = async (path31) => {
22703
+ if (/^[a-z]+:\/\//i.test(path31)) {
22704
+ return path31;
22703
22705
  }
22704
22706
  try {
22705
- const { stdout } = await execFile2("wslpath", ["-aw", path30], { encoding: "utf8" });
22707
+ const { stdout } = await execFile2("wslpath", ["-aw", path31], { encoding: "utf8" });
22706
22708
  return stdout.trim();
22707
22709
  } catch {
22708
- return path30;
22710
+ return path31;
22709
22711
  }
22710
22712
  };
22711
22713
 
@@ -25193,8 +25195,8 @@ async function templateCommand(sourcePath, options) {
25193
25195
  const slots = [];
25194
25196
  const componentNames = [];
25195
25197
  traverse(ast, {
25196
- JSXElement(path30) {
25197
- const openingElement = path30.node.openingElement;
25198
+ JSXElement(path31) {
25199
+ const openingElement = path31.node.openingElement;
25198
25200
  if (isJSXIdentifier(openingElement.name)) {
25199
25201
  const componentName = openingElement.name.name;
25200
25202
  if (componentName[0] === componentName[0].toUpperCase()) {
@@ -26318,10 +26320,230 @@ async function uploadSchemas(pages, globalSchema, config2) {
26318
26320
  }
26319
26321
  }
26320
26322
  }
26323
+ var SOURCE_EXTENSIONS = [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"];
26324
+ function stripComments(source) {
26325
+ return source.replace(
26326
+ /("(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'|`(?:\\.|[^`\\])*`)|\/\*[\s\S]*?\*\/|\/\/[^\n]*/g,
26327
+ (match, literal) => literal ?? (match.startsWith("/*") ? match.replace(/[^\n]/g, "") : "")
26328
+ );
26329
+ }
26330
+ function readText(file) {
26331
+ try {
26332
+ return fs20__default.readFileSync(file, "utf-8");
26333
+ } catch {
26334
+ return null;
26335
+ }
26336
+ }
26337
+ function isFile(p) {
26338
+ try {
26339
+ return fs20__default.statSync(p).isFile();
26340
+ } catch {
26341
+ return false;
26342
+ }
26343
+ }
26344
+ function realpath(p) {
26345
+ try {
26346
+ return fs20__default.realpathSync(p);
26347
+ } catch {
26348
+ return null;
26349
+ }
26350
+ }
26351
+ function resolveFile(base) {
26352
+ if (isFile(base) && SOURCE_EXTENSIONS.includes(path12.extname(base))) return base;
26353
+ const stem = base.replace(/\.(m|c)?js$/, "");
26354
+ for (const ext2 of SOURCE_EXTENSIONS) {
26355
+ if (isFile(stem + ext2)) return stem + ext2;
26356
+ }
26357
+ for (const ext2 of SOURCE_EXTENSIONS) {
26358
+ const index = path12.join(base, `index${ext2}`);
26359
+ if (isFile(index)) return index;
26360
+ }
26361
+ return null;
26362
+ }
26363
+ function importSpecifiers(source) {
26364
+ const found = /* @__PURE__ */ new Set();
26365
+ const patterns = [
26366
+ /\b(?:import|export)\s+(?:type\s+)?[^'"`;]*?\bfrom\s*['"]([^'"]+)['"]/g,
26367
+ /\bimport\s*['"]([^'"]+)['"]/g,
26368
+ /\bimport\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
26369
+ /\brequire\s*\(\s*['"]([^'"]+)['"]\s*\)/g
26370
+ ];
26371
+ for (const re2 of patterns) {
26372
+ for (const m of source.matchAll(re2)) found.add(m[1]);
26373
+ }
26374
+ return [...found];
26375
+ }
26376
+ function readLooseJson(file) {
26377
+ const text = readText(file);
26378
+ if (!text) return null;
26379
+ try {
26380
+ return JSON.parse(text);
26381
+ } catch {
26382
+ try {
26383
+ const stripped = text.replace(/("(?:\\.|[^"\\])*")|\/\*[\s\S]*?\*\/|\/\/[^\n]*/g, (_m4, str) => str ?? "").replace(/,(\s*[}\]])/g, "$1");
26384
+ return JSON.parse(stripped);
26385
+ } catch {
26386
+ return null;
26387
+ }
26388
+ }
26389
+ }
26390
+ function loadScope(root) {
26391
+ const tsconfig = readLooseJson(path12.join(root, "tsconfig.json")) ?? readLooseJson(path12.join(root, "jsconfig.json"));
26392
+ const options = tsconfig?.compilerOptions ?? {};
26393
+ const baseUrl = path12.resolve(root, options.baseUrl ?? ".");
26394
+ const aliases = [];
26395
+ for (const [key, value] of Object.entries(options.paths ?? {})) {
26396
+ const star = key.indexOf("*");
26397
+ aliases.push({
26398
+ prefix: star === -1 ? key : key.slice(0, star),
26399
+ suffix: star === -1 ? "" : key.slice(star + 1),
26400
+ exact: star === -1,
26401
+ targets: (Array.isArray(value) ? value : [value]).map((t) => path12.resolve(baseUrl, t))
26402
+ });
26403
+ }
26404
+ return { root, aliases };
26405
+ }
26406
+ function packageRoot(dir) {
26407
+ let current = dir;
26408
+ for (; ; ) {
26409
+ if (["package.json", "tsconfig.json", "jsconfig.json"].some((f) => isFile(path12.join(current, f)))) return current;
26410
+ const parent = path12.dirname(current);
26411
+ if (parent === current) return dir;
26412
+ current = parent;
26413
+ }
26414
+ }
26415
+ function pickExportTarget(value) {
26416
+ if (typeof value === "string") return value;
26417
+ if (Array.isArray(value)) {
26418
+ for (const v2 of value) {
26419
+ const t = pickExportTarget(v2);
26420
+ if (t) return t;
26421
+ }
26422
+ return null;
26423
+ }
26424
+ if (value && typeof value === "object") {
26425
+ const conditions = value;
26426
+ for (const key of ["source", "import", "default", "require", "node", "types"]) {
26427
+ if (key in conditions) {
26428
+ const t = pickExportTarget(conditions[key]);
26429
+ if (t) return t;
26430
+ }
26431
+ }
26432
+ }
26433
+ return null;
26434
+ }
26435
+ function resolvePackageSubpath(pkgRoot, subpath) {
26436
+ const pkg = readLooseJson(path12.join(pkgRoot, "package.json")) ?? {};
26437
+ const exportsField = pkg.exports;
26438
+ if (exportsField !== void 0) {
26439
+ const map = typeof exportsField === "string" || Array.isArray(exportsField) || !Object.keys(exportsField).some((k2) => k2.startsWith(".")) ? { ".": exportsField } : exportsField;
26440
+ if (subpath in map) {
26441
+ const target = pickExportTarget(map[subpath]);
26442
+ if (target) return resolveFile(path12.resolve(pkgRoot, target));
26443
+ }
26444
+ for (const [key, value] of Object.entries(map)) {
26445
+ const star = key.indexOf("*");
26446
+ if (star === -1) continue;
26447
+ const prefix = key.slice(0, star);
26448
+ const suffix = key.slice(star + 1);
26449
+ if (subpath.startsWith(prefix) && subpath.endsWith(suffix) && subpath.length >= prefix.length + suffix.length) {
26450
+ const matched = subpath.slice(prefix.length, subpath.length - suffix.length);
26451
+ const target = pickExportTarget(value);
26452
+ if (target) return resolveFile(path12.resolve(pkgRoot, target.replace("*", matched)));
26453
+ }
26454
+ }
26455
+ }
26456
+ if (subpath === ".") {
26457
+ const main = pkg.source ?? pkg.module ?? pkg.main;
26458
+ if (typeof main === "string") {
26459
+ const hit = resolveFile(path12.resolve(pkgRoot, main));
26460
+ if (hit) return hit;
26461
+ }
26462
+ return resolveFile(path12.join(pkgRoot, "index"));
26463
+ }
26464
+ return resolveFile(path12.resolve(pkgRoot, subpath));
26465
+ }
26466
+ function workspacePackage(fromDir, name) {
26467
+ let current = fromDir;
26468
+ for (; ; ) {
26469
+ const candidate = path12.join(current, "node_modules", name);
26470
+ if (fs20__default.existsSync(candidate)) {
26471
+ const real = realpath(candidate);
26472
+ if (!real || real.split(path12.sep).includes("node_modules")) return null;
26473
+ return real;
26474
+ }
26475
+ const parent = path12.dirname(current);
26476
+ if (parent === current) return null;
26477
+ current = parent;
26478
+ }
26479
+ }
26480
+ function splitBare(specifier) {
26481
+ const parts = specifier.split("/");
26482
+ const nameParts = specifier.startsWith("@") ? parts.slice(0, 2) : parts.slice(0, 1);
26483
+ const rest = parts.slice(nameParts.length);
26484
+ return { name: nameParts.join("/"), subpath: rest.length ? `./${rest.join("/")}` : "." };
26485
+ }
26486
+ function readSourceGraph(entries, options = {}) {
26487
+ const { maxDepth = 4, maxFiles = 300 } = options;
26488
+ const scopes = /* @__PURE__ */ new Map();
26489
+ const scopeFor = (file) => {
26490
+ const root = packageRoot(path12.dirname(file));
26491
+ let scope = scopes.get(root);
26492
+ if (!scope) {
26493
+ scope = loadScope(root);
26494
+ scopes.set(root, scope);
26495
+ }
26496
+ return scope;
26497
+ };
26498
+ const resolve = (specifier, fromFile) => {
26499
+ const fromDir = path12.dirname(fromFile);
26500
+ if (specifier.startsWith(".")) return resolveFile(path12.resolve(fromDir, specifier));
26501
+ if (specifier.startsWith("/") || /^[a-z]+:/i.test(specifier)) return null;
26502
+ const scope = scopeFor(fromFile);
26503
+ for (const alias of scope.aliases) {
26504
+ const hit = alias.exact ? specifier === alias.prefix : specifier.startsWith(alias.prefix) && specifier.endsWith(alias.suffix);
26505
+ if (!hit) continue;
26506
+ const matched = alias.exact ? "" : specifier.slice(alias.prefix.length, specifier.length - alias.suffix.length);
26507
+ for (const target of alias.targets) {
26508
+ const hit2 = resolveFile(target.replace("*", matched));
26509
+ if (hit2) return hit2;
26510
+ }
26511
+ }
26512
+ const { name, subpath } = splitBare(specifier);
26513
+ const pkg = workspacePackage(fromDir, name);
26514
+ return pkg ? resolvePackageSubpath(pkg, subpath) : null;
26515
+ };
26516
+ const seen = /* @__PURE__ */ new Set();
26517
+ const out = [];
26518
+ let frontier = entries.map((e) => path12.resolve(e));
26519
+ for (let depth = 0; depth <= maxDepth && frontier.length && out.length < maxFiles; depth++) {
26520
+ const next = [];
26521
+ for (const file of frontier) {
26522
+ if (seen.has(file) || out.length >= maxFiles) continue;
26523
+ seen.add(file);
26524
+ const raw = readText(file);
26525
+ if (raw === null) continue;
26526
+ const source = stripComments(raw);
26527
+ out.push({ file, source });
26528
+ if (depth === maxDepth) continue;
26529
+ for (const specifier of importSpecifiers(source)) {
26530
+ const hit = resolve(specifier, file);
26531
+ if (hit && !seen.has(hit)) next.push(hit);
26532
+ }
26533
+ }
26534
+ frontier = next;
26535
+ }
26536
+ return out;
26537
+ }
26538
+ function readWithImports(cwd, rel, options) {
26539
+ return readSourceGraph([path12.join(cwd, rel)], options).map((f) => f.source).join("\n");
26540
+ }
26541
+
26542
+ // src/og/wiring.ts
26321
26543
  var CARD_FILE = /^(opengraph-image|twitter-image)\b.*\.(png|jpe?g|gif|webp|tsx|ts|jsx|js)$/i;
26322
26544
  function safeExists(p) {
26323
26545
  try {
26324
- return fs__default.existsSync(p);
26546
+ return fs20__default.existsSync(p);
26325
26547
  } catch {
26326
26548
  return false;
26327
26549
  }
@@ -26331,7 +26553,7 @@ function findPageCards(cwd) {
26331
26553
  const walk = (dir) => {
26332
26554
  let entries;
26333
26555
  try {
26334
- entries = fs__default.readdirSync(dir, { withFileTypes: true });
26556
+ entries = fs20__default.readdirSync(dir, { withFileTypes: true });
26335
26557
  } catch {
26336
26558
  return;
26337
26559
  }
@@ -26345,7 +26567,59 @@ function findPageCards(cwd) {
26345
26567
  for (const rel of NEXT_APP_DIRS) walk(path12.join(cwd, rel));
26346
26568
  return found;
26347
26569
  }
26348
- function readOgWiring(cwd) {
26570
+ function findPageFiles(cwd) {
26571
+ const found = [];
26572
+ const pageFile = new RegExp(`^page\\.(${NEXT_SOURCE_EXTENSIONS.join("|")})$`);
26573
+ const walk = (dir) => {
26574
+ let entries;
26575
+ try {
26576
+ entries = fs20__default.readdirSync(dir, { withFileTypes: true });
26577
+ } catch {
26578
+ return;
26579
+ }
26580
+ for (const entry of entries) {
26581
+ if (entry.name.startsWith(".") || entry.name === "node_modules") continue;
26582
+ const full = path12.join(dir, entry.name);
26583
+ if (entry.isDirectory()) walk(full);
26584
+ else if (pageFile.test(entry.name)) found.push(full);
26585
+ }
26586
+ };
26587
+ for (const rel of NEXT_APP_DIRS) walk(path12.join(cwd, rel));
26588
+ return found;
26589
+ }
26590
+ function routeOf(cwd, dir) {
26591
+ const appRoot = NEXT_APP_DIRS.map((rel2) => path12.join(cwd, rel2)).find((root) => dir === root || dir.startsWith(root + path12.sep));
26592
+ const rel = appRoot ? path12.relative(appRoot, dir) : dir;
26593
+ const segments = rel.split(path12.sep).filter((s) => s && !(s.startsWith("(") && s.endsWith(")"))).map((s) => s.startsWith("[") && s.endsWith("]") ? "*" : s);
26594
+ return `/${segments.join("/")}`;
26595
+ }
26596
+ function readCodeCards(cwd, pageCards) {
26597
+ const code = pageCards.filter((f) => /^opengraph-image\.(tsx|ts|jsx|js)$/.test(path12.basename(f)));
26598
+ return code.map((file) => {
26599
+ const dir = path12.dirname(file);
26600
+ const page = findConventionFile(dir, "page");
26601
+ const source = page ? readSourceGraph([page], { maxDepth: 2, maxFiles: 40 }).map((f) => f.source).join("\n") : "";
26602
+ const pageOwn = page ? readSourceGraph([page], { maxDepth: 0 })[0]?.source ?? "" : "";
26603
+ return {
26604
+ file: path12.relative(cwd, file),
26605
+ route: routeOf(cwd, dir),
26606
+ declaresUrl: /\bcodeCardImage\s*\(/.test(source),
26607
+ // A page that deletes the key itself (the pre-`images: false` workaround)
26608
+ // is fine too.
26609
+ blogDeclaresImages: /\bgenerateBlogPostMetadata\s*\(/.test(pageOwn) && !/\bimages\s*:\s*false\b/.test(pageOwn) && !/\bdelete\s+[\w.]+\.images\b/.test(pageOwn)
26610
+ };
26611
+ });
26612
+ }
26613
+ function readTrailingSlash(cwd) {
26614
+ const rel = findNextConfig(cwd);
26615
+ if (!rel) return false;
26616
+ try {
26617
+ return /\btrailingSlash\s*:\s*true\b/.test(fs20__default.readFileSync(path12.join(cwd, rel), "utf-8"));
26618
+ } catch {
26619
+ return false;
26620
+ }
26621
+ }
26622
+ function readOgWiring(cwd, known = {}) {
26349
26623
  const siteCard = ["public/og.png", "public/og.jpg", "public/opengraph.png"].some(
26350
26624
  (rel) => safeExists(path12.join(cwd, rel))
26351
26625
  );
@@ -26353,17 +26627,23 @@ function readOgWiring(cwd) {
26353
26627
  let layout = "";
26354
26628
  if (layoutPath) {
26355
26629
  try {
26356
- layout = fs__default.readFileSync(layoutPath, "utf-8");
26630
+ layout = fs20__default.readFileSync(layoutPath, "utf-8");
26357
26631
  } catch {
26358
26632
  }
26359
26633
  }
26634
+ const pageCards = findPageCards(cwd);
26635
+ const entries = [...layoutPath ? [layoutPath] : [], ...findPageFiles(cwd)];
26636
+ const largeCard = /summary_large_image/.test(layout) || pageCards.some((f) => /^twitter-image\b/.test(path12.basename(f))) || readSourceGraph(entries, { maxDepth: 3, maxFiles: 400 }).some((f) => /summary_large_image/.test(f.source));
26360
26637
  return {
26361
26638
  siteCard,
26362
- pageCards: findPageCards(cwd),
26639
+ pageCards,
26363
26640
  layoutDeclaresImages: /images:\s*\[/.test(layout),
26364
- largeCard: /summary_large_image/.test(layout),
26641
+ largeCard,
26365
26642
  referencesImage: /og\.png|opengraph-image|og:image|images:\s*\[/.test(layout),
26366
- layoutFound: !!layoutPath
26643
+ layoutFound: !!layoutPath,
26644
+ trailingSlash: readTrailingSlash(cwd),
26645
+ codeCards: readCodeCards(cwd, pageCards),
26646
+ ...known.managedOgImages && { managedOgImages: known.managedOgImages }
26367
26647
  };
26368
26648
  }
26369
26649
  function judgeOgWiring(facts) {
@@ -26391,10 +26671,13 @@ function judgeOgWiring(facts) {
26391
26671
  fix: "Remove the images arrays from the root layout metadata and let Next serve each route its own opengraph-image file."
26392
26672
  });
26393
26673
  }
26394
- problems.push({
26395
- message: "seo_pages.managed_og_image (if set in Sonor) overrides per-page cards the same way",
26396
- fix: "Clear managed_og_image for this project so each page serves its own card."
26397
- });
26674
+ const managed = facts.managedOgImages ?? [];
26675
+ if (managed.length) {
26676
+ problems.push({
26677
+ message: `seo_pages.managed_og_image is set for ${managed.length} page${managed.length === 1 ? "" : "s"} (${managed.slice(0, 5).join(", ")}${managed.length > 5 ? ", \u2026" : ""}), which overrides ${managed.length === 1 ? "its" : "their"} own card`,
26678
+ fix: "Clear managed_og_image on those pages in Sonor so each serves its own card."
26679
+ });
26680
+ }
26398
26681
  } else if (!facts.referencesImage) {
26399
26682
  problems.push({
26400
26683
  message: "card asset exists but layout metadata never references it",
@@ -26407,10 +26690,24 @@ function judgeOgWiring(facts) {
26407
26690
  fix: "Set twitter: { card: 'summary_large_image' } in the root layout metadata."
26408
26691
  });
26409
26692
  }
26693
+ for (const card of facts.codeCards ?? []) {
26694
+ if (card.blogDeclaresImages) {
26695
+ problems.push({
26696
+ message: `${card.route} has its own card (${card.file}), but its page's generateBlogPostMetadata declares the featured image, which beats the card`,
26697
+ fix: "Pass images: false to generateBlogPostMetadata in that page."
26698
+ });
26699
+ }
26700
+ if (facts.trailingSlash && !card.declaresUrl) {
26701
+ problems.push({
26702
+ message: `${card.route}'s card (${card.file}) is served at \u2026/opengraph-image with no extension, which trailingSlash: true 308-redirects`,
26703
+ fix: "Declare the slashed URL from the page's metadata: openGraph.images = [codeCardImage(path)] from @sonordev/site-kit/og. Or, for cards that can be rendered ahead of time, key them in og.config.ts `cards` by URL and use paramCardImage."
26704
+ });
26705
+ }
26706
+ }
26410
26707
  return problems;
26411
26708
  }
26412
- function checkOgWiring(cwd) {
26413
- return judgeOgWiring(readOgWiring(cwd));
26709
+ function checkOgWiring(cwd, known = {}) {
26710
+ return judgeOgWiring(readOgWiring(cwd, known));
26414
26711
  }
26415
26712
 
26416
26713
  // src/cli/agent/ssr-bailout.ts
@@ -26617,6 +26914,90 @@ async function checkPostbuildSitemap(cwd) {
26617
26914
  fix: 'Add "postbuild": "sonor-register-sitemap --auto-discover || true" to package.json scripts.'
26618
26915
  };
26619
26916
  }
26917
+ var TRAILING_SLASH_ON = /\btrailingSlash\s*:\s*true\b/;
26918
+ async function readBuiltSitemaps(cwd) {
26919
+ const appDir = path12.join(cwd, ".next", "server", "app");
26920
+ const single = await readFileOrNull(path12.join(appDir, "sitemap.xml.body"));
26921
+ if (single !== null) return [single];
26922
+ let shards;
26923
+ try {
26924
+ shards = (await fs3.readdir(path12.join(appDir, "sitemap"))).filter((f) => f.endsWith(".xml.body"));
26925
+ } catch {
26926
+ return null;
26927
+ }
26928
+ if (shards.length === 0) return null;
26929
+ const bodies = await Promise.all(shards.map((f) => readFileOrNull(path12.join(appDir, "sitemap", f))));
26930
+ return bodies.filter((b) => b !== null);
26931
+ }
26932
+ function locPath(loc) {
26933
+ try {
26934
+ return new URL(loc).pathname;
26935
+ } catch {
26936
+ return loc;
26937
+ }
26938
+ }
26939
+ async function checkSitemapTrailingSlash(cwd) {
26940
+ const id = "sitemap.trailing-slash";
26941
+ const title = "Sitemap trailing slash";
26942
+ const configRel = findNextConfig(cwd);
26943
+ const config2 = configRel ? await readFileOrNull(path12.join(cwd, configRel)) || "" : "";
26944
+ if (!TRAILING_SLASH_ON.test(config2)) {
26945
+ return { id, title, level: "ok", message: "next.config leaves trailingSlash off" };
26946
+ }
26947
+ const sitemapRel = findSitemapRoute(cwd);
26948
+ const source = sitemapRel ? await readFileOrNull(path12.join(cwd, sitemapRel)) || "" : "";
26949
+ const forcesOff = /\btrailingSlash\s*:\s*false\b/.test(source);
26950
+ const removeForcedOff = `Remove trailingSlash: false from ${sitemapRel}. createSitemap follows next.config.`;
26951
+ const built = await readBuiltSitemaps(cwd);
26952
+ if (built) {
26953
+ const locs = built.flatMap((xml) => [...xml.matchAll(/<loc>\s*([^<\s]+)\s*<\/loc>/g)].map((m) => m[1]));
26954
+ const unslashed = locs.filter((loc) => {
26955
+ const p = locPath(loc);
26956
+ return applyTrailingSlash(p, true) !== p;
26957
+ });
26958
+ if (unslashed.length === 0) {
26959
+ return { id, title, level: "ok", message: `All ${locs.length} URLs in the built sitemap match trailingSlash: true` };
26960
+ }
26961
+ const fix = forcesOff ? removeForcedOff : source.includes("createSitemap") ? "Upgrade @sonordev/site-kit: createSitemap now follows next.config trailingSlash. If it's already current, something loads the kit outside Next's bundler (serverExternalPackages), so pass createSitemap({ trailingSlash: true })." : `End every <loc> except / and files like /llms.txt in "/", or switch ${sitemapRel ?? "the sitemap route"} to createSitemap.`;
26962
+ return {
26963
+ id,
26964
+ title,
26965
+ level: "warn",
26966
+ message: `${unslashed.length} of ${locs.length} built sitemap URLs lack the trailing slash ${configRel} requires`,
26967
+ detail: `Each one 308-redirects. ${unslashed.slice(0, 5).join(", ")}`,
26968
+ fix: `${fix} Then rebuild.`
26969
+ };
26970
+ }
26971
+ if (!sitemapRel) {
26972
+ return { id, title, level: "skip", message: "No sitemap route to check" };
26973
+ }
26974
+ if (forcesOff) {
26975
+ return {
26976
+ id,
26977
+ title,
26978
+ level: "warn",
26979
+ message: `${sitemapRel} passes trailingSlash: false but ${configRel} sets trailingSlash: true`,
26980
+ detail: "Every sitemap URL except / will 308-redirect.",
26981
+ fix: removeForcedOff
26982
+ };
26983
+ }
26984
+ if (source.includes("createSitemap")) {
26985
+ return {
26986
+ id,
26987
+ title,
26988
+ level: "ok",
26989
+ message: "createSitemap follows next.config trailingSlash",
26990
+ detail: "No build to confirm against. Run `next build`, then doctor again to check the emitted URLs."
26991
+ };
26992
+ }
26993
+ return {
26994
+ id,
26995
+ title,
26996
+ level: "skip",
26997
+ message: "Custom sitemap and no build to check",
26998
+ fix: 'Run `next build`, then doctor again. Every <loc> except / and files like /llms.txt must end in "/".'
26999
+ };
27000
+ }
26620
27001
  async function checkApiReachable(timeoutMs = 5e3) {
26621
27002
  const key = process.env.SONOR_API_KEY;
26622
27003
  try {
@@ -27060,8 +27441,8 @@ async function checkImageDimsDrift(cwd) {
27060
27441
  }
27061
27442
  return { id: "images.dims-drift", title: "Image dims vs SVG", level: "ok", message: "Declared dims match SVG viewBoxes" };
27062
27443
  }
27063
- async function checkOgCard(cwd) {
27064
- const problems = judgeOgWiring(readOgWiring(cwd));
27444
+ async function checkOgCard(cwd, known = {}) {
27445
+ const problems = judgeOgWiring(readOgWiring(cwd, known));
27065
27446
  if (!problems.length) {
27066
27447
  return { id: "og.card", title: "Open Graph card", level: "ok", message: "Cards present and wired" };
27067
27448
  }
@@ -27082,12 +27463,59 @@ async function staticChecks(cwd) {
27082
27463
  await checkSiteKitLayout(cwd),
27083
27464
  await checkSitemap(cwd),
27084
27465
  await checkPostbuildSitemap(cwd),
27466
+ await checkSitemapTrailingSlash(cwd),
27085
27467
  await checkNetlifyMiddleware(cwd),
27086
27468
  await checkImageDimsDrift(cwd),
27087
27469
  await checkOgCard(cwd)
27088
27470
  ];
27089
27471
  }
27090
27472
 
27473
+ // src/og/route-copy.ts
27474
+ var RENDER_CONCURRENCY = 4;
27475
+ async function pooled(items, limit, fn) {
27476
+ const results = new Array(items.length);
27477
+ let cursor = 0;
27478
+ const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
27479
+ while (cursor < items.length) {
27480
+ const i = cursor++;
27481
+ results[i] = await fn(items[i], i);
27482
+ }
27483
+ });
27484
+ await Promise.all(workers);
27485
+ return results;
27486
+ }
27487
+ async function resolveRouteCopy(paths) {
27488
+ let getSEOPageData = null;
27489
+ try {
27490
+ if (process.env.SONOR_API_KEY) {
27491
+ ;
27492
+ ({ getSEOPageData } = await import('../api-D745LGGU.mjs'));
27493
+ }
27494
+ } catch {
27495
+ getSEOPageData = null;
27496
+ }
27497
+ if (!getSEOPageData) return paths.map((p) => ({ path: p }));
27498
+ return pooled(paths, RENDER_CONCURRENCY, async (p) => {
27499
+ try {
27500
+ const page = await getSEOPageData("", p);
27501
+ const title = page?.managed_title ?? page?.managed_og_title;
27502
+ const description = page?.managed_meta_description ?? page?.managed_og_description;
27503
+ const managedOgImage = page?.managed_og_image || void 0;
27504
+ return { path: p, title: title || void 0, description: description || void 0, managedOgImage };
27505
+ } catch {
27506
+ return { path: p };
27507
+ }
27508
+ });
27509
+ }
27510
+ async function readManagedOgImages(cwd) {
27511
+ if (!process.env.SONOR_API_KEY) return void 0;
27512
+ const appDir = findAppDirForDiscovery(cwd);
27513
+ if (!appDir) return void 0;
27514
+ const routes = [...new Set(discoverNextJsRoutes(appDir).map((r) => r.path))];
27515
+ const copy = await resolveRouteCopy(routes);
27516
+ return copy.filter((r) => r.managedOgImage).map((r) => r.path);
27517
+ }
27518
+
27091
27519
  // src/cli/commands/doctor.ts
27092
27520
  function countLevels(checks) {
27093
27521
  return {
@@ -27100,6 +27528,11 @@ function countLevels(checks) {
27100
27528
  async function collectChecks(cwd, online) {
27101
27529
  const checks = await staticChecks(cwd);
27102
27530
  if (online) {
27531
+ const managedOgImages = await readManagedOgImages(cwd).catch(() => void 0);
27532
+ if (managedOgImages) {
27533
+ const i = checks.findIndex((c) => c.id === "og.card");
27534
+ if (i !== -1) checks[i] = await checkOgCard(cwd, { managedOgImages });
27535
+ }
27103
27536
  checks.push(await checkApiReachable(), await checkKeyValid(), await checkLlmsTxt());
27104
27537
  checks.push(...await checkClientAuth());
27105
27538
  }
@@ -27156,87 +27589,7 @@ async function statusCommand(options) {
27156
27589
  const online = options.offline ? false : true;
27157
27590
  await runCommand(ctx, (c) => run2(c, online), renderChecksHuman("Site-Kit Integration Status"));
27158
27591
  }
27159
-
27160
- // src/og/pages.ts
27161
- var DYNAMIC = "*";
27162
- function pathSegments(path30) {
27163
- return path30.split("/").filter(Boolean);
27164
- }
27165
- function stripBrandSuffix(title, brand) {
27166
- const cleaned = title.replace(/\s*[|–—-]\s*[^|–—-]+$/, "").trim();
27167
- if (!cleaned) return title.trim();
27168
- if (brand && cleaned.toLowerCase() === brand.toLowerCase()) return title.trim();
27169
- return cleaned;
27170
- }
27171
- function titleFromPath(path30) {
27172
- const last = pathSegments(path30).filter((s) => s !== DYNAMIC).pop();
27173
- if (!last) return "Home";
27174
- return last.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()).trim();
27175
- }
27176
- function kickerFromPath(path30, fallback) {
27177
- const parts = pathSegments(path30);
27178
- const section = parts.includes(DYNAMIC) ? parts.filter((s) => s !== DYNAMIC) : parts.slice(0, -1);
27179
- if (!section.length) return fallback;
27180
- return section.join(" / ").replace(/[-_]+/g, " ");
27181
- }
27182
- function clampSubtitle(text, max = 100) {
27183
- if (!text) return void 0;
27184
- const flat = text.replace(/\s+/g, " ").trim();
27185
- if (!flat) return void 0;
27186
- if (flat.length <= max) return flat;
27187
- const sentence = flat.slice(0, max + 1).match(/^.*[.!?](?=\s|$)/)?.[0];
27188
- if (sentence && sentence.length >= 30) return sentence.trim();
27189
- return void 0;
27190
- }
27191
- function kickerIsRedundant(kicker, title) {
27192
- if (!kicker) return false;
27193
- const norm = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
27194
- const k2 = norm(kicker);
27195
- const t = norm(title);
27196
- if (!k2) return true;
27197
- if (t.includes(k2) || k2.includes(t)) return true;
27198
- const titleWords = new Set(t.split(" "));
27199
- return k2.split(" ").every((w) => titleWords.has(w));
27200
- }
27201
- function slugForPath(path30) {
27202
- const segments = pathSegments(path30);
27203
- if (!segments.length) return "home";
27204
- return segments.map((s) => s === DYNAMIC ? "any" : s).join("-").replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-+|-+$/g, "").toLowerCase();
27205
- }
27206
- function unmatchedCardKeys(cards, paths) {
27207
- if (!cards) return [];
27208
- const known = new Set(paths.flatMap((p) => [p, slugForPath(p)]));
27209
- return Object.keys(cards).filter((key) => !known.has(key));
27210
- }
27211
- function pageCardConfig(base, route, brand) {
27212
- const override = base.cards?.[route.path] ?? base.cards?.[slugForPath(route.path)];
27213
- const isHome = route.path === "/";
27214
- const derived = isHome ? { ...base, cards: void 0 } : (() => {
27215
- const title = route.title ? stripBrandSuffix(route.title, brand) : titleFromPath(route.path);
27216
- const kicker = kickerFromPath(route.path, base.content.kicker);
27217
- return {
27218
- ...base,
27219
- // `cards` is a build-time instruction, not part of a rendered card.
27220
- cards: void 0,
27221
- content: {
27222
- ...base.content,
27223
- kicker: kickerIsRedundant(kicker, title) ? void 0 : kicker,
27224
- title,
27225
- subtitle: clampSubtitle(route.description) ?? base.content.subtitle
27226
- }
27227
- };
27228
- })();
27229
- if (!override) return derived;
27230
- return {
27231
- ...derived,
27232
- ...override,
27233
- content: { ...derived.content, ...override.content }
27234
- };
27235
- }
27236
-
27237
- // src/cli/commands/og.ts
27238
27592
  var execFileAsync5 = promisify(execFile$1);
27239
- var RENDER_CONCURRENCY = 4;
27240
27593
  var CARD_KEY_FIX = "Key `cards` by route path (`/services/garage`) or slug (`services-garage`). A dynamic route is one `*` per dynamic level \u2014 `/services/*` for `[slug]`, plus a star for each nested `[param]`.";
27241
27594
  var CHROME_CANDIDATES = [
27242
27595
  process.env.SONOR_CHROME_PATH,
@@ -27361,7 +27714,7 @@ async function compressCard(pngPath, cwd) {
27361
27714
  }
27362
27715
  }
27363
27716
  function codeOgImageFile(dir) {
27364
- return findConventionFile(dir, "opengraph-image");
27717
+ return findConventionFile(dir, "opengraph-image") ?? findConventionFile(path12.join(dir, "opengraph-image"), "route");
27365
27718
  }
27366
27719
  function discoverDynamicSegments(appDir) {
27367
27720
  const found = [];
@@ -27379,6 +27732,8 @@ function discoverDynamicSegments(appDir) {
27379
27732
  if (hasPageFile(full)) {
27380
27733
  found.push({ dir: full, path: `/${nextPattern.join("/")}`, parent: `/${urlSegments.join("/")}` });
27381
27734
  }
27735
+ } else if (!isGroup && nextPattern.includes(DYNAMIC) && hasPageFile(full)) {
27736
+ found.push({ dir: full, path: `/${nextPattern.join("/")}`, parent: null });
27382
27737
  }
27383
27738
  walk(full, nextUrl, nextPattern);
27384
27739
  }
@@ -27386,40 +27741,6 @@ function discoverDynamicSegments(appDir) {
27386
27741
  walk(appDir, [], []);
27387
27742
  return found;
27388
27743
  }
27389
- async function pooled(items, limit, fn) {
27390
- const results = new Array(items.length);
27391
- let cursor = 0;
27392
- const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
27393
- while (cursor < items.length) {
27394
- const i = cursor++;
27395
- results[i] = await fn(items[i], i);
27396
- }
27397
- });
27398
- await Promise.all(workers);
27399
- return results;
27400
- }
27401
- async function resolveRouteCopy(paths) {
27402
- let getSEOPageData = null;
27403
- try {
27404
- if (process.env.SONOR_API_KEY) {
27405
- ;
27406
- ({ getSEOPageData } = await import('../api-D745LGGU.mjs'));
27407
- }
27408
- } catch {
27409
- getSEOPageData = null;
27410
- }
27411
- if (!getSEOPageData) return paths.map((p) => ({ path: p }));
27412
- return pooled(paths, RENDER_CONCURRENCY, async (p) => {
27413
- try {
27414
- const page = await getSEOPageData("", p);
27415
- const title = page?.managed_title ?? page?.managed_og_title;
27416
- const description = page?.managed_meta_description ?? page?.managed_og_description;
27417
- return { path: p, title: title || void 0, description: description || void 0 };
27418
- } catch {
27419
- return { path: p };
27420
- }
27421
- });
27422
- }
27423
27744
  function reportCard(label, report) {
27424
27745
  if (report.fits && !report.issues.length) {
27425
27746
  const shrunk = report.titlePx < TITLE_MAX_PX ? source_default.gray(` (title fitted to ${report.titlePx}px)`) : "";
@@ -27464,6 +27785,7 @@ async function runOg(options) {
27464
27785
  let cardKeyFix = null;
27465
27786
  let pageCardsWritten = 0;
27466
27787
  let totalCardBytes = 0;
27788
+ let managedOgImages;
27467
27789
  const spinner = ora("Rendering the site card...").start();
27468
27790
  try {
27469
27791
  const report = await renderCard(config2, outPath, cwd, chrome, "site");
@@ -27495,6 +27817,9 @@ async function runOg(options) {
27495
27817
  const withCopy = await resolveRouteCopy(routes);
27496
27818
  const named = withCopy.filter((r) => r.title).length;
27497
27819
  copySpinner.stop();
27820
+ if (process.env.SONOR_API_KEY) {
27821
+ managedOgImages = withCopy.filter((r) => r.managedOgImage).map((r) => r.path);
27822
+ }
27498
27823
  if (named) {
27499
27824
  console.log(source_default.gray(` ${named}/${routes.length} titled from Sonor, the rest from the route path`));
27500
27825
  } else {
@@ -27503,11 +27828,13 @@ async function runOg(options) {
27503
27828
  const brand = config2.content.title.replace(/\n/g, " ").trim();
27504
27829
  const copyByPath = new Map(withCopy.map((r) => [r.path, r]));
27505
27830
  const dynamic = discoverDynamicSegments(appDir).map((seg) => ({
27506
- ...copyByPath.get(seg.parent) ?? {},
27831
+ ...seg.parent !== null && copyByPath.get(seg.parent) || {},
27507
27832
  path: seg.path,
27508
27833
  dir: seg.dir
27509
27834
  }));
27510
27835
  const targets = [...withCopy, ...dynamic];
27836
+ const paramKeys = paramCardKeys(config2.cards, targets.map((t) => t.path));
27837
+ const paramRoutes = paramKeys.length ? await resolveRouteCopy(paramKeys.map((k2) => k2.path)) : [];
27511
27838
  const strayKeys = unmatchedCardKeys(config2.cards, targets.map((t) => t.path));
27512
27839
  if (strayKeys.length) {
27513
27840
  const patterns = targets.filter((t) => t.path.includes(DYNAMIC)).map((t) => t.path);
@@ -27554,10 +27881,36 @@ async function runOg(options) {
27554
27881
  clean = reportCard(`${route.path} ${source_default.gray(path12.relative(cwd, file))}`, report) && clean;
27555
27882
  checks.push(cardCheck(route.path, path12.relative(cwd, file), report));
27556
27883
  }
27557
- pageCardsWritten = reports.length;
27558
- const bytes = await totalBytes(reports.map((r) => r.file));
27884
+ const paramDir = path12.join(cwd, "public", PARAM_CARD_DIR);
27885
+ await fs3.rm(paramDir, { recursive: true, force: true });
27886
+ let paramReports = [];
27887
+ if (paramRoutes.length) {
27888
+ console.log("");
27889
+ console.log(source_default.bold(" Per-URL cards") + source_default.gray(` public/${PARAM_CARD_DIR}/, declare with paramCardImage()`));
27890
+ paramReports = await pooled(paramRoutes, RENDER_CONCURRENCY, async (route, i) => {
27891
+ const pageConfig = pageCardConfig(config2, route, brand);
27892
+ const jpg = path12.join(cwd, "public", paramCardUrl(route.path));
27893
+ const png = jpg.replace(/\.jpg$/, ".png");
27894
+ const report = await renderCard(pageConfig, png, cwd, chrome, `param-${i}`);
27895
+ const file = await compressCard(png, cwd);
27896
+ if (file !== jpg) {
27897
+ report.fits = false;
27898
+ report.issues = [...report.issues, "sharp is needed to write per-URL cards as .jpg. Add it: pnpm add -D sharp"];
27899
+ }
27900
+ return { route, file, report };
27901
+ });
27902
+ for (const { route, file, report } of paramReports) {
27903
+ clean = reportCard(`${route.path} ${source_default.gray(path12.relative(cwd, file))}`, report) && clean;
27904
+ checks.push(cardCheck(route.path, path12.relative(cwd, file), report));
27905
+ }
27906
+ }
27907
+ pageCardsWritten = reports.length + paramReports.length;
27908
+ const bytes = await totalBytes([...reports, ...paramReports].map((r) => r.file));
27559
27909
  totalCardBytes = bytes;
27560
- console.log(source_default.gray(` ${(bytes / 1024 / 1024).toFixed(1)} MB of cards. Next serves these automatically \u2014 no per-page metadata needed.`));
27910
+ console.log(source_default.gray(` ${(bytes / 1024 / 1024).toFixed(1)} MB of cards. Next serves the route cards automatically \u2014 no per-page metadata needed.`));
27911
+ if (paramReports.length) {
27912
+ console.log(source_default.gray(" Per-URL cards need the page to declare them: openGraph.images = [paramCardImage(path, { config })]."));
27913
+ }
27561
27914
  }
27562
27915
  }
27563
27916
  }
@@ -27574,7 +27927,7 @@ async function runOg(options) {
27574
27927
  console.log(source_default.gray(" (sharp not resolvable \u2014 skipped the 300px preview)"));
27575
27928
  }
27576
27929
  }
27577
- const problems = checkOgWiring(cwd);
27930
+ const problems = checkOgWiring(cwd, { managedOgImages });
27578
27931
  console.log("");
27579
27932
  if (problems.length) {
27580
27933
  console.log(source_default.yellow(" Metadata wiring:"));
@@ -27776,14 +28129,14 @@ var hs = new RegExp(pe, "g");
27776
28129
  var as = /\\\\/g;
27777
28130
  var ls = /\\{/g;
27778
28131
  var cs = /\\}/g;
27779
- var fs22 = /\\,/g;
28132
+ var fs23 = /\\,/g;
27780
28133
  var us = /\\./g;
27781
28134
  var ds = 1e5;
27782
28135
  function Ht(n5) {
27783
28136
  return isNaN(n5) ? n5.charCodeAt(0) : parseInt(n5, 10);
27784
28137
  }
27785
28138
  function ps(n5) {
27786
- return n5.replace(as, fe).replace(ls, ue).replace(cs, qt).replace(fs22, de).replace(us, pe);
28139
+ return n5.replace(as, fe).replace(ls, ue).replace(cs, qt).replace(fs23, de).replace(us, pe);
27787
28140
  }
27788
28141
  function ms(n5) {
27789
28142
  return n5.replace(is, "\\").replace(rs, "{").replace(ns, "}").replace(os5, ",").replace(hs, ".");
@@ -29404,8 +29757,8 @@ var V = class extends EventEmitter {
29404
29757
  }
29405
29758
  };
29406
29759
  var vi = realpathSync.native;
29407
- var wt = { lstatSync: lstatSync, readdir: readdir$1, readdirSync: readdirSync, readlinkSync: readlinkSync, realpathSync: vi, promises: { lstat: lstat, readdir: readdir, readlink: readlink, realpath: realpath } };
29408
- var Ue = (n5) => !n5 || n5 === wt || n5 === fs ? wt : { ...wt, ...n5, promises: { ...wt.promises, ...n5.promises || {} } };
29760
+ var wt = { lstatSync: lstatSync, readdir: readdir$1, readdirSync: readdirSync, readlinkSync: readlinkSync, realpathSync: vi, promises: { lstat: lstat, readdir: readdir, readlink: readlink, realpath: realpath$1 } };
29761
+ var Ue = (n5) => !n5 || n5 === wt || n5 === fs20 ? wt : { ...wt, ...n5, promises: { ...wt.promises, ...n5.promises || {} } };
29409
29762
  var $e = /^\\\\\?\\([a-z]:)\\?$/i;
29410
29763
  var Ri = (n5) => n5.replace(/\//g, "\\").replace($e, "$1\\");
29411
29764
  var Oi = /[\\\/]/;
@@ -31134,7 +31487,7 @@ function findManifestPath() {
31134
31487
  let dir = baseDir;
31135
31488
  for (let i = 0; i < 8; i++) {
31136
31489
  const candidate = path12.join(dir, "agent-manifest.json");
31137
- if (fs__default.existsSync(candidate)) return candidate;
31490
+ if (fs20__default.existsSync(candidate)) return candidate;
31138
31491
  const parent = path12.dirname(dir);
31139
31492
  if (parent === dir) break;
31140
31493
  dir = parent;
@@ -31150,7 +31503,7 @@ async function run5(ctx, options) {
31150
31503
  "Reinstall @sonordev/site-kit, or run `npm run build` if working from source."
31151
31504
  );
31152
31505
  }
31153
- const manifest = JSON.parse(fs__default.readFileSync(manifestPath, "utf-8"));
31506
+ const manifest = JSON.parse(fs20__default.readFileSync(manifestPath, "utf-8"));
31154
31507
  if (options.section) {
31155
31508
  const section = options.section;
31156
31509
  if (!(section in manifest)) {
@@ -32146,17 +32499,16 @@ var LLMS_FILES = [
32146
32499
  { path: "/llms.txt", handler: "createLLMsTxtHandler" },
32147
32500
  { path: "/llms-full.txt", handler: "createLLMsFullTxtHandler" }
32148
32501
  ];
32149
- var NEXT_CONFIGS = ["next.config.ts", "next.config.mts", "next.config.mjs", "next.config.js", "next.config.cjs"];
32150
32502
  function read(cwd, rel) {
32151
32503
  try {
32152
- return fs__default.readFileSync(path12.join(cwd, rel), "utf-8");
32504
+ return fs20__default.readFileSync(path12.join(cwd, rel), "utf-8");
32153
32505
  } catch {
32154
32506
  return "";
32155
32507
  }
32156
32508
  }
32157
32509
  function exists(cwd, rel) {
32158
32510
  try {
32159
- return fs__default.existsSync(path12.join(cwd, rel));
32511
+ return fs20__default.existsSync(path12.join(cwd, rel));
32160
32512
  } catch {
32161
32513
  return false;
32162
32514
  }
@@ -32213,37 +32565,38 @@ function findHostNoindex(cwd, urlPath) {
32213
32565
  if (vercel && vercelJsonNoindex(vercel, urlPath)) return "vercel.json";
32214
32566
  return null;
32215
32567
  }
32568
+ function readGraph(cwd, rel) {
32569
+ return exists(cwd, rel) ? readWithImports(cwd, rel, { maxDepth: 3, maxFiles: 60 }) : "";
32570
+ }
32216
32571
  var LINK_DISCOVERY_LINE = /^.*\bLink\b.*(llms[^\n]*describedby|describedby[^\n]*llms).*$/im;
32217
32572
  function findDiscoverySource(cwd) {
32218
32573
  for (const rel of findProxyFiles(cwd)) {
32219
- const src = read(cwd, rel);
32574
+ const src = readGraph(cwd, rel);
32220
32575
  const viaFactory = /\bcreate(Proxy|Middleware)\s*\(/.test(src) && /\bllmsDiscovery\b(?!\s*:\s*false\b)/.test(src);
32221
32576
  if (viaFactory) return `${rel} (createProxy llmsDiscovery)`;
32222
32577
  if (src.includes("buildAiDiscoveryHeaders")) return `${rel} (buildAiDiscoveryHeaders)`;
32223
32578
  }
32224
- for (const rel of NEXT_CONFIGS) {
32225
- const src = read(cwd, rel);
32226
- if (!src) continue;
32227
- if (/\bllmsTxtDiscoveryLink\s*:(?!\s*false\b)/.test(src)) return `${rel} (llmsTxtDiscoveryLink)`;
32228
- if (src.includes("buildAiDiscoveryHeaders")) return `${rel} (buildAiDiscoveryHeaders)`;
32229
- break;
32230
- }
32231
- const layout = findRootLayout(cwd);
32232
- if (layout) {
32233
- const src = read(cwd, path12.relative(cwd, layout));
32234
- if (src.includes("buildAiDiscoveryHeaders") || src.includes("llmsTxtDiscoveryLink")) {
32235
- return path12.relative(cwd, layout);
32236
- }
32579
+ const nextConfig = findNextConfig(cwd);
32580
+ if (nextConfig) {
32581
+ const src = read(cwd, nextConfig);
32582
+ if (/\bllmsTxtDiscoveryLink\s*:(?!\s*false\b)/.test(src)) return `${nextConfig} (llmsTxtDiscoveryLink)`;
32583
+ if (src.includes("buildAiDiscoveryHeaders")) return `${nextConfig} (buildAiDiscoveryHeaders)`;
32237
32584
  }
32238
32585
  for (const rel of ["netlify.toml", "public/_headers"]) {
32239
32586
  if (LINK_DISCOVERY_LINE.test(read(cwd, rel))) return rel;
32240
32587
  }
32241
32588
  return null;
32242
32589
  }
32590
+ function findLayoutHeadersAttempt(cwd) {
32591
+ const layout = findRootLayout(cwd);
32592
+ if (!layout) return null;
32593
+ const src = read(cwd, path12.relative(cwd, layout));
32594
+ return src.includes("buildAiDiscoveryHeaders") || /\bexport\s+(async\s+)?function\s+headers\b/.test(src) ? path12.relative(cwd, layout) : null;
32595
+ }
32243
32596
  function readGeoWiring(cwd) {
32244
32597
  const appDir = NEXT_APP_DIRS.find((rel) => exists(cwd, rel)) ?? null;
32245
32598
  const sitemap = findSitemapRoute(cwd);
32246
- const sitemapSrc = sitemap ? read(cwd, sitemap) : "";
32599
+ const sitemapSrc = sitemap ? readGraph(cwd, sitemap) : "";
32247
32600
  const sitemapListsLlms = /\bincludeLlms(Full)?TxtInSitemap\s*:\s*true\b/.test(sitemapSrc) || /['"`/]llms(-full)?\.txt['"`]/.test(sitemapSrc);
32248
32601
  const sitemapWritesStatic = /\bcreateSitemap\s*\(/.test(sitemapSrc);
32249
32602
  const writesLlms = sitemapWritesStatic && !/\boptimizedLLMsTxt\s*:\s*false\b/.test(sitemapSrc);
@@ -32252,7 +32605,7 @@ function readGeoWiring(cwd) {
32252
32605
  const file = urlPath.slice(1);
32253
32606
  const routeAbs = appDir ? findConventionFile(path12.join(cwd, appDir, file), "route") : null;
32254
32607
  const route = routeAbs ? path12.relative(cwd, routeAbs) : null;
32255
- const routeSrc = route ? read(cwd, route) : "";
32608
+ const routeSrc = route ? readGraph(cwd, route) : "";
32256
32609
  const publicFile = exists(cwd, path12.join("public", file));
32257
32610
  const built = urlPath === "/llms.txt" ? writesLlms : writesLlmsFull;
32258
32611
  return {
@@ -32266,7 +32619,15 @@ function readGeoWiring(cwd) {
32266
32619
  hostNoindex: findHostNoindex(cwd, urlPath)
32267
32620
  };
32268
32621
  });
32269
- return { appDir, llms, sitemap, sitemapListsLlms, discovery: findDiscoverySource(cwd) };
32622
+ const discovery = findDiscoverySource(cwd);
32623
+ return {
32624
+ appDir,
32625
+ llms,
32626
+ sitemap,
32627
+ sitemapListsLlms,
32628
+ discovery,
32629
+ layoutHeadersAttempt: discovery ? null : findLayoutHeadersAttempt(cwd)
32630
+ };
32270
32631
  }
32271
32632
  var DISCOVERY_FIX = "Add llmsDiscovery to the proxy: createProxy({ llmsDiscovery: { siteUrl } }) in proxy.ts. Or withSiteKitConfig({ llmsTxtDiscoveryLink: true }) in next.config.";
32272
32633
  var SITEMAP_FIX = "Drop includeLlmsTxtInSitemap / includeLlmsFullTxtInSitemap (and any hand-added /llms*.txt entry) from the sitemap. A sitemap lists indexable HTML pages; AI crawlers find llms.txt at /llms.txt.";
@@ -32307,7 +32668,7 @@ function judgeGeoWiring(facts) {
32307
32668
  id: "geo.discovery",
32308
32669
  label: 'discovery header (Link rel="describedby")',
32309
32670
  level: "fail",
32310
- detail: "not wired in proxy, next.config, root layout, or host config",
32671
+ detail: facts.layoutHeadersAttempt ? `${facts.layoutHeadersAttempt} exports headers(), which is a next.config API: from a layout it's never called and sends nothing` : "not wired in proxy, next.config, or host config",
32311
32672
  fix: DISCOVERY_FIX
32312
32673
  }
32313
32674
  );
@@ -32509,4 +32870,3 @@ program2.command("geo").description("Check llms.txt / GEO wiring (routes, sitema
32509
32870
  }
32510
32871
  program2.parse();
32511
32872
  //# sourceMappingURL=index.mjs.map
32512
- //# sourceMappingURL=index.mjs.map