@koda-sl/baker-cli 0.387.0 → 0.389.0-dev.8065ad8f0
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.
- package/README.md +1090 -211
- package/canvas/tiktok-captions-composition/index.html +5 -6
- package/canvas/tiktok-captions-composition/meta.json +5 -0
- package/dist/account-CLOKMTTC.js +49 -0
- package/dist/account-CLOKMTTC.js.map +1 -0
- package/dist/account-V5Y2QHAK.js +79 -0
- package/dist/account-V5Y2QHAK.js.map +1 -0
- package/dist/account-XFK6VX2R.js +80 -0
- package/dist/account-XFK6VX2R.js.map +1 -0
- package/dist/account-reads-S5VXX2QU.js +218 -0
- package/dist/account-reads-S5VXX2QU.js.map +1 -0
- package/dist/account-writes-Y7EQXDXF.js +66 -0
- package/dist/account-writes-Y7EQXDXF.js.map +1 -0
- package/dist/accounts-7YD457YN.js +114 -0
- package/dist/accounts-7YD457YN.js.map +1 -0
- package/dist/accounts-BJ3X5JQT.js +115 -0
- package/dist/accounts-BJ3X5JQT.js.map +1 -0
- package/dist/accounts-LOJ4WLIX.js +77 -0
- package/dist/accounts-LOJ4WLIX.js.map +1 -0
- package/dist/accounts-RYBDLQ6H.js +75 -0
- package/dist/accounts-RYBDLQ6H.js.map +1 -0
- package/dist/accounts-UO4XBWM2.js +611 -0
- package/dist/accounts-UO4XBWM2.js.map +1 -0
- package/dist/actions-3AW3R63U.js +55 -0
- package/dist/actions-3AW3R63U.js.map +1 -0
- package/dist/active-entities-R6GZIO6Z.js +103 -0
- package/dist/active-entities-R6GZIO6Z.js.map +1 -0
- package/dist/activities-ESBF3GFS.js +74 -0
- package/dist/activities-ESBF3GFS.js.map +1 -0
- package/dist/ad-group-writes-I225OYDZ.js +170 -0
- package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
- package/dist/ad-groups-O35MWNF6.js +68 -0
- package/dist/ad-groups-O35MWNF6.js.map +1 -0
- package/dist/ad-writes-SS5YZO5W.js +174 -0
- package/dist/ad-writes-SS5YZO5W.js.map +1 -0
- package/dist/add-43DUOVNR.js +104 -0
- package/dist/add-43DUOVNR.js.map +1 -0
- package/dist/add-IE5WDELB.js +302 -0
- package/dist/add-IE5WDELB.js.map +1 -0
- package/dist/add-QZHAWUBA.js +97 -0
- package/dist/add-QZHAWUBA.js.map +1 -0
- package/dist/add-TGQIVVXH.js +105 -0
- package/dist/add-TGQIVVXH.js.map +1 -0
- package/dist/add-accounts-6QYPOPR2.js +91 -0
- package/dist/add-accounts-6QYPOPR2.js.map +1 -0
- package/dist/ads-AUSRB4GU.js +128 -0
- package/dist/ads-AUSRB4GU.js.map +1 -0
- package/dist/ads-COYOTEKE.js +77 -0
- package/dist/ads-COYOTEKE.js.map +1 -0
- package/dist/ads-MALHYD2D.js +40 -0
- package/dist/ads-MALHYD2D.js.map +1 -0
- package/dist/ads-XZCMSPM5.js +113 -0
- package/dist/ads-XZCMSPM5.js.map +1 -0
- package/dist/adsets-AKR75THA.js +176 -0
- package/dist/adsets-AKR75THA.js.map +1 -0
- package/dist/advertisers-52FMMBTQ.js +120 -0
- package/dist/advertisers-52FMMBTQ.js.map +1 -0
- package/dist/advertisers-BCGKUMEH.js +125 -0
- package/dist/advertisers-BCGKUMEH.js.map +1 -0
- package/dist/analytics-JPDBKETM.js +1980 -0
- package/dist/analytics-JPDBKETM.js.map +1 -0
- package/dist/analytics-YVQ6H4BG.js +433 -0
- package/dist/analytics-YVQ6H4BG.js.map +1 -0
- package/dist/animate-JXIT77Y5.js +480 -0
- package/dist/animate-JXIT77Y5.js.map +1 -0
- package/dist/assign-66NTWTR2.js +77 -0
- package/dist/assign-66NTWTR2.js.map +1 -0
- package/dist/audience-size-LVQJWQAS.js +94 -0
- package/dist/audience-size-LVQJWQAS.js.map +1 -0
- package/dist/audiences-DC3IOG34.js +85 -0
- package/dist/audiences-DC3IOG34.js.map +1 -0
- package/dist/audiences-NEW3LLQR.js +268 -0
- package/dist/audiences-NEW3LLQR.js.map +1 -0
- package/dist/audiences-NYGMBGQ3.js +79 -0
- package/dist/audiences-NYGMBGQ3.js.map +1 -0
- package/dist/audit-UIPMTI5C.js +88 -0
- package/dist/audit-UIPMTI5C.js.map +1 -0
- package/dist/audit-XGN2OFLN.js +151 -0
- package/dist/audit-XGN2OFLN.js.map +1 -0
- package/dist/autocomplete-LVPDV3JE.js +111 -0
- package/dist/autocomplete-LVPDV3JE.js.map +1 -0
- package/dist/avatars-S6NSLMJK.js +38 -0
- package/dist/avatars-S6NSLMJK.js.map +1 -0
- package/dist/bid-pricing-2LYULXU2.js +99 -0
- package/dist/bid-pricing-2LYULXU2.js.map +1 -0
- package/dist/brand-WWHUZ72R.js +22 -0
- package/dist/brand-WWHUZ72R.js.map +1 -0
- package/dist/brief-XY3TFWBC.js +492 -0
- package/dist/brief-XY3TFWBC.js.map +1 -0
- package/dist/businesses-J7OP7MSK.js +53 -0
- package/dist/businesses-J7OP7MSK.js.map +1 -0
- package/dist/campaign-groups-N4TZ2F3L.js +95 -0
- package/dist/campaign-groups-N4TZ2F3L.js.map +1 -0
- package/dist/campaign-writes-5XA727KI.js +170 -0
- package/dist/campaign-writes-5XA727KI.js.map +1 -0
- package/dist/campaign-writes-7YFRQIQT.js +165 -0
- package/dist/campaign-writes-7YFRQIQT.js.map +1 -0
- package/dist/campaigns-JPYNVFQI.js +76 -0
- package/dist/campaigns-JPYNVFQI.js.map +1 -0
- package/dist/campaigns-L43ZUKAI.js +107 -0
- package/dist/campaigns-L43ZUKAI.js.map +1 -0
- package/dist/campaigns-OD7Z332M.js +109 -0
- package/dist/campaigns-OD7Z332M.js.map +1 -0
- package/dist/campaigns-R4DXIR2Q.js +110 -0
- package/dist/campaigns-R4DXIR2Q.js.map +1 -0
- package/dist/canvas-J7SLIVL7.js +46 -0
- package/dist/canvas-J7SLIVL7.js.map +1 -0
- package/dist/capabilities-FVTZAFPV.js +144 -0
- package/dist/capabilities-FVTZAFPV.js.map +1 -0
- package/dist/cards-7H32TNMO.js +85 -0
- package/dist/cards-7H32TNMO.js.map +1 -0
- package/dist/catalog-OTICZPJA.js +64 -0
- package/dist/catalog-OTICZPJA.js.map +1 -0
- package/dist/catalogs-ABCQLCDU.js +128 -0
- package/dist/catalogs-ABCQLCDU.js.map +1 -0
- package/dist/changes-7ZIGNUW6.js +135 -0
- package/dist/changes-7ZIGNUW6.js.map +1 -0
- package/dist/chatgpt-B3NHRJUE.js +47 -0
- package/dist/chatgpt-B3NHRJUE.js.map +1 -0
- package/dist/chats-E7DBRHBF.js +262 -0
- package/dist/chats-E7DBRHBF.js.map +1 -0
- package/dist/chunk-2CV7LX23.js +474 -0
- package/dist/chunk-2CV7LX23.js.map +1 -0
- package/dist/chunk-2HCI5BXB.js +479 -0
- package/dist/chunk-2HCI5BXB.js.map +1 -0
- package/dist/chunk-2SQJL7ZN.js +56 -0
- package/dist/chunk-2SQJL7ZN.js.map +1 -0
- package/dist/chunk-2Y5V23PU.js +29 -0
- package/dist/chunk-2Y5V23PU.js.map +1 -0
- package/dist/chunk-32CPGJPL.js +149 -0
- package/dist/chunk-32CPGJPL.js.map +1 -0
- package/dist/chunk-3ACMDRSE.js +39 -0
- package/dist/chunk-3ACMDRSE.js.map +1 -0
- package/dist/chunk-3CIXGQJS.js +150 -0
- package/dist/chunk-3CIXGQJS.js.map +1 -0
- package/dist/chunk-3U7TDBIB.js +275 -0
- package/dist/chunk-3U7TDBIB.js.map +1 -0
- package/dist/chunk-3UDSYYND.js +42 -0
- package/dist/chunk-3UDSYYND.js.map +1 -0
- package/dist/chunk-3ZWWXAQZ.js +150 -0
- package/dist/chunk-3ZWWXAQZ.js.map +1 -0
- package/dist/chunk-4MH6LONO.js +274 -0
- package/dist/chunk-4MH6LONO.js.map +1 -0
- package/dist/chunk-4NZ47VXO.js +137 -0
- package/dist/chunk-4NZ47VXO.js.map +1 -0
- package/dist/chunk-564AEU2Q.js +541 -0
- package/dist/chunk-564AEU2Q.js.map +1 -0
- package/dist/chunk-5HYSKH77.js +315 -0
- package/dist/chunk-5HYSKH77.js.map +1 -0
- package/dist/chunk-5MBPIONY.js +29 -0
- package/dist/chunk-5MBPIONY.js.map +1 -0
- package/dist/chunk-5OVOLYY3.js +74 -0
- package/dist/chunk-5OVOLYY3.js.map +1 -0
- package/dist/chunk-66USKCVY.js +4410 -0
- package/dist/chunk-66USKCVY.js.map +1 -0
- package/dist/chunk-6I7SYEYN.js +166 -0
- package/dist/chunk-6I7SYEYN.js.map +1 -0
- package/dist/chunk-6O7ISBC7.js +65 -0
- package/dist/chunk-6O7ISBC7.js.map +1 -0
- package/dist/chunk-752S7JF6.js +35 -0
- package/dist/chunk-752S7JF6.js.map +1 -0
- package/dist/chunk-77DN7R35.js +228 -0
- package/dist/chunk-77DN7R35.js.map +1 -0
- package/dist/chunk-7F7MFMLI.js +175 -0
- package/dist/chunk-7F7MFMLI.js.map +1 -0
- package/dist/chunk-7THBBTJJ.js +183 -0
- package/dist/chunk-7THBBTJJ.js.map +1 -0
- package/dist/chunk-7XU3HKMX.js +1599 -0
- package/dist/chunk-7XU3HKMX.js.map +1 -0
- package/dist/chunk-A2CBZLQ6.js +111 -0
- package/dist/chunk-A2CBZLQ6.js.map +1 -0
- package/dist/chunk-AFJGYJ7Z.js +45 -0
- package/dist/chunk-AFJGYJ7Z.js.map +1 -0
- package/dist/chunk-AR7PU7BB.js +76 -0
- package/dist/chunk-AR7PU7BB.js.map +1 -0
- package/dist/chunk-ASL7JFBD.js +96 -0
- package/dist/chunk-ASL7JFBD.js.map +1 -0
- package/dist/chunk-AUSKKFVH.js +84 -0
- package/dist/chunk-AUSKKFVH.js.map +1 -0
- package/dist/chunk-B52DCYL2.js +159 -0
- package/dist/chunk-B52DCYL2.js.map +1 -0
- package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
- package/dist/chunk-BVM5IRZW.js.map +1 -0
- package/dist/chunk-CAMX6OHF.js +3182 -0
- package/dist/chunk-CAMX6OHF.js.map +1 -0
- package/dist/chunk-CYBLKMXQ.js +310 -0
- package/dist/chunk-CYBLKMXQ.js.map +1 -0
- package/dist/chunk-CZENWCBS.js +333 -0
- package/dist/chunk-CZENWCBS.js.map +1 -0
- package/dist/chunk-D5FY4FAK.js +24 -0
- package/dist/chunk-D5FY4FAK.js.map +1 -0
- package/dist/chunk-DGCUPJZD.js +39 -0
- package/dist/chunk-DGCUPJZD.js.map +1 -0
- package/dist/chunk-DNCLWSHO.js +41 -0
- package/dist/chunk-DNCLWSHO.js.map +1 -0
- package/dist/chunk-DX4GIDO7.js +296 -0
- package/dist/chunk-DX4GIDO7.js.map +1 -0
- package/dist/chunk-EDLZGTGN.js +216 -0
- package/dist/chunk-EDLZGTGN.js.map +1 -0
- package/dist/chunk-EDNKALM6.js +304 -0
- package/dist/chunk-EDNKALM6.js.map +1 -0
- package/dist/chunk-EDNX3AOS.js +76 -0
- package/dist/chunk-EDNX3AOS.js.map +1 -0
- package/dist/chunk-EF5DP6EB.js +52 -0
- package/dist/chunk-EF5DP6EB.js.map +1 -0
- package/dist/chunk-ERSX3MKH.js +34 -0
- package/dist/chunk-ERSX3MKH.js.map +1 -0
- package/dist/chunk-F3IJSR7O.js +346 -0
- package/dist/chunk-F3IJSR7O.js.map +1 -0
- package/dist/chunk-FKOECEVC.js +126 -0
- package/dist/chunk-FKOECEVC.js.map +1 -0
- package/dist/chunk-FWT55B3O.js +509 -0
- package/dist/chunk-FWT55B3O.js.map +1 -0
- package/dist/chunk-FYWWTMXP.js +2902 -0
- package/dist/chunk-FYWWTMXP.js.map +1 -0
- package/dist/chunk-FZGCAW46.js +64 -0
- package/dist/chunk-FZGCAW46.js.map +1 -0
- package/dist/chunk-G7AFVTUS.js +106 -0
- package/dist/chunk-G7AFVTUS.js.map +1 -0
- package/dist/chunk-GIW7ABMM.js +74 -0
- package/dist/chunk-GIW7ABMM.js.map +1 -0
- package/dist/chunk-GIWHHCD6.js +145 -0
- package/dist/chunk-GIWHHCD6.js.map +1 -0
- package/dist/chunk-GRQ2AXDX.js +9 -0
- package/dist/chunk-GRQ2AXDX.js.map +1 -0
- package/dist/chunk-GXDLWBOY.js +73 -0
- package/dist/chunk-GXDLWBOY.js.map +1 -0
- package/dist/chunk-GYABNLWW.js +629 -0
- package/dist/chunk-GYABNLWW.js.map +1 -0
- package/dist/chunk-H7MLHG2I.js +94 -0
- package/dist/chunk-H7MLHG2I.js.map +1 -0
- package/dist/chunk-H7XVKLIY.js +206 -0
- package/dist/chunk-H7XVKLIY.js.map +1 -0
- package/dist/chunk-HAE4WWFQ.js +455 -0
- package/dist/chunk-HAE4WWFQ.js.map +1 -0
- package/dist/chunk-HDHWIEJJ.js +136 -0
- package/dist/chunk-HDHWIEJJ.js.map +1 -0
- package/dist/chunk-HJTIBTF7.js +98 -0
- package/dist/chunk-HJTIBTF7.js.map +1 -0
- package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
- package/dist/chunk-HLXWKMTK.js.map +1 -0
- package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
- package/dist/chunk-HREWXNTO.js.map +1 -0
- package/dist/chunk-HYXKRNRV.js +176 -0
- package/dist/chunk-HYXKRNRV.js.map +1 -0
- package/dist/chunk-I3DIZWN5.js +97 -0
- package/dist/chunk-I3DIZWN5.js.map +1 -0
- package/dist/chunk-IJMWEO4P.js +57 -0
- package/dist/chunk-IJMWEO4P.js.map +1 -0
- package/dist/chunk-IOCSDFF2.js +23992 -0
- package/dist/chunk-IOCSDFF2.js.map +1 -0
- package/dist/chunk-IVIJJXXT.js +62 -0
- package/dist/chunk-IVIJJXXT.js.map +1 -0
- package/dist/chunk-J57GWTPK.js +106 -0
- package/dist/chunk-J57GWTPK.js.map +1 -0
- package/dist/chunk-JPK34QPS.js +134 -0
- package/dist/chunk-JPK34QPS.js.map +1 -0
- package/dist/chunk-JRCFCIE3.js +188 -0
- package/dist/chunk-JRCFCIE3.js.map +1 -0
- package/dist/chunk-JUAIGJ2A.js +76 -0
- package/dist/chunk-JUAIGJ2A.js.map +1 -0
- package/dist/chunk-K5OQES4V.js +58 -0
- package/dist/chunk-K5OQES4V.js.map +1 -0
- package/dist/chunk-KBS5GH4T.js +1626 -0
- package/dist/chunk-KBS5GH4T.js.map +1 -0
- package/dist/chunk-KIGGMKAE.js +66 -0
- package/dist/chunk-KIGGMKAE.js.map +1 -0
- package/dist/chunk-KKJ4KJCW.js +29 -0
- package/dist/chunk-KKJ4KJCW.js.map +1 -0
- package/dist/chunk-KLK6KQLQ.js +55 -0
- package/dist/chunk-KLK6KQLQ.js.map +1 -0
- package/dist/chunk-KXGG6EQM.js +382 -0
- package/dist/chunk-KXGG6EQM.js.map +1 -0
- package/dist/chunk-KXRKPZZY.js +169 -0
- package/dist/chunk-KXRKPZZY.js.map +1 -0
- package/dist/chunk-KZUHRZ2C.js +5187 -0
- package/dist/chunk-KZUHRZ2C.js.map +1 -0
- package/dist/chunk-L45A3IYV.js +1079 -0
- package/dist/chunk-L45A3IYV.js.map +1 -0
- package/dist/chunk-LA6PPSNA.js +65 -0
- package/dist/chunk-LA6PPSNA.js.map +1 -0
- package/dist/chunk-LEIQAHWF.js +25 -0
- package/dist/chunk-LEIQAHWF.js.map +1 -0
- package/dist/chunk-LERWCRY5.js +297 -0
- package/dist/chunk-LERWCRY5.js.map +1 -0
- package/dist/chunk-LLPFY3NI.js +207 -0
- package/dist/chunk-LLPFY3NI.js.map +1 -0
- package/dist/chunk-M6UNISGO.js +66 -0
- package/dist/chunk-M6UNISGO.js.map +1 -0
- package/dist/chunk-MDATIJPM.js +92 -0
- package/dist/chunk-MDATIJPM.js.map +1 -0
- package/dist/chunk-MGKHFGLV.js +75 -0
- package/dist/chunk-MGKHFGLV.js.map +1 -0
- package/dist/chunk-MZWC6HHA.js +455 -0
- package/dist/chunk-MZWC6HHA.js.map +1 -0
- package/dist/chunk-N3XJ434P.js +197 -0
- package/dist/chunk-N3XJ434P.js.map +1 -0
- package/dist/chunk-NFSLRRIE.js +77 -0
- package/dist/chunk-NFSLRRIE.js.map +1 -0
- package/dist/chunk-NHU33T2S.js +60 -0
- package/dist/chunk-NHU33T2S.js.map +1 -0
- package/dist/chunk-NJEZM4OB.js +51 -0
- package/dist/chunk-NJEZM4OB.js.map +1 -0
- package/dist/chunk-O6QKCJE4.js +455 -0
- package/dist/chunk-O6QKCJE4.js.map +1 -0
- package/dist/chunk-OFFAMC5H.js +225 -0
- package/dist/chunk-OFFAMC5H.js.map +1 -0
- package/dist/chunk-OHGTCFFE.js +57 -0
- package/dist/chunk-OHGTCFFE.js.map +1 -0
- package/dist/chunk-P4NSJS54.js +20 -0
- package/dist/chunk-P4NSJS54.js.map +1 -0
- package/dist/chunk-P5T7OZKV.js +26 -0
- package/dist/chunk-P5T7OZKV.js.map +1 -0
- package/dist/chunk-PFBQERWX.js +10 -0
- package/dist/chunk-PFBQERWX.js.map +1 -0
- package/dist/chunk-PUPEGICD.js +103 -0
- package/dist/chunk-PUPEGICD.js.map +1 -0
- package/dist/chunk-Q6ULQMWG.js +41 -0
- package/dist/chunk-Q6ULQMWG.js.map +1 -0
- package/dist/chunk-QO23YHLK.js +84 -0
- package/dist/chunk-QO23YHLK.js.map +1 -0
- package/dist/chunk-QSGIWV4P.js +337 -0
- package/dist/chunk-QSGIWV4P.js.map +1 -0
- package/dist/chunk-R4Y5P3PB.js +19 -0
- package/dist/chunk-R4Y5P3PB.js.map +1 -0
- package/dist/chunk-R5OQM7FF.js +179 -0
- package/dist/chunk-R5OQM7FF.js.map +1 -0
- package/dist/chunk-RODLBWIR.js +592 -0
- package/dist/chunk-RODLBWIR.js.map +1 -0
- package/dist/chunk-RY7TYEIX.js +504 -0
- package/dist/chunk-RY7TYEIX.js.map +1 -0
- package/dist/chunk-S4LZ7KTG.js +160 -0
- package/dist/chunk-S4LZ7KTG.js.map +1 -0
- package/dist/chunk-SHTESUB6.js +1442 -0
- package/dist/chunk-SHTESUB6.js.map +1 -0
- package/dist/chunk-SJH4EOZH.js +23 -0
- package/dist/chunk-SJH4EOZH.js.map +1 -0
- package/dist/chunk-SMIENBNX.js +6212 -0
- package/dist/chunk-SMIENBNX.js.map +1 -0
- package/dist/chunk-T7GT22KA.js +494 -0
- package/dist/chunk-T7GT22KA.js.map +1 -0
- package/dist/chunk-T7M4WFNV.js +172 -0
- package/dist/chunk-T7M4WFNV.js.map +1 -0
- package/dist/chunk-TIFVHGQL.js +6683 -0
- package/dist/chunk-TIFVHGQL.js.map +1 -0
- package/dist/chunk-TMIDUSOR.js +665 -0
- package/dist/chunk-TMIDUSOR.js.map +1 -0
- package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
- package/dist/chunk-U6VRBDNQ.js +1830 -0
- package/dist/chunk-U6VRBDNQ.js.map +1 -0
- package/dist/chunk-U7BBXM67.js +1743 -0
- package/dist/chunk-U7BBXM67.js.map +1 -0
- package/dist/chunk-UI6BKYQD.js +225 -0
- package/dist/chunk-UI6BKYQD.js.map +1 -0
- package/dist/chunk-UOI5S62H.js +846 -0
- package/dist/chunk-UOI5S62H.js.map +1 -0
- package/dist/chunk-USL5ARRE.js +26 -0
- package/dist/chunk-USL5ARRE.js.map +1 -0
- package/dist/chunk-UYC45JNS.js +139 -0
- package/dist/chunk-UYC45JNS.js.map +1 -0
- package/dist/chunk-VNKVBY54.js +363 -0
- package/dist/chunk-VNKVBY54.js.map +1 -0
- package/dist/chunk-VS4C7VAR.js +533 -0
- package/dist/chunk-VS4C7VAR.js.map +1 -0
- package/dist/chunk-VZMDYVNS.js +3151 -0
- package/dist/chunk-VZMDYVNS.js.map +1 -0
- package/dist/chunk-W4W4ZRBP.js +191 -0
- package/dist/chunk-W4W4ZRBP.js.map +1 -0
- package/dist/chunk-WN4KX7GE.js +25 -0
- package/dist/chunk-WN4KX7GE.js.map +1 -0
- package/dist/chunk-WNFTXSGR.js +111 -0
- package/dist/chunk-WNFTXSGR.js.map +1 -0
- package/dist/chunk-WOTDHRNF.js +2109 -0
- package/dist/chunk-WOTDHRNF.js.map +1 -0
- package/dist/chunk-XGWKTYXQ.js +67 -0
- package/dist/chunk-XGWKTYXQ.js.map +1 -0
- package/dist/chunk-XIGIJJSF.js +66 -0
- package/dist/chunk-XIGIJJSF.js.map +1 -0
- package/dist/chunk-XNUXB63I.js +817 -0
- package/dist/chunk-XNUXB63I.js.map +1 -0
- package/dist/chunk-XQ3CCNJD.js +610 -0
- package/dist/chunk-XQ3CCNJD.js.map +1 -0
- package/dist/chunk-XX6ZMCY5.js +4227 -0
- package/dist/chunk-XX6ZMCY5.js.map +1 -0
- package/dist/chunk-Y362QH54.js +98 -0
- package/dist/chunk-Y362QH54.js.map +1 -0
- package/dist/chunk-Y4T6ATDQ.js +74 -0
- package/dist/chunk-Y4T6ATDQ.js.map +1 -0
- package/dist/chunk-YQSBHWOI.js +41 -0
- package/dist/chunk-YU26SDNT.js +46 -0
- package/dist/chunk-YU26SDNT.js.map +1 -0
- package/dist/chunk-YULENNA7.js +501 -0
- package/dist/chunk-YULENNA7.js.map +1 -0
- package/dist/chunk-Z3ENMCFE.js +94 -0
- package/dist/chunk-Z3ENMCFE.js.map +1 -0
- package/dist/chunk-ZH7ZM3ZM.js +125 -0
- package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
- package/dist/chunk-ZIXHS6AM.js +42 -0
- package/dist/chunk-ZIXHS6AM.js.map +1 -0
- package/dist/chunk-ZLLJKSNS.js +96 -0
- package/dist/chunk-ZLLJKSNS.js.map +1 -0
- package/dist/claim-LF6VQ7OR.js +197 -0
- package/dist/claim-LF6VQ7OR.js.map +1 -0
- package/dist/cli.js +104 -70041
- package/dist/cli.js.map +1 -1
- package/dist/client-26SAJ46D.js +19 -0
- package/dist/code-MOWYJMDH.js +76 -0
- package/dist/code-MOWYJMDH.js.map +1 -0
- package/dist/companies-6HSK5BLK.js +195 -0
- package/dist/companies-6HSK5BLK.js.map +1 -0
- package/dist/complete-2PUAFQEC.js +81 -0
- package/dist/complete-2PUAFQEC.js.map +1 -0
- package/dist/config-X6GKOVQ6.js +88 -0
- package/dist/config-X6GKOVQ6.js.map +1 -0
- package/dist/connect-RXPMAJQI.js +42 -0
- package/dist/content-UYZC4AKN.js +85 -0
- package/dist/content-UYZC4AKN.js.map +1 -0
- package/dist/conversation-Y3NB2VDI.js +93 -0
- package/dist/conversation-Y3NB2VDI.js.map +1 -0
- package/dist/conversion-report-R4GJWWTK.js +125 -0
- package/dist/conversion-report-R4GJWWTK.js.map +1 -0
- package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
- package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
- package/dist/conversion-writes-WHFFUWWL.js +120 -0
- package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
- package/dist/conversions-K7C32DPW.js +135 -0
- package/dist/conversions-K7C32DPW.js.map +1 -0
- package/dist/conversions-OXJAX5GB.js +76 -0
- package/dist/conversions-OXJAX5GB.js.map +1 -0
- package/dist/countries-PBXNB3BR.js +82 -0
- package/dist/countries-PBXNB3BR.js.map +1 -0
- package/dist/create-AJ4KPSJ4.js +59 -0
- package/dist/create-AJ4KPSJ4.js.map +1 -0
- package/dist/create-ALKOAD5J.js +138 -0
- package/dist/create-ALKOAD5J.js.map +1 -0
- package/dist/create-HTKZMXKB.js +207 -0
- package/dist/create-HTKZMXKB.js.map +1 -0
- package/dist/create-TZMAOFBR.js +236 -0
- package/dist/create-TZMAOFBR.js.map +1 -0
- package/dist/creatives-MBTZTIAA.js +51 -0
- package/dist/creatives-MBTZTIAA.js.map +1 -0
- package/dist/creatives-OZHVU4WB.js +182 -0
- package/dist/creatives-OZHVU4WB.js.map +1 -0
- package/dist/creatives-VMGY5SU4.js +87 -0
- package/dist/creatives-VMGY5SU4.js.map +1 -0
- package/dist/credentials-FY4UH6TF.js +287 -0
- package/dist/credentials-FY4UH6TF.js.map +1 -0
- package/dist/critique-2UTP4DR3.js +216 -0
- package/dist/critique-2UTP4DR3.js.map +1 -0
- package/dist/critique-B3H7QFM2.js +1449 -0
- package/dist/critique-B3H7QFM2.js.map +1 -0
- package/dist/crm-2IBLUHDB.js +318 -0
- package/dist/crm-2IBLUHDB.js.map +1 -0
- package/dist/crm-YMYO4U53.js +224 -0
- package/dist/crm-YMYO4U53.js.map +1 -0
- package/dist/crop-U3AD4DDR.js +113 -0
- package/dist/crop-U3AD4DDR.js.map +1 -0
- package/dist/currency-S6KWZSZ6.js +88 -0
- package/dist/currency-S6KWZSZ6.js.map +1 -0
- package/dist/custom-conversions-FABS6YVT.js +125 -0
- package/dist/custom-conversions-FABS6YVT.js.map +1 -0
- package/dist/customers-P6LLLJHK.js +56 -0
- package/dist/decide-YTHCBKM6.js +199 -0
- package/dist/decide-YTHCBKM6.js.map +1 -0
- package/dist/delete-B2TDEW7H.js +63 -0
- package/dist/delete-B2TDEW7H.js.map +1 -0
- package/dist/delete-DZUDLYPC.js +69 -0
- package/dist/delete-DZUDLYPC.js.map +1 -0
- package/dist/delete-NZGZP4YP.js +71 -0
- package/dist/delete-NZGZP4YP.js.map +1 -0
- package/dist/delete-SDOZNDWQ.js +54 -0
- package/dist/delete-SDOZNDWQ.js.map +1 -0
- package/dist/delete-VQMU56OH.js +71 -0
- package/dist/delete-VQMU56OH.js.map +1 -0
- package/dist/delete-WKQPMVAM.js +66 -0
- package/dist/delete-WKQPMVAM.js.map +1 -0
- package/dist/demographics-Q3DCXULY.js +138 -0
- package/dist/demographics-Q3DCXULY.js.map +1 -0
- package/dist/describe-JNTCQZNL.js +97 -0
- package/dist/describe-JNTCQZNL.js.map +1 -0
- package/dist/describe-MT4334NG.js +97 -0
- package/dist/describe-MT4334NG.js.map +1 -0
- package/dist/dimensions-FEZUJRAG.js +101 -0
- package/dist/dimensions-FEZUJRAG.js.map +1 -0
- package/dist/discard-NEZM5CHF.js +66 -0
- package/dist/discard-NEZM5CHF.js.map +1 -0
- package/dist/discover-4GD7QSF5.js +93 -0
- package/dist/discover-4GD7QSF5.js.map +1 -0
- package/dist/discover-6K3IOYXR.js +172 -0
- package/dist/discover-6K3IOYXR.js.map +1 -0
- package/dist/domain-7Y256IDR.js +98 -0
- package/dist/domain-7Y256IDR.js.map +1 -0
- package/dist/download-L27HWEOE.js +299 -0
- package/dist/download-L27HWEOE.js.map +1 -0
- package/dist/draft-25G2P2TE.js +281 -0
- package/dist/draft-25G2P2TE.js.map +1 -0
- package/dist/draft-F6TUGXAY.js +307 -0
- package/dist/draft-F6TUGXAY.js.map +1 -0
- package/dist/draft-KLULNBWP.js +233 -0
- package/dist/draft-KLULNBWP.js.map +1 -0
- package/dist/draft-LY5ZPF73.js +217 -0
- package/dist/draft-LY5ZPF73.js.map +1 -0
- package/dist/draft-M4ZHDQ46.js +306 -0
- package/dist/draft-M4ZHDQ46.js.map +1 -0
- package/dist/draft-MI7RWY2K.js +100 -0
- package/dist/draft-MI7RWY2K.js.map +1 -0
- package/dist/draft-P4IVYTY3.js +103 -0
- package/dist/draft-P4IVYTY3.js.map +1 -0
- package/dist/draft-QQMCVDDS.js +328 -0
- package/dist/draft-QQMCVDDS.js.map +1 -0
- package/dist/engine/index.d.ts +213 -127
- package/dist/engine/index.js +18 -4
- package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
- package/dist/env-FBTHZKGN.js.map +1 -0
- package/dist/experiment-HDYTJPUY.js +1397 -0
- package/dist/experiment-HDYTJPUY.js.map +1 -0
- package/dist/export-TS5GYEMA.js +168 -0
- package/dist/export-TS5GYEMA.js.map +1 -0
- package/dist/extract-QVQFUOIK.js +113 -0
- package/dist/extract-QVQFUOIK.js.map +1 -0
- package/dist/facets-7MBSM7BP.js +114 -0
- package/dist/facets-7MBSM7BP.js.map +1 -0
- package/dist/favorites-7QP7BY5K.js +178 -0
- package/dist/favorites-7QP7BY5K.js.map +1 -0
- package/dist/feed-EETRO2FG.js +177 -0
- package/dist/feed-EETRO2FG.js.map +1 -0
- package/dist/feedback-PLMFRAQW.js +66 -0
- package/dist/feedback-PLMFRAQW.js.map +1 -0
- package/dist/feedback-record-QEHHGVYC.js +177 -0
- package/dist/feedback-record-QEHHGVYC.js.map +1 -0
- package/dist/fetch-QE3EB756.js +176 -0
- package/dist/fetch-QE3EB756.js.map +1 -0
- package/dist/fetch-Z7O3ZL4D.js +139 -0
- package/dist/fetch-Z7O3ZL4D.js.map +1 -0
- package/dist/find-KAQ6JDMO.js +134 -0
- package/dist/find-KAQ6JDMO.js.map +1 -0
- package/dist/fit-MY5GVZZZ.js +45 -0
- package/dist/fit-MY5GVZZZ.js.map +1 -0
- package/dist/flows-C67KEMDU.js +247 -0
- package/dist/flows-C67KEMDU.js.map +1 -0
- package/dist/follow-IX4XVK5Y.js +94 -0
- package/dist/follow-IX4XVK5Y.js.map +1 -0
- package/dist/follow-competitors-UZBUOYTH.js +112 -0
- package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
- package/dist/following-VGOIUCIZ.js +113 -0
- package/dist/following-VGOIUCIZ.js.map +1 -0
- package/dist/fonts-UR7XZ5XZ.js +34 -0
- package/dist/fonts-UR7XZ5XZ.js.map +1 -0
- package/dist/forecast-3F4SZNAK.js +104 -0
- package/dist/forecast-3F4SZNAK.js.map +1 -0
- package/dist/forecast-K5E7CTKX.js +168 -0
- package/dist/forecast-K5E7CTKX.js.map +1 -0
- package/dist/funding-H5YO37OW.js +85 -0
- package/dist/funding-H5YO37OW.js.map +1 -0
- package/dist/funnel-2PPEPAMY.js +394 -0
- package/dist/funnel-2PPEPAMY.js.map +1 -0
- package/dist/ga4-YHJ2XMLC.js +55 -0
- package/dist/ga4-YHJ2XMLC.js.map +1 -0
- package/dist/generate-M2ZX5DMI.js +262 -0
- package/dist/generate-M2ZX5DMI.js.map +1 -0
- package/dist/get-4EYKCZ6F.js +59 -0
- package/dist/get-4EYKCZ6F.js.map +1 -0
- package/dist/get-637GALM2.js +63 -0
- package/dist/get-637GALM2.js.map +1 -0
- package/dist/get-AZARFR6O.js +61 -0
- package/dist/get-AZARFR6O.js.map +1 -0
- package/dist/get-BPMEHRUG.js +56 -0
- package/dist/get-BPMEHRUG.js.map +1 -0
- package/dist/get-MQ6MMIZ7.js +78 -0
- package/dist/get-MQ6MMIZ7.js.map +1 -0
- package/dist/get-N4BPOQCB.js +63 -0
- package/dist/get-N4BPOQCB.js.map +1 -0
- package/dist/get-RPZHLQ56.js +92 -0
- package/dist/get-RPZHLQ56.js.map +1 -0
- package/dist/gif-6PRTB2VR.js +94 -0
- package/dist/gif-6PRTB2VR.js.map +1 -0
- package/dist/google-52JRH7X3.js +136 -0
- package/dist/google-52JRH7X3.js.map +1 -0
- package/dist/google-X2AQR3RB.js +3190 -0
- package/dist/google-X2AQR3RB.js.map +1 -0
- package/dist/google-ads-PWX7OF5Z.js +195 -0
- package/dist/google-ads-PWX7OF5Z.js.map +1 -0
- package/dist/group-AAZ5QKC3.js +43 -0
- package/dist/group-AAZ5QKC3.js.map +1 -0
- package/dist/group-GSYCZORC.js +43 -0
- package/dist/group-GSYCZORC.js.map +1 -0
- package/dist/gsc-TS5T7ML2.js +30 -0
- package/dist/gsc-TS5T7ML2.js.map +1 -0
- package/dist/history-EW6LFFCX.js +67 -0
- package/dist/history-EW6LFFCX.js.map +1 -0
- package/dist/history-XI5ABCFO.js +133 -0
- package/dist/history-XI5ABCFO.js.map +1 -0
- package/dist/hubspot-AVUOILRE.js +779 -0
- package/dist/hubspot-AVUOILRE.js.map +1 -0
- package/dist/icon-K75KI6BV.js +137 -0
- package/dist/icon-K75KI6BV.js.map +1 -0
- package/dist/ideas-L3SZSIZP.js +35 -0
- package/dist/ideas-L3SZSIZP.js.map +1 -0
- package/dist/images-CD53I2W5.js +90 -0
- package/dist/images-CD53I2W5.js.map +1 -0
- package/dist/improve-L3BW4EQG.js +86 -0
- package/dist/improve-L3BW4EQG.js.map +1 -0
- package/dist/ingest-KRJOYTCQ.js +107 -0
- package/dist/ingest-KRJOYTCQ.js.map +1 -0
- package/dist/ingest-WE3SPPND.js +23 -0
- package/dist/ingest-WE3SPPND.js.map +1 -0
- package/dist/insights-PELVD4RY.js +122 -0
- package/dist/insights-PELVD4RY.js.map +1 -0
- package/dist/insights-XCA4BUJW.js +423 -0
- package/dist/insights-XCA4BUJW.js.map +1 -0
- package/dist/inspect-QKETG5UJ.js +189 -0
- package/dist/inspect-QKETG5UJ.js.map +1 -0
- package/dist/inspiration-Y2J2PUPC.js +53 -0
- package/dist/inspiration-Y2J2PUPC.js.map +1 -0
- package/dist/intent-YJOJGNVJ.js +95 -0
- package/dist/intent-YJOJGNVJ.js.map +1 -0
- package/dist/job-E2U4FS5P.js +202 -0
- package/dist/job-E2U4FS5P.js.map +1 -0
- package/dist/job-create-DFYCHVQ7.js +109 -0
- package/dist/job-create-DFYCHVQ7.js.map +1 -0
- package/dist/job-status-FFPMTSHB.js +74 -0
- package/dist/job-status-FFPMTSHB.js.map +1 -0
- package/dist/keep-GYZS2UTL.js +78 -0
- package/dist/keep-GYZS2UTL.js.map +1 -0
- package/dist/keyword-gap-QU7O7UKC.js +130 -0
- package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
- package/dist/keyword-metrics-HLCM3QU7.js +197 -0
- package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
- package/dist/keywords-for-site-BDKPQKWB.js +128 -0
- package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
- package/dist/landing-4K6XYNFM.js +28 -0
- package/dist/landing-4K6XYNFM.js.map +1 -0
- package/dist/landings-F7LOAEJE.js +151 -0
- package/dist/landings-F7LOAEJE.js.map +1 -0
- package/dist/languages-P3ZM6R2A.js +40 -0
- package/dist/languages-P3ZM6R2A.js.map +1 -0
- package/dist/languages-XEJKTIFP.js +55 -0
- package/dist/languages-XEJKTIFP.js.map +1 -0
- package/dist/launches-TCFAYUA5.js +19 -0
- package/dist/launches-TCFAYUA5.js.map +1 -0
- package/dist/layerize-ZSKFIPZA.js +190 -0
- package/dist/layerize-ZSKFIPZA.js.map +1 -0
- package/dist/leads-GDF4S2AM.js +90 -0
- package/dist/leads-GDF4S2AM.js.map +1 -0
- package/dist/leads-TPB5OFSQ.js +293 -0
- package/dist/leads-TPB5OFSQ.js.map +1 -0
- package/dist/learn-NMFEA5H5.js +203 -0
- package/dist/learn-NMFEA5H5.js.map +1 -0
- package/dist/library-IP2UKNRU.js +109 -0
- package/dist/library-IP2UKNRU.js.map +1 -0
- package/dist/lighthouse-57XBJRCO.js +75 -0
- package/dist/lighthouse-57XBJRCO.js.map +1 -0
- package/dist/line-item-writes-O6SSS5NQ.js +208 -0
- package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
- package/dist/line-items-ZZAKH3YZ.js +103 -0
- package/dist/line-items-ZZAKH3YZ.js.map +1 -0
- package/dist/link-CRY57R3E.js +64 -0
- package/dist/link-CRY57R3E.js.map +1 -0
- package/dist/linkedin-WC7LGYPP.js +1008 -0
- package/dist/linkedin-WC7LGYPP.js.map +1 -0
- package/dist/list-6IKPWQGG.js +57 -0
- package/dist/list-6IKPWQGG.js.map +1 -0
- package/dist/list-CAUH3BMG.js +65 -0
- package/dist/list-CAUH3BMG.js.map +1 -0
- package/dist/list-CWAKX5TH.js +63 -0
- package/dist/list-CWAKX5TH.js.map +1 -0
- package/dist/list-FJ5FSVL6.js +151 -0
- package/dist/list-FJ5FSVL6.js.map +1 -0
- package/dist/list-GTOSN7DP.js +50 -0
- package/dist/list-GTOSN7DP.js.map +1 -0
- package/dist/list-HLJP4NVE.js +51 -0
- package/dist/list-HLJP4NVE.js.map +1 -0
- package/dist/list-LCUPF7EF.js +76 -0
- package/dist/list-LCUPF7EF.js.map +1 -0
- package/dist/list-NH4ZRZTL.js +303 -0
- package/dist/list-NH4ZRZTL.js.map +1 -0
- package/dist/locations-2BYWKIYA.js +67 -0
- package/dist/locations-2BYWKIYA.js.map +1 -0
- package/dist/locations-LVVDOSXO.js +40 -0
- package/dist/locations-LVVDOSXO.js.map +1 -0
- package/dist/log-6JOWOY5G.js +92 -0
- package/dist/log-6JOWOY5G.js.map +1 -0
- package/dist/logo-AJK2TDQU.js +18 -0
- package/dist/logo-AJK2TDQU.js.map +1 -0
- package/dist/lookup-H5GEM77H.js +22 -0
- package/dist/lookup-H5GEM77H.js.map +1 -0
- package/dist/make-N3WZ6OSS.js +640 -0
- package/dist/make-N3WZ6OSS.js.map +1 -0
- package/dist/map-4KOYFHAN.js +404 -0
- package/dist/map-4KOYFHAN.js.map +1 -0
- package/dist/mcp-LSS2DHYL.js +463 -0
- package/dist/mcp-LSS2DHYL.js.map +1 -0
- package/dist/media-JBCN6V4X.js +15 -0
- package/dist/media-JBCN6V4X.js.map +1 -0
- package/dist/media-RAGEJTZX.js +89 -0
- package/dist/media-RAGEJTZX.js.map +1 -0
- package/dist/media-sources-GSPAV7HT.js +32 -0
- package/dist/media-sources-GSPAV7HT.js.map +1 -0
- package/dist/members-GUUVEK2Y.js +44 -0
- package/dist/members-GUUVEK2Y.js.map +1 -0
- package/dist/meta-Z37ZR3PJ.js +69 -0
- package/dist/meta-Z37ZR3PJ.js.map +1 -0
- package/dist/metrics-KW6SDULI.js +152 -0
- package/dist/metrics-KW6SDULI.js.map +1 -0
- package/dist/models-5J4WFUD3.js +155 -0
- package/dist/models-5J4WFUD3.js.map +1 -0
- package/dist/normalize-DSFVTRXN.js +806 -0
- package/dist/normalize-DSFVTRXN.js.map +1 -0
- package/dist/normalize-EUDI5HEM.js +141 -0
- package/dist/normalize-EUDI5HEM.js.map +1 -0
- package/dist/options-P4PPJQH4.js +121 -0
- package/dist/options-P4PPJQH4.js.map +1 -0
- package/dist/output-DTCLVPUF.js +24 -0
- package/dist/output-DTCLVPUF.js.map +1 -0
- package/dist/page-N2ZO3O7F.js +105 -0
- package/dist/page-N2ZO3O7F.js.map +1 -0
- package/dist/pages-FQ4CBAJ2.js +66 -0
- package/dist/pages-FQ4CBAJ2.js.map +1 -0
- package/dist/performance-A66LYIZX.js +24 -0
- package/dist/performance-A66LYIZX.js.map +1 -0
- package/dist/pinterest-NV5XTNJE.js +96 -0
- package/dist/pinterest-NV5XTNJE.js.map +1 -0
- package/dist/pixels-CTJ43FZ4.js +108 -0
- package/dist/pixels-CTJ43FZ4.js.map +1 -0
- package/dist/pixels-HKINGZCH.js +60 -0
- package/dist/pixels-HKINGZCH.js.map +1 -0
- package/dist/plan-ZYTWLGWK.js +207 -0
- package/dist/plan-ZYTWLGWK.js.map +1 -0
- package/dist/preview-5ROBOQG7.js +169 -0
- package/dist/preview-5ROBOQG7.js.map +1 -0
- package/dist/profile-Q3PHR6FU.js +159 -0
- package/dist/profile-Q3PHR6FU.js.map +1 -0
- package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
- package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
- package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
- package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
- package/dist/properties-WLL6M2P6.js +101 -0
- package/dist/properties-WLL6M2P6.js.map +1 -0
- package/dist/publish-KHNR5ARF.js +322 -0
- package/dist/publish-KHNR5ARF.js.map +1 -0
- package/dist/query-A34J7BGX.js +61 -0
- package/dist/query-A34J7BGX.js.map +1 -0
- package/dist/query-IYZN5KHO.js +236 -0
- package/dist/query-IYZN5KHO.js.map +1 -0
- package/dist/query-UN2P6DBA.js +247 -0
- package/dist/query-UN2P6DBA.js.map +1 -0
- package/dist/questionnaire-Z2ZIKNBV.js +93 -0
- package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
- package/dist/read-GM7PQYJA.js +141 -0
- package/dist/read-GM7PQYJA.js.map +1 -0
- package/dist/reddit-5NPFULGD.js +26 -0
- package/dist/reddit-5NPFULGD.js.map +1 -0
- package/dist/refresh-FGXW4Y4X.js +94 -0
- package/dist/refresh-FGXW4Y4X.js.map +1 -0
- package/dist/release-OKZMC73N.js +60 -0
- package/dist/release-OKZMC73N.js.map +1 -0
- package/dist/relevant-pages-J76ZKNKF.js +99 -0
- package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
- package/dist/remove-CA2J6ACH.js +50 -0
- package/dist/remove-CA2J6ACH.js.map +1 -0
- package/dist/remove-GOYW2G4R.js +48 -0
- package/dist/remove-GOYW2G4R.js.map +1 -0
- package/dist/reopen-XPKSOE6O.js +63 -0
- package/dist/reopen-XPKSOE6O.js.map +1 -0
- package/dist/rerun-QA6ISKVO.js +86 -0
- package/dist/rerun-QA6ISKVO.js.map +1 -0
- package/dist/research-FZ63UZTE.js +62 -0
- package/dist/research-FZ63UZTE.js.map +1 -0
- package/dist/research-YGQQ6CNG.js +262 -0
- package/dist/research-YGQQ6CNG.js.map +1 -0
- package/dist/reset-BGPZ4HMA.js +54 -0
- package/dist/reset-BGPZ4HMA.js.map +1 -0
- package/dist/reset-HTD6LCIT.js +54 -0
- package/dist/reset-HTD6LCIT.js.map +1 -0
- package/dist/resolve-NRDZ6N2B.js +121 -0
- package/dist/resolve-NRDZ6N2B.js.map +1 -0
- package/dist/retry-PF4BGKJV.js +60 -0
- package/dist/retry-PF4BGKJV.js.map +1 -0
- package/dist/retry-XL26JDAV.js +62 -0
- package/dist/retry-XL26JDAV.js.map +1 -0
- package/dist/retry-failed-BEFWRV4Z.js +45 -0
- package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
- package/dist/run-3ZDGCCTH.js +61 -0
- package/dist/run-3ZDGCCTH.js.map +1 -0
- package/dist/run-EMJLI7LR.js +65 -0
- package/dist/run-EMJLI7LR.js.map +1 -0
- package/dist/scaffold-ad-QW75LLYR.js +1550 -0
- package/dist/scaffold-ad-QW75LLYR.js.map +1 -0
- package/dist/scaffold-static-ad-S3UOKLJ3.js +973 -0
- package/dist/scaffold-static-ad-S3UOKLJ3.js.map +1 -0
- package/dist/scaffold-video-3BJQOUAA.js +874 -0
- package/dist/scaffold-video-3BJQOUAA.js.map +1 -0
- package/dist/schedule-KQ7UIR3N.js +66 -0
- package/dist/schedule-KQ7UIR3N.js.map +1 -0
- package/dist/schedule-PKPNSISL.js +61 -0
- package/dist/schedule-PKPNSISL.js.map +1 -0
- package/dist/scheduled-agents-LP5LITA3.js +49 -0
- package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
- package/dist/schema-B6J6VPTO.js +132 -0
- package/dist/schema-B6J6VPTO.js.map +1 -0
- package/dist/schema-QXTDLZVC.js +63 -0
- package/dist/schema-QXTDLZVC.js.map +1 -0
- package/dist/scrape-7YKJWFZE.js +2241 -0
- package/dist/scrape-7YKJWFZE.js.map +1 -0
- package/dist/screenshot-ZHBSG3SI.js +102 -0
- package/dist/screenshot-ZHBSG3SI.js.map +1 -0
- package/dist/search-332KFYZ6.js +224 -0
- package/dist/search-332KFYZ6.js.map +1 -0
- package/dist/search-4PBMXXUY.js +91 -0
- package/dist/search-4PBMXXUY.js.map +1 -0
- package/dist/search-6WNUKCMP.js +174 -0
- package/dist/search-6WNUKCMP.js.map +1 -0
- package/dist/search-AVNUU6TJ.js +26 -0
- package/dist/search-AVNUU6TJ.js.map +1 -0
- package/dist/search-F5INRFFK.js +92 -0
- package/dist/search-F5INRFFK.js.map +1 -0
- package/dist/search-copy-DZVBYG2B.js +168 -0
- package/dist/search-copy-DZVBYG2B.js.map +1 -0
- package/dist/seeds-5JTQN5WI.js +101 -0
- package/dist/seeds-5JTQN5WI.js.map +1 -0
- package/dist/select-2V6CHATD.js +96 -0
- package/dist/select-2V6CHATD.js.map +1 -0
- package/dist/sends-3L6QBS46.js +309 -0
- package/dist/sends-3L6QBS46.js.map +1 -0
- package/dist/sequences-YKFV7BDH.js +146 -0
- package/dist/sequences-YKFV7BDH.js.map +1 -0
- package/dist/set-prompt-XGZXW63I.js +188 -0
- package/dist/set-prompt-XGZXW63I.js.map +1 -0
- package/dist/setup-links-6H5ONDCQ.js +141 -0
- package/dist/setup-links-6H5ONDCQ.js.map +1 -0
- package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
- package/dist/shared-QAMP7FZV.js.map +1 -0
- package/dist/shopify-D3GNV5O6.js +3715 -0
- package/dist/shopify-D3GNV5O6.js.map +1 -0
- package/dist/site-TBPERLY3.js +177 -0
- package/dist/site-TBPERLY3.js.map +1 -0
- package/dist/sitemaps-XPGLW24S.js +87 -0
- package/dist/sitemaps-XPGLW24S.js.map +1 -0
- package/dist/sites-WMBY2HJV.js +101 -0
- package/dist/sites-WMBY2HJV.js.map +1 -0
- package/dist/skills-3HEILQCU.js +47 -0
- package/dist/skills-3HEILQCU.js.map +1 -0
- package/dist/sources-JFQKTK2L.js +421 -0
- package/dist/sources-JFQKTK2L.js.map +1 -0
- package/dist/sources-Q3I6DDV7.js +30 -0
- package/dist/sources-Q3I6DDV7.js.map +1 -0
- package/dist/stale-4SERZW2D.js +66 -0
- package/dist/stale-4SERZW2D.js.map +1 -0
- package/dist/stats-GNILHSKK.js +34 -0
- package/dist/stats-GNILHSKK.js.map +1 -0
- package/dist/status-LIZWJYS4.js +62 -0
- package/dist/status-LIZWJYS4.js.map +1 -0
- package/dist/sticker-KCV3VZHY.js +94 -0
- package/dist/sticker-KCV3VZHY.js.map +1 -0
- package/dist/stock-VTORKR4C.js +179 -0
- package/dist/stock-VTORKR4C.js.map +1 -0
- package/dist/studio-QCRA6BY5.js +49 -0
- package/dist/studio-QCRA6BY5.js.map +1 -0
- package/dist/sync-455DB46Y.js +54 -0
- package/dist/sync-455DB46Y.js.map +1 -0
- package/dist/sync-A4KKQ3B6.js +265 -0
- package/dist/sync-A4KKQ3B6.js.map +1 -0
- package/dist/sync-ULKWDFXM.js +54 -0
- package/dist/sync-ULKWDFXM.js.map +1 -0
- package/dist/sync-definition-YTBLMLX2.js +55 -0
- package/dist/sync-definition-YTBLMLX2.js.map +1 -0
- package/dist/tag-manager-E7QTXBWQ.js +43 -0
- package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
- package/dist/tags-4Q4I5GQJ.js +20 -0
- package/dist/tags-4Q4I5GQJ.js.map +1 -0
- package/dist/tags-AMEVAQZ4.js +26 -0
- package/dist/tags-AMEVAQZ4.js.map +1 -0
- package/dist/tags-DPLOLH3E.js +20 -0
- package/dist/tags-DPLOLH3E.js.map +1 -0
- package/dist/tags-LDHXONR3.js +224 -0
- package/dist/tags-LDHXONR3.js.map +1 -0
- package/dist/tags-UW3WJTAQ.js +20 -0
- package/dist/tags-UW3WJTAQ.js.map +1 -0
- package/dist/targeting-constants-D64YO3E7.js +118 -0
- package/dist/targeting-constants-D64YO3E7.js.map +1 -0
- package/dist/targeting-criteria-BP6VJA7X.js +113 -0
- package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
- package/dist/targets-CQWO2UXD.js +102 -0
- package/dist/targets-CQWO2UXD.js.map +1 -0
- package/dist/templates-WZSTNRNZ.js +178 -0
- package/dist/templates-WZSTNRNZ.js.map +1 -0
- package/dist/testimonials-ETHSNWUH.js +32 -0
- package/dist/testimonials-ETHSNWUH.js.map +1 -0
- package/dist/themes-YU663LQH.js +94 -0
- package/dist/themes-YU663LQH.js.map +1 -0
- package/dist/top-companies-KTXHS472.js +108 -0
- package/dist/top-companies-KTXHS472.js.map +1 -0
- package/dist/translate-6QAJ5ZUU.js +600 -0
- package/dist/translate-6QAJ5ZUU.js.map +1 -0
- package/dist/triggers-4EDFLNGH.js +141 -0
- package/dist/triggers-4EDFLNGH.js.map +1 -0
- package/dist/tweets-ZUKQAAUQ.js +123 -0
- package/dist/tweets-ZUKQAAUQ.js.map +1 -0
- package/dist/unfollow-A4JVCJBF.js +46 -0
- package/dist/unfollow-A4JVCJBF.js.map +1 -0
- package/dist/unlink-KY2OEKMD.js +67 -0
- package/dist/unlink-KY2OEKMD.js.map +1 -0
- package/dist/unstage-FHUG67RI.js +84 -0
- package/dist/unstage-FHUG67RI.js.map +1 -0
- package/dist/unstage-ZRLLCSQF.js +95 -0
- package/dist/unstage-ZRLLCSQF.js.map +1 -0
- package/dist/update-27LGM65V.js +63 -0
- package/dist/update-27LGM65V.js.map +1 -0
- package/dist/update-AIY46I2Q.js +155 -0
- package/dist/update-AIY46I2Q.js.map +1 -0
- package/dist/update-QYD2XZFM.js +142 -0
- package/dist/update-QYD2XZFM.js.map +1 -0
- package/dist/update-W2OSRNFO.js +98 -0
- package/dist/update-W2OSRNFO.js.map +1 -0
- package/dist/upload-JGBTSKGH.js +126 -0
- package/dist/upload-JGBTSKGH.js.map +1 -0
- package/dist/upload-XEHWYMJG.js +150 -0
- package/dist/upload-XEHWYMJG.js.map +1 -0
- package/dist/upscale-I5P2OHTN.js +109 -0
- package/dist/upscale-I5P2OHTN.js.map +1 -0
- package/dist/url-options-QHGA42RP.js +130 -0
- package/dist/url-options-QHGA42RP.js.map +1 -0
- package/dist/url-params-NWSUHWRE.js +98 -0
- package/dist/url-params-NWSUHWRE.js.map +1 -0
- package/dist/use-U4HG2NF3.js +95 -0
- package/dist/use-U4HG2NF3.js.map +1 -0
- package/dist/validate-DOQ6AI62.js +91 -0
- package/dist/validate-DOQ6AI62.js.map +1 -0
- package/dist/variant-FOVE6URJ.js +338 -0
- package/dist/variant-FOVE6URJ.js.map +1 -0
- package/dist/videos-DP3VCSYG.js +39 -0
- package/dist/videos-DP3VCSYG.js.map +1 -0
- package/dist/view-HRI3FHCH.js +121 -0
- package/dist/view-HRI3FHCH.js.map +1 -0
- package/dist/viewer-check-JYUE24M6.js +68 -0
- package/dist/viewer-check-JYUE24M6.js.map +1 -0
- package/dist/web-AFUIWPFU.js +140 -0
- package/dist/web-AFUIWPFU.js.map +1 -0
- package/dist/winners-SMMDN6LW.js +113 -0
- package/dist/winners-SMMDN6LW.js.map +1 -0
- package/dist/winning-ads-PCIJUYVA.js +84 -0
- package/dist/winning-ads-PCIJUYVA.js.map +1 -0
- package/dist/write-commands-7Z34WG2J.js +206 -0
- package/dist/write-commands-7Z34WG2J.js.map +1 -0
- package/dist/write-commands-BLT2SEC4.js +713 -0
- package/dist/write-commands-BLT2SEC4.js.map +1 -0
- package/dist/write-commands-N4FSGRVQ.js +743 -0
- package/dist/write-commands-N4FSGRVQ.js.map +1 -0
- package/dist/write-commands-Q4MQ3BGM.js +1015 -0
- package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
- package/dist/x-AUOZJNWE.js +47 -0
- package/dist/x-AUOZJNWE.js.map +1 -0
- package/package.json +9 -2
- package/dist/chunk-FGHMWBUD.js +0 -9989
- package/dist/chunk-FGHMWBUD.js.map +0 -1
- package/dist/chunk-HJEMOSPH.js +0 -1292
- package/dist/chunk-HJEMOSPH.js.map +0 -1
- package/dist/chunk-MF7YA62W.js.map +0 -1
- package/dist/chunk-VZEDAFAR.js.map +0 -1
- package/dist/chunk-XHC4LMK4.js.map +0 -1
- package/dist/client-GR6YL3YX.js +0 -17
- package/dist/output-NMQXZF3Z.js +0 -18
- /package/dist/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
- /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
- /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
- /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
- /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
|
@@ -0,0 +1,806 @@
|
|
|
1
|
+
import {
|
|
2
|
+
atomicWrite,
|
|
3
|
+
expandInputs,
|
|
4
|
+
isDirectory,
|
|
5
|
+
isRemoteUrl,
|
|
6
|
+
readImageBuffer,
|
|
7
|
+
resolveOutputPath
|
|
8
|
+
} from "./chunk-EDNX3AOS.js";
|
|
9
|
+
import "./chunk-CZENWCBS.js";
|
|
10
|
+
import "./chunk-O6QKCJE4.js";
|
|
11
|
+
import {
|
|
12
|
+
registerSchema,
|
|
13
|
+
writeJson
|
|
14
|
+
} from "./chunk-WOTDHRNF.js";
|
|
15
|
+
import "./chunk-YQSBHWOI.js";
|
|
16
|
+
|
|
17
|
+
// src/commands/images/normalize.ts
|
|
18
|
+
import { defineCommand } from "citty";
|
|
19
|
+
|
|
20
|
+
// src/lib/image/color-changer.ts
|
|
21
|
+
import quantize from "quantize";
|
|
22
|
+
var COLOR_RANGE_THRESHOLD = 15;
|
|
23
|
+
var HEX_RE = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;
|
|
24
|
+
function parseHex(hex) {
|
|
25
|
+
const match = HEX_RE.exec(hex.trim());
|
|
26
|
+
if (!match) {
|
|
27
|
+
throw new Error(`Invalid hex color: "${hex}". Expected #RGB or #RRGGBB.`);
|
|
28
|
+
}
|
|
29
|
+
let body = match[1];
|
|
30
|
+
if (body.length === 3) {
|
|
31
|
+
body = body.split("").map((c) => c + c).join("");
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
r: Number.parseInt(body.slice(0, 2), 16),
|
|
35
|
+
g: Number.parseInt(body.slice(2, 4), 16),
|
|
36
|
+
b: Number.parseInt(body.slice(4, 6), 16)
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function colorDistance(color1, color2) {
|
|
40
|
+
const rDiff = color1.r - color2.r;
|
|
41
|
+
const gDiff = color1.g - color2.g;
|
|
42
|
+
const bDiff = color1.b - color2.b;
|
|
43
|
+
return Math.sqrt(rDiff * rDiff + gDiff * gDiff + bDiff * bDiff);
|
|
44
|
+
}
|
|
45
|
+
function getDominantEdgeColor(data, width, height) {
|
|
46
|
+
const colorCount = {};
|
|
47
|
+
function accumulateColor(i, j) {
|
|
48
|
+
const idx = (i * width + j) * 4;
|
|
49
|
+
const colorKey = `${data[idx]},${data[idx + 1]},${data[idx + 2]}`;
|
|
50
|
+
colorCount[colorKey] = (colorCount[colorKey] ?? 0) + 1;
|
|
51
|
+
}
|
|
52
|
+
for (let j = 0; j < width; j++) {
|
|
53
|
+
accumulateColor(0, j);
|
|
54
|
+
accumulateColor(height - 1, j);
|
|
55
|
+
}
|
|
56
|
+
for (let i = 1; i < height - 1; i++) {
|
|
57
|
+
accumulateColor(i, 0);
|
|
58
|
+
accumulateColor(i, width - 1);
|
|
59
|
+
}
|
|
60
|
+
let maxCount = 0;
|
|
61
|
+
let dominantColor = { r: 0, g: 0, b: 0 };
|
|
62
|
+
for (const key in colorCount) {
|
|
63
|
+
const count = colorCount[key];
|
|
64
|
+
if (count > maxCount) {
|
|
65
|
+
maxCount = count;
|
|
66
|
+
const parts = key.split(",").map(Number);
|
|
67
|
+
dominantColor = { r: parts[0], g: parts[1], b: parts[2] };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return dominantColor;
|
|
71
|
+
}
|
|
72
|
+
function hasTransparency(data, threshold = 0.02) {
|
|
73
|
+
let transparentPixels = 0;
|
|
74
|
+
let totalPixels = 0;
|
|
75
|
+
for (let i = 3; i < data.length; i += 4) {
|
|
76
|
+
totalPixels++;
|
|
77
|
+
if (data[i] < 255) {
|
|
78
|
+
transparentPixels++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (totalPixels === 0) return false;
|
|
82
|
+
return transparentPixels / totalPixels > threshold;
|
|
83
|
+
}
|
|
84
|
+
function hasGradientColors(data) {
|
|
85
|
+
const uniqueColors = /* @__PURE__ */ new Set();
|
|
86
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
87
|
+
if (data[i + 3] < 10) continue;
|
|
88
|
+
uniqueColors.add(`${data[i]},${data[i + 1]},${data[i + 2]}`);
|
|
89
|
+
}
|
|
90
|
+
return uniqueColors.size > 50;
|
|
91
|
+
}
|
|
92
|
+
function removeIsolatedPixels(data, width, height) {
|
|
93
|
+
const result = Buffer.from(data);
|
|
94
|
+
const offsets = [
|
|
95
|
+
[-1, -1],
|
|
96
|
+
[0, -1],
|
|
97
|
+
[1, -1],
|
|
98
|
+
[-1, 0],
|
|
99
|
+
[1, 0],
|
|
100
|
+
[-1, 1],
|
|
101
|
+
[0, 1],
|
|
102
|
+
[1, 1]
|
|
103
|
+
];
|
|
104
|
+
for (let y = 1; y < height - 1; y++) {
|
|
105
|
+
for (let x = 1; x < width - 1; x++) {
|
|
106
|
+
const idx = (y * width + x) * 4;
|
|
107
|
+
if (result[idx + 3] < 10) continue;
|
|
108
|
+
let transparentNeighbors = 0;
|
|
109
|
+
for (const [dx, dy] of offsets) {
|
|
110
|
+
const neighborIdx = ((y + dy) * width + (x + dx)) * 4;
|
|
111
|
+
if (result[neighborIdx + 3] < 10) transparentNeighbors++;
|
|
112
|
+
}
|
|
113
|
+
if (transparentNeighbors >= 6) {
|
|
114
|
+
result[idx + 3] = 0;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
function removeInteriorBackground(data, dominantEdgeColor, threshold) {
|
|
121
|
+
const result = Buffer.from(data);
|
|
122
|
+
for (let i = 0; i < result.length; i += 4) {
|
|
123
|
+
if (result[i + 3] < 10) continue;
|
|
124
|
+
const pixelColor = { r: result[i], g: result[i + 1], b: result[i + 2] };
|
|
125
|
+
if (colorDistance(dominantEdgeColor, pixelColor) < threshold) {
|
|
126
|
+
result[i + 3] = 0;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
function removeBackground(data, width, height, colorRangeThreshold = COLOR_RANGE_THRESHOLD) {
|
|
132
|
+
if (hasTransparency(data)) {
|
|
133
|
+
return data;
|
|
134
|
+
}
|
|
135
|
+
const dominantEdgeColor = getDominantEdgeColor(data, width, height);
|
|
136
|
+
const isGradient = hasGradientColors(data);
|
|
137
|
+
const result = Buffer.from(data);
|
|
138
|
+
if (isGradient) {
|
|
139
|
+
for (let i = 0; i < result.length; i += 4) {
|
|
140
|
+
let alpha = result[i + 3];
|
|
141
|
+
if (alpha < 25.5) {
|
|
142
|
+
result[i + 3] = 0;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const pixelColor = { r: result[i], g: result[i + 1], b: result[i + 2] };
|
|
146
|
+
if (colorDistance(dominantEdgeColor, pixelColor) < 40) {
|
|
147
|
+
alpha = 0;
|
|
148
|
+
}
|
|
149
|
+
result[i + 3] = alpha;
|
|
150
|
+
}
|
|
151
|
+
const cleaned2 = removeInteriorBackground(result, dominantEdgeColor, 40);
|
|
152
|
+
return removeIsolatedPixels(cleaned2, width, height);
|
|
153
|
+
}
|
|
154
|
+
const colorRange = findColorRange(data, dominantEdgeColor);
|
|
155
|
+
for (let i = 0; i < result.length; i += 4) {
|
|
156
|
+
let alpha = result[i + 3];
|
|
157
|
+
if (alpha < 25.5) {
|
|
158
|
+
result[i + 3] = 0;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const pixelColor = { r: result[i], g: result[i + 1], b: result[i + 2] };
|
|
162
|
+
if (colorDistance(dominantEdgeColor, pixelColor) < 50) {
|
|
163
|
+
alpha = 0;
|
|
164
|
+
} else {
|
|
165
|
+
const colorRangeIndex = colorRange.findIndex((c) => colorDistance(c, pixelColor) < colorRangeThreshold);
|
|
166
|
+
if (colorRangeIndex === -1) {
|
|
167
|
+
alpha = 0;
|
|
168
|
+
} else {
|
|
169
|
+
alpha = Math.max(255 - 255 * colorRangeIndex * 0.35, 50);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
result[i + 3] = alpha;
|
|
173
|
+
}
|
|
174
|
+
const cleaned = removeInteriorBackground(result, dominantEdgeColor, 50);
|
|
175
|
+
return removeIsolatedPixels(cleaned, width, height);
|
|
176
|
+
}
|
|
177
|
+
function findClosestColor(color, palette) {
|
|
178
|
+
let minDist = Number.POSITIVE_INFINITY;
|
|
179
|
+
let closestColor = palette[0];
|
|
180
|
+
for (const palColor of palette) {
|
|
181
|
+
const dist = colorDistance(color, { r: palColor[0], g: palColor[1], b: palColor[2] });
|
|
182
|
+
if (dist < minDist) {
|
|
183
|
+
minDist = dist;
|
|
184
|
+
closestColor = palColor;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return closestColor;
|
|
188
|
+
}
|
|
189
|
+
function applyQuantization(data, numColors) {
|
|
190
|
+
const pixels = [];
|
|
191
|
+
let hasWhitePixels = false;
|
|
192
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
193
|
+
const r = data[i];
|
|
194
|
+
const g = data[i + 1];
|
|
195
|
+
const b = data[i + 2];
|
|
196
|
+
pixels.push([r, g, b]);
|
|
197
|
+
if (r > 240 && g > 240 && b > 240) hasWhitePixels = true;
|
|
198
|
+
}
|
|
199
|
+
const quantizer = quantize(pixels, numColors);
|
|
200
|
+
if (!quantizer) {
|
|
201
|
+
throw new Error("Failed to quantize image");
|
|
202
|
+
}
|
|
203
|
+
const palette = quantizer.palette();
|
|
204
|
+
if (hasWhitePixels) {
|
|
205
|
+
const hasWhiteInPalette = palette.some((c) => c[0] > 240 && c[1] > 240 && c[2] > 240);
|
|
206
|
+
if (!hasWhiteInPalette) {
|
|
207
|
+
let darkestIndex = 0;
|
|
208
|
+
let darkestLuminance = Number.POSITIVE_INFINITY;
|
|
209
|
+
palette.forEach((color, i) => {
|
|
210
|
+
const luminance = (0.299 * color[0] + 0.587 * color[1] + 0.114 * color[2]) / 255;
|
|
211
|
+
if (luminance < darkestLuminance) {
|
|
212
|
+
darkestLuminance = luminance;
|
|
213
|
+
darkestIndex = i;
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
palette[darkestIndex] = [255, 255, 255];
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const quantizedData = Buffer.from(data);
|
|
220
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
221
|
+
const originalColor = { r: data[i], g: data[i + 1], b: data[i + 2] };
|
|
222
|
+
const closest = findClosestColor(originalColor, palette);
|
|
223
|
+
quantizedData[i] = closest[0];
|
|
224
|
+
quantizedData[i + 1] = closest[1];
|
|
225
|
+
quantizedData[i + 2] = closest[2];
|
|
226
|
+
}
|
|
227
|
+
return quantizedData;
|
|
228
|
+
}
|
|
229
|
+
function getLuminance(color) {
|
|
230
|
+
const r = color.r / 255;
|
|
231
|
+
const g = color.g / 255;
|
|
232
|
+
const b = color.b / 255;
|
|
233
|
+
return 0.299 * r + 0.587 * g + 0.114 * b;
|
|
234
|
+
}
|
|
235
|
+
function getContrastRatio(color1, color2) {
|
|
236
|
+
const lum1 = getLuminance(color1);
|
|
237
|
+
const lum2 = getLuminance(color2);
|
|
238
|
+
const brightest = Math.max(lum1, lum2);
|
|
239
|
+
const darkest = Math.min(lum1, lum2);
|
|
240
|
+
return (brightest + 0.05) / (darkest + 0.05);
|
|
241
|
+
}
|
|
242
|
+
function getHueDistance(color1, color2) {
|
|
243
|
+
const [h1] = rgbToHsl(color1.r, color1.g, color1.b);
|
|
244
|
+
const [h2] = rgbToHsl(color2.r, color2.g, color2.b);
|
|
245
|
+
const hue1 = h1 * 360;
|
|
246
|
+
const hue2 = h2 * 360;
|
|
247
|
+
const diff = Math.abs(hue1 - hue2);
|
|
248
|
+
return Math.min(diff, 360 - diff);
|
|
249
|
+
}
|
|
250
|
+
function isHighlySaturated(color) {
|
|
251
|
+
const [, s] = rgbToHsl(color.r, color.g, color.b);
|
|
252
|
+
return s > 0.6;
|
|
253
|
+
}
|
|
254
|
+
function findColorRangeInternal(data, ignoredColor = null, customThreshold) {
|
|
255
|
+
const groups = [];
|
|
256
|
+
const threshold = customThreshold ?? COLOR_RANGE_THRESHOLD;
|
|
257
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
258
|
+
if (data[i + 3] < 10) continue;
|
|
259
|
+
const color = { r: data[i], g: data[i + 1], b: data[i + 2] };
|
|
260
|
+
if (ignoredColor && colorDistance(color, ignoredColor) < threshold) continue;
|
|
261
|
+
let found = false;
|
|
262
|
+
for (const group of groups) {
|
|
263
|
+
const distance = colorDistance(group.color, color);
|
|
264
|
+
const contrastRatio = getContrastRatio(group.color, color);
|
|
265
|
+
let groupingThreshold = threshold;
|
|
266
|
+
if (contrastRatio > 3) groupingThreshold = Math.min(groupingThreshold, 8);
|
|
267
|
+
const hueDistance = getHueDistance(group.color, color);
|
|
268
|
+
if (hueDistance > 20) groupingThreshold = Math.min(groupingThreshold, 5);
|
|
269
|
+
if (isHighlySaturated(color) && isHighlySaturated(group.color)) {
|
|
270
|
+
groupingThreshold = Math.min(groupingThreshold, 10);
|
|
271
|
+
}
|
|
272
|
+
if (distance < groupingThreshold) {
|
|
273
|
+
group.count++;
|
|
274
|
+
found = true;
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (!found) groups.push({ color, count: 1 });
|
|
279
|
+
}
|
|
280
|
+
const sorted = groups.sort((a, b) => b.count - a.count);
|
|
281
|
+
let filtered = sorted.filter((g) => g.count > sorted[0].count * 0.03).map((g) => g.color);
|
|
282
|
+
if (filtered.length < 2 && sorted.length >= 2) {
|
|
283
|
+
filtered = sorted.slice(0, 2).map((g) => g.color);
|
|
284
|
+
}
|
|
285
|
+
return filtered.slice(0, 6);
|
|
286
|
+
}
|
|
287
|
+
function findColorRange(data, ignoredColor = null) {
|
|
288
|
+
return findColorRangeInternal(data, ignoredColor);
|
|
289
|
+
}
|
|
290
|
+
function findColorRangeWithThreshold(data, threshold, ignoredColor = null) {
|
|
291
|
+
return findColorRangeInternal(data, ignoredColor, threshold);
|
|
292
|
+
}
|
|
293
|
+
function rgbToHsl(r, g, b) {
|
|
294
|
+
const rNorm = r / 255;
|
|
295
|
+
const gNorm = g / 255;
|
|
296
|
+
const bNorm = b / 255;
|
|
297
|
+
const max = Math.max(rNorm, gNorm, bNorm);
|
|
298
|
+
const min = Math.min(rNorm, gNorm, bNorm);
|
|
299
|
+
let h = 0;
|
|
300
|
+
let s = 0;
|
|
301
|
+
const l = (max + min) / 2;
|
|
302
|
+
if (max !== min) {
|
|
303
|
+
const d = max - min;
|
|
304
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
305
|
+
switch (max) {
|
|
306
|
+
case rNorm:
|
|
307
|
+
h = (gNorm - bNorm) / d + (gNorm < bNorm ? 6 : 0);
|
|
308
|
+
break;
|
|
309
|
+
case gNorm:
|
|
310
|
+
h = (bNorm - rNorm) / d + 2;
|
|
311
|
+
break;
|
|
312
|
+
case bNorm:
|
|
313
|
+
h = (rNorm - gNorm) / d + 4;
|
|
314
|
+
break;
|
|
315
|
+
default:
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
h /= 6;
|
|
319
|
+
}
|
|
320
|
+
return [h, s, l];
|
|
321
|
+
}
|
|
322
|
+
function hslToRgb(h, s, l) {
|
|
323
|
+
let r;
|
|
324
|
+
let g;
|
|
325
|
+
let b;
|
|
326
|
+
if (s === 0) {
|
|
327
|
+
r = g = b = l;
|
|
328
|
+
} else {
|
|
329
|
+
const hue2rgb = (p2, q2, t) => {
|
|
330
|
+
let tMod = t;
|
|
331
|
+
if (tMod < 0) tMod += 1;
|
|
332
|
+
if (tMod > 1) tMod -= 1;
|
|
333
|
+
if (tMod < 1 / 6) return p2 + (q2 - p2) * 6 * tMod;
|
|
334
|
+
if (tMod < 1 / 2) return q2;
|
|
335
|
+
if (tMod < 2 / 3) return p2 + (q2 - p2) * (2 / 3 - tMod) * 6;
|
|
336
|
+
return p2;
|
|
337
|
+
};
|
|
338
|
+
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
339
|
+
const p = 2 * l - q;
|
|
340
|
+
r = hue2rgb(p, q, h + 1 / 3);
|
|
341
|
+
g = hue2rgb(p, q, h);
|
|
342
|
+
b = hue2rgb(p, q, h - 1 / 3);
|
|
343
|
+
}
|
|
344
|
+
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
|
|
345
|
+
}
|
|
346
|
+
function solidifyEdges(data, saturationBoost = 0.25) {
|
|
347
|
+
const result = Buffer.from(data);
|
|
348
|
+
for (let i = 0; i < result.length; i += 4) {
|
|
349
|
+
const alpha = result[i + 3];
|
|
350
|
+
if (alpha > 0 && alpha < 255) {
|
|
351
|
+
const r = result[i];
|
|
352
|
+
const g = result[i + 1];
|
|
353
|
+
const b = result[i + 2];
|
|
354
|
+
const hsl = rgbToHsl(r, g, b);
|
|
355
|
+
const rgb = hslToRgb(hsl[0], Math.min(1, hsl[1] + saturationBoost), hsl[2]);
|
|
356
|
+
result[i] = rgb[0];
|
|
357
|
+
result[i + 1] = rgb[1];
|
|
358
|
+
result[i + 2] = rgb[2];
|
|
359
|
+
result[i + 3] = 255;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return result;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// src/lib/image/image-processor.ts
|
|
366
|
+
import sharp from "sharp";
|
|
367
|
+
function hasGradient(data) {
|
|
368
|
+
const uniqueColors = /* @__PURE__ */ new Set();
|
|
369
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
370
|
+
if (data[i + 3] < 10) continue;
|
|
371
|
+
uniqueColors.add(`${data[i]},${data[i + 1]},${data[i + 2]}`);
|
|
372
|
+
}
|
|
373
|
+
return uniqueColors.size > 50;
|
|
374
|
+
}
|
|
375
|
+
function perceivedLuminance(color) {
|
|
376
|
+
return (0.299 * color.r + 0.587 * color.g + 0.114 * color.b) / 255;
|
|
377
|
+
}
|
|
378
|
+
function createSvgRecolorer(target, palette) {
|
|
379
|
+
if (palette.length < 2) return () => target;
|
|
380
|
+
const luminances = palette.map(perceivedLuminance);
|
|
381
|
+
const min = Math.min(...luminances);
|
|
382
|
+
const max = Math.max(...luminances);
|
|
383
|
+
if (max - min < 0.05) return () => target;
|
|
384
|
+
const [h, s, targetLightness] = rgbToHsl(target.r, target.g, target.b);
|
|
385
|
+
const lightnessRange = 0.75;
|
|
386
|
+
const minLightness = targetLightness >= 0.5 ? Math.max(0, targetLightness - lightnessRange) : targetLightness;
|
|
387
|
+
const maxLightness = targetLightness >= 0.5 ? targetLightness : Math.min(1, targetLightness + lightnessRange);
|
|
388
|
+
return (source) => {
|
|
389
|
+
const sourcePosition = (perceivedLuminance(source) - min) / (max - min);
|
|
390
|
+
const nextLightness = minLightness + sourcePosition * (maxLightness - minLightness);
|
|
391
|
+
const [r, g, b] = hslToRgb(h, s, Math.max(0, Math.min(1, nextLightness)));
|
|
392
|
+
return { r, g, b };
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
async function processGradient(data, info) {
|
|
396
|
+
if (!hasGradient(data)) return { data, info };
|
|
397
|
+
const solidified = solidifyEdges(data, 0.1);
|
|
398
|
+
const blurred = await sharp(solidified, {
|
|
399
|
+
raw: { channels: 4, width: info.width, height: info.height }
|
|
400
|
+
}).png().blur(0.3).toBuffer();
|
|
401
|
+
const result = await sharp(blurred).ensureAlpha().raw().toBuffer({ resolveWithObject: true });
|
|
402
|
+
return { data: result.data, info: result.info };
|
|
403
|
+
}
|
|
404
|
+
function isSvgBuffer(buffer) {
|
|
405
|
+
const head = buffer.subarray(0, Math.min(buffer.length, 512)).toString("utf8").trimStart();
|
|
406
|
+
return head.startsWith("<?xml") ? head.includes("<svg") : head.startsWith("<svg");
|
|
407
|
+
}
|
|
408
|
+
async function processInternal(inputBuffer, isSVG, options) {
|
|
409
|
+
const stages = [];
|
|
410
|
+
const metadata = await sharp(inputBuffer).metadata();
|
|
411
|
+
let alreadyTransparent = false;
|
|
412
|
+
if (metadata.hasAlpha) {
|
|
413
|
+
const { data: alphaData } = await sharp(inputBuffer).raw().toBuffer({ resolveWithObject: true });
|
|
414
|
+
alreadyTransparent = hasTransparency(alphaData, 0.05);
|
|
415
|
+
}
|
|
416
|
+
let { data: processedData, info } = await sharp(inputBuffer).ensureAlpha().raw().toBuffer({ resolveWithObject: true });
|
|
417
|
+
if (options.color) {
|
|
418
|
+
stages.push("recolor");
|
|
419
|
+
processedData = applyQuantization(processedData, 8);
|
|
420
|
+
let dominantEdgeColor = null;
|
|
421
|
+
let colorRange = [];
|
|
422
|
+
if (isSVG) {
|
|
423
|
+
dominantEdgeColor = getDominantEdgeColor(processedData, info.width, info.height);
|
|
424
|
+
colorRange = findColorRangeWithThreshold(processedData, 5, null);
|
|
425
|
+
} else {
|
|
426
|
+
dominantEdgeColor = alreadyTransparent ? null : getDominantEdgeColor(processedData, info.width, info.height);
|
|
427
|
+
colorRange = findColorRange(processedData, dominantEdgeColor);
|
|
428
|
+
}
|
|
429
|
+
const isMultiFillSvg = isSVG && colorRange.length >= 2;
|
|
430
|
+
const recolorSvgFill = isMultiFillSvg ? createSvgRecolorer(options.color, colorRange) : null;
|
|
431
|
+
let didRemoveBackground = false;
|
|
432
|
+
for (let i = 0; i < processedData.length; i += 4) {
|
|
433
|
+
let alpha = processedData[i + 3];
|
|
434
|
+
if (alpha < 25.5) {
|
|
435
|
+
processedData[i + 3] = 0;
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
const pixelColor = { r: processedData[i], g: processedData[i + 1], b: processedData[i + 2] };
|
|
439
|
+
if (isSVG) {
|
|
440
|
+
const isLight = pixelColor.r > 240 && pixelColor.g > 240 && pixelColor.b > 240;
|
|
441
|
+
const isEdgeBackground = dominantEdgeColor ? colorDistance(dominantEdgeColor, pixelColor) < 5 : false;
|
|
442
|
+
if (isLight && (!isMultiFillSvg || isEdgeBackground)) {
|
|
443
|
+
alpha = 0;
|
|
444
|
+
didRemoveBackground = true;
|
|
445
|
+
} else {
|
|
446
|
+
const idx = colorRange.findIndex((c) => colorDistance(c, pixelColor) < 5);
|
|
447
|
+
if (idx === -1) {
|
|
448
|
+
alpha = 0;
|
|
449
|
+
didRemoveBackground = true;
|
|
450
|
+
} else if (!isMultiFillSvg) {
|
|
451
|
+
const levels = [255, 200, 150, 100, 80];
|
|
452
|
+
alpha = levels[idx] ?? 60;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
} else if (!alreadyTransparent && dominantEdgeColor && colorDistance(dominantEdgeColor, pixelColor) < 25) {
|
|
456
|
+
alpha = 0;
|
|
457
|
+
didRemoveBackground = true;
|
|
458
|
+
} else {
|
|
459
|
+
const idx = colorRange.findIndex((c) => colorDistance(c, pixelColor) < COLOR_RANGE_THRESHOLD);
|
|
460
|
+
if (idx === -1) {
|
|
461
|
+
alpha = 0;
|
|
462
|
+
didRemoveBackground = true;
|
|
463
|
+
} else {
|
|
464
|
+
alpha = Math.max(255 - 255 * idx * 0.35, 50);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
const recolored = recolorSvgFill ? recolorSvgFill(pixelColor) : options.color;
|
|
468
|
+
processedData[i] = recolored.r;
|
|
469
|
+
processedData[i + 1] = recolored.g;
|
|
470
|
+
processedData[i + 2] = recolored.b;
|
|
471
|
+
processedData[i + 3] = alpha;
|
|
472
|
+
}
|
|
473
|
+
if (didRemoveBackground && !alreadyTransparent) {
|
|
474
|
+
stages.push("solidify-edges");
|
|
475
|
+
const result = await processGradient(processedData, info);
|
|
476
|
+
processedData = result.data;
|
|
477
|
+
info = result.info;
|
|
478
|
+
}
|
|
479
|
+
} else if (options.removeBackground && !alreadyTransparent) {
|
|
480
|
+
stages.push("remove-bg");
|
|
481
|
+
processedData = removeBackground(processedData, info.width, info.height);
|
|
482
|
+
stages.push("solidify-edges");
|
|
483
|
+
const result = await processGradient(processedData, info);
|
|
484
|
+
processedData = result.data;
|
|
485
|
+
info = result.info;
|
|
486
|
+
}
|
|
487
|
+
let pipeline = sharp(processedData, {
|
|
488
|
+
raw: { channels: 4, width: info.width, height: info.height }
|
|
489
|
+
}).png();
|
|
490
|
+
if (options.shrinkToContent) {
|
|
491
|
+
stages.push("trim");
|
|
492
|
+
pipeline = pipeline.trim();
|
|
493
|
+
}
|
|
494
|
+
const outputBuffer = await pipeline.toBuffer();
|
|
495
|
+
return { buffer: outputBuffer, stages };
|
|
496
|
+
}
|
|
497
|
+
function applyResize(buffer, resize) {
|
|
498
|
+
const transparent = { r: 0, g: 0, b: 0, alpha: 0 };
|
|
499
|
+
if (resize.size) {
|
|
500
|
+
return sharp(buffer).resize(resize.size.width, resize.size.height, {
|
|
501
|
+
fit: resize.fit ?? "contain",
|
|
502
|
+
background: transparent
|
|
503
|
+
}).toBuffer();
|
|
504
|
+
}
|
|
505
|
+
return sharp(buffer).resize(resize.width ?? null, resize.height ?? null, { fit: "inside", withoutEnlargement: false }).toBuffer();
|
|
506
|
+
}
|
|
507
|
+
async function processImage(inputBuffer, options = {}) {
|
|
508
|
+
const stages = [];
|
|
509
|
+
const isSVG = isSvgBuffer(inputBuffer);
|
|
510
|
+
if (isSVG && !options.color && !options.removeBackground && !options.shrinkToContent) {
|
|
511
|
+
if (options.resize) {
|
|
512
|
+
stages.push("resize");
|
|
513
|
+
const resized = await applyResize(inputBuffer, options.resize);
|
|
514
|
+
const meta3 = await sharp(resized).metadata();
|
|
515
|
+
return {
|
|
516
|
+
buffer: resized,
|
|
517
|
+
format: "png",
|
|
518
|
+
width: meta3.width ?? 0,
|
|
519
|
+
height: meta3.height ?? 0,
|
|
520
|
+
stages
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
const meta2 = await sharp(inputBuffer).metadata();
|
|
524
|
+
return {
|
|
525
|
+
buffer: inputBuffer,
|
|
526
|
+
format: "svg",
|
|
527
|
+
width: meta2.width ?? 0,
|
|
528
|
+
height: meta2.height ?? 0,
|
|
529
|
+
stages
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
let workingBuffer = inputBuffer;
|
|
533
|
+
if (isSVG) {
|
|
534
|
+
stages.push("rasterize-svg");
|
|
535
|
+
workingBuffer = await sharp(inputBuffer).png({ compressionLevel: 0, force: true, palette: false, quality: 100 }).toBuffer();
|
|
536
|
+
}
|
|
537
|
+
const pass = await processInternal(workingBuffer, isSVG, options);
|
|
538
|
+
stages.push(...pass.stages);
|
|
539
|
+
let processed = pass.buffer;
|
|
540
|
+
if (options.resize) {
|
|
541
|
+
stages.push("resize");
|
|
542
|
+
processed = await applyResize(processed, options.resize);
|
|
543
|
+
}
|
|
544
|
+
const meta = await sharp(processed).metadata();
|
|
545
|
+
return {
|
|
546
|
+
buffer: processed,
|
|
547
|
+
format: "png",
|
|
548
|
+
width: meta.width ?? 0,
|
|
549
|
+
height: meta.height ?? 0,
|
|
550
|
+
stages
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// src/commands/images/normalize.ts
|
|
555
|
+
registerSchema({
|
|
556
|
+
command: "images.normalize",
|
|
557
|
+
description: "Normalize one or more local images: recolor, two-pass background removal, trim, and resize. Multi-fill SVG recolor preserves relative contrast. Declarative \u2014 describe the desired final state via flags; the pipeline runs the needed stages in order. Writes in-place by default. For upscaling, use 'baker images upscale <imageId>' after uploading.",
|
|
558
|
+
args: {
|
|
559
|
+
files: {
|
|
560
|
+
type: "string",
|
|
561
|
+
description: "Single path, glob (quote it), or comma-separated list. Commas are treated as separators \u2014 paths containing commas are not supported. Use 'logos/*.png', 'a.png,b.png', or 'logo.png'.",
|
|
562
|
+
required: true
|
|
563
|
+
},
|
|
564
|
+
color: {
|
|
565
|
+
type: "string",
|
|
566
|
+
description: "Recolor target as hex (e.g. '#FFFFFF', '#fff'). Omit to keep original colors.",
|
|
567
|
+
required: false
|
|
568
|
+
},
|
|
569
|
+
"remove-bg": {
|
|
570
|
+
type: "boolean",
|
|
571
|
+
description: "Two-pass background removal. Default true when --color is set, false otherwise. Idempotent on already-transparent input.",
|
|
572
|
+
required: false
|
|
573
|
+
},
|
|
574
|
+
"shrink-to-content": {
|
|
575
|
+
type: "boolean",
|
|
576
|
+
description: "Trim transparent borders after bg removal. Default true when --remove-bg is on.",
|
|
577
|
+
required: false
|
|
578
|
+
},
|
|
579
|
+
height: {
|
|
580
|
+
type: "number",
|
|
581
|
+
description: "Resize to N pixels tall, width auto (preserves aspect). Mutex with --size.",
|
|
582
|
+
required: false
|
|
583
|
+
},
|
|
584
|
+
width: {
|
|
585
|
+
type: "number",
|
|
586
|
+
description: "Resize to N pixels wide, height auto (preserves aspect). Mutex with --size.",
|
|
587
|
+
required: false
|
|
588
|
+
},
|
|
589
|
+
size: {
|
|
590
|
+
type: "string",
|
|
591
|
+
description: "Fit into a W\xD7H box. Format 'WxH' (e.g. '200x200'). Mutex with --height/--width.",
|
|
592
|
+
required: false
|
|
593
|
+
},
|
|
594
|
+
fit: {
|
|
595
|
+
type: "string",
|
|
596
|
+
description: "Used with --size: 'contain' (default, letterbox transparent) or 'cover' (crop to fill).",
|
|
597
|
+
required: false,
|
|
598
|
+
enum: ["contain", "cover"]
|
|
599
|
+
},
|
|
600
|
+
output: {
|
|
601
|
+
type: "string",
|
|
602
|
+
description: "Output path. Default: in-place. With multiple inputs, must be a directory.",
|
|
603
|
+
required: false
|
|
604
|
+
},
|
|
605
|
+
"dry-run": {
|
|
606
|
+
type: "boolean",
|
|
607
|
+
description: "Resolve inputs + pipeline without writing any files.",
|
|
608
|
+
required: false,
|
|
609
|
+
default: false
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
});
|
|
613
|
+
var ValidationError = class extends Error {
|
|
614
|
+
constructor(message) {
|
|
615
|
+
super(message);
|
|
616
|
+
this.name = "ValidationError";
|
|
617
|
+
}
|
|
618
|
+
};
|
|
619
|
+
function parseSize(raw) {
|
|
620
|
+
const match = /^(\d+)x(\d+)$/i.exec(raw.trim());
|
|
621
|
+
if (!match || match.length < 3) {
|
|
622
|
+
throw new ValidationError(`Invalid --size value "${raw}". Expected WxH (e.g. 200x200).`);
|
|
623
|
+
}
|
|
624
|
+
const [, w, h] = match;
|
|
625
|
+
return { width: Number.parseInt(w ?? "", 10), height: Number.parseInt(h ?? "", 10) };
|
|
626
|
+
}
|
|
627
|
+
function parseResize(args) {
|
|
628
|
+
const hasSize = typeof args.size === "string" && args.size.length > 0;
|
|
629
|
+
const hasHeight = typeof args.height === "number";
|
|
630
|
+
const hasWidth = typeof args.width === "number";
|
|
631
|
+
if (hasSize && (hasHeight || hasWidth)) {
|
|
632
|
+
throw new ValidationError("--height/--width and --size are mutually exclusive");
|
|
633
|
+
}
|
|
634
|
+
if (args.fit !== void 0 && !hasSize) {
|
|
635
|
+
throw new ValidationError("--fit requires --size");
|
|
636
|
+
}
|
|
637
|
+
if (hasSize && typeof args.size === "string") {
|
|
638
|
+
return {
|
|
639
|
+
size: parseSize(args.size),
|
|
640
|
+
fit: args.fit ?? "contain"
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
if (hasHeight || hasWidth) {
|
|
644
|
+
return { width: args.width, height: args.height };
|
|
645
|
+
}
|
|
646
|
+
return void 0;
|
|
647
|
+
}
|
|
648
|
+
function parseColor(raw) {
|
|
649
|
+
if (typeof raw !== "string" || raw.length === 0) return void 0;
|
|
650
|
+
try {
|
|
651
|
+
return parseHex(raw);
|
|
652
|
+
} catch (err) {
|
|
653
|
+
throw new ValidationError(err instanceof Error ? err.message : "Invalid --color");
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
function buildOptions(args) {
|
|
657
|
+
const resize = parseResize(args);
|
|
658
|
+
const color = parseColor(args.color);
|
|
659
|
+
const removeBackground2 = typeof args["remove-bg"] === "boolean" ? args["remove-bg"] : color !== void 0;
|
|
660
|
+
const shrinkToContent = typeof args["shrink-to-content"] === "boolean" ? args["shrink-to-content"] : removeBackground2;
|
|
661
|
+
return {
|
|
662
|
+
options: { color, removeBackground: removeBackground2, shrinkToContent, resize },
|
|
663
|
+
outputArg: typeof args.output === "string" && args.output.length > 0 ? args.output : void 0,
|
|
664
|
+
dryRun: args["dry-run"] === true
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
function colorToHex(color) {
|
|
668
|
+
if (!color) return null;
|
|
669
|
+
return `#${[color.r, color.g, color.b].map((n) => n.toString(16).padStart(2, "0")).join("")}`;
|
|
670
|
+
}
|
|
671
|
+
async function processFile(inputPath, options, outputArg, multipleInputs) {
|
|
672
|
+
const inputBuffer = await readImageBuffer(inputPath);
|
|
673
|
+
const result = await processImage(inputBuffer, options);
|
|
674
|
+
const newExt = result.format === "png" ? ".png" : ".svg";
|
|
675
|
+
const outputPath = await resolveOutputPath(inputPath, outputArg, { multipleInputs, newExtension: newExt });
|
|
676
|
+
await atomicWrite(outputPath, result.buffer);
|
|
677
|
+
return {
|
|
678
|
+
input: inputPath,
|
|
679
|
+
output: outputPath,
|
|
680
|
+
format: result.format,
|
|
681
|
+
width: result.width,
|
|
682
|
+
height: result.height,
|
|
683
|
+
sizeBytes: result.buffer.length,
|
|
684
|
+
stages: result.stages
|
|
685
|
+
};
|
|
686
|
+
}
|
|
687
|
+
async function resolveInputs(spec) {
|
|
688
|
+
const all = await expandInputs(spec);
|
|
689
|
+
if (all.length === 0) {
|
|
690
|
+
throw new ValidationError(`No files matched "${spec}"`);
|
|
691
|
+
}
|
|
692
|
+
const remote = all.filter(isRemoteUrl);
|
|
693
|
+
if (remote.length > 0) {
|
|
694
|
+
throw new ValidationError(
|
|
695
|
+
"Remote URLs are not supported by 'normalize'. Download the file first or use a local path."
|
|
696
|
+
);
|
|
697
|
+
}
|
|
698
|
+
return all;
|
|
699
|
+
}
|
|
700
|
+
function emitDryRun(inputs, normalized) {
|
|
701
|
+
writeJson({
|
|
702
|
+
ok: true,
|
|
703
|
+
dryRun: true,
|
|
704
|
+
operation: "images.normalize",
|
|
705
|
+
params: {
|
|
706
|
+
inputs,
|
|
707
|
+
options: {
|
|
708
|
+
color: colorToHex(normalized.options.color),
|
|
709
|
+
removeBackground: normalized.options.removeBackground ?? false,
|
|
710
|
+
shrinkToContent: normalized.options.shrinkToContent ?? false,
|
|
711
|
+
resize: normalized.options.resize ?? null
|
|
712
|
+
},
|
|
713
|
+
outputArg: normalized.outputArg ?? null
|
|
714
|
+
}
|
|
715
|
+
});
|
|
716
|
+
}
|
|
717
|
+
function emitError(err) {
|
|
718
|
+
if (err instanceof ValidationError) {
|
|
719
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: err.message } });
|
|
720
|
+
} else {
|
|
721
|
+
const message = err instanceof Error ? err.message : "Unexpected error";
|
|
722
|
+
writeJson({ ok: false, error: { code: "IMAGE_PROCESSING_ERROR", message } });
|
|
723
|
+
}
|
|
724
|
+
process.exit(1);
|
|
725
|
+
}
|
|
726
|
+
function coerceRawArgs(args) {
|
|
727
|
+
const num = (v) => {
|
|
728
|
+
if (typeof v === "number") return v;
|
|
729
|
+
if (typeof v === "string" && v.length > 0) {
|
|
730
|
+
const n = Number(v);
|
|
731
|
+
return Number.isFinite(n) ? n : void 0;
|
|
732
|
+
}
|
|
733
|
+
return void 0;
|
|
734
|
+
};
|
|
735
|
+
const str = (v) => typeof v === "string" ? v : void 0;
|
|
736
|
+
const bool = (v) => typeof v === "boolean" ? v : void 0;
|
|
737
|
+
return {
|
|
738
|
+
files: str(args.files),
|
|
739
|
+
color: str(args.color),
|
|
740
|
+
"remove-bg": bool(args["remove-bg"]),
|
|
741
|
+
"shrink-to-content": bool(args["shrink-to-content"]),
|
|
742
|
+
height: num(args.height),
|
|
743
|
+
width: num(args.width),
|
|
744
|
+
size: str(args.size),
|
|
745
|
+
fit: str(args.fit),
|
|
746
|
+
output: str(args.output),
|
|
747
|
+
"dry-run": bool(args["dry-run"])
|
|
748
|
+
};
|
|
749
|
+
}
|
|
750
|
+
var normalizeCommand = defineCommand({
|
|
751
|
+
meta: {
|
|
752
|
+
name: "normalize",
|
|
753
|
+
description: `Normalize logos / images: declarative recolor + bg removal + trim + resize. Operates on local files; writes in-place by default.
|
|
754
|
+
|
|
755
|
+
Examples:
|
|
756
|
+
baker images normalize "logos/*.png" --color '#FFFFFF' --height 200
|
|
757
|
+
baker images normalize logo.png --remove-bg --shrink-to-content
|
|
758
|
+
baker images normalize "a.png,b.png" --size 200x200 --fit cover --output ./out`
|
|
759
|
+
},
|
|
760
|
+
args: {
|
|
761
|
+
files: {
|
|
762
|
+
type: "positional",
|
|
763
|
+
description: "Single path, glob (quote it), or comma-separated list",
|
|
764
|
+
required: false
|
|
765
|
+
},
|
|
766
|
+
color: { type: "string", description: "Recolor target as hex", required: false },
|
|
767
|
+
"remove-bg": { type: "boolean", description: "Two-pass background removal", required: false },
|
|
768
|
+
"shrink-to-content": { type: "boolean", description: "Trim transparent borders", required: false },
|
|
769
|
+
height: { type: "string", description: "Resize to N px tall, width auto", required: false },
|
|
770
|
+
width: { type: "string", description: "Resize to N px wide, height auto", required: false },
|
|
771
|
+
size: { type: "string", description: "Fit into a WxH box (e.g. 200x200)", required: false },
|
|
772
|
+
fit: { type: "string", description: "contain (default) or cover (with --size)", required: false },
|
|
773
|
+
output: { type: "string", description: "Output path or directory", required: false },
|
|
774
|
+
"dry-run": { type: "boolean", description: "Preview without writing", required: false, default: false }
|
|
775
|
+
},
|
|
776
|
+
run: async ({ args }) => {
|
|
777
|
+
try {
|
|
778
|
+
const raw = coerceRawArgs(args);
|
|
779
|
+
if (!raw.files) {
|
|
780
|
+
throw new ValidationError("files argument is required");
|
|
781
|
+
}
|
|
782
|
+
const inputs = await resolveInputs(raw.files);
|
|
783
|
+
const normalized = buildOptions(raw);
|
|
784
|
+
if (inputs.length > 1 && normalized.outputArg && !await isDirectory(normalized.outputArg)) {
|
|
785
|
+
throw new ValidationError(
|
|
786
|
+
`--output must be an existing directory when processing multiple files (got "${normalized.outputArg}")`
|
|
787
|
+
);
|
|
788
|
+
}
|
|
789
|
+
if (normalized.dryRun) {
|
|
790
|
+
emitDryRun(inputs, normalized);
|
|
791
|
+
return;
|
|
792
|
+
}
|
|
793
|
+
const processed = [];
|
|
794
|
+
for (const inputPath of inputs) {
|
|
795
|
+
processed.push(await processFile(inputPath, normalized.options, normalized.outputArg, inputs.length > 1));
|
|
796
|
+
}
|
|
797
|
+
writeJson({ ok: true, data: { processed } });
|
|
798
|
+
} catch (err) {
|
|
799
|
+
emitError(err);
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
});
|
|
803
|
+
export {
|
|
804
|
+
normalizeCommand
|
|
805
|
+
};
|
|
806
|
+
//# sourceMappingURL=normalize-DSFVTRXN.js.map
|