@koda-sl/baker-cli 0.493.0 → 0.495.0-dev.6b9c22aff

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 (862) hide show
  1. package/README.md +6 -2
  2. package/dist/account-CJGLH2OL.js +80 -0
  3. package/dist/account-UTFFCFNW.js +79 -0
  4. package/dist/account-reads-SOTNVUM6.js +218 -0
  5. package/dist/account-users-FUJVP4UG.js +61 -0
  6. package/dist/account-users-FUJVP4UG.js.map +1 -0
  7. package/dist/account-writes-OE5FKALN.js +66 -0
  8. package/dist/accounts-OY4DII7M.js +611 -0
  9. package/dist/accounts-XUMRFVLY.js +77 -0
  10. package/dist/actions-KYKLFVUI.js +55 -0
  11. package/dist/activecampaign-P6RO7B2Q.js +935 -0
  12. package/dist/ad-group-writes-343HA4ZG.js +170 -0
  13. package/dist/ad-groups-YMU6ATTW.js +68 -0
  14. package/dist/ad-writes-MINKG33L.js +174 -0
  15. package/dist/add-34QTAS7S.js +104 -0
  16. package/dist/add-3IZ3Z2PX.js +302 -0
  17. package/dist/ads-JRZVJFXS.js +40 -0
  18. package/dist/ads-QOXCMKZ2.js +77 -0
  19. package/dist/advertisers-G2UUCWA7.js +120 -0
  20. package/dist/analytics-CKF7HTWT.js +433 -0
  21. package/dist/analytics-FO4EDDQW.js +1976 -0
  22. package/dist/animate-K3MJ3GW4.js +480 -0
  23. package/dist/assign-76E76PJY.js +77 -0
  24. package/dist/audience-size-IGDEX4XR.js +73 -0
  25. package/dist/audiences-4GRCVFZN.js +268 -0
  26. package/dist/audit-LPSYEY4S.js +151 -0
  27. package/dist/autocomplete-G7MSIJQL.js +111 -0
  28. package/dist/avatars-BF7VWGPH.js +38 -0
  29. package/dist/bid-pricing-EAZHVAMJ.js +100 -0
  30. package/dist/brand-WQI4NV3H.js +22 -0
  31. package/dist/brief-DVFCPBR3.js +538 -0
  32. package/dist/campaign-groups-LCTAUXTU.js +96 -0
  33. package/dist/campaign-groups-LCTAUXTU.js.map +1 -0
  34. package/dist/campaign-writes-ECPSPFAB.js +165 -0
  35. package/dist/campaign-writes-EZEJNO3O.js +170 -0
  36. package/dist/campaigns-7S35PC44.js +76 -0
  37. package/dist/campaigns-MVLKQWX2.js +110 -0
  38. package/dist/campaigns-MVLKQWX2.js.map +1 -0
  39. package/dist/campaigns-R3EUC5Y2.js +107 -0
  40. package/dist/canvas-Y3DKVETP.js +46 -0
  41. package/dist/capabilities-OBP5PDRK.js +144 -0
  42. package/dist/catalog-SZS2JCLN.js +65 -0
  43. package/dist/catalogs-LEABW6AS.js +128 -0
  44. package/dist/changes-4EDY3RNX.js +135 -0
  45. package/dist/chatgpt-JOAEGWCB.js +47 -0
  46. package/dist/chats-KE7FNWKF.js +276 -0
  47. package/dist/check-XHK2HVD2.js +104 -0
  48. package/dist/chunk-22HH46DF.js +122 -0
  49. package/dist/chunk-2VWWLUDJ.js +23 -0
  50. package/dist/chunk-2WBRRYSS.js +197 -0
  51. package/dist/chunk-2XH7GKCO.js +156 -0
  52. package/dist/chunk-3LMAPV6P.js +942 -0
  53. package/dist/chunk-3LZM5MWM.js +57 -0
  54. package/dist/chunk-4ARHIC23.js +392 -0
  55. package/dist/chunk-5KEQXSCN.js +1919 -0
  56. package/dist/chunk-5PMEMWKS.js +665 -0
  57. package/dist/chunk-64BRPYJD.js +225 -0
  58. package/dist/chunk-6DQDZIBL.js +363 -0
  59. package/dist/chunk-6H64SENZ.js +285 -0
  60. package/dist/chunk-6KGLAMPV.js +167 -0
  61. package/dist/chunk-6OIKNJ7G.js +26 -0
  62. package/dist/chunk-6VIHWBOD.js +1606 -0
  63. package/dist/chunk-74BP3JIV.js +275 -0
  64. package/dist/chunk-7AWSJ6Z5.js +66 -0
  65. package/dist/chunk-7IVY55AU.js +903 -0
  66. package/dist/chunk-7POQSUPH.js +455 -0
  67. package/dist/chunk-7RCNWRKK.js +206 -0
  68. package/dist/chunk-ABEIEHOV.js +131 -0
  69. package/dist/chunk-AREUZGX7.js +344 -0
  70. package/dist/chunk-CNFFNE4L.js +274 -0
  71. package/dist/chunk-CORXHFKY.js +433 -0
  72. package/dist/chunk-D3SHD4KA.js +399 -0
  73. package/dist/chunk-DD3C6TSW.js +61 -0
  74. package/dist/chunk-DQU2GVU7.js +51 -0
  75. package/dist/chunk-ECHVJII5.js +97 -0
  76. package/dist/chunk-EFWXYUSK.js +139 -0
  77. package/dist/chunk-F3CZFUXZ.js +3187 -0
  78. package/dist/chunk-F3CZFUXZ.js.map +1 -0
  79. package/dist/chunk-F4KWLFCC.js +103 -0
  80. package/dist/chunk-FL2KIDPV.js +494 -0
  81. package/dist/chunk-FL2KIDPV.js.map +1 -0
  82. package/dist/chunk-FT7RYWOL.js +160 -0
  83. package/dist/chunk-HPIKZPTU.js +297 -0
  84. package/dist/chunk-HUPHZ35H.js +547 -0
  85. package/dist/chunk-JGM4WGC2.js +6704 -0
  86. package/dist/chunk-JGM4WGC2.js.map +1 -0
  87. package/dist/chunk-JMW3AVN7.js +346 -0
  88. package/dist/chunk-JMW3AVN7.js.map +1 -0
  89. package/dist/chunk-JQHLF74O.js +8939 -0
  90. package/dist/chunk-K2TOE6XL.js +142 -0
  91. package/dist/chunk-KI6TENTW.js +5368 -0
  92. package/dist/chunk-LMYCLUY2.js +8914 -0
  93. package/dist/chunk-LQR4CKYW.js +191 -0
  94. package/dist/chunk-LRFNUCHV.js +89 -0
  95. package/dist/chunk-M2D7ZWEU.js +150 -0
  96. package/dist/chunk-ML7GGHTU.js +592 -0
  97. package/dist/chunk-MMUGSEF4.js +23992 -0
  98. package/dist/chunk-MMUGSEF4.js.map +1 -0
  99. package/dist/chunk-MYSLMKTG.js +604 -0
  100. package/dist/chunk-NAA4CKZZ.js +4249 -0
  101. package/dist/chunk-NAA4CKZZ.js.map +1 -0
  102. package/dist/chunk-NDKLPDZ3.js +1079 -0
  103. package/dist/chunk-OUQSDUVI.js +831 -0
  104. package/dist/chunk-PFPUPR3H.js +91 -0
  105. package/dist/chunk-PGD7USOH.js +207 -0
  106. package/dist/chunk-QKT7W5JP.js +98 -0
  107. package/dist/chunk-QU4XX5Z7.js +169 -0
  108. package/dist/chunk-R3OXH3ML.js +148 -0
  109. package/dist/chunk-RNQMXS7G.js +172 -0
  110. package/dist/chunk-SEMNRIOR.js +19 -0
  111. package/dist/chunk-SHBFBQYT.js +846 -0
  112. package/dist/chunk-SIKCVWM3.js +76 -0
  113. package/dist/chunk-UJPURLUZ.js +3868 -0
  114. package/dist/chunk-UM7NJIOU.js +64 -0
  115. package/dist/chunk-V57TZQPI.js +228 -0
  116. package/dist/chunk-WXKSUL4U.js +224 -0
  117. package/dist/chunk-YJRZVGES.js +1518 -0
  118. package/dist/chunk-YQICNXIA.js +249 -0
  119. package/dist/chunk-YTF2MI3E.js +627 -0
  120. package/dist/chunk-YYPWVQZQ.js +843 -0
  121. package/dist/chunk-Z7BQGWKG.js +46 -0
  122. package/dist/chunk-ZXSXRSFX.js +159 -0
  123. package/dist/claim-W2ZV4SH3.js +197 -0
  124. package/dist/cli.js +34 -34
  125. package/dist/companies-ITK3W3H6.js +195 -0
  126. package/dist/complete-RYEVEF3S.js +81 -0
  127. package/dist/connect-FFFNSJ2O.js +42 -0
  128. package/dist/conversation-KKJNQRFB.js +93 -0
  129. package/dist/conversion-report-PLQ4MVJR.js +125 -0
  130. package/dist/conversion-upload-command-Z7F6NQH4.js +438 -0
  131. package/dist/conversion-writes-VNOXZ4NR.js +120 -0
  132. package/dist/conversions-KHAXFD3Z.js +137 -0
  133. package/dist/conversions-KHAXFD3Z.js.map +1 -0
  134. package/dist/conversions-KPIFDO2R.js +76 -0
  135. package/dist/create-3R6Q2E2M.js +59 -0
  136. package/dist/create-A3R7YRT3.js +235 -0
  137. package/dist/create-TYWQP57A.js +207 -0
  138. package/dist/create-UUEWQUPT.js +132 -0
  139. package/dist/creatives-EEDDL3VG.js +220 -0
  140. package/dist/creatives-EEDDL3VG.js.map +1 -0
  141. package/dist/creatives-UK4VITNW.js +58 -0
  142. package/dist/credentials-A65GYH4D.js +287 -0
  143. package/dist/critique-46O4VVPM.js +1458 -0
  144. package/dist/critique-RPRMG2ZC.js +227 -0
  145. package/dist/crm-2WYW3D22.js +224 -0
  146. package/dist/crm-PQ24MNIU.js +318 -0
  147. package/dist/currency-Q3HCK447.js +88 -0
  148. package/dist/customers-YTQ7IQ5C.js +56 -0
  149. package/dist/delete-BBISJTFG.js +54 -0
  150. package/dist/delete-PQ4NUNLX.js +66 -0
  151. package/dist/delete-TBW6TJ6A.js +64 -0
  152. package/dist/demographics-EVP55FT3.js +138 -0
  153. package/dist/discard-LPJA4DEY.js +66 -0
  154. package/dist/discover-3G6CE7X3.js +172 -0
  155. package/dist/domain-5MM7V7JD.js +98 -0
  156. package/dist/draft-34D5MOKA.js +217 -0
  157. package/dist/draft-A6M562M4.js +307 -0
  158. package/dist/draft-A6M562M4.js.map +1 -0
  159. package/dist/draft-EGS7UFF3.js +281 -0
  160. package/dist/draft-J6GJXZRX.js +307 -0
  161. package/dist/draft-K3O7Q3A5.js +332 -0
  162. package/dist/engine/index.js +7 -7
  163. package/dist/experiment-7RJ5X2LL.js +1397 -0
  164. package/dist/experiments-HERTVBYK.js +233 -0
  165. package/dist/experiments-HERTVBYK.js.map +1 -0
  166. package/dist/facets-RUZKALF3.js +114 -0
  167. package/dist/feedback-S5LHJYZD.js +106 -0
  168. package/dist/feedback-record-GAM2R5GG.js +260 -0
  169. package/dist/fetch-FA6TR66Y.js +176 -0
  170. package/dist/find-2EPXK5RF.js +134 -0
  171. package/dist/fit-MOMO4AXL.js +62 -0
  172. package/dist/flows-DMMCSBWY.js +247 -0
  173. package/dist/fonts-G4JLXWX2.js +36 -0
  174. package/dist/forecast-OOP4K5DE.js +118 -0
  175. package/dist/forecast-V65WS5QG.js +168 -0
  176. package/dist/funnel-SEQPUM3X.js +394 -0
  177. package/dist/ga4-6EIQC2TG.js +55 -0
  178. package/dist/generate-IDDQD5FU.js +263 -0
  179. package/dist/get-DEOZMGOQ.js +56 -0
  180. package/dist/get-SEJINVOS.js +79 -0
  181. package/dist/google-7L3FWKPJ.js +3265 -0
  182. package/dist/google-O5OI6QFU.js +136 -0
  183. package/dist/google-ads-MIGWMCWY.js +195 -0
  184. package/dist/gsc-BM3T2GDL.js +30 -0
  185. package/dist/history-IBWXCDCB.js +133 -0
  186. package/dist/history-Z5577FPQ.js +67 -0
  187. package/dist/hubspot-6AZKUX72.js +779 -0
  188. package/dist/icon-B7DG53S5.js +137 -0
  189. package/dist/ideas-AX7S3NCG.js +40 -0
  190. package/dist/images-632SXTB5.js +92 -0
  191. package/dist/ingest-HS55RVKH.js +23 -0
  192. package/dist/ingest-T3OK3DRG.js +107 -0
  193. package/dist/insights-UDX66IMV.js +122 -0
  194. package/dist/inspect-D6ZIUBH3.js +189 -0
  195. package/dist/inspiration-TCCKM4R7.js +53 -0
  196. package/dist/intent-3WTKKTUX.js +95 -0
  197. package/dist/keyword-gap-7GESZXY2.js +130 -0
  198. package/dist/keyword-metrics-J43MV3RQ.js +197 -0
  199. package/dist/keywords-for-site-6YKCTFJZ.js +128 -0
  200. package/dist/landing-Y7DI2FUT.js +28 -0
  201. package/dist/languages-LSKNZI2A.js +40 -0
  202. package/dist/leads-R3WBKADF.js +112 -0
  203. package/dist/leads-R3WBKADF.js.map +1 -0
  204. package/dist/learn-M4UHA476.js +204 -0
  205. package/dist/line-item-writes-F2OPBMIE.js +208 -0
  206. package/dist/line-items-YJ3DLV2U.js +103 -0
  207. package/dist/link-RZKYW22K.js +64 -0
  208. package/dist/linkedin-JYZOPU7A.js +1299 -0
  209. package/dist/linkedin-JYZOPU7A.js.map +1 -0
  210. package/dist/list-NPJ34244.js +151 -0
  211. package/dist/list-WTVBOTA4.js +64 -0
  212. package/dist/list-XK5CHKYJ.js +303 -0
  213. package/dist/locations-DSDCNP5Z.js +40 -0
  214. package/dist/locations-SFZN4MYW.js +67 -0
  215. package/dist/log-K4FWHXIM.js +92 -0
  216. package/dist/logo-QTSBKP2J.js +18 -0
  217. package/dist/make-VQDUKVPB.js +1353 -0
  218. package/dist/map-Z3MEM6QX.js +433 -0
  219. package/dist/mcp-KJOSR534.js +714 -0
  220. package/dist/media-sources-44HTWIY3.js +32 -0
  221. package/dist/members-HGU22NL3.js +44 -0
  222. package/dist/metrics-OV2EKPJ6.js +152 -0
  223. package/dist/models-NGAUD6QJ.js +155 -0
  224. package/dist/normalize-IUPOHEZJ.js +141 -0
  225. package/dist/options-TL5TPGHK.js +122 -0
  226. package/dist/organization-3ORT4474.js +946 -0
  227. package/dist/organization-3ORT4474.js.map +1 -0
  228. package/dist/performance-PCZHQCZ5.js +24 -0
  229. package/dist/pixels-GHEAK62X.js +60 -0
  230. package/dist/promoted-tweet-writes-O4RTZFSI.js +180 -0
  231. package/dist/promoted-tweets-AWP6MGJI.js +119 -0
  232. package/dist/publish-PODZKJHW.js +341 -0
  233. package/dist/query-FUSR27T4.js +61 -0
  234. package/dist/reddit-UNUNWSNR.js +26 -0
  235. package/dist/refresh-34UO2LXY.js +94 -0
  236. package/dist/release-BD3EAD75.js +60 -0
  237. package/dist/relevant-pages-FNKYR2OG.js +99 -0
  238. package/dist/remove-YQYSQCWI.js +50 -0
  239. package/dist/reopen-MULNJOR5.js +63 -0
  240. package/dist/rerun-6YGYJPM7.js +90 -0
  241. package/dist/research-6WEL3USW.js +62 -0
  242. package/dist/research-OBECRSPL.js +262 -0
  243. package/dist/reset-5TTLZ43U.js +54 -0
  244. package/dist/reset-PRTK6YUD.js +54 -0
  245. package/dist/resolve-6RM63T55.js +121 -0
  246. package/dist/retry-XYTVP7BV.js +60 -0
  247. package/dist/retry-Z3C624JW.js +62 -0
  248. package/dist/revenue-VSH6KXCV.js +88 -0
  249. package/dist/revenue-VSH6KXCV.js.map +1 -0
  250. package/dist/rules-AUAJUM2T.js +96 -0
  251. package/dist/rules-add-7VFGPGZ7.js +462 -0
  252. package/dist/run-S3SVCTIB.js +65 -0
  253. package/dist/run-YA5RCRIX.js +66 -0
  254. package/dist/scaffold-ad-2KQULVJU.js +1511 -0
  255. package/dist/scaffold-static-ad-S46QADGV.js +1005 -0
  256. package/dist/scaffold-video-ZMHI2JDU.js +883 -0
  257. package/dist/schedule-FT6P3EKG.js +61 -0
  258. package/dist/scheduled-agents-L7K4QWMD.js +50 -0
  259. package/dist/schema-CH654RZB.js +132 -0
  260. package/dist/search-YKYB2P2M.js +174 -0
  261. package/dist/select-PM7JUDQY.js +101 -0
  262. package/dist/set-prompt-VATAT7H6.js +193 -0
  263. package/dist/setup-links-TM3NCVU7.js +141 -0
  264. package/dist/site-ATAXCWXS.js +177 -0
  265. package/dist/sources-N5RKYKFS.js +30 -0
  266. package/dist/sources-V544MB26.js +454 -0
  267. package/dist/stale-RNEYXKFX.js +71 -0
  268. package/dist/stats-CVF6AC7R.js +34 -0
  269. package/dist/status-DPTFOJVV.js +62 -0
  270. package/dist/stock-4LPQ6SM7.js +179 -0
  271. package/dist/studio-NZ3NA4L4.js +49 -0
  272. package/dist/sync-UBLCCOQZ.js +54 -0
  273. package/dist/sync-definition-RXRSI2LT.js +64 -0
  274. package/dist/tag-manager-FLXXLNKP.js +43 -0
  275. package/dist/tags-2D4AN2QB.js +224 -0
  276. package/dist/tags-5OM2VN3Q.js +26 -0
  277. package/dist/tags-CJWSUBCD.js +20 -0
  278. package/dist/tags-MHKZW2JN.js +20 -0
  279. package/dist/tags-Z6AH7FDT.js +20 -0
  280. package/dist/targeting-criteria-RSAN4KW5.js +113 -0
  281. package/dist/targets-EER2G4WH.js +103 -0
  282. package/dist/testimonials-4WJKAZ5S.js +32 -0
  283. package/dist/themes-XUALHDHR.js +94 -0
  284. package/dist/top-companies-BSOYGMIB.js +108 -0
  285. package/dist/translate-2XRHDWSC.js +604 -0
  286. package/dist/triggers-NU6BQ5NJ.js +142 -0
  287. package/dist/unlink-LQGPZND2.js +67 -0
  288. package/dist/unstage-GDKW56MH.js +85 -0
  289. package/dist/update-43QN723C.js +63 -0
  290. package/dist/update-6CAZKFTC.js +188 -0
  291. package/dist/update-EGOWYBEH.js +152 -0
  292. package/dist/update-QRGEMNBY.js +98 -0
  293. package/dist/upload-LIHRXWUY.js +126 -0
  294. package/dist/url-options-JXL4W7TB.js +130 -0
  295. package/dist/url-params-YXRZ4TUD.js +98 -0
  296. package/dist/validate-KO3MEJUZ.js +117 -0
  297. package/dist/videos-BPJ34YZL.js +39 -0
  298. package/dist/viewer-check-SA5AUQ26.js +80 -0
  299. package/dist/web-KS47ZHXX.js +140 -0
  300. package/dist/winning-ads-LE2ALICG.js +86 -0
  301. package/dist/write-commands-PPR7G4UN.js +1453 -0
  302. package/dist/write-commands-PPR7G4UN.js.map +1 -0
  303. package/dist/x-DZGRJQ7Y.js +47 -0
  304. package/package.json +1 -1
  305. package/dist/account-EF6OPUJT.js +0 -80
  306. package/dist/account-UHNR5KTE.js +0 -79
  307. package/dist/account-reads-CDZ3EL5D.js +0 -218
  308. package/dist/account-writes-VWU4FRGQ.js +0 -66
  309. package/dist/accounts-KMLXHADA.js +0 -77
  310. package/dist/accounts-QDGNTSTV.js +0 -611
  311. package/dist/actions-QL5UD2W4.js +0 -55
  312. package/dist/activecampaign-5OD45ROS.js +0 -935
  313. package/dist/ad-group-writes-ID6I3QUZ.js +0 -170
  314. package/dist/ad-groups-M7CV6NTH.js +0 -68
  315. package/dist/ad-writes-TSOAZYRE.js +0 -174
  316. package/dist/add-6K6LO7CM.js +0 -104
  317. package/dist/add-LYDJZDGO.js +0 -302
  318. package/dist/ads-CGLO73MH.js +0 -77
  319. package/dist/ads-DHPJFU52.js +0 -40
  320. package/dist/advertisers-23LU7GTV.js +0 -120
  321. package/dist/analytics-DVD4OBBR.js +0 -1976
  322. package/dist/analytics-HO2SLL4W.js +0 -433
  323. package/dist/animate-RGZWDZG2.js +0 -480
  324. package/dist/assign-CLKJKH2B.js +0 -77
  325. package/dist/audience-size-NNYYXODL.js +0 -73
  326. package/dist/audiences-WXIP5PJH.js +0 -268
  327. package/dist/audit-KB4P2XGS.js +0 -151
  328. package/dist/autocomplete-VZD2SMTE.js +0 -111
  329. package/dist/avatars-FKOO6VZ2.js +0 -38
  330. package/dist/bid-pricing-6LLXOLLI.js +0 -100
  331. package/dist/brand-OFCRZAKJ.js +0 -22
  332. package/dist/brief-CPJQWT6W.js +0 -538
  333. package/dist/campaign-groups-YPYNXOWU.js +0 -95
  334. package/dist/campaign-groups-YPYNXOWU.js.map +0 -1
  335. package/dist/campaign-writes-UJ4L2O6G.js +0 -165
  336. package/dist/campaign-writes-W5IL6ZGB.js +0 -170
  337. package/dist/campaigns-FLTPD66X.js +0 -76
  338. package/dist/campaigns-HLBZRH5A.js +0 -107
  339. package/dist/campaigns-N44ZDGB5.js +0 -109
  340. package/dist/campaigns-N44ZDGB5.js.map +0 -1
  341. package/dist/canvas-36SGP5VZ.js +0 -46
  342. package/dist/capabilities-LWXCWMIY.js +0 -144
  343. package/dist/catalog-ZDLQAODO.js +0 -65
  344. package/dist/catalogs-26VXVUST.js +0 -128
  345. package/dist/changes-SX2N5KIO.js +0 -135
  346. package/dist/chatgpt-YI6YNACI.js +0 -47
  347. package/dist/chats-7WGC2CVW.js +0 -276
  348. package/dist/check-EH6BXWWL.js +0 -104
  349. package/dist/chunk-2B772ZEA.js +0 -169
  350. package/dist/chunk-2KRK667G.js +0 -51
  351. package/dist/chunk-2TVXJPGR.js +0 -103
  352. package/dist/chunk-3AMLOCXY.js +0 -392
  353. package/dist/chunk-3N5A44NQ.js +0 -122
  354. package/dist/chunk-3S274625.js +0 -131
  355. package/dist/chunk-3WAYZQNV.js +0 -61
  356. package/dist/chunk-56PLT3KK.js +0 -494
  357. package/dist/chunk-56PLT3KK.js.map +0 -1
  358. package/dist/chunk-5A257KJA.js +0 -160
  359. package/dist/chunk-6QGS3RQP.js +0 -363
  360. package/dist/chunk-7KHTJQGV.js +0 -1518
  361. package/dist/chunk-A3DKSAEL.js +0 -1606
  362. package/dist/chunk-A4DZ5L3T.js +0 -665
  363. package/dist/chunk-ACDLKTUP.js +0 -23992
  364. package/dist/chunk-ACDLKTUP.js.map +0 -1
  365. package/dist/chunk-AW2GKIGS.js +0 -433
  366. package/dist/chunk-B7GF34FU.js +0 -8914
  367. package/dist/chunk-BDYLILMW.js +0 -150
  368. package/dist/chunk-DAO63OOP.js +0 -6352
  369. package/dist/chunk-DAO63OOP.js.map +0 -1
  370. package/dist/chunk-EJ4QCMM6.js +0 -285
  371. package/dist/chunk-EMQUW6JB.js +0 -942
  372. package/dist/chunk-EW3JEKIV.js +0 -139
  373. package/dist/chunk-F377KYIM.js +0 -274
  374. package/dist/chunk-FBFWMTOP.js +0 -19
  375. package/dist/chunk-FCM6VPFP.js +0 -98
  376. package/dist/chunk-FKYPAGKK.js +0 -1919
  377. package/dist/chunk-GXGYTFZA.js +0 -8939
  378. package/dist/chunk-I7J7YQXZ.js +0 -142
  379. package/dist/chunk-IBY44U2M.js +0 -1079
  380. package/dist/chunk-IFXGCI33.js +0 -297
  381. package/dist/chunk-IKLHXGMF.js +0 -91
  382. package/dist/chunk-IYTPWAN3.js +0 -604
  383. package/dist/chunk-J3CWAERS.js +0 -3868
  384. package/dist/chunk-JAC6JVCI.js +0 -26
  385. package/dist/chunk-JH2L5CQD.js +0 -206
  386. package/dist/chunk-JUVVCA7B.js +0 -97
  387. package/dist/chunk-MCJ5I5LR.js +0 -3187
  388. package/dist/chunk-MCJ5I5LR.js.map +0 -1
  389. package/dist/chunk-MK6XJUCQ.js +0 -197
  390. package/dist/chunk-MOFMOYUA.js +0 -148
  391. package/dist/chunk-MZPS46OR.js +0 -76
  392. package/dist/chunk-N3I6ZXR7.js +0 -66
  393. package/dist/chunk-NBO2NSAW.js +0 -592
  394. package/dist/chunk-NEU5QD2C.js +0 -249
  395. package/dist/chunk-NKIBXOHT.js +0 -344
  396. package/dist/chunk-NZKBW4YB.js +0 -846
  397. package/dist/chunk-OE3MIV4F.js +0 -547
  398. package/dist/chunk-OL7JS4NG.js +0 -5368
  399. package/dist/chunk-P2MFWJR3.js +0 -903
  400. package/dist/chunk-PHCIFBP3.js +0 -89
  401. package/dist/chunk-PTUXBO5O.js +0 -224
  402. package/dist/chunk-Q3LXLWZY.js +0 -275
  403. package/dist/chunk-Q5WBTVA7.js +0 -455
  404. package/dist/chunk-QMOYQJIN.js +0 -46
  405. package/dist/chunk-QRLTVJ6F.js +0 -167
  406. package/dist/chunk-RDEAVCMF.js +0 -399
  407. package/dist/chunk-RGMKXNQP.js +0 -23
  408. package/dist/chunk-RJZS4XDJ.js +0 -64
  409. package/dist/chunk-RZTKCCUL.js +0 -831
  410. package/dist/chunk-S4VLLGTW.js +0 -843
  411. package/dist/chunk-SVM3DGAQ.js +0 -228
  412. package/dist/chunk-TTKBNBQF.js +0 -156
  413. package/dist/chunk-VB3XUR6A.js +0 -207
  414. package/dist/chunk-WTJSMYY2.js +0 -4249
  415. package/dist/chunk-WTJSMYY2.js.map +0 -1
  416. package/dist/chunk-XCKINS7K.js +0 -57
  417. package/dist/chunk-Y46FE75E.js +0 -627
  418. package/dist/chunk-Y6GKV7CU.js +0 -346
  419. package/dist/chunk-Y6GKV7CU.js.map +0 -1
  420. package/dist/chunk-Z2GQREJY.js +0 -159
  421. package/dist/chunk-ZA7OQLDJ.js +0 -225
  422. package/dist/chunk-ZDAVSTEE.js +0 -172
  423. package/dist/chunk-ZXCSOVS5.js +0 -191
  424. package/dist/claim-SVDCQ2AI.js +0 -197
  425. package/dist/companies-BYMYQK6A.js +0 -195
  426. package/dist/complete-NEH3MWRI.js +0 -81
  427. package/dist/connect-5PGL7ZOM.js +0 -42
  428. package/dist/conversation-CSOKJXDW.js +0 -93
  429. package/dist/conversion-report-7JJ5L6WH.js +0 -125
  430. package/dist/conversion-upload-command-UO2QWG3J.js +0 -438
  431. package/dist/conversion-writes-GIGAZT4T.js +0 -120
  432. package/dist/conversions-4JOTTFEH.js +0 -135
  433. package/dist/conversions-4JOTTFEH.js.map +0 -1
  434. package/dist/conversions-CIJZLGII.js +0 -76
  435. package/dist/create-2XYMBULY.js +0 -207
  436. package/dist/create-56PTZABQ.js +0 -235
  437. package/dist/create-D6S6TGWY.js +0 -59
  438. package/dist/create-SMW4O5PC.js +0 -132
  439. package/dist/creatives-OO76DAFS.js +0 -58
  440. package/dist/creatives-VJUYWJL6.js +0 -182
  441. package/dist/creatives-VJUYWJL6.js.map +0 -1
  442. package/dist/credentials-2ONYUJW6.js +0 -287
  443. package/dist/critique-NDDFSGPE.js +0 -1458
  444. package/dist/critique-YXZVMLZ4.js +0 -227
  445. package/dist/crm-Q6CEP5XV.js +0 -224
  446. package/dist/crm-WRONZYDH.js +0 -318
  447. package/dist/currency-TAEJVMVK.js +0 -88
  448. package/dist/customers-2EFYSCU2.js +0 -56
  449. package/dist/delete-7WEVC3FS.js +0 -66
  450. package/dist/delete-RBWK255M.js +0 -54
  451. package/dist/delete-VN4WWMQF.js +0 -64
  452. package/dist/demographics-I5XZ435C.js +0 -138
  453. package/dist/discard-XJLIXTNM.js +0 -66
  454. package/dist/discover-5Z253HXF.js +0 -172
  455. package/dist/domain-M7AEGAYI.js +0 -98
  456. package/dist/draft-5DQI4W5F.js +0 -306
  457. package/dist/draft-5DQI4W5F.js.map +0 -1
  458. package/dist/draft-7DWRFCXW.js +0 -281
  459. package/dist/draft-7IIYHSY2.js +0 -332
  460. package/dist/draft-CN6GKVBF.js +0 -217
  461. package/dist/draft-MNEM4N5W.js +0 -307
  462. package/dist/experiment-IDDWRCJ7.js +0 -1397
  463. package/dist/facets-ZLZ6LIHN.js +0 -114
  464. package/dist/feedback-7LEX2P5Q.js +0 -106
  465. package/dist/feedback-record-P4JJ63KA.js +0 -260
  466. package/dist/fetch-MIVCEHXZ.js +0 -176
  467. package/dist/find-VHN34MWL.js +0 -134
  468. package/dist/fit-SS6HSZPU.js +0 -62
  469. package/dist/flows-UTIIHDNE.js +0 -247
  470. package/dist/fonts-JJS2PRT7.js +0 -36
  471. package/dist/forecast-OBSHG2GJ.js +0 -118
  472. package/dist/forecast-W7Z5TVQX.js +0 -168
  473. package/dist/funnel-Z2VLXUEQ.js +0 -394
  474. package/dist/ga4-ZPAEF2G2.js +0 -55
  475. package/dist/generate-Y76WU7M7.js +0 -263
  476. package/dist/get-MDAO6I7T.js +0 -56
  477. package/dist/get-ZB553BSH.js +0 -79
  478. package/dist/google-C3X7O2UO.js +0 -136
  479. package/dist/google-WYXDMH2N.js +0 -3265
  480. package/dist/google-ads-FTWL772L.js +0 -195
  481. package/dist/gsc-SDDHGTZK.js +0 -30
  482. package/dist/history-DGHMJ2XF.js +0 -67
  483. package/dist/history-WKJYKDMG.js +0 -133
  484. package/dist/hubspot-EPHVEPOO.js +0 -779
  485. package/dist/icon-MYPDC6FM.js +0 -137
  486. package/dist/ideas-3PBH7VEX.js +0 -40
  487. package/dist/images-J35C3WG4.js +0 -92
  488. package/dist/ingest-5QOPUKFE.js +0 -107
  489. package/dist/ingest-OKUYP632.js +0 -23
  490. package/dist/insights-EU45J56U.js +0 -122
  491. package/dist/inspect-PMNCP6MV.js +0 -189
  492. package/dist/inspiration-QAL7NS7G.js +0 -53
  493. package/dist/intent-FUGWRUSW.js +0 -95
  494. package/dist/keyword-gap-DXTKZLV2.js +0 -130
  495. package/dist/keyword-metrics-R752SJIT.js +0 -197
  496. package/dist/keywords-for-site-7UWPJYQF.js +0 -128
  497. package/dist/landing-CBVIOGJ5.js +0 -28
  498. package/dist/languages-XRTTEJ5P.js +0 -40
  499. package/dist/leads-LIJS6Y5W.js +0 -90
  500. package/dist/leads-LIJS6Y5W.js.map +0 -1
  501. package/dist/learn-N6QV7GXA.js +0 -204
  502. package/dist/line-item-writes-3WPJXKIL.js +0 -208
  503. package/dist/line-items-ZOFKOGAA.js +0 -103
  504. package/dist/link-DDRQKOUL.js +0 -64
  505. package/dist/linkedin-UWZCF66X.js +0 -1057
  506. package/dist/linkedin-UWZCF66X.js.map +0 -1
  507. package/dist/list-5PLXVPLB.js +0 -151
  508. package/dist/list-VSJISE7U.js +0 -303
  509. package/dist/list-WTVOBQYX.js +0 -64
  510. package/dist/locations-PCZPKH47.js +0 -40
  511. package/dist/locations-TGJH3URF.js +0 -67
  512. package/dist/log-YKKPROLZ.js +0 -92
  513. package/dist/logo-WE2UELX6.js +0 -18
  514. package/dist/make-RNOWBLZQ.js +0 -1353
  515. package/dist/map-WTDPQLVO.js +0 -433
  516. package/dist/mcp-XJNSCPP3.js +0 -714
  517. package/dist/media-sources-JGBDDXZ5.js +0 -32
  518. package/dist/members-O3BTMRXX.js +0 -44
  519. package/dist/metrics-PYPCW7FJ.js +0 -152
  520. package/dist/models-IAGO5GIH.js +0 -155
  521. package/dist/normalize-R5AYLA2J.js +0 -141
  522. package/dist/options-AILRY7JY.js +0 -122
  523. package/dist/organization-E6HVEKAR.js +0 -942
  524. package/dist/organization-E6HVEKAR.js.map +0 -1
  525. package/dist/performance-7YU4HOGH.js +0 -24
  526. package/dist/pixels-R4MOLWAR.js +0 -60
  527. package/dist/promoted-tweet-writes-TNELWPVG.js +0 -180
  528. package/dist/promoted-tweets-76WKUFJQ.js +0 -119
  529. package/dist/publish-BKLHCKHB.js +0 -341
  530. package/dist/query-XDHZMGLX.js +0 -61
  531. package/dist/reddit-YK3YUZEI.js +0 -26
  532. package/dist/refresh-WIII7KXB.js +0 -94
  533. package/dist/release-ZHXYQI7G.js +0 -60
  534. package/dist/relevant-pages-CTG72PBR.js +0 -99
  535. package/dist/remove-NOX4BXWK.js +0 -50
  536. package/dist/reopen-NLWKK5HB.js +0 -63
  537. package/dist/rerun-DZWQNMZQ.js +0 -90
  538. package/dist/research-Q3P76RHN.js +0 -62
  539. package/dist/research-UDZBCDNX.js +0 -262
  540. package/dist/reset-5UHFX7QY.js +0 -54
  541. package/dist/reset-MTRJQUP7.js +0 -54
  542. package/dist/resolve-DA72VT7Q.js +0 -121
  543. package/dist/retry-LQUBX5TK.js +0 -62
  544. package/dist/retry-U6F4CS6O.js +0 -60
  545. package/dist/rules-VS5PZ7VO.js +0 -96
  546. package/dist/rules-add-LMVZYDXE.js +0 -462
  547. package/dist/run-6PRA2YSD.js +0 -65
  548. package/dist/run-R6COFNOR.js +0 -66
  549. package/dist/scaffold-ad-ETZLURWU.js +0 -1511
  550. package/dist/scaffold-static-ad-WLKD3LDN.js +0 -1005
  551. package/dist/scaffold-video-3JZYFYFU.js +0 -883
  552. package/dist/schedule-ED2YDUPY.js +0 -61
  553. package/dist/scheduled-agents-5P67MVGX.js +0 -50
  554. package/dist/schema-4XVKERSA.js +0 -132
  555. package/dist/search-Y2UMIQ57.js +0 -174
  556. package/dist/select-OZ4E6VLF.js +0 -101
  557. package/dist/set-prompt-O4YAE4CE.js +0 -193
  558. package/dist/setup-links-2GJYCV2A.js +0 -141
  559. package/dist/site-47B6V2UX.js +0 -177
  560. package/dist/sources-DXPZAPQ7.js +0 -454
  561. package/dist/sources-NDXYTASG.js +0 -30
  562. package/dist/stale-VLVBO2L6.js +0 -71
  563. package/dist/stats-37OFAMPW.js +0 -34
  564. package/dist/status-4ODD46XY.js +0 -62
  565. package/dist/stock-6R5E7MJX.js +0 -179
  566. package/dist/studio-LEIGL3Q7.js +0 -49
  567. package/dist/sync-TKNVBUDM.js +0 -54
  568. package/dist/sync-definition-M5R3H3TP.js +0 -64
  569. package/dist/tag-manager-3Q55PBEW.js +0 -43
  570. package/dist/tags-4N5UUUN6.js +0 -26
  571. package/dist/tags-5NHIAD5A.js +0 -20
  572. package/dist/tags-UUKWSWCN.js +0 -20
  573. package/dist/tags-VK7B5DJF.js +0 -20
  574. package/dist/tags-XAHIB3WA.js +0 -224
  575. package/dist/targeting-criteria-AVARWV2G.js +0 -113
  576. package/dist/targets-6RYLQRID.js +0 -103
  577. package/dist/testimonials-6TF6BOFN.js +0 -32
  578. package/dist/themes-JZ3DPE7L.js +0 -94
  579. package/dist/top-companies-45EHRCJD.js +0 -108
  580. package/dist/translate-VHLBACCE.js +0 -604
  581. package/dist/triggers-ERQONJNO.js +0 -142
  582. package/dist/unlink-TPDO6JNF.js +0 -67
  583. package/dist/unstage-YKKQQ7LW.js +0 -85
  584. package/dist/update-43WU6X7R.js +0 -63
  585. package/dist/update-CAHLAXWO.js +0 -98
  586. package/dist/update-NGH6YADN.js +0 -152
  587. package/dist/update-SPJIHHLE.js +0 -188
  588. package/dist/upload-ACESIZIZ.js +0 -126
  589. package/dist/url-options-VNX5KYUQ.js +0 -130
  590. package/dist/url-params-MIXEDBF7.js +0 -98
  591. package/dist/validate-XJJA7ULE.js +0 -117
  592. package/dist/videos-LBXPG7WC.js +0 -39
  593. package/dist/viewer-check-7VJ3GUZX.js +0 -80
  594. package/dist/web-EWQJC2SD.js +0 -140
  595. package/dist/winning-ads-SAOJAKEQ.js +0 -86
  596. package/dist/write-commands-QPDE4GWW.js +0 -1024
  597. package/dist/write-commands-QPDE4GWW.js.map +0 -1
  598. package/dist/x-LXOJPCRF.js +0 -47
  599. /package/dist/{account-EF6OPUJT.js.map → account-CJGLH2OL.js.map} +0 -0
  600. /package/dist/{account-UHNR5KTE.js.map → account-UTFFCFNW.js.map} +0 -0
  601. /package/dist/{account-reads-CDZ3EL5D.js.map → account-reads-SOTNVUM6.js.map} +0 -0
  602. /package/dist/{account-writes-VWU4FRGQ.js.map → account-writes-OE5FKALN.js.map} +0 -0
  603. /package/dist/{accounts-QDGNTSTV.js.map → accounts-OY4DII7M.js.map} +0 -0
  604. /package/dist/{accounts-KMLXHADA.js.map → accounts-XUMRFVLY.js.map} +0 -0
  605. /package/dist/{actions-QL5UD2W4.js.map → actions-KYKLFVUI.js.map} +0 -0
  606. /package/dist/{activecampaign-5OD45ROS.js.map → activecampaign-P6RO7B2Q.js.map} +0 -0
  607. /package/dist/{ad-group-writes-ID6I3QUZ.js.map → ad-group-writes-343HA4ZG.js.map} +0 -0
  608. /package/dist/{ad-groups-M7CV6NTH.js.map → ad-groups-YMU6ATTW.js.map} +0 -0
  609. /package/dist/{ad-writes-TSOAZYRE.js.map → ad-writes-MINKG33L.js.map} +0 -0
  610. /package/dist/{add-6K6LO7CM.js.map → add-34QTAS7S.js.map} +0 -0
  611. /package/dist/{add-LYDJZDGO.js.map → add-3IZ3Z2PX.js.map} +0 -0
  612. /package/dist/{ads-DHPJFU52.js.map → ads-JRZVJFXS.js.map} +0 -0
  613. /package/dist/{ads-CGLO73MH.js.map → ads-QOXCMKZ2.js.map} +0 -0
  614. /package/dist/{advertisers-23LU7GTV.js.map → advertisers-G2UUCWA7.js.map} +0 -0
  615. /package/dist/{analytics-HO2SLL4W.js.map → analytics-CKF7HTWT.js.map} +0 -0
  616. /package/dist/{analytics-DVD4OBBR.js.map → analytics-FO4EDDQW.js.map} +0 -0
  617. /package/dist/{animate-RGZWDZG2.js.map → animate-K3MJ3GW4.js.map} +0 -0
  618. /package/dist/{assign-CLKJKH2B.js.map → assign-76E76PJY.js.map} +0 -0
  619. /package/dist/{audience-size-NNYYXODL.js.map → audience-size-IGDEX4XR.js.map} +0 -0
  620. /package/dist/{audiences-WXIP5PJH.js.map → audiences-4GRCVFZN.js.map} +0 -0
  621. /package/dist/{audit-KB4P2XGS.js.map → audit-LPSYEY4S.js.map} +0 -0
  622. /package/dist/{autocomplete-VZD2SMTE.js.map → autocomplete-G7MSIJQL.js.map} +0 -0
  623. /package/dist/{avatars-FKOO6VZ2.js.map → avatars-BF7VWGPH.js.map} +0 -0
  624. /package/dist/{bid-pricing-6LLXOLLI.js.map → bid-pricing-EAZHVAMJ.js.map} +0 -0
  625. /package/dist/{brand-OFCRZAKJ.js.map → brand-WQI4NV3H.js.map} +0 -0
  626. /package/dist/{brief-CPJQWT6W.js.map → brief-DVFCPBR3.js.map} +0 -0
  627. /package/dist/{campaign-writes-UJ4L2O6G.js.map → campaign-writes-ECPSPFAB.js.map} +0 -0
  628. /package/dist/{campaign-writes-W5IL6ZGB.js.map → campaign-writes-EZEJNO3O.js.map} +0 -0
  629. /package/dist/{campaigns-FLTPD66X.js.map → campaigns-7S35PC44.js.map} +0 -0
  630. /package/dist/{campaigns-HLBZRH5A.js.map → campaigns-R3EUC5Y2.js.map} +0 -0
  631. /package/dist/{canvas-36SGP5VZ.js.map → canvas-Y3DKVETP.js.map} +0 -0
  632. /package/dist/{capabilities-LWXCWMIY.js.map → capabilities-OBP5PDRK.js.map} +0 -0
  633. /package/dist/{catalog-ZDLQAODO.js.map → catalog-SZS2JCLN.js.map} +0 -0
  634. /package/dist/{catalogs-26VXVUST.js.map → catalogs-LEABW6AS.js.map} +0 -0
  635. /package/dist/{changes-SX2N5KIO.js.map → changes-4EDY3RNX.js.map} +0 -0
  636. /package/dist/{chatgpt-YI6YNACI.js.map → chatgpt-JOAEGWCB.js.map} +0 -0
  637. /package/dist/{chats-7WGC2CVW.js.map → chats-KE7FNWKF.js.map} +0 -0
  638. /package/dist/{check-EH6BXWWL.js.map → check-XHK2HVD2.js.map} +0 -0
  639. /package/dist/{chunk-3N5A44NQ.js.map → chunk-22HH46DF.js.map} +0 -0
  640. /package/dist/{chunk-RGMKXNQP.js.map → chunk-2VWWLUDJ.js.map} +0 -0
  641. /package/dist/{chunk-MK6XJUCQ.js.map → chunk-2WBRRYSS.js.map} +0 -0
  642. /package/dist/{chunk-TTKBNBQF.js.map → chunk-2XH7GKCO.js.map} +0 -0
  643. /package/dist/{chunk-EMQUW6JB.js.map → chunk-3LMAPV6P.js.map} +0 -0
  644. /package/dist/{chunk-XCKINS7K.js.map → chunk-3LZM5MWM.js.map} +0 -0
  645. /package/dist/{chunk-3AMLOCXY.js.map → chunk-4ARHIC23.js.map} +0 -0
  646. /package/dist/{chunk-FKYPAGKK.js.map → chunk-5KEQXSCN.js.map} +0 -0
  647. /package/dist/{chunk-A4DZ5L3T.js.map → chunk-5PMEMWKS.js.map} +0 -0
  648. /package/dist/{chunk-ZA7OQLDJ.js.map → chunk-64BRPYJD.js.map} +0 -0
  649. /package/dist/{chunk-6QGS3RQP.js.map → chunk-6DQDZIBL.js.map} +0 -0
  650. /package/dist/{chunk-EJ4QCMM6.js.map → chunk-6H64SENZ.js.map} +0 -0
  651. /package/dist/{chunk-QRLTVJ6F.js.map → chunk-6KGLAMPV.js.map} +0 -0
  652. /package/dist/{chunk-JAC6JVCI.js.map → chunk-6OIKNJ7G.js.map} +0 -0
  653. /package/dist/{chunk-A3DKSAEL.js.map → chunk-6VIHWBOD.js.map} +0 -0
  654. /package/dist/{chunk-Q3LXLWZY.js.map → chunk-74BP3JIV.js.map} +0 -0
  655. /package/dist/{chunk-N3I6ZXR7.js.map → chunk-7AWSJ6Z5.js.map} +0 -0
  656. /package/dist/{chunk-P2MFWJR3.js.map → chunk-7IVY55AU.js.map} +0 -0
  657. /package/dist/{chunk-Q5WBTVA7.js.map → chunk-7POQSUPH.js.map} +0 -0
  658. /package/dist/{chunk-JH2L5CQD.js.map → chunk-7RCNWRKK.js.map} +0 -0
  659. /package/dist/{chunk-3S274625.js.map → chunk-ABEIEHOV.js.map} +0 -0
  660. /package/dist/{chunk-NKIBXOHT.js.map → chunk-AREUZGX7.js.map} +0 -0
  661. /package/dist/{chunk-F377KYIM.js.map → chunk-CNFFNE4L.js.map} +0 -0
  662. /package/dist/{chunk-AW2GKIGS.js.map → chunk-CORXHFKY.js.map} +0 -0
  663. /package/dist/{chunk-RDEAVCMF.js.map → chunk-D3SHD4KA.js.map} +0 -0
  664. /package/dist/{chunk-3WAYZQNV.js.map → chunk-DD3C6TSW.js.map} +0 -0
  665. /package/dist/{chunk-2KRK667G.js.map → chunk-DQU2GVU7.js.map} +0 -0
  666. /package/dist/{chunk-JUVVCA7B.js.map → chunk-ECHVJII5.js.map} +0 -0
  667. /package/dist/{chunk-EW3JEKIV.js.map → chunk-EFWXYUSK.js.map} +0 -0
  668. /package/dist/{chunk-2TVXJPGR.js.map → chunk-F4KWLFCC.js.map} +0 -0
  669. /package/dist/{chunk-5A257KJA.js.map → chunk-FT7RYWOL.js.map} +0 -0
  670. /package/dist/{chunk-IFXGCI33.js.map → chunk-HPIKZPTU.js.map} +0 -0
  671. /package/dist/{chunk-OE3MIV4F.js.map → chunk-HUPHZ35H.js.map} +0 -0
  672. /package/dist/{chunk-GXGYTFZA.js.map → chunk-JQHLF74O.js.map} +0 -0
  673. /package/dist/{chunk-I7J7YQXZ.js.map → chunk-K2TOE6XL.js.map} +0 -0
  674. /package/dist/{chunk-OL7JS4NG.js.map → chunk-KI6TENTW.js.map} +0 -0
  675. /package/dist/{chunk-B7GF34FU.js.map → chunk-LMYCLUY2.js.map} +0 -0
  676. /package/dist/{chunk-ZXCSOVS5.js.map → chunk-LQR4CKYW.js.map} +0 -0
  677. /package/dist/{chunk-PHCIFBP3.js.map → chunk-LRFNUCHV.js.map} +0 -0
  678. /package/dist/{chunk-BDYLILMW.js.map → chunk-M2D7ZWEU.js.map} +0 -0
  679. /package/dist/{chunk-NBO2NSAW.js.map → chunk-ML7GGHTU.js.map} +0 -0
  680. /package/dist/{chunk-IYTPWAN3.js.map → chunk-MYSLMKTG.js.map} +0 -0
  681. /package/dist/{chunk-IBY44U2M.js.map → chunk-NDKLPDZ3.js.map} +0 -0
  682. /package/dist/{chunk-RZTKCCUL.js.map → chunk-OUQSDUVI.js.map} +0 -0
  683. /package/dist/{chunk-IKLHXGMF.js.map → chunk-PFPUPR3H.js.map} +0 -0
  684. /package/dist/{chunk-VB3XUR6A.js.map → chunk-PGD7USOH.js.map} +0 -0
  685. /package/dist/{chunk-FCM6VPFP.js.map → chunk-QKT7W5JP.js.map} +0 -0
  686. /package/dist/{chunk-2B772ZEA.js.map → chunk-QU4XX5Z7.js.map} +0 -0
  687. /package/dist/{chunk-MOFMOYUA.js.map → chunk-R3OXH3ML.js.map} +0 -0
  688. /package/dist/{chunk-ZDAVSTEE.js.map → chunk-RNQMXS7G.js.map} +0 -0
  689. /package/dist/{chunk-FBFWMTOP.js.map → chunk-SEMNRIOR.js.map} +0 -0
  690. /package/dist/{chunk-NZKBW4YB.js.map → chunk-SHBFBQYT.js.map} +0 -0
  691. /package/dist/{chunk-MZPS46OR.js.map → chunk-SIKCVWM3.js.map} +0 -0
  692. /package/dist/{chunk-J3CWAERS.js.map → chunk-UJPURLUZ.js.map} +0 -0
  693. /package/dist/{chunk-RJZS4XDJ.js.map → chunk-UM7NJIOU.js.map} +0 -0
  694. /package/dist/{chunk-SVM3DGAQ.js.map → chunk-V57TZQPI.js.map} +0 -0
  695. /package/dist/{chunk-PTUXBO5O.js.map → chunk-WXKSUL4U.js.map} +0 -0
  696. /package/dist/{chunk-7KHTJQGV.js.map → chunk-YJRZVGES.js.map} +0 -0
  697. /package/dist/{chunk-NEU5QD2C.js.map → chunk-YQICNXIA.js.map} +0 -0
  698. /package/dist/{chunk-Y46FE75E.js.map → chunk-YTF2MI3E.js.map} +0 -0
  699. /package/dist/{chunk-S4VLLGTW.js.map → chunk-YYPWVQZQ.js.map} +0 -0
  700. /package/dist/{chunk-QMOYQJIN.js.map → chunk-Z7BQGWKG.js.map} +0 -0
  701. /package/dist/{chunk-Z2GQREJY.js.map → chunk-ZXSXRSFX.js.map} +0 -0
  702. /package/dist/{claim-SVDCQ2AI.js.map → claim-W2ZV4SH3.js.map} +0 -0
  703. /package/dist/{companies-BYMYQK6A.js.map → companies-ITK3W3H6.js.map} +0 -0
  704. /package/dist/{complete-NEH3MWRI.js.map → complete-RYEVEF3S.js.map} +0 -0
  705. /package/dist/{connect-5PGL7ZOM.js.map → connect-FFFNSJ2O.js.map} +0 -0
  706. /package/dist/{conversation-CSOKJXDW.js.map → conversation-KKJNQRFB.js.map} +0 -0
  707. /package/dist/{conversion-report-7JJ5L6WH.js.map → conversion-report-PLQ4MVJR.js.map} +0 -0
  708. /package/dist/{conversion-upload-command-UO2QWG3J.js.map → conversion-upload-command-Z7F6NQH4.js.map} +0 -0
  709. /package/dist/{conversion-writes-GIGAZT4T.js.map → conversion-writes-VNOXZ4NR.js.map} +0 -0
  710. /package/dist/{conversions-CIJZLGII.js.map → conversions-KPIFDO2R.js.map} +0 -0
  711. /package/dist/{create-D6S6TGWY.js.map → create-3R6Q2E2M.js.map} +0 -0
  712. /package/dist/{create-56PTZABQ.js.map → create-A3R7YRT3.js.map} +0 -0
  713. /package/dist/{create-2XYMBULY.js.map → create-TYWQP57A.js.map} +0 -0
  714. /package/dist/{create-SMW4O5PC.js.map → create-UUEWQUPT.js.map} +0 -0
  715. /package/dist/{creatives-OO76DAFS.js.map → creatives-UK4VITNW.js.map} +0 -0
  716. /package/dist/{credentials-2ONYUJW6.js.map → credentials-A65GYH4D.js.map} +0 -0
  717. /package/dist/{critique-NDDFSGPE.js.map → critique-46O4VVPM.js.map} +0 -0
  718. /package/dist/{critique-YXZVMLZ4.js.map → critique-RPRMG2ZC.js.map} +0 -0
  719. /package/dist/{crm-Q6CEP5XV.js.map → crm-2WYW3D22.js.map} +0 -0
  720. /package/dist/{crm-WRONZYDH.js.map → crm-PQ24MNIU.js.map} +0 -0
  721. /package/dist/{currency-TAEJVMVK.js.map → currency-Q3HCK447.js.map} +0 -0
  722. /package/dist/{customers-2EFYSCU2.js.map → customers-YTQ7IQ5C.js.map} +0 -0
  723. /package/dist/{delete-RBWK255M.js.map → delete-BBISJTFG.js.map} +0 -0
  724. /package/dist/{delete-7WEVC3FS.js.map → delete-PQ4NUNLX.js.map} +0 -0
  725. /package/dist/{delete-VN4WWMQF.js.map → delete-TBW6TJ6A.js.map} +0 -0
  726. /package/dist/{demographics-I5XZ435C.js.map → demographics-EVP55FT3.js.map} +0 -0
  727. /package/dist/{discard-XJLIXTNM.js.map → discard-LPJA4DEY.js.map} +0 -0
  728. /package/dist/{discover-5Z253HXF.js.map → discover-3G6CE7X3.js.map} +0 -0
  729. /package/dist/{domain-M7AEGAYI.js.map → domain-5MM7V7JD.js.map} +0 -0
  730. /package/dist/{draft-CN6GKVBF.js.map → draft-34D5MOKA.js.map} +0 -0
  731. /package/dist/{draft-7DWRFCXW.js.map → draft-EGS7UFF3.js.map} +0 -0
  732. /package/dist/{draft-MNEM4N5W.js.map → draft-J6GJXZRX.js.map} +0 -0
  733. /package/dist/{draft-7IIYHSY2.js.map → draft-K3O7Q3A5.js.map} +0 -0
  734. /package/dist/{experiment-IDDWRCJ7.js.map → experiment-7RJ5X2LL.js.map} +0 -0
  735. /package/dist/{facets-ZLZ6LIHN.js.map → facets-RUZKALF3.js.map} +0 -0
  736. /package/dist/{feedback-7LEX2P5Q.js.map → feedback-S5LHJYZD.js.map} +0 -0
  737. /package/dist/{feedback-record-P4JJ63KA.js.map → feedback-record-GAM2R5GG.js.map} +0 -0
  738. /package/dist/{fetch-MIVCEHXZ.js.map → fetch-FA6TR66Y.js.map} +0 -0
  739. /package/dist/{find-VHN34MWL.js.map → find-2EPXK5RF.js.map} +0 -0
  740. /package/dist/{fit-SS6HSZPU.js.map → fit-MOMO4AXL.js.map} +0 -0
  741. /package/dist/{flows-UTIIHDNE.js.map → flows-DMMCSBWY.js.map} +0 -0
  742. /package/dist/{fonts-JJS2PRT7.js.map → fonts-G4JLXWX2.js.map} +0 -0
  743. /package/dist/{forecast-OBSHG2GJ.js.map → forecast-OOP4K5DE.js.map} +0 -0
  744. /package/dist/{forecast-W7Z5TVQX.js.map → forecast-V65WS5QG.js.map} +0 -0
  745. /package/dist/{funnel-Z2VLXUEQ.js.map → funnel-SEQPUM3X.js.map} +0 -0
  746. /package/dist/{ga4-ZPAEF2G2.js.map → ga4-6EIQC2TG.js.map} +0 -0
  747. /package/dist/{generate-Y76WU7M7.js.map → generate-IDDQD5FU.js.map} +0 -0
  748. /package/dist/{get-MDAO6I7T.js.map → get-DEOZMGOQ.js.map} +0 -0
  749. /package/dist/{get-ZB553BSH.js.map → get-SEJINVOS.js.map} +0 -0
  750. /package/dist/{google-WYXDMH2N.js.map → google-7L3FWKPJ.js.map} +0 -0
  751. /package/dist/{google-C3X7O2UO.js.map → google-O5OI6QFU.js.map} +0 -0
  752. /package/dist/{google-ads-FTWL772L.js.map → google-ads-MIGWMCWY.js.map} +0 -0
  753. /package/dist/{gsc-SDDHGTZK.js.map → gsc-BM3T2GDL.js.map} +0 -0
  754. /package/dist/{history-WKJYKDMG.js.map → history-IBWXCDCB.js.map} +0 -0
  755. /package/dist/{history-DGHMJ2XF.js.map → history-Z5577FPQ.js.map} +0 -0
  756. /package/dist/{hubspot-EPHVEPOO.js.map → hubspot-6AZKUX72.js.map} +0 -0
  757. /package/dist/{icon-MYPDC6FM.js.map → icon-B7DG53S5.js.map} +0 -0
  758. /package/dist/{ideas-3PBH7VEX.js.map → ideas-AX7S3NCG.js.map} +0 -0
  759. /package/dist/{images-J35C3WG4.js.map → images-632SXTB5.js.map} +0 -0
  760. /package/dist/{ingest-OKUYP632.js.map → ingest-HS55RVKH.js.map} +0 -0
  761. /package/dist/{ingest-5QOPUKFE.js.map → ingest-T3OK3DRG.js.map} +0 -0
  762. /package/dist/{insights-EU45J56U.js.map → insights-UDX66IMV.js.map} +0 -0
  763. /package/dist/{inspect-PMNCP6MV.js.map → inspect-D6ZIUBH3.js.map} +0 -0
  764. /package/dist/{inspiration-QAL7NS7G.js.map → inspiration-TCCKM4R7.js.map} +0 -0
  765. /package/dist/{intent-FUGWRUSW.js.map → intent-3WTKKTUX.js.map} +0 -0
  766. /package/dist/{keyword-gap-DXTKZLV2.js.map → keyword-gap-7GESZXY2.js.map} +0 -0
  767. /package/dist/{keyword-metrics-R752SJIT.js.map → keyword-metrics-J43MV3RQ.js.map} +0 -0
  768. /package/dist/{keywords-for-site-7UWPJYQF.js.map → keywords-for-site-6YKCTFJZ.js.map} +0 -0
  769. /package/dist/{landing-CBVIOGJ5.js.map → landing-Y7DI2FUT.js.map} +0 -0
  770. /package/dist/{languages-XRTTEJ5P.js.map → languages-LSKNZI2A.js.map} +0 -0
  771. /package/dist/{learn-N6QV7GXA.js.map → learn-M4UHA476.js.map} +0 -0
  772. /package/dist/{line-item-writes-3WPJXKIL.js.map → line-item-writes-F2OPBMIE.js.map} +0 -0
  773. /package/dist/{line-items-ZOFKOGAA.js.map → line-items-YJ3DLV2U.js.map} +0 -0
  774. /package/dist/{link-DDRQKOUL.js.map → link-RZKYW22K.js.map} +0 -0
  775. /package/dist/{list-5PLXVPLB.js.map → list-NPJ34244.js.map} +0 -0
  776. /package/dist/{list-WTVOBQYX.js.map → list-WTVBOTA4.js.map} +0 -0
  777. /package/dist/{list-VSJISE7U.js.map → list-XK5CHKYJ.js.map} +0 -0
  778. /package/dist/{locations-PCZPKH47.js.map → locations-DSDCNP5Z.js.map} +0 -0
  779. /package/dist/{locations-TGJH3URF.js.map → locations-SFZN4MYW.js.map} +0 -0
  780. /package/dist/{log-YKKPROLZ.js.map → log-K4FWHXIM.js.map} +0 -0
  781. /package/dist/{logo-WE2UELX6.js.map → logo-QTSBKP2J.js.map} +0 -0
  782. /package/dist/{make-RNOWBLZQ.js.map → make-VQDUKVPB.js.map} +0 -0
  783. /package/dist/{map-WTDPQLVO.js.map → map-Z3MEM6QX.js.map} +0 -0
  784. /package/dist/{mcp-XJNSCPP3.js.map → mcp-KJOSR534.js.map} +0 -0
  785. /package/dist/{media-sources-JGBDDXZ5.js.map → media-sources-44HTWIY3.js.map} +0 -0
  786. /package/dist/{members-O3BTMRXX.js.map → members-HGU22NL3.js.map} +0 -0
  787. /package/dist/{metrics-PYPCW7FJ.js.map → metrics-OV2EKPJ6.js.map} +0 -0
  788. /package/dist/{models-IAGO5GIH.js.map → models-NGAUD6QJ.js.map} +0 -0
  789. /package/dist/{normalize-R5AYLA2J.js.map → normalize-IUPOHEZJ.js.map} +0 -0
  790. /package/dist/{options-AILRY7JY.js.map → options-TL5TPGHK.js.map} +0 -0
  791. /package/dist/{performance-7YU4HOGH.js.map → performance-PCZHQCZ5.js.map} +0 -0
  792. /package/dist/{pixels-R4MOLWAR.js.map → pixels-GHEAK62X.js.map} +0 -0
  793. /package/dist/{promoted-tweet-writes-TNELWPVG.js.map → promoted-tweet-writes-O4RTZFSI.js.map} +0 -0
  794. /package/dist/{promoted-tweets-76WKUFJQ.js.map → promoted-tweets-AWP6MGJI.js.map} +0 -0
  795. /package/dist/{publish-BKLHCKHB.js.map → publish-PODZKJHW.js.map} +0 -0
  796. /package/dist/{query-XDHZMGLX.js.map → query-FUSR27T4.js.map} +0 -0
  797. /package/dist/{reddit-YK3YUZEI.js.map → reddit-UNUNWSNR.js.map} +0 -0
  798. /package/dist/{refresh-WIII7KXB.js.map → refresh-34UO2LXY.js.map} +0 -0
  799. /package/dist/{release-ZHXYQI7G.js.map → release-BD3EAD75.js.map} +0 -0
  800. /package/dist/{relevant-pages-CTG72PBR.js.map → relevant-pages-FNKYR2OG.js.map} +0 -0
  801. /package/dist/{remove-NOX4BXWK.js.map → remove-YQYSQCWI.js.map} +0 -0
  802. /package/dist/{reopen-NLWKK5HB.js.map → reopen-MULNJOR5.js.map} +0 -0
  803. /package/dist/{rerun-DZWQNMZQ.js.map → rerun-6YGYJPM7.js.map} +0 -0
  804. /package/dist/{research-Q3P76RHN.js.map → research-6WEL3USW.js.map} +0 -0
  805. /package/dist/{research-UDZBCDNX.js.map → research-OBECRSPL.js.map} +0 -0
  806. /package/dist/{reset-5UHFX7QY.js.map → reset-5TTLZ43U.js.map} +0 -0
  807. /package/dist/{reset-MTRJQUP7.js.map → reset-PRTK6YUD.js.map} +0 -0
  808. /package/dist/{resolve-DA72VT7Q.js.map → resolve-6RM63T55.js.map} +0 -0
  809. /package/dist/{retry-U6F4CS6O.js.map → retry-XYTVP7BV.js.map} +0 -0
  810. /package/dist/{retry-LQUBX5TK.js.map → retry-Z3C624JW.js.map} +0 -0
  811. /package/dist/{rules-VS5PZ7VO.js.map → rules-AUAJUM2T.js.map} +0 -0
  812. /package/dist/{rules-add-LMVZYDXE.js.map → rules-add-7VFGPGZ7.js.map} +0 -0
  813. /package/dist/{run-6PRA2YSD.js.map → run-S3SVCTIB.js.map} +0 -0
  814. /package/dist/{run-R6COFNOR.js.map → run-YA5RCRIX.js.map} +0 -0
  815. /package/dist/{scaffold-ad-ETZLURWU.js.map → scaffold-ad-2KQULVJU.js.map} +0 -0
  816. /package/dist/{scaffold-static-ad-WLKD3LDN.js.map → scaffold-static-ad-S46QADGV.js.map} +0 -0
  817. /package/dist/{scaffold-video-3JZYFYFU.js.map → scaffold-video-ZMHI2JDU.js.map} +0 -0
  818. /package/dist/{schedule-ED2YDUPY.js.map → schedule-FT6P3EKG.js.map} +0 -0
  819. /package/dist/{scheduled-agents-5P67MVGX.js.map → scheduled-agents-L7K4QWMD.js.map} +0 -0
  820. /package/dist/{schema-4XVKERSA.js.map → schema-CH654RZB.js.map} +0 -0
  821. /package/dist/{search-Y2UMIQ57.js.map → search-YKYB2P2M.js.map} +0 -0
  822. /package/dist/{select-OZ4E6VLF.js.map → select-PM7JUDQY.js.map} +0 -0
  823. /package/dist/{set-prompt-O4YAE4CE.js.map → set-prompt-VATAT7H6.js.map} +0 -0
  824. /package/dist/{setup-links-2GJYCV2A.js.map → setup-links-TM3NCVU7.js.map} +0 -0
  825. /package/dist/{site-47B6V2UX.js.map → site-ATAXCWXS.js.map} +0 -0
  826. /package/dist/{sources-NDXYTASG.js.map → sources-N5RKYKFS.js.map} +0 -0
  827. /package/dist/{sources-DXPZAPQ7.js.map → sources-V544MB26.js.map} +0 -0
  828. /package/dist/{stale-VLVBO2L6.js.map → stale-RNEYXKFX.js.map} +0 -0
  829. /package/dist/{stats-37OFAMPW.js.map → stats-CVF6AC7R.js.map} +0 -0
  830. /package/dist/{status-4ODD46XY.js.map → status-DPTFOJVV.js.map} +0 -0
  831. /package/dist/{stock-6R5E7MJX.js.map → stock-4LPQ6SM7.js.map} +0 -0
  832. /package/dist/{studio-LEIGL3Q7.js.map → studio-NZ3NA4L4.js.map} +0 -0
  833. /package/dist/{sync-TKNVBUDM.js.map → sync-UBLCCOQZ.js.map} +0 -0
  834. /package/dist/{sync-definition-M5R3H3TP.js.map → sync-definition-RXRSI2LT.js.map} +0 -0
  835. /package/dist/{tag-manager-3Q55PBEW.js.map → tag-manager-FLXXLNKP.js.map} +0 -0
  836. /package/dist/{tags-XAHIB3WA.js.map → tags-2D4AN2QB.js.map} +0 -0
  837. /package/dist/{tags-4N5UUUN6.js.map → tags-5OM2VN3Q.js.map} +0 -0
  838. /package/dist/{tags-VK7B5DJF.js.map → tags-CJWSUBCD.js.map} +0 -0
  839. /package/dist/{tags-5NHIAD5A.js.map → tags-MHKZW2JN.js.map} +0 -0
  840. /package/dist/{tags-UUKWSWCN.js.map → tags-Z6AH7FDT.js.map} +0 -0
  841. /package/dist/{targeting-criteria-AVARWV2G.js.map → targeting-criteria-RSAN4KW5.js.map} +0 -0
  842. /package/dist/{targets-6RYLQRID.js.map → targets-EER2G4WH.js.map} +0 -0
  843. /package/dist/{testimonials-6TF6BOFN.js.map → testimonials-4WJKAZ5S.js.map} +0 -0
  844. /package/dist/{themes-JZ3DPE7L.js.map → themes-XUALHDHR.js.map} +0 -0
  845. /package/dist/{top-companies-45EHRCJD.js.map → top-companies-BSOYGMIB.js.map} +0 -0
  846. /package/dist/{translate-VHLBACCE.js.map → translate-2XRHDWSC.js.map} +0 -0
  847. /package/dist/{triggers-ERQONJNO.js.map → triggers-NU6BQ5NJ.js.map} +0 -0
  848. /package/dist/{unlink-TPDO6JNF.js.map → unlink-LQGPZND2.js.map} +0 -0
  849. /package/dist/{unstage-YKKQQ7LW.js.map → unstage-GDKW56MH.js.map} +0 -0
  850. /package/dist/{update-43WU6X7R.js.map → update-43QN723C.js.map} +0 -0
  851. /package/dist/{update-SPJIHHLE.js.map → update-6CAZKFTC.js.map} +0 -0
  852. /package/dist/{update-NGH6YADN.js.map → update-EGOWYBEH.js.map} +0 -0
  853. /package/dist/{update-CAHLAXWO.js.map → update-QRGEMNBY.js.map} +0 -0
  854. /package/dist/{upload-ACESIZIZ.js.map → upload-LIHRXWUY.js.map} +0 -0
  855. /package/dist/{url-options-VNX5KYUQ.js.map → url-options-JXL4W7TB.js.map} +0 -0
  856. /package/dist/{url-params-MIXEDBF7.js.map → url-params-YXRZ4TUD.js.map} +0 -0
  857. /package/dist/{validate-XJJA7ULE.js.map → validate-KO3MEJUZ.js.map} +0 -0
  858. /package/dist/{videos-LBXPG7WC.js.map → videos-BPJ34YZL.js.map} +0 -0
  859. /package/dist/{viewer-check-7VJ3GUZX.js.map → viewer-check-SA5AUQ26.js.map} +0 -0
  860. /package/dist/{web-EWQJC2SD.js.map → web-KS47ZHXX.js.map} +0 -0
  861. /package/dist/{winning-ads-SAOJAKEQ.js.map → winning-ads-LE2ALICG.js.map} +0 -0
  862. /package/dist/{x-LXOJPCRF.js.map → x-DZGRJQ7Y.js.map} +0 -0
@@ -1,494 +0,0 @@
1
- import {
2
- DEFAULT_SUBSETS,
3
- FONT_PROVIDERS,
4
- checkFontRequests,
5
- fontFileName,
6
- fontsourceCatalogue,
7
- fontsourceFamilies,
8
- googleFontRequests,
9
- missingFontFiles,
10
- planFontAdoption,
11
- renderFontFaceCss,
12
- resolveBrandFaces,
13
- resolveFetchStyles,
14
- resolveFetchSubsets,
15
- resolveFetchWeights,
16
- selfHostedStyles,
17
- selfHostedSubsets,
18
- selfHostedWeights,
19
- stripFontFaceBlocks,
20
- suggestFamilies,
21
- unresolvedBrandFamilies,
22
- upsertFontFaceCss
23
- } from "./chunk-Q5WBTVA7.js";
24
- import {
25
- registerSchema,
26
- writeJson
27
- } from "./chunk-QANGHND7.js";
28
-
29
- // src/commands/brand/fonts.ts
30
- import { mkdir, readdir, readFile, writeFile } from "fs/promises";
31
- import path from "path";
32
- import { defineCommand } from "citty";
33
- var GLOBAL_CSS = path.join("src", "styles", "global.css");
34
- var FONTS_DIR = path.join("src", "brand", "fonts");
35
- var DEFAULT_SUBSETS_LABEL = DEFAULT_SUBSETS.join(",");
36
- var BROWSER_UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/120.0 Safari/537.36";
37
- registerSchema({
38
- command: "brand.fonts.check",
39
- description: "Start here when a brand's fonts are 'confirmed' but nobody verified it. Fails if any --font-* family in src/styles/global.css has nothing loading it (no @font-face, no Google import) \u2014 the silent fallback that also fails the client's verify \u2014 then asks Google Fonts what it ACTUALLY serves for every family/weight the stylesheet requests.",
40
- args: {}
41
- });
42
- registerSchema({
43
- command: "brand.fonts.adopt",
44
- description: "Move brand faces a page already self-hosts into src/styles/global.css, so every page loads them rather than only the page that declared them. Use when `check` reports a family as not loaded but its files are already in src/brand/fonts/. Never downloads: re-fetching would hand that page a different build of the same face.",
45
- args: {}
46
- });
47
- registerSchema({
48
- command: "brand.fonts.fetch",
49
- description: "Download a font into src/brand/fonts/ so the brand stops depending on a third party at page load, and write its @font-face into src/styles/global.css above @theme. Resolves against Google Fonts first, then Fontsource \u2014 which carries ~2000 open-licence families Google does not, so a name Google 400s is often still fetchable. Idempotent: re-running replaces that family's faces rather than stacking duplicates.",
50
- args: {
51
- family: { type: "string", description: 'Font family, e.g. "DM Sans"', required: true },
52
- weights: {
53
- type: "string",
54
- description: "Comma-separated weights (default: the weights global.css already requests or self-hosts, else 400)",
55
- required: false
56
- },
57
- subsets: {
58
- type: "string",
59
- description: `Comma-separated unicode subsets (default: the subsets global.css already self-hosts, else ${DEFAULT_SUBSETS_LABEL})`,
60
- required: false
61
- },
62
- italic: {
63
- type: "boolean",
64
- description: "Also self-host the family's italic faces. On automatically when global.css already loads one, so a re-fetch never strands it.",
65
- required: false
66
- }
67
- }
68
- });
69
- function fail(code, message, fix) {
70
- writeJson({ ok: false, error: { code, message, ...fix ? { fix } : {} } });
71
- process.exit(2);
72
- }
73
- var REQUEST_TIMEOUT_MS = 15e3;
74
- async function fetchJson(url) {
75
- const res = await fetch(url, {
76
- headers: { "User-Agent": BROWSER_UA },
77
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS)
78
- });
79
- if (res.status === 404) return null;
80
- if (!res.ok) throw new Error(`Fontsource answered ${res.status}`);
81
- return await res.json();
82
- }
83
- async function lookupGoogleCss(url) {
84
- try {
85
- const res = await fetch(url, {
86
- headers: { "User-Agent": BROWSER_UA },
87
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS)
88
- });
89
- if (res.ok) return { status: "served", css: await res.text() };
90
- return { status: res.status === 400 ? "absent" : "unreachable" };
91
- } catch {
92
- return { status: "unreachable" };
93
- }
94
- }
95
- var fetchGoogleCss = async (url) => {
96
- const got = await lookupGoogleCss(url);
97
- return got.status === "served" ? got.css : null;
98
- };
99
- var WIRING_HINT = {
100
- written: (family) => `Wrote the @font-face for "${family}" into ${GLOBAL_CSS}, above @theme. Remove "${family}" from the Google @import if one is still there, so the page stops fetching it at load.`,
101
- // Told apart from "no stylesheet" on purpose: they used to share one hint, so
102
- // an idempotent re-run instructed the agent to paste a block that was already
103
- // in the file, and doing as it was told duplicated the face.
104
- "already-wired": (family) => `${GLOBAL_CSS} already loads exactly these faces for "${family}" \u2014 nothing to change.`,
105
- "no-stylesheet": () => `No ${GLOBAL_CSS} to write to \u2014 paste the \`fontFace\` block above the @theme block once the stylesheet exists, or the files just downloaded will never load.`
106
- };
107
- var PROVIDER_DEPS = { lookupGoogleCss, fetchJson };
108
- var PROVIDER_LABEL = { google: "Google Fonts", fontsource: "Fontsource" };
109
- function italicHints(family, wantedStyles, availableStyles, downloadedStyles, provider) {
110
- const wanted = wantedStyles.includes("italic");
111
- const available = availableStyles.includes("italic");
112
- if (wanted && !downloadedStyles.includes("italic")) {
113
- return [
114
- `NO ITALIC: ${PROVIDER_LABEL[provider]} does not ship an italic for "${family}", so none was written. Drop italic from src/brand/BRAND.md, or the browser will slant the upright face instead.`
115
- ];
116
- }
117
- if (!wanted && available) {
118
- return [
119
- `${PROVIDER_LABEL[provider]} also ships an italic for "${family}", which was NOT downloaded. If the brand uses italic anywhere, re-run with \`--italic\` \u2014 otherwise the browser slants the upright face, which is not the same shapes.`
120
- ];
121
- }
122
- return [];
123
- }
124
- function fetchHints({
125
- family,
126
- downloadedWeights,
127
- downloadedStyles,
128
- incomplete,
129
- wiring,
130
- provider,
131
- wantedStyles,
132
- availableStyles
133
- }) {
134
- return [
135
- WIRING_HINT[wiring](family),
136
- ...italicHints(family, wantedStyles, availableStyles, downloadedStyles, provider),
137
- `Record the exact weights (${downloadedWeights.join(", ")}) in src/brand/tokens.json and BRAND.md \u2014 a weight tokens.json lists but nothing loads renders as a synthesized fallback, and verify warns about it.`,
138
- ...incomplete.length > 0 ? [
139
- // The remedy is provider-specific: only a Google family has an @import
140
- // to fall back on, and telling an agent to keep one for a Fontsource
141
- // family sends it to write an import Google will 400.
142
- provider === "google" ? `PARTIAL: ${incomplete.join(", ")} did not download and is NOT in the \`fontFace\` block. Re-run \`baker brand fonts fetch "${family}" --weights ${incomplete.join(",")}\` \u2014 a Google @import cannot cover those weights, because the build drops it before the page loads.` : `PARTIAL: ${incomplete.join(", ")} did not download and is NOT in the \`fontFace\` block. ${PROVIDER_LABEL[provider]} does not serve them, so re-run \`baker brand fonts fetch "${family}" --weights ${downloadedWeights.join(",")}\` and record only those weights in src/brand/BRAND.md.`
143
- ] : [],
144
- `Licensing: ${PROVIDER_LABEL[provider]} carries open-licensed families, which are safe to self-host. A client's own commercial face is not \u2014 confirm before re-hosting one.`
145
- ];
146
- }
147
- async function wireFontFaceIntoStylesheet(css, family, fontFace) {
148
- if (!css) return "no-stylesheet";
149
- const wired = upsertFontFaceCss(css, family, fontFace);
150
- if (wired === css) return "already-wired";
151
- await writeFile(path.resolve(process.cwd(), GLOBAL_CSS), wired);
152
- return "written";
153
- }
154
- function failResolution(family, weights, outcome) {
155
- if (outcome.reason === "unreachable") {
156
- return fail(
157
- "CATALOGUE_UNREACHABLE",
158
- `Could not reach ${PROVIDER_LABEL[outcome.provider]} to ask about "${family}".`,
159
- {
160
- action: "Run the same command again.",
161
- explanation: `${PROVIDER_LABEL[outcome.provider]} did not answer, which is not the same as not having the family \u2014 so nothing was concluded from it. Guessing either way would self-host the wrong build, or report a real family as missing.`,
162
- provider: outcome.provider
163
- }
164
- );
165
- }
166
- if (outcome.reason === "ambiguous-subsets") {
167
- return fail(
168
- "SUBSET_AMBIGUOUS",
169
- `${PROVIDER_LABEL[outcome.provider]} serves "${family}" in several subsets but reports no unicode-range to tell them apart.`,
170
- {
171
- action: `Retry with a single --subsets value, e.g. --subsets ${outcome.available[0] ?? "latin"}.`,
172
- explanation: "Two @font-face rules with the same family, style and weight and no unicode-range both claim every character, so the last one silently wins and the other file is downloaded and never read.",
173
- available: outcome.available
174
- }
175
- );
176
- }
177
- if (outcome.reason === "subset") {
178
- return fail("SUBSET_NOT_SERVED", `${PROVIDER_LABEL[outcome.provider]} has "${family}", but not in that subset.`, {
179
- action: `Retry with --subsets set to one it serves: ${outcome.available.join(",")}.`,
180
- explanation: "A family is split into unicode subsets and not every family ships every one. The weights you asked for are fine \u2014 only the subset is wrong.",
181
- available: outcome.available
182
- });
183
- }
184
- if (outcome.reason === "weight") {
185
- return fail(
186
- "FONT_NOT_SERVED",
187
- `${PROVIDER_LABEL[outcome.provider]} has "${family}", but not at weight ${weights.join("/")}.`,
188
- {
189
- action: `Retry with --weights set to one of these: ${outcome.available.join(",")}.`,
190
- explanation: "The family exists; the weight you asked for is not one it ships.",
191
- served: outcome.available
192
- }
193
- );
194
- }
195
- return failUnknownFamily(family);
196
- }
197
- async function failUnknownFamily(family) {
198
- const didYouMean = suggestFamilies(family, await fontsourceCatalogue(PROVIDER_DEPS));
199
- return fail("FONT_NOT_SERVED", `No font catalogue carries a family called "${family}".`, {
200
- action: didYouMean.length ? `Did you mean one of these? ${didYouMean.join(", ")}. Retry with the exact name, and update the --font-* token in ${GLOBAL_CSS} to match whichever you pick.` : `Check the exact spelling, then retry. If it is a commercial typeface, add the file to ${FONTS_DIR} and write the @font-face by hand \u2014 it cannot be downloaded.`,
201
- explanation: `Tried ${FONT_PROVIDERS.join(" then ")}. Family names are case- and space-sensitive in every catalogue.`,
202
- tried: [...FONT_PROVIDERS],
203
- ...didYouMean.length ? { didYouMean } : {}
204
- });
205
- }
206
- async function listFontFiles() {
207
- try {
208
- const entries = await readdir(path.resolve(process.cwd(), FONTS_DIR), { withFileTypes: true });
209
- return entries.filter((e) => e.isFile()).map((e) => e.name);
210
- } catch {
211
- return [];
212
- }
213
- }
214
- async function readGlobalCss() {
215
- try {
216
- return await readFile(path.resolve(process.cwd(), GLOBAL_CSS), "utf8");
217
- } catch {
218
- return "";
219
- }
220
- }
221
- async function unresolvedAction(css, unresolved) {
222
- const { plans } = planFontAdoption(await astroSources(), unresolved);
223
- if (plans.length > 0) {
224
- const names = plans.map((p) => `"${p.family}"`).join(", ");
225
- return `Run \`baker brand fonts adopt\` \u2014 ${names} is already self-hosted by ${plans[0]?.files.join(", ")}, so it only needs moving into ${GLOBAL_CSS} to load on every page. Don't fetch it: that downloads a different build of the same face.`;
226
- }
227
- const viaFontsource = [...fontsourceFamilies(css)];
228
- const stranded = unresolved.filter((family) => viaFontsource.includes(family.toLowerCase()));
229
- if (stranded.length > 0) {
230
- return `Run \`baker brand fonts fetch "${stranded[0]}"\` to self-host it. Its only provider is an @fontsource import, and that package does not survive a workspace sync \u2014 the import is left pointing at nothing, which fails the build before the font check even runs.`;
231
- }
232
- return `Run \`baker brand fonts fetch "${unresolved[0]}"\` to self-host it, which writes the @font-face for you. For a face no catalogue carries, add an @font-face pointing at a file in ${FONTS_DIR}.`;
233
- }
234
- var fontsCheckCommand = defineCommand({
235
- meta: {
236
- name: "check",
237
- description: "Verify the brand's fonts really exist. First: every --font-* family in src/styles/global.css must be provided by a local @font-face, or it renders as a fallback on every page \u2014 a Google @import does not provide one here, the build drops it before the page loads. Then, for families still requested from Google, ask Google what it actually serves \u2014 a weight nobody serves is silently synthesized."
238
- },
239
- async run() {
240
- const css = await readGlobalCss();
241
- const requests = googleFontRequests(css);
242
- const unresolved = unresolvedBrandFamilies(css);
243
- if (unresolved.length > 0) {
244
- fail("FONT_NOT_LOADED", `Nothing loads ${unresolved.map((f) => `"${f}"`).join(", ")} in ${GLOBAL_CSS}.`, {
245
- action: await unresolvedAction(css, unresolved),
246
- explanation: "The family is declared as a brand font but no @font-face provides it, so every page silently renders a fallback. A Google @import does not count: Astro merges component CSS ahead of global.css into one inlined <style>, so the import lands after rules and the browser drops it \u2014 measured on a live client site. The client's verify fails on this too.",
247
- unresolved
248
- });
249
- }
250
- if (requests.length === 0) {
251
- writeJson({
252
- ok: true,
253
- data: { families: [], selfHosted: true },
254
- hints: [
255
- `No Google Fonts requested in ${GLOBAL_CSS}, and every brand face is provided by an @font-face \u2014 nothing to verify against Google.`
256
- ]
257
- });
258
- return;
259
- }
260
- const families = await checkFontRequests(requests, fetchGoogleCss);
261
- const broken = families.filter((f) => f.missing.length > 0);
262
- if (broken.length > 0) {
263
- const summary = broken.map(
264
- (f) => f.cause === "unknown-family" ? `${f.family} (no such family on Google Fonts \u2014 check the exact spelling)` : `${f.family} ${f.missing.join("/")} (served: ${f.served.join("/") || "none"})`
265
- ).join("; ");
266
- fail("FONT_NOT_SERVED", `Google Fonts does not serve: ${summary}`, {
267
- action: `Correct the family name or weight in ${GLOBAL_CSS} and src/brand/BRAND.md, picking from the \`served\` weights below.`,
268
- explanation: "A requested weight Google does not serve is silently synthesized by the browser, so the page looks subtly wrong with nothing failing.",
269
- // The per-family breakdown is the point of the command, so it ships on
270
- // the failure path too — otherwise the only remedy is re-running the
271
- // command that just failed. Healthy families are included so a
272
- // multi-family brand shows what NOT to touch.
273
- families
274
- });
275
- }
276
- writeJson({
277
- ok: true,
278
- data: { families },
279
- hints: [
280
- "Every requested family and weight is really served by Google.",
281
- `To stop depending on Google at page load, run \`baker brand fonts fetch "<family>"\` to self-host into ${FONTS_DIR}.`
282
- ]
283
- });
284
- }
285
- });
286
- var fontsFetchCommand = defineCommand({
287
- meta: {
288
- name: "fetch",
289
- description: "Download a font from Google Fonts or Fontsource into src/brand/fonts/ and write its @font-face into src/styles/global.css above @theme, so the family actually loads. Use when a brand font should be self-hosted rather than requested from a third party on every page load."
290
- },
291
- args: {
292
- family: { type: "positional", required: true, description: 'Font family, e.g. "DM Sans"' },
293
- weights: {
294
- type: "string",
295
- description: "Comma-separated weights (default: the weights global.css already requests or self-hosts, else 400)"
296
- },
297
- subsets: {
298
- type: "string",
299
- description: `Comma-separated unicode subsets (default: the subsets global.css already self-hosts, else ${DEFAULT_SUBSETS_LABEL})`
300
- },
301
- italic: {
302
- type: "boolean",
303
- description: "Also self-host the family's italic faces (default: on when global.css already loads one, off otherwise)"
304
- }
305
- },
306
- async run({ args }) {
307
- const family = String(args.family).trim();
308
- if (!family) fail("INVALID_FAMILY", 'Pass a font family, e.g. `baker brand fonts fetch "DM Sans"`.');
309
- const css = await readGlobalCss();
310
- const declared = googleFontRequests(css).find((r) => r.family.toLowerCase() === family.toLowerCase());
311
- const provided = declared?.weights.length ? declared.weights : selfHostedWeights(css, family);
312
- const weights = resolveFetchWeights(args.weights, provided);
313
- if (weights.length === 0) {
314
- fail("INVALID_WEIGHTS", `"${args.weights}" has no usable weight \u2014 pass whole hundreds, e.g. --weights 400,700.`);
315
- }
316
- const wanted = new Set(resolveFetchSubsets(args.subsets, selfHostedSubsets(css, family)));
317
- const styles = resolveFetchStyles(args.italic, selfHostedStyles(css, family));
318
- const resolved = await resolveBrandFaces(family, weights, [...wanted], PROVIDER_DEPS, styles);
319
- if (!resolved.ok) return failResolution(family, weights, resolved);
320
- const faces = resolved.faces;
321
- const fontsDir = path.resolve(process.cwd(), FONTS_DIR);
322
- await mkdir(fontsDir, { recursive: true });
323
- const downloaded = [];
324
- for (const face of faces) {
325
- const res = await fetch(face.url, {
326
- headers: { "User-Agent": BROWSER_UA },
327
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS)
328
- });
329
- if (!res.ok) continue;
330
- await writeFile(path.join(fontsDir, fontFileName(face)), Buffer.from(await res.arrayBuffer()));
331
- downloaded.push(face);
332
- }
333
- const written = downloaded.map(fontFileName);
334
- if (written.length === 0) {
335
- fail("DOWNLOAD_FAILED", `Could not download any file for "${family}".`, {
336
- action: "Retry; if it keeps failing, keep the Google @import and note it in BRAND.md.",
337
- explanation: "The font stylesheet resolved but the font files themselves did not download."
338
- });
339
- }
340
- const fontFace = renderFontFaceCss(downloaded);
341
- const downloadedWeights = [...new Set(downloaded.map((f) => f.weight))].sort((a, b) => a - b);
342
- const downloadedStyles = [...new Set(downloaded.map((f) => f.style))].sort();
343
- const incomplete = weights.filter((w) => !downloadedWeights.includes(w));
344
- const wiring = await wireFontFaceIntoStylesheet(css, family, fontFace);
345
- writeJson({
346
- ok: true,
347
- data: {
348
- family,
349
- provider: resolved.provider,
350
- weights: downloadedWeights,
351
- styles: downloadedStyles,
352
- files: written,
353
- fontFace,
354
- stylesheet: wiring
355
- },
356
- hints: fetchHints({
357
- family,
358
- downloadedWeights,
359
- downloadedStyles,
360
- incomplete,
361
- wiring,
362
- provider: resolved.provider,
363
- wantedStyles: styles,
364
- availableStyles: resolved.availableStyles
365
- })
366
- });
367
- }
368
- });
369
- async function astroSources() {
370
- const out = [];
371
- let entries;
372
- try {
373
- entries = await readdir("src", { recursive: true, withFileTypes: true });
374
- } catch {
375
- return out;
376
- }
377
- for (const entry of entries) {
378
- if (!entry.isFile() || !entry.name.endsWith(".astro")) continue;
379
- const file = path.posix.join(entry.parentPath ?? "src", entry.name);
380
- try {
381
- out.push({ path: file, source: await readFile(file, "utf8") });
382
- } catch {
383
- }
384
- }
385
- return out;
386
- }
387
- var fontsAdoptCommand = defineCommand({
388
- meta: {
389
- name: "adopt",
390
- description: "Move brand faces a page already self-hosts into src/styles/global.css, so every page loads them instead of just that one. Use when `check` reports a family as not loaded but the font files are already in src/brand/fonts/ \u2014 downloading it again would hand that page a different build of the same face."
391
- },
392
- async run() {
393
- const css = await readGlobalCss();
394
- if (!css) fail("NO_STYLESHEET", `There is no ${GLOBAL_CSS} to adopt faces into.`);
395
- const unresolved = unresolvedBrandFamilies(css);
396
- if (unresolved.length === 0) {
397
- writeJson({
398
- ok: true,
399
- data: { adopted: [], conflicts: [] },
400
- hints: [`Every --font-* family in ${GLOBAL_CSS} is already loaded by it \u2014 nothing to adopt.`]
401
- });
402
- return;
403
- }
404
- const { plans, conflicts } = planFontAdoption(await astroSources(), unresolved);
405
- const available = new Set(await listFontFiles());
406
- const adopted = [];
407
- const skipped = [];
408
- let next = css;
409
- for (const plan of plans) {
410
- const missing = missingFontFiles(plan.urls, available);
411
- if (missing.length > 0) {
412
- skipped.push({ family: plan.family, reason: `${missing.join(", ")} is not in ${FONTS_DIR}` });
413
- continue;
414
- }
415
- next = upsertFontFaceCss(next, plan.family, plan.blocks.join("\n"));
416
- adopted.push({
417
- family: plan.family,
418
- files: plan.files,
419
- weights: plan.blocks.map((b) => b.match(/font-weight\s*:\s*([^;]+)/i)?.[1]?.trim() ?? "400")
420
- });
421
- }
422
- if (adopted.length === 0) {
423
- if (conflicts.length > 0) {
424
- fail(
425
- "ADOPTION_CONFLICT",
426
- `${conflicts.map((c) => `"${c.family}" is declared differently in ${c.files.join(" and ")}`).join("; ")}.`,
427
- {
428
- action: "Make the declarations match \u2014 same weights, same files \u2014 then re-run. Pick the one whose page renders correctly.",
429
- explanation: "One global scope holds one mapping per family, so adopting would silently repaint whichever page lost.",
430
- conflicts
431
- }
432
- );
433
- }
434
- if (skipped.length > 0) {
435
- fail("FONT_FILE_MISSING", `${skipped.map((s) => `${s.family} \u2014 ${s.reason}`).join("; ")}.`, {
436
- action: `Add the missing file to ${FONTS_DIR}, or fix the src: url() in the page that declares it, then re-run.`,
437
- explanation: "The page declares the face but points at a file that is not in the repo, so the rule renders as a fallback. Moving it into the stylesheet would spread that fallback to every page.",
438
- skipped
439
- });
440
- }
441
- fail("NOTHING_TO_ADOPT", `No page declares a face for ${unresolved.map((f) => `"${f}"`).join(", ")}.`, {
442
- action: `Self-host it instead: \`baker brand fonts fetch "${unresolved[0]}"\`.`,
443
- explanation: "Adopting only moves faces the repo already ships; it never downloads one."
444
- });
445
- }
446
- await writeFile(path.resolve(process.cwd(), GLOBAL_CSS), next);
447
- for (const plan of plans.filter((p) => adopted.some((a) => a.family === p.family))) {
448
- for (const file of plan.files) {
449
- const source = await readFile(file, "utf8");
450
- await writeFile(file, stripFontFaceBlocks(source, plan.family));
451
- }
452
- }
453
- writeJson({
454
- ok: true,
455
- data: { adopted, conflicts, skipped },
456
- hints: [
457
- `Moved ${adopted.map((a) => `"${a.family}" (${a.weights.join("/")})`).join(", ")} into ${GLOBAL_CSS} and removed the page copies, so every page loads them \u2014 not just the one that declared them.`,
458
- ...conflicts.length > 0 ? [
459
- `CONFLICT: ${conflicts.map((c) => `"${c.family}" is declared differently in ${c.files.join(" and ")}`).join("; ")}. One global scope can hold only one mapping, so pick which files the family should use and make the declarations match before re-running.`
460
- ] : [],
461
- ...skipped.length > 0 ? [`SKIPPED: ${skipped.map((s) => `${s.family} \u2014 ${s.reason}`).join("; ")}.`] : [],
462
- `Run \`baker brand fonts check\` to confirm nothing is left unresolved.`
463
- ]
464
- });
465
- }
466
- });
467
- var fontsCommand = defineCommand({
468
- meta: {
469
- name: "fonts",
470
- description: `Verify and self-host the brand's typefaces.
471
-
472
- Start here: \`baker brand fonts check\` \u2014 confirms the fonts the brand claims really load.
473
-
474
- Subcommands:
475
- baker brand fonts check \u2014 fail if any --font-* family has nothing loading it, then ask Google what it actually serves for the ones global.css requests
476
- baker brand fonts fetch <family> \u2014 download a family into src/brand/fonts/ and wire its @font-face into src/styles/global.css
477
- baker brand fonts adopt \u2014 move faces a page already self-hosts into global.css, so every page loads them. Try this BEFORE fetch when the font files are already in src/brand/fonts/`
478
- },
479
- subCommands: {
480
- check: fontsCheckCommand,
481
- fetch: fontsFetchCommand,
482
- adopt: fontsAdoptCommand
483
- }
484
- });
485
-
486
- export {
487
- fetchJson,
488
- lookupGoogleCss,
489
- fontsCheckCommand,
490
- fontsFetchCommand,
491
- fontsAdoptCommand,
492
- fontsCommand
493
- };
494
- //# sourceMappingURL=chunk-56PLT3KK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/brand/fonts.ts"],"sourcesContent":["import type { Dirent } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport {\n type BrandFontFace,\n checkFontRequests,\n DEFAULT_SUBSETS,\n type FetchCss,\n FONT_PROVIDERS,\n type FontProviderName,\n type FontStyle,\n fontFileName,\n fontsourceCatalogue,\n fontsourceFamilies,\n type GoogleCssLookup,\n googleFontRequests,\n missingFontFiles,\n planFontAdoption,\n type ResolveOutcome,\n renderFontFaceCss,\n resolveBrandFaces,\n resolveFetchStyles,\n resolveFetchSubsets,\n resolveFetchWeights,\n selfHostedStyles,\n selfHostedSubsets,\n selfHostedWeights,\n stripFontFaceBlocks,\n suggestFamilies,\n unresolvedBrandFamilies,\n upsertFontFaceCss,\n} from \"../../engine/brand/fonts.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\n\nconst GLOBAL_CSS = path.join(\"src\", \"styles\", \"global.css\");\nconst FONTS_DIR = path.join(\"src\", \"brand\", \"fonts\");\nconst DEFAULT_SUBSETS_LABEL = DEFAULT_SUBSETS.join(\",\");\n\n// Google serves different CSS per user agent — an old UA gets ttf instead of\n// woff2. Ask as a modern browser so the response is the woff2 set we want.\nconst BROWSER_UA = \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/120.0 Safari/537.36\";\n\nregisterSchema({\n command: \"brand.fonts.check\",\n description:\n \"Start here when a brand's fonts are 'confirmed' but nobody verified it. Fails if any --font-* family in src/styles/global.css has nothing loading it (no @font-face, no Google import) — the silent fallback that also fails the client's verify — then asks Google Fonts what it ACTUALLY serves for every family/weight the stylesheet requests.\",\n args: {},\n});\n\nregisterSchema({\n command: \"brand.fonts.adopt\",\n description:\n \"Move brand faces a page already self-hosts into src/styles/global.css, so every page loads them rather than only the page that declared them. Use when `check` reports a family as not loaded but its files are already in src/brand/fonts/. Never downloads: re-fetching would hand that page a different build of the same face.\",\n args: {},\n});\n\nregisterSchema({\n command: \"brand.fonts.fetch\",\n description:\n \"Download a font into src/brand/fonts/ so the brand stops depending on a third party at page load, and write its @font-face into src/styles/global.css above @theme. Resolves against Google Fonts first, then Fontsource — which carries ~2000 open-licence families Google does not, so a name Google 400s is often still fetchable. Idempotent: re-running replaces that family's faces rather than stacking duplicates.\",\n args: {\n family: { type: \"string\", description: 'Font family, e.g. \"DM Sans\"', required: true },\n weights: {\n type: \"string\",\n description: \"Comma-separated weights (default: the weights global.css already requests or self-hosts, else 400)\",\n required: false,\n },\n subsets: {\n type: \"string\",\n description: `Comma-separated unicode subsets (default: the subsets global.css already self-hosts, else ${DEFAULT_SUBSETS_LABEL})`,\n required: false,\n },\n italic: {\n type: \"boolean\",\n description:\n \"Also self-host the family's italic faces. On automatically when global.css already loads one, so a re-fetch never strands it.\",\n required: false,\n },\n },\n});\n\nfunction fail(\n code: string,\n message: string,\n fix?: { action: string; explanation: string } & Record<string, unknown>,\n): never {\n writeJson({ ok: false, error: { code, message, ...(fix ? { fix } : {}) } });\n process.exit(2);\n}\n\n// A hung request would otherwise stall the agent's whole turn — these commands\n// are on demand, so a bounded wait is strictly better than an open one.\nconst REQUEST_TIMEOUT_MS = 15_000;\n\n/**\n * JSON body from a catalogue API, or null when the catalogue itself answers\n * that there is no such family.\n *\n * Only a 404 is that answer. Every other failure THROWS, because \"Fontsource\n * did not answer\" is not \"Fontsource does not have it\" — collapsed into null it\n * became `unknown-family`, and the agent was told to check the spelling or\n * hand-write an @font-face for a commercial face, on the strength of a 503.\n * Same rule `lookupGoogleCss` follows, and the scaffold's `getJson` mirror.\n */\nexport async function fetchJson(url: string): Promise<unknown> {\n const res = await fetch(url, {\n headers: { \"User-Agent\": BROWSER_UA },\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n if (res.status === 404) return null;\n if (!res.ok) throw new Error(`Fontsource answered ${res.status}`);\n return await res.json();\n}\n\nexport async function lookupGoogleCss(url: string): Promise<GoogleCssLookup> {\n try {\n const res = await fetch(url, {\n headers: { \"User-Agent\": BROWSER_UA },\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n if (res.ok) return { status: \"served\", css: await res.text() };\n // Measured: Google answers 400 for a family it does not carry and for a\n // weight it does not serve, and 200 otherwise. A 429 or a 503 says nothing\n // about the family, so it must not read as one.\n return { status: res.status === 400 ? \"absent\" : \"unreachable\" };\n } catch {\n return { status: \"unreachable\" };\n }\n}\n\n/** `check` only asks what Google serves, so it collapses both silences into null. */\nconst fetchGoogleCss: FetchCss = async (url) => {\n const got = await lookupGoogleCss(url);\n return got.status === \"served\" ? got.css : null;\n};\n\n/** What became of `global.css` — three outcomes, because two of them read the same. */\ntype Wiring = \"written\" | \"already-wired\" | \"no-stylesheet\";\n\nconst WIRING_HINT: Record<Wiring, (family: string) => string> = {\n written: (family) =>\n `Wrote the @font-face for \"${family}\" into ${GLOBAL_CSS}, above @theme. Remove \"${family}\" from the Google @import if one is still there, so the page stops fetching it at load.`,\n // Told apart from \"no stylesheet\" on purpose: they used to share one hint, so\n // an idempotent re-run instructed the agent to paste a block that was already\n // in the file, and doing as it was told duplicated the face.\n \"already-wired\": (family) => `${GLOBAL_CSS} already loads exactly these faces for \"${family}\" — nothing to change.`,\n \"no-stylesheet\": () =>\n `No ${GLOBAL_CSS} to write to — paste the \\`fontFace\\` block above the @theme block once the stylesheet exists, or the files just downloaded will never load.`,\n};\n\n/** The network boundary for every catalogue, in one place. */\nconst PROVIDER_DEPS = { lookupGoogleCss, fetchJson };\n\n/** Catalogue names as a human writes them — the ids are lowercase slugs. */\nconst PROVIDER_LABEL: Record<FontProviderName, string> = { google: \"Google Fonts\", fontsource: \"Fontsource\" };\n\n/**\n * What became of the italic, said out loud either way.\n *\n * Both silences cost something. Asking for an italic a catalogue does not ship\n * and being told nothing reads as success, so the brand keeps promising an\n * italic the browser will synthesize. And NOT asking, when the catalogue has\n * one, is the state most brands are in — the one request already made knows the\n * answer, so saying it costs nothing.\n */\nfunction italicHints(\n family: string,\n wantedStyles: readonly FontStyle[],\n availableStyles: string[],\n downloadedStyles: string[],\n provider: FontProviderName,\n): string[] {\n const wanted = wantedStyles.includes(\"italic\");\n const available = availableStyles.includes(\"italic\");\n if (wanted && !downloadedStyles.includes(\"italic\")) {\n return [\n `NO ITALIC: ${PROVIDER_LABEL[provider]} does not ship an italic for \"${family}\", so none was written. Drop italic from src/brand/BRAND.md, or the browser will slant the upright face instead.`,\n ];\n }\n if (!wanted && available) {\n return [\n `${PROVIDER_LABEL[provider]} also ships an italic for \"${family}\", which was NOT downloaded. If the brand uses italic anywhere, re-run with \\`--italic\\` — otherwise the browser slants the upright face, which is not the same shapes.`,\n ];\n }\n return [];\n}\n\nfunction fetchHints({\n family,\n downloadedWeights,\n downloadedStyles,\n incomplete,\n wiring,\n provider,\n wantedStyles,\n availableStyles,\n}: {\n family: string;\n downloadedWeights: number[];\n downloadedStyles: string[];\n incomplete: number[];\n wiring: Wiring;\n provider: FontProviderName;\n wantedStyles: readonly FontStyle[];\n availableStyles: string[];\n}): string[] {\n return [\n WIRING_HINT[wiring](family),\n ...italicHints(family, wantedStyles, availableStyles, downloadedStyles, provider),\n `Record the exact weights (${downloadedWeights.join(\", \")}) in src/brand/tokens.json and BRAND.md — a weight tokens.json lists but nothing loads renders as a synthesized fallback, and verify warns about it.`,\n ...(incomplete.length > 0\n ? [\n // The remedy is provider-specific: only a Google family has an @import\n // to fall back on, and telling an agent to keep one for a Fontsource\n // family sends it to write an import Google will 400.\n provider === \"google\"\n ? `PARTIAL: ${incomplete.join(\", \")} did not download and is NOT in the \\`fontFace\\` block. Re-run \\`baker brand fonts fetch \"${family}\" --weights ${incomplete.join(\",\")}\\` — a Google @import cannot cover those weights, because the build drops it before the page loads.`\n : `PARTIAL: ${incomplete.join(\", \")} did not download and is NOT in the \\`fontFace\\` block. ${PROVIDER_LABEL[provider]} does not serve them, so re-run \\`baker brand fonts fetch \"${family}\" --weights ${downloadedWeights.join(\",\")}\\` and record only those weights in src/brand/BRAND.md.`,\n ]\n : []),\n `Licensing: ${PROVIDER_LABEL[provider]} carries open-licensed families, which are safe to self-host. A client's own commercial face is not — confirm before re-hosting one.`,\n ];\n}\n\n/**\n * Put the downloaded face in charge of the family in `global.css`, and say what\n * happened. `readGlobalCss` yields \"\" when the stylesheet is missing, and a\n * stylesheet holding nothing but a @font-face would be worse than none — so\n * that case writes nothing and the caller says so.\n */\nasync function wireFontFaceIntoStylesheet(css: string, family: string, fontFace: string): Promise<Wiring> {\n if (!css) return \"no-stylesheet\";\n const wired = upsertFontFaceCss(css, family, fontFace);\n if (wired === css) return \"already-wired\";\n await writeFile(path.resolve(process.cwd(), GLOBAL_CSS), wired);\n return \"written\";\n}\n\n/**\n * Turn a failed lookup into the one remediation that fits it, then exit.\n *\n * Each reason wants a different sentence, and saying the wrong one is worse\n * than saying nothing: a subset miss reported as a weight miss answered\n * `\"Inter\" exists but not at weight 400 — retry with --weights 400`, which an\n * agent can obey forever without ever getting a different result.\n */\nfunction failResolution(family: string, weights: number[], outcome: ResolveOutcome & { ok: false }): Promise<never> {\n if (outcome.reason === \"unreachable\") {\n // Whichever catalogue went quiet, the answer is the same: ask again. On\n // Google we deliberately do NOT retry against Fontsource — it very likely\n // has the family, and taking it would swap the foundry for good on the\n // strength of one failed request.\n return fail(\n \"CATALOGUE_UNREACHABLE\",\n `Could not reach ${PROVIDER_LABEL[outcome.provider]} to ask about \"${family}\".`,\n {\n action: \"Run the same command again.\",\n explanation: `${PROVIDER_LABEL[outcome.provider]} did not answer, which is not the same as not having the family — so nothing was concluded from it. Guessing either way would self-host the wrong build, or report a real family as missing.`,\n provider: outcome.provider,\n },\n );\n }\n if (outcome.reason === \"ambiguous-subsets\") {\n return fail(\n \"SUBSET_AMBIGUOUS\",\n `${PROVIDER_LABEL[outcome.provider]} serves \"${family}\" in several subsets but reports no unicode-range to tell them apart.`,\n {\n action: `Retry with a single --subsets value, e.g. --subsets ${outcome.available[0] ?? \"latin\"}.`,\n explanation:\n \"Two @font-face rules with the same family, style and weight and no unicode-range both claim every character, so the last one silently wins and the other file is downloaded and never read.\",\n available: outcome.available,\n },\n );\n }\n if (outcome.reason === \"subset\") {\n return fail(\"SUBSET_NOT_SERVED\", `${PROVIDER_LABEL[outcome.provider]} has \"${family}\", but not in that subset.`, {\n action: `Retry with --subsets set to one it serves: ${outcome.available.join(\",\")}.`,\n explanation:\n \"A family is split into unicode subsets and not every family ships every one. The weights you asked for are fine — only the subset is wrong.\",\n available: outcome.available,\n });\n }\n if (outcome.reason === \"weight\") {\n return fail(\n \"FONT_NOT_SERVED\",\n `${PROVIDER_LABEL[outcome.provider]} has \"${family}\", but not at weight ${weights.join(\"/\")}.`,\n {\n action: `Retry with --weights set to one of these: ${outcome.available.join(\",\")}.`,\n explanation: \"The family exists; the weight you asked for is not one it ships.\",\n served: outcome.available,\n },\n );\n }\n return failUnknownFamily(family);\n}\n\n/**\n * A name no catalogue knows. `resolveBrandFaces` has already probed Google\n * weight by weight before answering `unknown-family`, so there is nothing left\n * to ask it — re-probing here just spent nine more requests to be told the same\n * thing. The usual cause is not a typo but a family that ships only as variants:\n * a client asks for \"Open Sauce\", which nothing carries, while Fontsource has\n * One, Sans and Two. Nothing can pick between those for the brand, so they go in\n * the error for a human to choose from.\n */\nasync function failUnknownFamily(family: string): Promise<never> {\n const didYouMean = suggestFamilies(family, await fontsourceCatalogue(PROVIDER_DEPS));\n return fail(\"FONT_NOT_SERVED\", `No font catalogue carries a family called \"${family}\".`, {\n action: didYouMean.length\n ? `Did you mean one of these? ${didYouMean.join(\", \")}. Retry with the exact name, and update the --font-* token in ${GLOBAL_CSS} to match whichever you pick.`\n : `Check the exact spelling, then retry. If it is a commercial typeface, add the file to ${FONTS_DIR} and write the @font-face by hand — it cannot be downloaded.`,\n explanation: `Tried ${FONT_PROVIDERS.join(\" then \")}. Family names are case- and space-sensitive in every catalogue.`,\n tried: [...FONT_PROVIDERS],\n ...(didYouMean.length ? { didYouMean } : {}),\n });\n}\n\n/** Filenames actually present in src/brand/fonts/. */\nasync function listFontFiles(): Promise<string[]> {\n try {\n const entries = await readdir(path.resolve(process.cwd(), FONTS_DIR), { withFileTypes: true });\n return entries.filter((e) => e.isFile()).map((e) => e.name);\n } catch {\n return [];\n }\n}\n\nasync function readGlobalCss(): Promise<string> {\n try {\n return await readFile(path.resolve(process.cwd(), GLOBAL_CSS), \"utf8\");\n } catch {\n return \"\";\n }\n}\n\n/**\n * Which repair this repo actually needs — the three have different consequences\n * and only one of them is `fetch`.\n *\n * Recommending `fetch` for a family a page already self-hosts is the mistake\n * `adopt` exists to prevent: it downloads a DIFFERENT foundry's build of the\n * same name, so the page that rendered correctly starts rendering something\n * else. And `--font-body: \"Open Sauce\"` on a live client is carried by no\n * catalogue at all, so `fetch` cannot even succeed — while the file sat in\n * src/brand/fonts/ the whole time.\n */\nasync function unresolvedAction(css: string, unresolved: string[]): Promise<string> {\n const { plans } = planFontAdoption(await astroSources(), unresolved);\n if (plans.length > 0) {\n const names = plans.map((p) => `\"${p.family}\"`).join(\", \");\n return `Run \\`baker brand fonts adopt\\` — ${names} is already self-hosted by ${plans[0]?.files.join(\", \")}, so it only needs moving into ${GLOBAL_CSS} to load on every page. Don't fetch it: that downloads a different build of the same face.`;\n }\n const viaFontsource = [...fontsourceFamilies(css)];\n const stranded = unresolved.filter((family) => viaFontsource.includes(family.toLowerCase()));\n if (stranded.length > 0) {\n return `Run \\`baker brand fonts fetch \"${stranded[0]}\"\\` to self-host it. Its only provider is an @fontsource import, and that package does not survive a workspace sync — the import is left pointing at nothing, which fails the build before the font check even runs.`;\n }\n return `Run \\`baker brand fonts fetch \"${unresolved[0]}\"\\` to self-host it, which writes the @font-face for you. For a face no catalogue carries, add an @font-face pointing at a file in ${FONTS_DIR}.`;\n}\n\nexport const fontsCheckCommand = defineCommand({\n meta: {\n name: \"check\",\n description:\n \"Verify the brand's fonts really exist. First: every --font-* family in src/styles/global.css must be provided by a local @font-face, or it renders as a fallback on every page — a Google @import does not provide one here, the build drops it before the page loads. Then, for families still requested from Google, ask Google what it actually serves — a weight nobody serves is silently synthesized.\",\n },\n async run() {\n const css = await readGlobalCss();\n const requests = googleFontRequests(css);\n\n // Asked first, and asked of every brand — including the ones with no Google\n // import at all. This command used to answer `selfHosted: true` for those,\n // which is the one answer that is never safe: a `--font-*` token with no\n // @font-face and no import is a family nothing hosts, and the page has been\n // rendering a fallback ever since. 56 of 60 client repos have no Google\n // import, so that was the answer almost everyone got.\n const unresolved = unresolvedBrandFamilies(css);\n if (unresolved.length > 0) {\n fail(\"FONT_NOT_LOADED\", `Nothing loads ${unresolved.map((f) => `\"${f}\"`).join(\", \")} in ${GLOBAL_CSS}.`, {\n action: await unresolvedAction(css, unresolved),\n explanation:\n \"The family is declared as a brand font but no @font-face provides it, so every page silently renders a fallback. A Google @import does not count: Astro merges component CSS ahead of global.css into one inlined <style>, so the import lands after rules and the browser drops it — measured on a live client site. The client's verify fails on this too.\",\n unresolved,\n });\n }\n\n if (requests.length === 0) {\n writeJson({\n ok: true,\n data: { families: [], selfHosted: true },\n hints: [\n `No Google Fonts requested in ${GLOBAL_CSS}, and every brand face is provided by an @font-face — nothing to verify against Google.`,\n ],\n });\n return;\n }\n\n const families = await checkFontRequests(requests, fetchGoogleCss);\n const broken = families.filter((f) => f.missing.length > 0);\n\n if (broken.length > 0) {\n const summary = broken\n .map((f) =>\n f.cause === \"unknown-family\"\n ? `${f.family} (no such family on Google Fonts — check the exact spelling)`\n : `${f.family} ${f.missing.join(\"/\")} (served: ${f.served.join(\"/\") || \"none\"})`,\n )\n .join(\"; \");\n fail(\"FONT_NOT_SERVED\", `Google Fonts does not serve: ${summary}`, {\n action: `Correct the family name or weight in ${GLOBAL_CSS} and src/brand/BRAND.md, picking from the \\`served\\` weights below.`,\n explanation:\n \"A requested weight Google does not serve is silently synthesized by the browser, so the page looks subtly wrong with nothing failing.\",\n // The per-family breakdown is the point of the command, so it ships on\n // the failure path too — otherwise the only remedy is re-running the\n // command that just failed. Healthy families are included so a\n // multi-family brand shows what NOT to touch.\n families,\n });\n }\n\n writeJson({\n ok: true,\n data: { families },\n hints: [\n \"Every requested family and weight is really served by Google.\",\n `To stop depending on Google at page load, run \\`baker brand fonts fetch \"<family>\"\\` to self-host into ${FONTS_DIR}.`,\n ],\n });\n },\n});\n\nexport const fontsFetchCommand = defineCommand({\n meta: {\n name: \"fetch\",\n description:\n \"Download a font from Google Fonts or Fontsource into src/brand/fonts/ and write its @font-face into src/styles/global.css above @theme, so the family actually loads. Use when a brand font should be self-hosted rather than requested from a third party on every page load.\",\n },\n args: {\n family: { type: \"positional\", required: true, description: 'Font family, e.g. \"DM Sans\"' },\n weights: {\n type: \"string\",\n description: \"Comma-separated weights (default: the weights global.css already requests or self-hosts, else 400)\",\n },\n subsets: {\n type: \"string\",\n description: `Comma-separated unicode subsets (default: the subsets global.css already self-hosts, else ${DEFAULT_SUBSETS_LABEL})`,\n },\n italic: {\n type: \"boolean\",\n description:\n \"Also self-host the family's italic faces (default: on when global.css already loads one, off otherwise)\",\n },\n },\n async run({ args }) {\n const family = String(args.family).trim();\n if (!family) fail(\"INVALID_FAMILY\", 'Pass a font family, e.g. `baker brand fonts fetch \"DM Sans\"`.');\n\n const css = await readGlobalCss();\n const declared = googleFontRequests(css).find((r) => r.family.toLowerCase() === family.toLowerCase());\n // Self-hosted weights count as \"already requested\". Once the first fetch\n // has been done and the Google @import removed — which the hints tell the\n // agent to do — the stylesheet's own @font-face rules are the only surviving\n // record of which weights this brand uses.\n const provided = declared?.weights.length ? declared.weights : selfHostedWeights(css, family);\n const weights = resolveFetchWeights(args.weights, provided);\n if (weights.length === 0) {\n fail(\"INVALID_WEIGHTS\", `\"${args.weights}\" has no usable weight — pass whole hundreds, e.g. --weights 400,700.`);\n }\n\n // Self-hosted subsets count the same way self-hosted weights do above. The\n // family's rules are REPLACED, so defaulting a re-run to latin deleted the\n // latin-ext face an earlier `--subsets latin,latin-ext` downloaded and\n // orphaned its file — nothing fails, the family stays resolved, and every\n // accented character quietly falls back.\n const wanted = new Set(resolveFetchSubsets(args.subsets, selfHostedSubsets(css, family)));\n // An italic already in the stylesheet turns this on by itself. `fetch` has\n // no `--no-italic`, so the family can only ever gain its italic here, never\n // lose one to a flag nobody passed.\n const styles = resolveFetchStyles(args.italic, selfHostedStyles(css, family));\n\n const resolved = await resolveBrandFaces(family, weights, [...wanted], PROVIDER_DEPS, styles);\n if (!resolved.ok) return failResolution(family, weights, resolved);\n const faces = resolved.faces;\n\n const fontsDir = path.resolve(process.cwd(), FONTS_DIR);\n await mkdir(fontsDir, { recursive: true });\n\n // Only faces whose file really landed may appear in the @font-face block —\n // a rule pointing at a file that failed to download is exactly the silent\n // fallback this command exists to prevent.\n const downloaded: BrandFontFace[] = [];\n for (const face of faces) {\n const res = await fetch(face.url, {\n headers: { \"User-Agent\": BROWSER_UA },\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n if (!res.ok) continue;\n await writeFile(path.join(fontsDir, fontFileName(face)), Buffer.from(await res.arrayBuffer()));\n downloaded.push(face);\n }\n const written = downloaded.map(fontFileName);\n\n if (written.length === 0) {\n fail(\"DOWNLOAD_FAILED\", `Could not download any file for \"${family}\".`, {\n action: \"Retry; if it keeps failing, keep the Google @import and note it in BRAND.md.\",\n explanation: \"The font stylesheet resolved but the font files themselves did not download.\",\n });\n }\n\n const fontFace = renderFontFaceCss(downloaded);\n const downloadedWeights = [...new Set(downloaded.map((f) => f.weight))].sort((a, b) => a - b);\n const downloadedStyles = [...new Set(downloaded.map((f) => f.style))].sort();\n const incomplete = weights.filter((w) => !downloadedWeights.includes(w));\n\n // Wire the face up here rather than handing back a block to paste. The\n // download above is a real side effect, so a skipped paste left the repo\n // with the files on disk and nothing loading them — a state that looks done,\n // renders as a fallback, and only surfaces when the client's verify fails.\n const wiring = await wireFontFaceIntoStylesheet(css, family, fontFace);\n\n writeJson({\n ok: true,\n data: {\n family,\n provider: resolved.provider,\n weights: downloadedWeights,\n styles: downloadedStyles,\n files: written,\n fontFace,\n stylesheet: wiring,\n },\n hints: fetchHints({\n family,\n downloadedWeights,\n downloadedStyles,\n incomplete,\n wiring,\n provider: resolved.provider,\n wantedStyles: styles,\n availableStyles: resolved.availableStyles,\n }),\n });\n },\n});\n\n/** Every `.astro` under src/, so a face declared in any page or component is found. */\nasync function astroSources(): Promise<{ path: string; source: string }[]> {\n const out: { path: string; source: string }[] = [];\n let entries: Dirent[];\n try {\n entries = await readdir(\"src\", { recursive: true, withFileTypes: true });\n } catch {\n return out;\n }\n for (const entry of entries) {\n if (!entry.isFile() || !entry.name.endsWith(\".astro\")) continue;\n const file = path.posix.join(entry.parentPath ?? \"src\", entry.name);\n try {\n out.push({ path: file, source: await readFile(file, \"utf8\") });\n } catch {\n // A file that cannot be read is a file this command leaves alone.\n }\n }\n return out;\n}\n\nexport const fontsAdoptCommand = defineCommand({\n meta: {\n name: \"adopt\",\n description:\n \"Move brand faces a page already self-hosts into src/styles/global.css, so every page loads them instead of just that one. Use when `check` reports a family as not loaded but the font files are already in src/brand/fonts/ — downloading it again would hand that page a different build of the same face.\",\n },\n async run() {\n const css = await readGlobalCss();\n if (!css) fail(\"NO_STYLESHEET\", `There is no ${GLOBAL_CSS} to adopt faces into.`);\n\n const unresolved = unresolvedBrandFamilies(css);\n if (unresolved.length === 0) {\n writeJson({\n ok: true,\n data: { adopted: [], conflicts: [] },\n hints: [`Every --font-* family in ${GLOBAL_CSS} is already loaded by it — nothing to adopt.`],\n });\n return;\n }\n\n const { plans, conflicts } = planFontAdoption(await astroSources(), unresolved);\n const available = new Set(await listFontFiles());\n const adopted: { family: string; files: string[]; weights: string[] }[] = [];\n const skipped: { family: string; reason: string }[] = [];\n let next = css;\n\n for (const plan of plans) {\n // A rule pointing at a file that is not there is the same silent fallback\n // this command exists to remove, so the whole family is left alone.\n const missing = missingFontFiles(plan.urls, available);\n if (missing.length > 0) {\n skipped.push({ family: plan.family, reason: `${missing.join(\", \")} is not in ${FONTS_DIR}` });\n continue;\n }\n next = upsertFontFaceCss(next, plan.family, plan.blocks.join(\"\\n\"));\n adopted.push({\n family: plan.family,\n files: plan.files,\n weights: plan.blocks.map((b) => b.match(/font-weight\\s*:\\s*([^;]+)/i)?.[1]?.trim() ?? \"400\"),\n });\n }\n\n if (adopted.length === 0) {\n // Three different facts used to share one sentence. \"No page declares it\"\n // is false whenever a plan was skipped or conflicted — a page declares it\n // fine — and the `fetch` it recommended downloads the very substitute\n // build this command exists to avoid. Say which one actually happened.\n if (conflicts.length > 0) {\n fail(\n \"ADOPTION_CONFLICT\",\n `${conflicts.map((c) => `\"${c.family}\" is declared differently in ${c.files.join(\" and \")}`).join(\"; \")}.`,\n {\n action:\n \"Make the declarations match — same weights, same files — then re-run. Pick the one whose page renders correctly.\",\n explanation:\n \"One global scope holds one mapping per family, so adopting would silently repaint whichever page lost.\",\n conflicts,\n },\n );\n }\n if (skipped.length > 0) {\n fail(\"FONT_FILE_MISSING\", `${skipped.map((s) => `${s.family} — ${s.reason}`).join(\"; \")}.`, {\n action: `Add the missing file to ${FONTS_DIR}, or fix the src: url() in the page that declares it, then re-run.`,\n explanation:\n \"The page declares the face but points at a file that is not in the repo, so the rule renders as a fallback. Moving it into the stylesheet would spread that fallback to every page.\",\n skipped,\n });\n }\n fail(\"NOTHING_TO_ADOPT\", `No page declares a face for ${unresolved.map((f) => `\"${f}\"`).join(\", \")}.`, {\n action: `Self-host it instead: \\`baker brand fonts fetch \"${unresolved[0]}\"\\`.`,\n explanation: \"Adopting only moves faces the repo already ships; it never downloads one.\",\n });\n }\n\n await writeFile(path.resolve(process.cwd(), GLOBAL_CSS), next);\n for (const plan of plans.filter((p) => adopted.some((a) => a.family === p.family))) {\n for (const file of plan.files) {\n const source = await readFile(file, \"utf8\");\n await writeFile(file, stripFontFaceBlocks(source, plan.family));\n }\n }\n\n writeJson({\n ok: true,\n data: { adopted, conflicts, skipped },\n hints: [\n `Moved ${adopted.map((a) => `\"${a.family}\" (${a.weights.join(\"/\")})`).join(\", \")} into ${GLOBAL_CSS} and removed the page copies, so every page loads them — not just the one that declared them.`,\n ...(conflicts.length > 0\n ? [\n `CONFLICT: ${conflicts.map((c) => `\"${c.family}\" is declared differently in ${c.files.join(\" and \")}`).join(\"; \")}. One global scope can hold only one mapping, so pick which files the family should use and make the declarations match before re-running.`,\n ]\n : []),\n ...(skipped.length > 0 ? [`SKIPPED: ${skipped.map((s) => `${s.family} — ${s.reason}`).join(\"; \")}.`] : []),\n `Run \\`baker brand fonts check\\` to confirm nothing is left unresolved.`,\n ],\n });\n },\n});\n\nexport const fontsCommand = defineCommand({\n meta: {\n name: \"fonts\",\n description: `Verify and self-host the brand's typefaces.\n\nStart here: \\`baker brand fonts check\\` — confirms the fonts the brand claims really load.\n\nSubcommands:\n baker brand fonts check — fail if any --font-* family has nothing loading it, then ask Google what it actually serves for the ones global.css requests\n baker brand fonts fetch <family> — download a family into src/brand/fonts/ and wire its @font-face into src/styles/global.css\n baker brand fonts adopt — move faces a page already self-hosts into global.css, so every page loads them. Try this BEFORE fetch when the font files are already in src/brand/fonts/`,\n },\n subCommands: {\n check: fontsCheckCommand,\n fetch: fontsFetchCommand,\n adopt: fontsAdoptCommand,\n },\n});\n"],"mappings":"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","names":[]}