shopify 4.9.2 → 4.9.4

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 (343) hide show
  1. package/dist/analytics-APDNTBDE.js +1 -0
  2. package/dist/analytics-LX52KYSE.js +1 -0
  3. package/dist/bootstrap.js +1 -1
  4. package/dist/{chunk-JKWB7WTO.js → chunk-2PDVBGQH.js} +1 -1
  5. package/dist/{chunk-3ZL4TDTH.js → chunk-2YVSZFXJ.js} +1 -1
  6. package/dist/{chunk-BLCR7BXU.js → chunk-35WQTGN3.js} +1 -1
  7. package/dist/chunk-37BGAWAW.js +2 -0
  8. package/dist/chunk-3C4WVKSO.js +6 -0
  9. package/dist/{chunk-46U6C6C6.js → chunk-3G2ZQ2EF.js} +1 -1
  10. package/dist/{chunk-JAY7AGAG.js → chunk-3LHE4GIX.js} +1 -1
  11. package/dist/{chunk-3E3MCY5O.js → chunk-3V4VL3SD.js} +3 -3
  12. package/dist/{chunk-2P5DUPT7.js → chunk-43URS56H.js} +1 -1
  13. package/dist/{chunk-525BMYNR.js → chunk-45SZ5PSE.js} +1 -1
  14. package/dist/{chunk-RCYQPOJW.js → chunk-47IQIIFX.js} +91 -91
  15. package/dist/{chunk-PV5C6Q2P.js → chunk-4ES7BJEK.js} +1 -1
  16. package/dist/{chunk-C4GEP3CX.js → chunk-4IFY7V7W.js} +1 -1
  17. package/dist/{chunk-J7ZG6SO3.js → chunk-4JGWKUJN.js} +1 -1
  18. package/dist/{chunk-3EEH3A27.js → chunk-4O5GQ3DS.js} +1 -1
  19. package/dist/{chunk-JWDR66AS.js → chunk-4O7LK5RG.js} +1 -1
  20. package/dist/{chunk-RBPMV3KB.js → chunk-4OCVXE5Y.js} +1 -1
  21. package/dist/{chunk-CHRFYG6W.js → chunk-4TFJ5RW7.js} +1 -1
  22. package/dist/{chunk-UOKX3AME.js → chunk-4TZCRMBJ.js} +1 -1
  23. package/dist/{chunk-EZ5F4ZFY.js → chunk-4ZNBEMRT.js} +3 -3
  24. package/dist/chunk-5BGUKF7L.js +1 -0
  25. package/dist/{chunk-LIQSNIB3.js → chunk-5BTLE67Z.js} +1 -1
  26. package/dist/{chunk-6NLGZGYE.js → chunk-5JIJDUXX.js} +1 -1
  27. package/dist/{chunk-WINVPFT5.js → chunk-66YRAUWX.js} +1 -1
  28. package/dist/{chunk-JCO2SDDR.js → chunk-67EBF76X.js} +1 -1
  29. package/dist/{chunk-5BO5HCN6.js → chunk-6A4H3HPY.js} +1 -1
  30. package/dist/{chunk-BVR3GF2L.js → chunk-6HPUOCFF.js} +1 -1
  31. package/dist/chunk-6IDEDOXW.js +2 -0
  32. package/dist/{chunk-ANHSOQTZ.js → chunk-6IMHGT7F.js} +1 -1
  33. package/dist/{chunk-4QEALPWD.js → chunk-6MC2BEW4.js} +1 -1
  34. package/dist/chunk-6YDLNP4G.js +15 -0
  35. package/dist/{chunk-BPVXYM6G.js → chunk-73D5O7A3.js} +1 -1
  36. package/dist/{chunk-EMKLN75K.js → chunk-7556AIVG.js} +1 -1
  37. package/dist/{chunk-IQIUFTR6.js → chunk-7A3RW2VM.js} +1 -1
  38. package/dist/{chunk-EGJQEKAO.js → chunk-7HNRK2CR.js} +1 -1
  39. package/dist/{chunk-G627WGIC.js → chunk-7HWMURCW.js} +2 -2
  40. package/dist/{chunk-3NRGGEGU.js → chunk-7SJHVJ3W.js} +1 -1
  41. package/dist/{chunk-MQZPASSP.js → chunk-7VAKNVFD.js} +1 -1
  42. package/dist/{chunk-KPNUSDCW.js → chunk-A2VCTDKH.js} +1 -1
  43. package/dist/{chunk-JCKA3O5A.js → chunk-ALK66U3O.js} +1 -1
  44. package/dist/{chunk-MP5NZL7C.js → chunk-AMLCWRHU.js} +1 -1
  45. package/dist/{chunk-AVOSD4NV.js → chunk-AVMNIZAJ.js} +1 -1
  46. package/dist/{chunk-IJLD5UYC.js → chunk-AYIU6Z4C.js} +1 -1
  47. package/dist/{chunk-T3JUBPBU.js → chunk-B3M3KIOU.js} +1 -1
  48. package/dist/{chunk-ER7ZTF26.js → chunk-BIWG3FQQ.js} +1 -1
  49. package/dist/{chunk-YKYJOUV7.js → chunk-BOE2ST6J.js} +1 -1
  50. package/dist/chunk-BQ3U3CQV.js +1 -0
  51. package/dist/{chunk-FICC6IFE.js → chunk-BVB3DTNE.js} +1 -1
  52. package/dist/{chunk-55QTRPZ2.js → chunk-C6IBY7NW.js} +1 -1
  53. package/dist/{chunk-E64OFJHF.js → chunk-CLD3NZYD.js} +1 -1
  54. package/dist/{chunk-PFIQR7XS.js → chunk-CQF5NDTJ.js} +1 -1
  55. package/dist/{chunk-X6HLGOIV.js → chunk-CVFPY2SH.js} +1 -1
  56. package/dist/{chunk-OERMQ2FP.js → chunk-D3KFKT4D.js} +1 -1
  57. package/dist/{chunk-3NUQGW57.js → chunk-DEF2G7S4.js} +1 -1
  58. package/dist/{chunk-I55L6FOM.js → chunk-DMDLJRLW.js} +1 -1
  59. package/dist/{chunk-EMRUM6AA.js → chunk-DMNWSUKV.js} +1 -1
  60. package/dist/{chunk-PQH4U2XV.js → chunk-DSS4ECIH.js} +1 -1
  61. package/dist/{chunk-WXT5AKZV.js → chunk-DYPZX7MW.js} +1 -1
  62. package/dist/{chunk-R43LXE66.js → chunk-EMH7OHCW.js} +1 -1
  63. package/dist/{chunk-UB2LAIXS.js → chunk-ENQXB532.js} +1 -1
  64. package/dist/{chunk-Q7PF4VKI.js → chunk-EO4YJFMY.js} +62 -51
  65. package/dist/{chunk-KY36HSIB.js → chunk-F3PZGSOY.js} +1 -1
  66. package/dist/chunk-FEQHCE2E.js +3 -0
  67. package/dist/{chunk-QMJZFKKU.js → chunk-FK7GA4QQ.js} +1 -1
  68. package/dist/{chunk-OCQZ2ULI.js → chunk-FO2R6KHG.js} +1 -1
  69. package/dist/{chunk-WNO2V53C.js → chunk-FOAV642V.js} +1 -1
  70. package/dist/{chunk-QA2NOPXG.js → chunk-FQL2WEKX.js} +1 -1
  71. package/dist/{chunk-3ATOVFLZ.js → chunk-G7JW4UIM.js} +1 -1
  72. package/dist/{chunk-BLBJT7BM.js → chunk-GE4MLO3C.js} +1 -1
  73. package/dist/{chunk-OIQVPTNQ.js → chunk-GM4EFJJF.js} +1 -1
  74. package/dist/chunk-GN66BRYF.js +1 -0
  75. package/dist/{chunk-XTKXBQVA.js → chunk-GPRZYFDE.js} +1 -1
  76. package/dist/{chunk-SYNCIFJ6.js → chunk-GSE6FXZU.js} +1 -1
  77. package/dist/{chunk-OXN2DID2.js → chunk-GZ7VGCVW.js} +1 -1
  78. package/dist/{chunk-HKZ75UKL.js → chunk-HASIOUH2.js} +1 -1
  79. package/dist/chunk-HILYTMVA.js +1 -0
  80. package/dist/{chunk-SWNY3RUM.js → chunk-HJHS23Q3.js} +1 -1
  81. package/dist/{chunk-SQIESCOJ.js → chunk-HLPAVELJ.js} +1 -1
  82. package/dist/{chunk-YIV3CWED.js → chunk-HPM3HF7A.js} +1 -1
  83. package/dist/{chunk-HZJHGHLN.js → chunk-HQJ62PII.js} +1 -1
  84. package/dist/{chunk-JJHJYBPQ.js → chunk-HQY6JM6G.js} +1 -1
  85. package/dist/{chunk-7ARGLS6W.js → chunk-HSYMUYEZ.js} +1 -1
  86. package/dist/{chunk-IESHPQLC.js → chunk-I5PQZRYM.js} +1 -1
  87. package/dist/{chunk-M7QFZQ23.js → chunk-IDKRJ2F4.js} +1 -1
  88. package/dist/{chunk-I2LILWDI.js → chunk-IGDVKRB4.js} +1 -1
  89. package/dist/chunk-IPZ6LUJV.js +4 -0
  90. package/dist/{chunk-NLKO2J7T.js → chunk-J4J2YXH3.js} +1 -1
  91. package/dist/{chunk-CNAMKKAK.js → chunk-J4NBPC57.js} +1 -1
  92. package/dist/chunk-J6LQR2F6.js +7 -0
  93. package/dist/{chunk-UYRXUGLY.js → chunk-JYGZD4HM.js} +1 -1
  94. package/dist/{chunk-CDIKRQ6M.js → chunk-K3HUQLIC.js} +1 -1
  95. package/dist/{chunk-GPJJA3FX.js → chunk-K7D53KSJ.js} +1 -1
  96. package/dist/{chunk-UMSO6MOI.js → chunk-KQFA5YTT.js} +1 -1
  97. package/dist/{chunk-MW3HFOPD.js → chunk-KTD7VLHL.js} +1 -1
  98. package/dist/chunk-L4DFMMOI.js +1 -0
  99. package/dist/{chunk-7IRPE3M5.js → chunk-LJIJEGND.js} +1 -1
  100. package/dist/{chunk-D2S566HF.js → chunk-LJZTSQRD.js} +1 -1
  101. package/dist/{chunk-7EDXMGBQ.js → chunk-LKXFHYLI.js} +1 -1
  102. package/dist/{chunk-6H3HVSO5.js → chunk-LLPB6JN5.js} +1 -1
  103. package/dist/{chunk-UVC3IXM3.js → chunk-LOWSU4BB.js} +1 -1
  104. package/dist/{chunk-7MMPQMU7.js → chunk-LWU5TKNA.js} +1 -1
  105. package/dist/{chunk-PI6FLLDD.js → chunk-LYIXRMQJ.js} +1 -1
  106. package/dist/{chunk-DTGIMRBX.js → chunk-MCNK5SJ6.js} +1 -1
  107. package/dist/{chunk-GS52MX5F.js → chunk-MJZSSCGD.js} +1 -1
  108. package/dist/{chunk-65I35VBS.js → chunk-MMQZO2W2.js} +1 -1
  109. package/dist/{chunk-MIP2Y34N.js → chunk-MUM34KUM.js} +1 -1
  110. package/dist/{chunk-YXKMPCFH.js → chunk-MW3IMZJ5.js} +1 -1
  111. package/dist/{chunk-HYC3JXR4.js → chunk-MW3JKGJH.js} +1 -1
  112. package/dist/{chunk-WZEKBD7B.js → chunk-N55MSO3X.js} +5 -5
  113. package/dist/{chunk-PQMKPXFV.js → chunk-N5AZZYQA.js} +1 -1
  114. package/dist/{chunk-P2MVR6CG.js → chunk-NCRWOW6F.js} +1 -1
  115. package/dist/{chunk-MHZSSRHP.js → chunk-NCVGCVQ5.js} +1 -1
  116. package/dist/{chunk-ELQ5NPPB.js → chunk-NGSEF3UX.js} +1 -1
  117. package/dist/{chunk-3U2MYUWG.js → chunk-NT4A37HG.js} +1 -1
  118. package/dist/{chunk-Q4TZD2M6.js → chunk-NU5WLZ6Y.js} +1 -1
  119. package/dist/{chunk-TEASB2WU.js → chunk-NYYXH2SX.js} +1 -1
  120. package/dist/{chunk-RAQP66LR.js → chunk-O5FFMTJE.js} +1 -1
  121. package/dist/{chunk-2VDCTMLY.js → chunk-OE3HSNSE.js} +1 -1
  122. package/dist/{chunk-RY6TZDVV.js → chunk-ONF7XXEL.js} +1 -1
  123. package/dist/{chunk-5TQOMAJS.js → chunk-PB5ZZET5.js} +1 -1
  124. package/dist/{chunk-2NMICU24.js → chunk-PFXNBHQQ.js} +1 -1
  125. package/dist/{chunk-RGZCV56L.js → chunk-PG4S5HJJ.js} +1 -1
  126. package/dist/{chunk-Z5SFLTH6.js → chunk-PHG4DASY.js} +1 -1
  127. package/dist/{chunk-VXGXK66W.js → chunk-PO5T44H3.js} +1 -1
  128. package/dist/{chunk-ZJ4H3XEL.js → chunk-PP4VCR4Y.js} +1 -1
  129. package/dist/{chunk-RDO5IWB5.js → chunk-PVAZCZSY.js} +1 -1
  130. package/dist/chunk-PWS4VFSD.js +1 -0
  131. package/dist/{chunk-T6TYF72N.js → chunk-Q2XLIWG4.js} +1 -1
  132. package/dist/{chunk-ZZ7SOJHH.js → chunk-Q37WAD6F.js} +1 -1
  133. package/dist/{chunk-Q26ES5T3.js → chunk-Q43LBSPT.js} +1 -1
  134. package/dist/{chunk-VZLEYZLX.js → chunk-QAJZUJR5.js} +1 -1
  135. package/dist/{chunk-2X3HYG4B.js → chunk-QO5RNGWA.js} +1 -1
  136. package/dist/chunk-QPQS2YU3.js +1 -0
  137. package/dist/{chunk-Q555FV2X.js → chunk-QTLGMJDW.js} +1 -1
  138. package/dist/{chunk-ELJ34WWD.js → chunk-QUXQM3S3.js} +1 -1
  139. package/dist/{chunk-SRDKLZ4O.js → chunk-R3KSOCMB.js} +1 -1
  140. package/dist/{chunk-NS4FUSSK.js → chunk-R74WHKHH.js} +1 -1
  141. package/dist/chunk-R7YJNDXW.js +1 -0
  142. package/dist/chunk-RJSQMKKS.js +1 -0
  143. package/dist/{chunk-DGOBYP74.js → chunk-RK2V6OIJ.js} +1 -1
  144. package/dist/{chunk-U5L2P36D.js → chunk-RSC5NQAT.js} +1 -1
  145. package/dist/{chunk-4565O5TG.js → chunk-RUHQNF2W.js} +1 -1
  146. package/dist/{chunk-7ZNR4YL4.js → chunk-RXTLNUPF.js} +1 -1
  147. package/dist/{chunk-PGE4HGLA.js → chunk-S36VGP37.js} +1 -1
  148. package/dist/{chunk-KYBZ2MBA.js → chunk-SNE4RHM4.js} +1 -1
  149. package/dist/{chunk-BVVYKX4D.js → chunk-SQAS5RVZ.js} +1 -1
  150. package/dist/{chunk-AKP4QAGL.js → chunk-SZI6G247.js} +1 -1
  151. package/dist/{chunk-LWF4EV22.js → chunk-TFXUDHCP.js} +1 -1
  152. package/dist/{chunk-THW6UDZH.js → chunk-TPHHQAUD.js} +1 -1
  153. package/dist/{chunk-JLGXJHPX.js → chunk-TVCWDEVS.js} +1 -1
  154. package/dist/{chunk-2R2PKQQV.js → chunk-UEBUGSBT.js} +1 -1
  155. package/dist/{chunk-TPPBEVNQ.js → chunk-UIC7K2HX.js} +1 -1
  156. package/dist/{chunk-PG6XEOYF.js → chunk-UNHT4ZFP.js} +1 -1
  157. package/dist/{chunk-JUCOIXG5.js → chunk-UQ6ALA3Y.js} +1 -1
  158. package/dist/{chunk-EP5HIGAL.js → chunk-UU6BRRYS.js} +1 -1
  159. package/dist/{chunk-3F42A3XV.js → chunk-UWI76E2L.js} +3 -3
  160. package/dist/{chunk-EXKTQF26.js → chunk-VGBUN3CZ.js} +1 -1
  161. package/dist/{chunk-J66WAKXN.js → chunk-VMNOSVPT.js} +1 -1
  162. package/dist/{chunk-JAX56OYG.js → chunk-VNFUCH6T.js} +1 -1
  163. package/dist/{chunk-NDMISEDF.js → chunk-VS7QVU3Z.js} +1 -1
  164. package/dist/{chunk-XE5QH4D7.js → chunk-W4KE7AO6.js} +1 -1
  165. package/dist/{chunk-W56I6HOT.js → chunk-WEPO4J2F.js} +1 -1
  166. package/dist/{chunk-QN6SITWN.js → chunk-WEXOA4C4.js} +1 -1
  167. package/dist/{chunk-DH5E6NM3.js → chunk-WLWHCUPZ.js} +1 -1
  168. package/dist/{chunk-WNE2MZAZ.js → chunk-XGKCPD6W.js} +1 -1
  169. package/dist/{chunk-CGH5Y6XE.js → chunk-XNPUZRWP.js} +1 -1
  170. package/dist/{chunk-PYILLIGT.js → chunk-XNVOKAF2.js} +1 -1
  171. package/dist/{chunk-EJY4LA2S.js → chunk-XSMCQLJW.js} +1 -1
  172. package/dist/chunk-XUUIBSLW.js +1 -0
  173. package/dist/{chunk-RW2MONAS.js → chunk-XWQM2NZ2.js} +1 -1
  174. package/dist/{chunk-TWS34WUT.js → chunk-Y3PY5LP7.js} +1 -1
  175. package/dist/{chunk-FU4UVINZ.js → chunk-Y62EMOQA.js} +1 -1
  176. package/dist/{chunk-PQCALXSD.js → chunk-Y743UVBS.js} +1 -1
  177. package/dist/{chunk-OMEWUFUL.js → chunk-YBSX53QP.js} +1 -1
  178. package/dist/{chunk-7GJYJ6DU.js → chunk-YHCP326A.js} +1 -1
  179. package/dist/{chunk-B477XHLZ.js → chunk-YHESTFMZ.js} +1 -1
  180. package/dist/{chunk-R6IJRVVM.js → chunk-YPCXVZ2N.js} +1 -1
  181. package/dist/{chunk-HVU3D3ZU.js → chunk-YT27FIQN.js} +2 -2
  182. package/dist/{chunk-N4AR2B6D.js → chunk-YTR5JHNJ.js} +1 -1
  183. package/dist/{chunk-SHBB5GST.js → chunk-YYA5VGDW.js} +1 -1
  184. package/dist/{chunk-XRJ2GQ24.js → chunk-Z6X2GT6Q.js} +1 -1
  185. package/dist/{chunk-FNKTF2OF.js → chunk-ZEBMW5KS.js} +1 -1
  186. package/dist/{chunk-SZ2JOXTG.js → chunk-ZEE32UH6.js} +1 -1
  187. package/dist/{chunk-4S2WKMLJ.js → chunk-ZTICX3AO.js} +1 -1
  188. package/dist/cli/commands/app/app-logs/sources.js +1 -1
  189. package/dist/cli/commands/app/build.js +1 -1
  190. package/dist/cli/commands/app/bulk/cancel.js +1 -1
  191. package/dist/cli/commands/app/bulk/execute.js +1 -1
  192. package/dist/cli/commands/app/bulk/status.js +1 -1
  193. package/dist/cli/commands/app/config/link.js +1 -1
  194. package/dist/cli/commands/app/config/pull.js +1 -1
  195. package/dist/cli/commands/app/config/use.js +1 -1
  196. package/dist/cli/commands/app/config/validate.js +1 -1
  197. package/dist/cli/commands/app/demo/watcher.js +1 -1
  198. package/dist/cli/commands/app/deploy.js +1 -1
  199. package/dist/cli/commands/app/dev/clean.js +1 -1
  200. package/dist/cli/commands/app/dev.js +1 -1
  201. package/dist/cli/commands/app/env/pull.js +1 -1
  202. package/dist/cli/commands/app/env/show.js +1 -1
  203. package/dist/cli/commands/app/execute.js +1 -1
  204. package/dist/cli/commands/app/function/build.js +1 -1
  205. package/dist/cli/commands/app/function/info.js +1 -1
  206. package/dist/cli/commands/app/function/replay.js +1 -1
  207. package/dist/cli/commands/app/function/run.js +1 -1
  208. package/dist/cli/commands/app/function/schema.js +1 -1
  209. package/dist/cli/commands/app/function/typegen.js +1 -1
  210. package/dist/cli/commands/app/generate/extension.js +1 -1
  211. package/dist/cli/commands/app/graphiql.js +1 -1
  212. package/dist/cli/commands/app/import/channel-config.js +1 -1
  213. package/dist/cli/commands/app/import/custom-data-definitions.js +1 -1
  214. package/dist/cli/commands/app/import/dashboard-extensions.js +1 -1
  215. package/dist/cli/commands/app/import-custom-data-definitions.js +1 -1
  216. package/dist/cli/commands/app/import-extensions.js +1 -1
  217. package/dist/cli/commands/app/info.js +1 -1
  218. package/dist/cli/commands/app/init.js +1 -1
  219. package/dist/cli/commands/app/logs.js +1 -1
  220. package/dist/cli/commands/app/release.js +1 -1
  221. package/dist/cli/commands/app/security/check.js +1 -1
  222. package/dist/cli/commands/app/security/clean.js +1 -1
  223. package/dist/cli/commands/app/security/instructions.js +1 -1
  224. package/dist/cli/commands/app/security/record.js +1 -1
  225. package/dist/cli/commands/app/security/review.js +1 -1
  226. package/dist/cli/commands/app/subscription-migrations/cancel.js +1 -1
  227. package/dist/cli/commands/app/subscription-migrations/list.js +1 -1
  228. package/dist/cli/commands/app/subscription-migrations/schedule.js +1 -1
  229. package/dist/cli/commands/app/subscription-migrations/status.js +1 -1
  230. package/dist/cli/commands/app/subscription-migrations/unschedule.js +1 -1
  231. package/dist/cli/commands/app/versions/list.js +1 -1
  232. package/dist/cli/commands/app/webhook/trigger.js +1 -1
  233. package/dist/cli/commands/auth/login.js +1 -1
  234. package/dist/cli/commands/auth/logout.js +1 -1
  235. package/dist/cli/commands/cache/clear.js +1 -1
  236. package/dist/cli/commands/config/autoupgrade/off.js +1 -1
  237. package/dist/cli/commands/config/autoupgrade/on.js +1 -1
  238. package/dist/cli/commands/config/autoupgrade/status.js +1 -1
  239. package/dist/cli/commands/debug/command-flags.js +1 -1
  240. package/dist/cli/commands/doc/fetch.js +1 -1
  241. package/dist/cli/commands/doc/search.js +1 -1
  242. package/dist/cli/commands/docs/generate.js +1 -1
  243. package/dist/cli/commands/doctor-release/doctor-release.js +1 -1
  244. package/dist/cli/commands/doctor-release/theme/index.js +1 -1
  245. package/dist/cli/commands/help.js +1 -1
  246. package/dist/cli/commands/kitchen-sink/async.js +1 -1
  247. package/dist/cli/commands/kitchen-sink/index.js +1 -1
  248. package/dist/cli/commands/kitchen-sink/prompts.js +1 -1
  249. package/dist/cli/commands/kitchen-sink/static.js +1 -1
  250. package/dist/cli/commands/notifications/generate.js +1 -1
  251. package/dist/cli/commands/notifications/list.js +1 -1
  252. package/dist/cli/commands/organization/list.js +1 -1
  253. package/dist/cli/commands/search.js +1 -1
  254. package/dist/cli/commands/send-analytics.js +1 -1
  255. package/dist/cli/commands/theme/check.js +1 -1
  256. package/dist/cli/commands/theme/console.js +1 -1
  257. package/dist/cli/commands/theme/delete.js +1 -1
  258. package/dist/cli/commands/theme/dev.js +1 -1
  259. package/dist/cli/commands/theme/duplicate.js +1 -1
  260. package/dist/cli/commands/theme/info.js +1 -1
  261. package/dist/cli/commands/theme/init.js +1 -1
  262. package/dist/cli/commands/theme/language-server.js +1 -1
  263. package/dist/cli/commands/theme/list.js +1 -1
  264. package/dist/cli/commands/theme/metafields/pull.js +1 -1
  265. package/dist/cli/commands/theme/open.js +1 -1
  266. package/dist/cli/commands/theme/package.js +1 -1
  267. package/dist/cli/commands/theme/preview.js +1 -1
  268. package/dist/cli/commands/theme/profile.js +1 -1
  269. package/dist/cli/commands/theme/publish.js +1 -1
  270. package/dist/cli/commands/theme/pull.js +1 -1
  271. package/dist/cli/commands/theme/push.js +1 -1
  272. package/dist/cli/commands/theme/rename.js +1 -1
  273. package/dist/cli/commands/theme/share.js +1 -1
  274. package/dist/cli/commands/upgrade.js +1 -1
  275. package/dist/cli/commands/version.js +1 -1
  276. package/dist/cli/help.js +1 -1
  277. package/dist/{command-json-schema-HYYJSZAH.js → command-json-schema-SS4GDJTQ.js} +1 -1
  278. package/dist/command-registry.js +1 -1
  279. package/dist/{conf-store-CDZ5YSQM.js → conf-store-54YJCIDK.js} +1 -1
  280. package/dist/{custom-oclif-loader-NVOK22CJ.js → custom-oclif-loader-3UBH7Q7R.js} +1 -1
  281. package/dist/{deprecations-33DG6ZUL.js → deprecations-ZX7ZKF6L.js} +1 -1
  282. package/dist/dist-JMNE7MP6.js +1 -0
  283. package/dist/dist-M2AXGBOL.js +1 -0
  284. package/dist/{environment-ZUTBXY7U.js → environment-RSUK27TA.js} +1 -1
  285. package/dist/environments-KD2IDYPG.js +1 -0
  286. package/dist/{error-V77H2UYX.js → error-AA6LW3PN.js} +1 -1
  287. package/dist/error-handler-4VW3AV2G.js +1 -0
  288. package/dist/{fs-SKH3XZU7.js → fs-4QZCAEP7.js} +1 -1
  289. package/dist/hooks/did-you-mean.js +1 -1
  290. package/dist/hooks/hydrogen-init.js +1 -1
  291. package/dist/hooks/postrun.js +1 -1
  292. package/dist/hooks/prerun.js +1 -1
  293. package/dist/hooks/public-metadata.js +1 -1
  294. package/dist/hooks/sensitive-metadata.js +1 -1
  295. package/dist/hooks/tunnel-provider.js +1 -1
  296. package/dist/hooks/tunnel-start.js +1 -1
  297. package/dist/index.js +1 -1
  298. package/dist/{is-global-2G4BLF7H.js → is-global-FKG327CG.js} +1 -1
  299. package/dist/{json-error-WSMAL66C.js → json-error-32ETFU3V.js} +1 -1
  300. package/dist/{local-G2Z24BHM.js → local-R3UAQN7T.js} +1 -1
  301. package/dist/{metadata-Y3RKC4P2.js → metadata-JWJG4JV4.js} +1 -1
  302. package/dist/{node-package-manager-A7HTBJKY.js → node-package-manager-M4XHUTQR.js} +1 -1
  303. package/dist/notifications-system-QVM2JWKB.js +1 -0
  304. package/dist/{os-7VQXVZWF.js → os-FEHBQQKP.js} +1 -1
  305. package/dist/{output-ZFFHJGNK.js → output-2LS5AOAH.js} +1 -1
  306. package/dist/{path-6YMSTSWG.js → path-CPAYTWQW.js} +1 -1
  307. package/dist/system-TMD2LYZM.js +1 -0
  308. package/dist/tsconfig.tsbuildinfo +1 -1
  309. package/dist/{ui-YSFALYSL.js → ui-FNPICAAH.js} +1 -1
  310. package/dist/upgrade-YYPP5VZY.js +1 -0
  311. package/dist/version-OX3MORI6.js +1 -0
  312. package/dist/version-P7D5ME4Z.js +1 -0
  313. package/dist/{workerd-RNDPF36Q.js → workerd-TKVRZK2F.js} +1 -1
  314. package/oclif.manifest.json +37 -13
  315. package/package.json +7 -7
  316. package/dist/analytics-H2ANKZ2S.js +0 -1
  317. package/dist/analytics-Q6HJRPRX.js +0 -1
  318. package/dist/chunk-246AZCDT.js +0 -1
  319. package/dist/chunk-3VYOLEQE.js +0 -2
  320. package/dist/chunk-5JW2EYSE.js +0 -15
  321. package/dist/chunk-6SO5GA6P.js +0 -2
  322. package/dist/chunk-BK4VCXDD.js +0 -1
  323. package/dist/chunk-DV77BSKW.js +0 -1
  324. package/dist/chunk-FQKURDZR.js +0 -6
  325. package/dist/chunk-IOS4IDZ2.js +0 -3
  326. package/dist/chunk-JUVJNIEA.js +0 -1
  327. package/dist/chunk-KOYBR5MV.js +0 -1
  328. package/dist/chunk-P6TOIMMF.js +0 -1
  329. package/dist/chunk-QLHPTMIH.js +0 -1
  330. package/dist/chunk-SDHDDNKM.js +0 -4
  331. package/dist/chunk-TQ7MHGY4.js +0 -1
  332. package/dist/chunk-TUE67I2F.js +0 -7
  333. package/dist/chunk-YTJ3EPD3.js +0 -1
  334. package/dist/chunk-Z57YWHOE.js +0 -1
  335. package/dist/dist-DODCXJ2A.js +0 -1
  336. package/dist/dist-YXMAKIFS.js +0 -1
  337. package/dist/environments-KBRQNE4R.js +0 -1
  338. package/dist/error-handler-JY3ZKE2G.js +0 -1
  339. package/dist/notifications-system-E64OSVXF.js +0 -1
  340. package/dist/system-ZLITSFDC.js +0 -1
  341. package/dist/upgrade-I4JTR4LA.js +0 -1
  342. package/dist/version-AOVO47AW.js +0 -1
  343. package/dist/version-LQV54JBC.js +0 -1
@@ -1 +1 @@
1
- import{A as f,B as g,C as h,D as i,E as j,F as k,G as l,H as m,I as n,J as o,K as p,L as q,M as r,l as a,m as b,x as c,y as d,z as e}from"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{b as handleCtrlC,r as isTTY,q as keypress,a as render,k as renderAutocompletePrompt,c as renderConcurrent,j as renderConfirmationPrompt,p as renderDangerousConfirmationPrompt,g as renderError,h as renderFatalError,d as renderInfo,i as renderSelectPrompt,n as renderSingleTask,e as renderSuccess,l as renderTable,m as renderTasks,o as renderTextPrompt,f as renderWarning};
1
+ import{A as f,B as g,C as h,D as i,E as j,F as k,G as l,H as m,I as n,J as o,K as p,L as q,M as r,l as a,m as b,x as c,y as d,z as e}from"./chunk-47IQIIFX.js";import"./chunk-7E4MJCVE.js";import"./chunk-73D5O7A3.js";import"./chunk-DYPZX7MW.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-HILYTMVA.js";import"./chunk-7VAKNVFD.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-DSS4ECIH.js";import"./chunk-Q37WAD6F.js";import"./chunk-636CTEW7.js";import"./chunk-4JGWKUJN.js";import"./chunk-UWI76E2L.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-UEBUGSBT.js";import"./chunk-L4DFMMOI.js";import"./chunk-FOAV642V.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-6IDEDOXW.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{b as handleCtrlC,r as isTTY,q as keypress,a as render,k as renderAutocompletePrompt,c as renderConcurrent,j as renderConfirmationPrompt,p as renderDangerousConfirmationPrompt,g as renderError,h as renderFatalError,d as renderInfo,i as renderSelectPrompt,n as renderSingleTask,e as renderSuccess,l as renderTable,m as renderTasks,o as renderTextPrompt,f as renderWarning};
@@ -0,0 +1 @@
1
+ import{a as c,b as d,c as e,d as f,e as g,f as h}from"./chunk-AMLCWRHU.js";import"./chunk-TFXUDHCP.js";import"./chunk-F3PZGSOY.js";import"./chunk-LFOBYEWG.js";import"./chunk-3V4VL3SD.js";import"./chunk-ZDF5N422.js";import"./chunk-3C4WVKSO.js";import"./chunk-MPW2YJWU.js";import{s as a,t as b}from"./chunk-QTLGMJDW.js";import"./chunk-XUUIBSLW.js";import"./chunk-5BTLE67Z.js";import"./chunk-T7KHS6RF.js";import"./chunk-47IQIIFX.js";import"./chunk-7E4MJCVE.js";import"./chunk-73D5O7A3.js";import"./chunk-DYPZX7MW.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-HILYTMVA.js";import"./chunk-YRHFPXC3.js";import"./chunk-7VAKNVFD.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-DSS4ECIH.js";import"./chunk-Q37WAD6F.js";import"./chunk-636CTEW7.js";import"./chunk-4JGWKUJN.js";import"./chunk-UWI76E2L.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-UEBUGSBT.js";import"./chunk-L4DFMMOI.js";import"./chunk-FOAV642V.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-6IDEDOXW.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{c as cliInstallCommand,a as getAutoUpgradeEnabled,h as getOutputUpdateCLIReminder,f as hasBlockingAutoUpgradeNotification,d as runCLIUpgrade,b as setAutoUpgradeEnabled,e as versionToAutoUpgrade,g as warnIfUpgradeAvailable};
@@ -0,0 +1 @@
1
+ import{a}from"./chunk-XUUIBSLW.js";import"./chunk-VKWPEFWQ.js";export{a as CLI_KIT_VERSION};
@@ -0,0 +1 @@
1
+ import{a,b,c,d}from"./chunk-TFXUDHCP.js";import"./chunk-47IQIIFX.js";import"./chunk-7E4MJCVE.js";import"./chunk-73D5O7A3.js";import"./chunk-DYPZX7MW.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-HILYTMVA.js";import"./chunk-7VAKNVFD.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-DSS4ECIH.js";import"./chunk-Q37WAD6F.js";import"./chunk-636CTEW7.js";import"./chunk-4JGWKUJN.js";import"./chunk-UWI76E2L.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-UEBUGSBT.js";import"./chunk-L4DFMMOI.js";import"./chunk-FOAV642V.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-6IDEDOXW.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{b as globalCLIVersion,d as isMajorVersionChange,c as isPreReleaseVersion,a as localCLIVersion};
@@ -1,4 +1,4 @@
1
- import{Ca as b,Da as k,Ea as E,F as v,Fa as A,Ga as I,Ha as L,Ia as x,Ta as s,Va as B,Wa as O}from"./chunk-7ARGLS6W.js";import"./chunk-IOS4IDZ2.js";import"./chunk-7IRPE3M5.js";import"./chunk-YLQ3LNNY.js";import"./chunk-VJEKDBGZ.js";import"./chunk-EZ5F4ZFY.js";import"./chunk-LFOBYEWG.js";import"./chunk-3E3MCY5O.js";import"./chunk-ZDF5N422.js";import"./chunk-FQKURDZR.js";import"./chunk-MPW2YJWU.js";import"./chunk-Q555FV2X.js";import"./chunk-TQ7MHGY4.js";import"./chunk-LIQSNIB3.js";import"./chunk-T7KHS6RF.js";import{z as w}from"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-YRHFPXC3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import{i as R}from"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import{Oa as g,Pb as q,qa as y}from"./chunk-3F42A3XV.js";import{i as N}from"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import{f as h,i as f}from"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import{g as p}from"./chunk-VKWPEFWQ.js";p();import{createRequire as C}from"node:module";async function ee({root:c,appPort:D,inspectorPort:P,assetsPort:S,debug:U=!1,watch:W=!1,buildPathWorkerFile:$,buildPathClient:M,env:l}){let{createMiniOxygen:F,Response:u}=await v("@shopify/mini-oxygen",c).catch(L);k({Response:u});async function _(){let r=C(import.meta.url).resolve("@shopify/hydrogen/customer-account.schema.json");return new u(g(r),{headers:{"Content-Type":"application/json"}})}let t="hydrogen",o=h(c,$),m=()=>y(o).catch(e=>{throw new R(`Could not read worker file.
1
+ import{Ca as b,Da as k,Ea as E,F as v,Fa as A,Ga as I,Ha as L,Ia as x,Ta as s,Va as B,Wa as O}from"./chunk-HSYMUYEZ.js";import"./chunk-FEQHCE2E.js";import"./chunk-LJIJEGND.js";import"./chunk-YLQ3LNNY.js";import"./chunk-VJEKDBGZ.js";import"./chunk-4ZNBEMRT.js";import"./chunk-LFOBYEWG.js";import"./chunk-3V4VL3SD.js";import"./chunk-ZDF5N422.js";import"./chunk-3C4WVKSO.js";import"./chunk-MPW2YJWU.js";import"./chunk-QTLGMJDW.js";import"./chunk-XUUIBSLW.js";import"./chunk-5BTLE67Z.js";import"./chunk-T7KHS6RF.js";import{z as w}from"./chunk-47IQIIFX.js";import"./chunk-7E4MJCVE.js";import"./chunk-73D5O7A3.js";import"./chunk-DYPZX7MW.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-HILYTMVA.js";import"./chunk-YRHFPXC3.js";import"./chunk-7VAKNVFD.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-DSS4ECIH.js";import{i as R}from"./chunk-Q37WAD6F.js";import"./chunk-636CTEW7.js";import"./chunk-4JGWKUJN.js";import{Oa as g,Pb as q,qa as y}from"./chunk-UWI76E2L.js";import{i as N}from"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-UEBUGSBT.js";import"./chunk-L4DFMMOI.js";import"./chunk-FOAV642V.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import{e as h,h as f}from"./chunk-6IDEDOXW.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import{g as p}from"./chunk-VKWPEFWQ.js";p();import{createRequire as C}from"node:module";async function ee({root:c,appPort:D,inspectorPort:P,assetsPort:S,debug:U=!1,watch:W=!1,buildPathWorkerFile:$,buildPathClient:M,env:l}){let{createMiniOxygen:F,Response:u}=await v("@shopify/mini-oxygen",c).catch(L);k({Response:u});async function _(){let r=C(import.meta.url).resolve("@shopify/hydrogen/customer-account.schema.json");return new u(g(r),{headers:{"Content-Type":"application/json"}})}let t="hydrogen",o=h(c,$),m=()=>y(o).catch(e=>{throw new R(`Could not read worker file.
2
2
 
3
3
  `+e.stack,"Did you build the project?")}),i=F({debug:U,port:D,host:"localhost",liveReload:W,requestHook:x,inspectorPort:P,inspectWorkerName:t,assets:{port:S,directory:M},workers:[{name:"hydrogen:middleware",modules:!0,script:`export default { fetch: (request, env) => {
4
4
  const url = new URL(request.url);
@@ -826,7 +826,16 @@
826
826
  "app:security:check": {
827
827
  "aliases": [],
828
828
  "args": {},
829
- "description": "Runs an app security check locally and writes `deterministic-findings.json` and `agent-checks.json` to the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`; the other `app security` commands take the same selection flags and find the same directory. Every run replaces both files, so it's always safe to run the check again.\n\n`deterministic-findings.json` holds the deterministic scan results. `agent-checks.json` holds the checks for your coding agent to investigate; the agent's results are recorded with `shopify app security record`. Use `--config` to select a specific app configuration when the project has multiple `shopify.app*.toml` files; the check inspects only that configuration. Use `--client-id` to replace the configuration's client ID for this run. `--client-id` is checked against your Shopify account before anything is scanned, so it needs you to be logged in. When no app configuration exists, use `--without-app-config --client-id <client-id>` to scan `--path` anyway with config checks skipped; in an interactive terminal the command offers to do this.\n\nThe check scans the app directory and each `--include-dir`. Git ignore rules apply by default: a file or directory that Git ignores is skipped, using the rules of the repository that contains it, while files that Git tracks are always scanned. Use `--no-git-ignore` to turn Git ignore rules off for every scanned directory.\n\nUse `--exclude` to skip more paths. Each value is a glob that is matched against the path relative to the working directory, so a path above it starts with `../`, and a name at any depth needs `**/`, for example `--exclude '**/generated'`. Repeat the flag to add globs. An exclusion can't remove the selected app configuration file. Quote each value so your shell doesn't expand `*`. The coding-agent instructions this check offers repeat the globs. Other `app security` commands don't take `--exclude` or `--no-git-ignore`, so pass the same flags each time you run the check.\n\nUse `--list-files` to check the scope before scanning: it prints the files the check would gather, one path per line and relative to the app directory, and then stops. It writes no results and never prompts. `--client-id` is still checked, but doesn't change the list.\n\nIn interactive terminals, the command offers to copy the coding-agent instructions, print them, or choose nothing; copying is the default. In CI and other non-interactive environments, instructions aren't offered unless you pass `--yes`, which prints them. You can also run `shopify app security instructions` to print, copy, or write them later.",
829
+ "description": "Runs an app security check locally and writes `deterministic-findings.json` and `agent-checks.json` to the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`; the other `app security` commands take the same selection flags and find the same directory. Every run replaces both files, so it's always safe to run the check again.\n\n`deterministic-findings.json` holds the deterministic scan results. `agent-checks.json` holds the checks for your coding agent to investigate; the agent's results are recorded with `shopify app security record`. Use `--config` to select a specific app configuration when the project has multiple `shopify.app*.toml` files; the check inspects only that configuration. Use `--client-id` to replace the configuration's client ID for this run. `--client-id` is checked against your Shopify account before anything is scanned, so it needs you to be logged in. When no app configuration exists, use `--without-app-config --client-id <client-id>` to scan `--path` anyway with config checks skipped; in an interactive terminal the command offers to do this.\n\nThe check scans the app directory and each `--include-dir`. Git ignore rules apply by default: a file or directory that Git ignores is skipped, using the rules of the repository that contains it, while files that Git tracks are always scanned. Use `--no-git-ignore` to turn Git ignore rules off for every scanned directory. When the check uses Git, it requires Git 2.38.0 or later.\n\nUse `--exclude` to skip more paths. Each value is a glob that is matched against the path relative to the working directory, so a path above it starts with `../`, and a name at any depth needs `**/`, for example `--exclude '**/generated'`. Repeat the flag to add globs. An exclusion can't remove the selected app configuration file. Quote each value so your shell doesn't expand `*`. The coding-agent instructions this check offers repeat the globs. Other `app security` commands don't take `--exclude` or `--no-git-ignore`, so pass the same flags each time you run the check.\n\nUse `--list-files` to check the scope before scanning: it prints the files the check would gather, one path per line and relative to the app directory, and then stops. It writes no results and never prompts. `--client-id` is still checked, but doesn't change the list.\n\nIn interactive terminals, the command offers to copy the coding-agent instructions, print them, or choose nothing; copying is the default. In CI and other non-interactive environments, instructions aren't offered unless you pass `--print-instructions`, which prints them. You can also run `shopify app security instructions` to print, copy, or write them later.\n\nReports the number of findings to Shopify as usage telemetry, but not finding details. See \"usage reporting\" (https://shopify.dev/docs/api/shopify-cli#usage-reporting) for details.",
830
+ "examples": [
831
+ "<%= config.bin %> <%= command.id %>",
832
+ "<%= config.bin %> <%= command.id %> --include-dir ../backend",
833
+ "<%= config.bin %> <%= command.id %> --path extensions --config production --include-dir .",
834
+ "<%= config.bin %> <%= command.id %> --without-app-config --client-id <client-id>",
835
+ "<%= config.bin %> <%= command.id %> --path app --include-dir . --exclude marketing --exclude \"**/generated\"",
836
+ "<%= config.bin %> <%= command.id %> --no-git-ignore --exclude local-data",
837
+ "<%= config.bin %> <%= command.id %> --include-dir ../backend --list-files"
838
+ ],
830
839
  "flags": {
831
840
  "json-schema": {
832
841
  "description": "Print the command's JSON schemas.",
@@ -927,7 +936,7 @@
927
936
  "description": "Print the files the check would gather, one path per line, and stop. Nothing is scanned, no results are written, and nothing is prompted for.",
928
937
  "env": "SHOPIFY_FLAG_LIST_FILES",
929
938
  "exclusive": [
930
- "yes",
939
+ "print-instructions",
931
940
  "skip-instructions",
932
941
  "blocking"
933
942
  ],
@@ -936,7 +945,7 @@
936
945
  "type": "boolean"
937
946
  },
938
947
  "blocking": {
939
- "description": "The minimum finding severity that causes a non-zero exit code.",
948
+ "description": "The minimum finding severity that causes a non-zero exit code: high, medium, or low. Defaults to none, which never fails on findings.",
940
949
  "env": "SHOPIFY_FLAG_APP_SECURITY_BLOCKING",
941
950
  "name": "blocking",
942
951
  "default": "none",
@@ -950,21 +959,36 @@
950
959
  ],
951
960
  "type": "option"
952
961
  },
962
+ "print-instructions": {
963
+ "description": "Print coding-agent instructions without prompting for how to deliver them.",
964
+ "env": "SHOPIFY_FLAG_APP_SECURITY_PRINT_INSTRUCTIONS",
965
+ "exclusive": [
966
+ "skip-instructions"
967
+ ],
968
+ "name": "print-instructions",
969
+ "allowNo": false,
970
+ "type": "boolean"
971
+ },
953
972
  "yes": {
973
+ "deprecated": {
974
+ "to": "--print-instructions"
975
+ },
954
976
  "description": "Print coding-agent instructions without prompting.",
955
977
  "env": "SHOPIFY_FLAG_YES",
956
978
  "exclusive": [
957
- "skip-instructions"
979
+ "skip-instructions",
980
+ "list-files"
958
981
  ],
982
+ "hidden": true,
959
983
  "name": "yes",
960
984
  "allowNo": false,
961
985
  "type": "boolean"
962
986
  },
963
987
  "skip-instructions": {
964
- "description": "Don't offer to show coding-agent instructions.",
988
+ "description": "Don't offer the coding-agent instructions after the scan. Use it when you want only the deterministic scan results.",
965
989
  "env": "SHOPIFY_FLAG_APP_SECURITY_SKIP_INSTRUCTIONS",
966
990
  "exclusive": [
967
- "yes"
991
+ "print-instructions"
968
992
  ],
969
993
  "name": "skip-instructions",
970
994
  "allowNo": false,
@@ -980,7 +1004,7 @@
980
1004
  "strict": true,
981
1005
  "summary": "Check an app for Shopify-specific security issues and write deterministic-findings.json and agent-checks.json.",
982
1006
  "enableJsonFlag": false,
983
- "descriptionWithMarkdown": "Runs an app security check locally and writes `deterministic-findings.json` and `agent-checks.json` to the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`; the other `app security` commands take the same selection flags and find the same directory. Every run replaces both files, so it's always safe to run the check again.\n\n`deterministic-findings.json` holds the deterministic scan results. `agent-checks.json` holds the checks for your coding agent to investigate; the agent's results are recorded with `shopify app security record`. Use `--config` to select a specific app configuration when the project has multiple `shopify.app*.toml` files; the check inspects only that configuration. Use `--client-id` to replace the configuration's client ID for this run. `--client-id` is checked against your Shopify account before anything is scanned, so it needs you to be logged in. When no app configuration exists, use `--without-app-config --client-id <client-id>` to scan `--path` anyway with config checks skipped; in an interactive terminal the command offers to do this.\n\nThe check scans the app directory and each `--include-dir`. Git ignore rules apply by default: a file or directory that Git ignores is skipped, using the rules of the repository that contains it, while files that Git tracks are always scanned. Use `--no-git-ignore` to turn Git ignore rules off for every scanned directory.\n\nUse `--exclude` to skip more paths. Each value is a glob that is matched against the path relative to the working directory, so a path above it starts with `../`, and a name at any depth needs `**/`, for example `--exclude '**/generated'`. Repeat the flag to add globs. An exclusion can't remove the selected app configuration file. Quote each value so your shell doesn't expand `*`. The coding-agent instructions this check offers repeat the globs. Other `app security` commands don't take `--exclude` or `--no-git-ignore`, so pass the same flags each time you run the check.\n\nUse `--list-files` to check the scope before scanning: it prints the files the check would gather, one path per line and relative to the app directory, and then stops. It writes no results and never prompts. `--client-id` is still checked, but doesn't change the list.\n\nIn interactive terminals, the command offers to copy the coding-agent instructions, print them, or choose nothing; copying is the default. In CI and other non-interactive environments, instructions aren't offered unless you pass `--yes`, which prints them. You can also run `shopify app security instructions` to print, copy, or write them later.",
1007
+ "descriptionWithMarkdown": "Runs an app security check locally and writes `deterministic-findings.json` and `agent-checks.json` to the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`; the other `app security` commands take the same selection flags and find the same directory. Every run replaces both files, so it's always safe to run the check again.\n\n`deterministic-findings.json` holds the deterministic scan results. `agent-checks.json` holds the checks for your coding agent to investigate; the agent's results are recorded with `shopify app security record`. Use `--config` to select a specific app configuration when the project has multiple `shopify.app*.toml` files; the check inspects only that configuration. Use `--client-id` to replace the configuration's client ID for this run. `--client-id` is checked against your Shopify account before anything is scanned, so it needs you to be logged in. When no app configuration exists, use `--without-app-config --client-id <client-id>` to scan `--path` anyway with config checks skipped; in an interactive terminal the command offers to do this.\n\nThe check scans the app directory and each `--include-dir`. Git ignore rules apply by default: a file or directory that Git ignores is skipped, using the rules of the repository that contains it, while files that Git tracks are always scanned. Use `--no-git-ignore` to turn Git ignore rules off for every scanned directory. When the check uses Git, it requires Git 2.38.0 or later.\n\nUse `--exclude` to skip more paths. Each value is a glob that is matched against the path relative to the working directory, so a path above it starts with `../`, and a name at any depth needs `**/`, for example `--exclude '**/generated'`. Repeat the flag to add globs. An exclusion can't remove the selected app configuration file. Quote each value so your shell doesn't expand `*`. The coding-agent instructions this check offers repeat the globs. Other `app security` commands don't take `--exclude` or `--no-git-ignore`, so pass the same flags each time you run the check.\n\nUse `--list-files` to check the scope before scanning: it prints the files the check would gather, one path per line and relative to the app directory, and then stops. It writes no results and never prompts. `--client-id` is still checked, but doesn't change the list.\n\nIn interactive terminals, the command offers to copy the coding-agent instructions, print them, or choose nothing; copying is the default. In CI and other non-interactive environments, instructions aren't offered unless you pass `--print-instructions`, which prints them. You can also run `shopify app security instructions` to print, copy, or write them later.\n\nReports the number of findings to Shopify as usage telemetry, but not finding details. See [usage reporting](https://shopify.dev/docs/api/shopify-cli#usage-reporting) for details.",
984
1008
  "customPluginName": "@shopify/app"
985
1009
  },
986
1010
  "app:security:clean": {
@@ -1208,7 +1232,7 @@
1208
1232
  "app:security:record": {
1209
1233
  "aliases": [],
1210
1234
  "args": {},
1211
- "description": "Reads a coding agent's complete findings document from stdin, validates it, and replaces `agent-findings.json` in the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`. `--client-id` is checked against your Shopify account before anything is read, so it needs you to be logged in.\n\nThe document must include a `scope` with the `include_dirs`, `excludes` and `no_git_ignore` values of the `check` run it describes, exactly as typed. It's recorded as reported and never compared with the scan's files.\n\nThe document is recorded all or nothing: if anything is invalid, the command fails with every error, writes nothing, and exits with a non-zero code. It needs the results directory that `shopify app security check` creates.",
1235
+ "description": "Reads a coding agent's complete findings document from stdin, validates it, and replaces `agent-findings.json` in the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`. `--client-id` is checked against your Shopify account before anything is read, so it needs you to be logged in.\n\nThe document must include a `scope` with the `include_dirs`, `excludes` and `no_git_ignore` values of the `check` run it describes, exactly as typed. It's recorded as reported and never compared with the scan's files.\n\nThe document is recorded all or nothing: if anything is invalid, the command fails with every error, writes nothing, and exits with a non-zero code. It needs the results directory that `shopify app security check` creates.\n\nReports the number of findings to Shopify as usage telemetry, but not finding details. See \"usage reporting\" (https://shopify.dev/docs/api/shopify-cli#usage-reporting) for details.",
1212
1236
  "flags": {
1213
1237
  "json-schema": {
1214
1238
  "description": "Print the command's JSON schemas.",
@@ -1294,13 +1318,13 @@
1294
1318
  "strict": true,
1295
1319
  "summary": "Record agent findings from an app security check.",
1296
1320
  "enableJsonFlag": false,
1297
- "descriptionWithMarkdown": "Reads a coding agent's complete findings document from stdin, validates it, and replaces `agent-findings.json` in the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`. `--client-id` is checked against your Shopify account before anything is read, so it needs you to be logged in.\n\nThe document must include a `scope` with the `include_dirs`, `excludes` and `no_git_ignore` values of the `check` run it describes, exactly as typed. It's recorded as reported and never compared with the scan's files.\n\nThe document is recorded all or nothing: if anything is invalid, the command fails with every error, writes nothing, and exits with a non-zero code. It needs the results directory that `shopify app security check` creates.",
1321
+ "descriptionWithMarkdown": "Reads a coding agent's complete findings document from stdin, validates it, and replaces `agent-findings.json` in the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`. `--client-id` is checked against your Shopify account before anything is read, so it needs you to be logged in.\n\nThe document must include a `scope` with the `include_dirs`, `excludes` and `no_git_ignore` values of the `check` run it describes, exactly as typed. It's recorded as reported and never compared with the scan's files.\n\nThe document is recorded all or nothing: if anything is invalid, the command fails with every error, writes nothing, and exits with a non-zero code. It needs the results directory that `shopify app security check` creates.\n\nReports the number of findings to Shopify as usage telemetry, but not finding details. See [usage reporting](https://shopify.dev/docs/api/shopify-cli#usage-reporting) for details.",
1298
1322
  "customPluginName": "@shopify/app"
1299
1323
  },
1300
1324
  "app:security:review": {
1301
1325
  "aliases": [],
1302
1326
  "args": {},
1303
- "description": "Combines the deterministic results (`deterministic-findings.json`, written by `shopify app security check`) with the recorded agent results (`agent-findings.json`, written by `shopify app security record`) and shows one view of every check: its findings, status and source. Both files are in the results directory, `.shopify/app-security/<results key>/`. `--client-id` is checked against your Shopify account before any results are read, so it needs you to be logged in.\n\nThe summary shows the scan directories and the scope of the latest scan, and the scope the agent reported. It notes when the agent findings were recorded for a different scope than the latest scan; that doesn't change the exit code.\n\nThe agent results are optional. Use `--check-id` to narrow the review to specific checks, `--verbose` for full reasoning, evidence and suppressed findings, and `--blocking` to exit with code 1 when a check with findings is at or above a severity.",
1327
+ "description": "Combines the deterministic results (`deterministic-findings.json`, written by `shopify app security check`) with the recorded agent results (`agent-findings.json`, written by `shopify app security record`) and shows one view of every check: its findings, status and source. Both files are in the results directory, `.shopify/app-security/<results key>/`. `--client-id` is checked against your Shopify account before any results are read, so it needs you to be logged in.\n\nThe summary shows the scan directories and the scope of the latest scan, and the scope the agent reported. It notes when the agent findings were recorded for a different scope than the latest scan; that doesn't change the exit code.\n\nThe agent results are optional. Use `--check-id` to narrow the review to specific checks, `--verbose` for full reasoning, evidence and suppressed findings, and `--blocking` to exit with code 1 when a check with findings is at or above a severity.\n\nReports the number of findings to Shopify as usage telemetry, but not finding details. See \"usage reporting\" (https://shopify.dev/docs/api/shopify-cli#usage-reporting) for details.",
1304
1328
  "flags": {
1305
1329
  "json-schema": {
1306
1330
  "description": "Print the command's JSON schemas.",
@@ -1385,7 +1409,7 @@
1385
1409
  "type": "option"
1386
1410
  },
1387
1411
  "blocking": {
1388
- "description": "The minimum finding severity that causes a non-zero exit code.",
1412
+ "description": "The minimum finding severity that causes a non-zero exit code: high, medium, or low. Defaults to none, which never fails on findings.",
1389
1413
  "env": "SHOPIFY_FLAG_APP_SECURITY_BLOCKING",
1390
1414
  "name": "blocking",
1391
1415
  "default": "none",
@@ -1409,7 +1433,7 @@
1409
1433
  "strict": true,
1410
1434
  "summary": "Show the combined app security check results.",
1411
1435
  "enableJsonFlag": false,
1412
- "descriptionWithMarkdown": "Combines the deterministic results (`deterministic-findings.json`, written by `shopify app security check`) with the recorded agent results (`agent-findings.json`, written by `shopify app security record`) and shows one view of every check: its findings, status and source. Both files are in the results directory, `.shopify/app-security/<results key>/`. `--client-id` is checked against your Shopify account before any results are read, so it needs you to be logged in.\n\nThe summary shows the scan directories and the scope of the latest scan, and the scope the agent reported. It notes when the agent findings were recorded for a different scope than the latest scan; that doesn't change the exit code.\n\nThe agent results are optional. Use `--check-id` to narrow the review to specific checks, `--verbose` for full reasoning, evidence and suppressed findings, and `--blocking` to exit with code 1 when a check with findings is at or above a severity.",
1436
+ "descriptionWithMarkdown": "Combines the deterministic results (`deterministic-findings.json`, written by `shopify app security check`) with the recorded agent results (`agent-findings.json`, written by `shopify app security record`) and shows one view of every check: its findings, status and source. Both files are in the results directory, `.shopify/app-security/<results key>/`. `--client-id` is checked against your Shopify account before any results are read, so it needs you to be logged in.\n\nThe summary shows the scan directories and the scope of the latest scan, and the scope the agent reported. It notes when the agent findings were recorded for a different scope than the latest scan; that doesn't change the exit code.\n\nThe agent results are optional. Use `--check-id` to narrow the review to specific checks, `--verbose` for full reasoning, evidence and suppressed findings, and `--blocking` to exit with code 1 when a check with findings is at or above a severity.\n\nReports the number of findings to Shopify as usage telemetry, but not finding details. See [usage reporting](https://shopify.dev/docs/api/shopify-cli#usage-reporting) for details.",
1413
1437
  "customPluginName": "@shopify/app"
1414
1438
  },
1415
1439
  "app:logs": {
@@ -12516,5 +12540,5 @@
12516
12540
  "descriptionWithMarkdown": "Check whether auto-upgrade is enabled, disabled, or not yet configured.\n\n When auto-upgrade is enabled, Shopify CLI automatically updates to the latest version after each command.\n\n Run `shopify config autoupgrade on` or `shopify config autoupgrade off` to configure it.\n"
12517
12541
  }
12518
12542
  },
12519
- "version": "4.9.2"
12543
+ "version": "4.9.4"
12520
12544
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shopify",
3
- "version": "4.9.2",
3
+ "version": "4.9.4",
4
4
  "private": false,
5
5
  "description": "A CLI tool to build for the Shopify platform",
6
6
  "keywords": [
@@ -50,12 +50,12 @@
50
50
  "@oclif/core": "4.8.3",
51
51
  "@oclif/plugin-commands": "4.1.60",
52
52
  "@oclif/plugin-plugins": "5.4.84",
53
- "@shopify/app": "4.9.2",
54
- "@shopify/store": "4.9.2",
55
- "@shopify/cli-kit": "4.9.2",
56
- "@shopify/plugin-cloudflare": "4.9.2",
57
- "@shopify/plugin-did-you-mean": "4.9.2",
58
- "@shopify/theme": "4.9.2",
53
+ "@shopify/app": "4.9.4",
54
+ "@shopify/store": "4.9.4",
55
+ "@shopify/cli-kit": "4.9.4",
56
+ "@shopify/plugin-cloudflare": "4.9.4",
57
+ "@shopify/plugin-did-you-mean": "4.9.4",
58
+ "@shopify/theme": "4.9.4",
59
59
  "@shopify/cli-hydrogen": "13.0.6",
60
60
  "@types/global-agent": "3.0.0",
61
61
  "@vitest/coverage-istanbul": "^3.2.7",
@@ -1 +0,0 @@
1
- import{ma as a,na as b,oa as c,pa as d,qa as e,ra as f,sa as g}from"./chunk-3E3MCY5O.js";import"./chunk-ZDF5N422.js";import"./chunk-FQKURDZR.js";import"./chunk-MPW2YJWU.js";import"./chunk-Q555FV2X.js";import"./chunk-TQ7MHGY4.js";import"./chunk-LIQSNIB3.js";import"./chunk-T7KHS6RF.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-YRHFPXC3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{g as compileData,d as recordError,f as recordEvent,e as recordRetry,c as recordTiming,b as reportAnalyticsEvent,a as sendAnalyticsEventFromStdin};
@@ -1 +0,0 @@
1
- import{ja as a,ka as b,la as c}from"./chunk-3E3MCY5O.js";import"./chunk-ZDF5N422.js";import"./chunk-FQKURDZR.js";import"./chunk-MPW2YJWU.js";import"./chunk-Q555FV2X.js";import"./chunk-TQ7MHGY4.js";import"./chunk-LIQSNIB3.js";import"./chunk-T7KHS6RF.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-YRHFPXC3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{b as getEnvironmentData,c as getSensitiveEnvironmentData,a as startAnalytics};
@@ -1 +0,0 @@
1
- import{a as o}from"./chunk-M7QFZQ23.js";import{g as e}from"./chunk-VKWPEFWQ.js";e();var t=class extends o{};export{t as a};
@@ -1,2 +0,0 @@
1
- import{g as c}from"./chunk-VKWPEFWQ.js";c();c();c();var E=/^[A-Za-z]:\//;function f(e=""){return e&&e.replace(/\\/g,"/").replace(E,n=>n.toUpperCase())}var j=/^[/\\]{2}/,z=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,A=/^[A-Za-z]:$/,v=/^\/([A-Za-z]:)?$/,$="/",R=":",m=function(e){if(e.length===0)return".";e=f(e);let n=e.match(j),t=l(e),s=e[e.length-1]==="/";return e=P(e,!t),e.length===0?t?"/":s?"./":".":(s&&(e+="/"),A.test(e)&&(e+="/"),n?t?`//${e}`:`//./${e}`:t&&!l(e)?`/${e}`:e)},x=function(...e){if(e.length===0)return".";let n;for(let t of e)t&&t.length>0&&(n===void 0?n=t:n+=`/${t}`);return n===void 0?".":m(n.replace(/\/\/+/g,"/"))};function S(){return typeof process<"u"&&typeof process.cwd=="function"?process.cwd().replace(/\\/g,"/"):"/"}var u=function(...e){e=e.map(s=>f(s));let n="",t=!1;for(let s=e.length-1;s>=-1&&!t;s--){let r=s>=0?e[s]:S();!r||r.length===0||(n=`${r}/${n}`,t=l(r))}return n=P(n,!t),t&&!l(n)?`/${n}`:n.length>0?n:"."};function P(e,n){let t="",s=0,r=-1,o=0,a=null;for(let i=0;i<=e.length;++i){if(i<e.length)a=e[i];else{if(a==="/")break;a="/"}if(a==="/"){if(!(r===i-1||o===1))if(o===2){if(t.length<2||s!==2||t[t.length-1]!=="."||t[t.length-2]!=="."){if(t.length>2){let b=t.lastIndexOf("/");b===-1?(t="",s=0):(t=t.slice(0,b),s=t.length-1-t.lastIndexOf("/")),r=i,o=0;continue}else if(t.length>0){t="",s=0,r=i,o=0;continue}}n&&(t+=t.length>0?"/..":"..",s=2)}else t.length>0?t+=`/${e.slice(r+1,i)}`:t=e.slice(r+1,i),s=i-r-1;r=i,o=0}else a==="."&&o!==-1?++o:o=-1}return t}var l=function(e){return z.test(e)};var T=/.(\.[^./]+)$/,h=function(e){let n=T.exec(f(e));return n&&n[1]||""},p=function(e,n){let t=u(e).replace(v,"$1").split("/"),s=u(n).replace(v,"$1").split("/");if(s[0][1]===":"&&t[0][1]===":"&&t[0]!==s[0])return s.join("/");let r=[...t];for(let o of r){if(s[0]!==o)break;t.shift(),s.shift()}return[...t.map(()=>".."),...s].join("/")},d=function(e){let n=f(e).replace(/\/$/,"").split("/").slice(0,-1);return n.length===1&&A.test(n[0])&&(n[0]+="/"),n.join("/")||(l(e)?"/":".")};var g=function(e,n){let t=f(e).split("/").pop();return n&&t.endsWith(n)?t.slice(0,-n.length):t},_=function(e){let n=f(e).split("/").shift()||"/",t=g(e),s=h(t);return{root:n,dir:d(e),base:t,ext:s,name:t.slice(0,t.length-s.length)}};import{fileURLToPath as I}from"url";function X(...e){return x(...e)}function G(e){return m(e)}function J(...e){return u(...e)}function M(e,n){return p(e,n)}function O(e){return l(e)}function w(e){return d(e)}function q(e,n){return g(e,n)}function H(e){return h(e)}function K(e){return _(e)}function D(e,n){let t=e.split(/\/+|\\+/),s=n.split(/\/+|\\+/),r=0;for(;r<t.length&&r<s.length&&t[r]===s[r];)r++;return r>1?t.slice(0,r).join("/"):"/"}function Q(e,n=N()){let t=D(e,n),s=p(n,e),r=s.split("/").filter(o=>o==="..").length;return t==="/"||s===""||r>2?e:s}function Y(e,n){let t=p(e,n);return!t.startsWith("..")&&!O(t)}function ee(e){return w(I(e))}function N(){return m(process.env.INIT_CWD||process.cwd())}function te(e=process.argv){let n=e.indexOf("--path");if(n===-1)return e.find(r=>r.startsWith("--path="))?.split("=")[1];let t=e[n+1];if(!(!t||t.startsWith("-")))return t}function ne(e=process.argv){let n=e.indexOf("--"),t=n===-1?e:e.slice(0,n);return t.includes("--json")||t.includes("-j")}function se(e,n){let t=e.replace(/\\/g,"/").split("/"),s=[],r=!1;for(let a of t)a===".."?(r=!0,s.pop()):a!=="."&&s.push(a);let o=s.join("/");return r&&n(`Warning: path '${e}' contains '..' traversal \u2014 sanitized to '${o||"."}'
2
- `),o}export{$ as a,R as b,x as c,X as d,G as e,J as f,M as g,O as h,w as i,q as j,H as k,K as l,D as m,Q as n,Y as o,ee as p,N as q,te as r,ne as s,se as t};
@@ -1,15 +0,0 @@
1
- import{b as h}from"./chunk-EZ5F4ZFY.js";import{Aa as c,Ga as g,ya as u}from"./chunk-3F42A3XV.js";import{d as f,q as p}from"./chunk-3VYOLEQE.js";import{g as l}from"./chunk-VKWPEFWQ.js";l();var d=f(p(),"/docs-shopify.dev/commands"),m=class extends h{static description="Generate CLI commands documentation";static hidden=!0;async run(){let a=this.config.commands;await g(d),await c(d);let o=a.sort((e,i)=>e.id.length-i.id.length).filter(e=>!b(e)).map(e=>{let i=k(e);return N(e,i)});await Promise.all(o)}},C=["commands","help","plugins"];function b(t){return t.hidden?(C.push(t.id),!0):t.pluginType==="user"?!0:C.some(a=>t.id.startsWith(`${a}:`))}function k(t){let a=t.id.replace(/[:]/g," "),s=t.id.replace(/[:]/g,"-"),o=t.id.replace(/[:-]/g,"");return{commandName:a,fileName:s,interfaceName:o}}async function N(t,{commandName:a,fileName:s,interfaceName:o}){let e=Object.keys(t.flags).map(r=>{let n=t.flags[r];if(!n||n.hidden)return;let $=n.description??"",w=n.char?`-${n.char}, `:"",y=n.type==="option"?"string":"''",v=n.type==="option"?" <value>":"",x=n.required?"":"?",D=n.env!==void 0?` @environment ${n.env}`:"";return` /**
2
- * ${$}
3
- *${D}
4
- */
5
- '${w}--${r}${v}'${x}: ${y}`}).filter(r=>r&&r?.length>0).join(`
6
-
7
- `),i=`// This is an autogenerated file. Don't edit this file manually.
8
- /**
9
- * The following flags are available for the \`${a}\` command:
10
- * @publicDocs
11
- */
12
- export interface ${o} {
13
- ${e}
14
- }
15
- `;await c(`${d}/interfaces`),await u(`${d}/interfaces/${s}.interface.ts`,i)}export{m as a,k as b,N as c};
@@ -1,2 +0,0 @@
1
- import{A as x,a as oe,b as ne,c as M,d as ie,e as ae,g as L,i as P,j as le,k as ce,m as ue,n as pe,o as me,r as fe,s as de,t as ge,u as Ee,v,w as he,x as ye,y as Te,z as A}from"./chunk-BLBJT7BM.js";import{a as se}from"./chunk-R43LXE66.js";import{a as re}from"./chunk-KOYBR5MV.js";import{a as K}from"./chunk-VXGXK66W.js";import{Ha as te,I as z,aa as Z,ca as ee,l as X}from"./chunk-PG6XEOYF.js";import{sa as W}from"./chunk-PQCALXSD.js";import{b as Q,c as Y}from"./chunk-Q4TZD2M6.js";import{u as $}from"./chunk-3E3MCY5O.js";import{d as N,e as m,f as o,l as H,y as G}from"./chunk-RCYQPOJW.js";import{i as C}from"./chunk-ZZ7SOJHH.js";import{Ib as F,Kb as I,ga as V}from"./chunk-3F42A3XV.js";import{b as Ce}from"./chunk-I3J63RFV.js";import{j}from"./chunk-3VYOLEQE.js";import{e as k,g}from"./chunk-VKWPEFWQ.js";g();g();g();g();g();g();var _=k(N(),1);function be(t){let s=(0,_.useRef)(t);(0,_.useEffect)(()=>{s.current=t},[t]),(0,_.useEffect)(()=>{let n;function i(){s.current().then(({retryIntervalMs:l})=>{l&&(n=setTimeout(i,l))}).catch(()=>{})}return n=setTimeout(i,0),()=>n&&clearTimeout(n)},[])}g();var U=async({pollOptions:{jwtToken:t,cursor:s,filters:n},developerPlatformClient:i,organizationId:a})=>{let l=await i.appLogs({jwtToken:t,cursor:s},a),{errors:f,status:u}=l;if(u!==200){if(u===401||u===429||u>=500)return{errors:f.map(y=>({status:u,message:y}))};throw new C(`${f.join(", ")} while fetching app logs`)}let{cursor:r,app_logs:c}=l,E=_e(c,n);return{cursor:r,appLogs:E}};function _e(t,s){let n=t;return(s.status!==void 0||s.sources!==void 0)&&(n=n.filter(i=>{let a=s.status===void 0?!0:i.status===s.status,l=s.sources===void 0?!0:s.sources.includes(`${i.source_namespace}.${i.source}`);return a&&l})),n}var R=k(N(),1);async function Ne({jwtToken:t,cursor:s,filters:n,storeNameById:i,organizationId:a,setErrors:l,setAppLogOutputs:f,resubscribeCallback:u,developerPlatformClient:r}){let c=t,E=L,y=s,b=await U({pollOptions:{jwtToken:t,cursor:s,filters:n},developerPlatformClient:r,organizationId:a}),p="not_attempted",w=b;if(w.errors){let h=await v({response:w,onThrottle:d=>{l(["Request throttled while polling app logs.",`Retrying in ${d/1e3}s`])},onUnknownError:d=>{l(["Error while polling app logs",`Retrying in ${d/1e3}s`])},onResubscribe:()=>u()});p=h.resubscribeResult,h.nextJwtToken&&(c=h.nextJwtToken),E=h.retryIntervalMs}else{l(d=>d.length?[]:d);let{appLogs:h}=b;if(y=b.cursor,h)for(let d of h){let T,S,q,J=i.get(d.shop_id.toString());if(J===void 0)continue;switch(d.log_type){case ce:T=fe(d.payload),S=`export "${T.export}" executed in ${(T.fuelConsumed/le).toFixed(4)}M instructions`;break;case ue:T=de(d.payload),S="network access response retrieved from cache";break;case pe:T=ge(d.payload),S="network access request executing in background";break;case me:T=Ee(d.payload),q=T.connectTimeMs&&T.writeReadTimeMs?T.connectTimeMs+T.writeReadTimeMs:null,S=`network access request executed${q?` in ${q} ms`:""}`;break;default:continue}let Se={status:d.status==="success"?"Success":"Failure",source:d.source,storeName:J,description:S,logTimestamp:V(d.log_timestamp)};T&&f(ke=>[...ke,{appLog:T,prefix:Se}])}}return{nextJwtToken:c,retryIntervalMs:E,cursor:y??s,resubscribeResult:p}}function we({initialJwt:t,filters:s,resubscribeCallback:n,storeNameById:i,developerPlatformClient:a,organizationId:l}){let[f,u]=(0,R.useState)([]),[r,c]=(0,R.useState)([]),E=(0,R.useRef)(t),y=(0,R.useRef)(0),b=(0,R.useRef)(""),p=(0,R.useRef)(0),w=(0,R.useCallback)(async()=>{let h=await Ne({jwtToken:E.current,cursor:b.current,filters:s,storeNameById:i,setErrors:u,setAppLogOutputs:c,resubscribeCallback:n,developerPlatformClient:a,organizationId:l});if(h.resubscribeResult==="failed"){if(p.current+=1,p.current>=P)return u(["App log streaming session has expired. Please restart your dev session."]),{retryIntervalMs:0}}else h.resubscribeResult==="succeeded"&&(p.current=0);return E.current=h.nextJwtToken,b.current=h.cursor,y.current=h.retryIntervalMs,{retryIntervalMs:y.current}},[]);return be(w),{appLogOutputs:r,errors:f}}var e=k(N(),1);var Fe=t=>{switch(t){case M.NoCachedResponse:return"No cached response available";case M.CacheAboutToExpire:return"Cache is about to expire";case M.Unknown:return"Unknown reason"}},Re=({pollOptions:{jwtToken:t,filters:s},resubscribeCallback:n,storeNameById:i,developerPlatformClient:a,organizationId:l})=>{let{appLogOutputs:f,errors:u}=we({filters:s,initialJwt:t,resubscribeCallback:n,storeNameById:i,developerPlatformClient:a,organizationId:l});return e.default.createElement(e.default.Fragment,null,f.map(({appLog:r,prefix:c},E)=>e.default.createElement(m,{flexDirection:"column",key:E},e.default.createElement(m,{flexDirection:"row",gap:1},e.default.createElement(o,null,e.default.createElement(o,{color:"green"},c.logTimestamp," "),e.default.createElement(o,{color:"blueBright"},`${c.storeName.split(".")[0]}`," "),e.default.createElement(o,{color:"blueBright"},c.source," "),e.default.createElement(o,{color:c.status==="Success"?"green":"red"},c.status," "),e.default.createElement(o,null,c.description))),e.default.createElement(m,{flexDirection:"column",marginLeft:4},r instanceof oe&&e.default.createElement(m,{flexDirection:"column"},e.default.createElement(o,null,r.logs),r.inputQueryVariablesMetafieldKey&&r.inputQueryVariablesMetafieldNamespace?e.default.createElement(m,{flexDirection:"column",marginTop:1},e.default.createElement(o,{bold:!0},"Input Query Variables:"),e.default.createElement(m,{flexDirection:"row",marginLeft:1,marginTop:1},e.default.createElement(o,{dimColor:!0},"Namespace:"),e.default.createElement(o,null," ",r.inputQueryVariablesMetafieldNamespace)),e.default.createElement(m,{flexDirection:"row",marginLeft:1},e.default.createElement(o,{dimColor:!0},"Key:"),e.default.createElement(o,null," ",r.inputQueryVariablesMetafieldKey)),e.default.createElement(m,{marginLeft:1,marginTop:1},e.default.createElement(o,null,x(r.inputQueryVariablesMetafieldValue)??e.default.createElement(o,{color:"red"},"Metafield is not set")))):null,r.input?e.default.createElement(m,{flexDirection:"column",marginTop:1},e.default.createElement(o,{bold:!0},"Input ",e.default.createElement(o,{dimColor:!0},"(",r.inputBytes," bytes):")),e.default.createElement(m,{marginLeft:1,marginTop:1},e.default.createElement(o,null,x(r.input)))):null,r.output?e.default.createElement(m,{flexDirection:"column",marginTop:1},e.default.createElement(o,{bold:!0},"Output ",e.default.createElement(o,{dimColor:!0},"(",r.outputBytes," bytes):")),e.default.createElement(m,{marginLeft:1,marginTop:1},e.default.createElement(o,null,x(r.output)))):null),r instanceof ne&&e.default.createElement(m,{flexDirection:"column"},e.default.createElement(o,null,"Cache write time: ",new Date(r.cacheEntryEpochMs).toISOString()),e.default.createElement(o,null,"Cache TTL: ",r.cacheTtlMs/1e3," s"),e.default.createElement(o,null,"HTTP request:"),e.default.createElement(o,null,x(r.httpRequest)),e.default.createElement(o,null,"HTTP response:"),e.default.createElement(o,null,x(r.httpResponse))),r instanceof ie&&e.default.createElement(m,{flexDirection:"column"},e.default.createElement(o,null,"Reason: ",Fe(r.reason)),e.default.createElement(o,null,"HTTP request:"),e.default.createElement(o,null,x(r.httpRequest))),r instanceof ae&&e.default.createElement(m,{flexDirection:"column"},e.default.createElement(o,null,"Attempt: ",r.attempt),r.connectTimeMs?e.default.createElement(o,null,"Connect time: ",r.connectTimeMs," ms"):null,r.writeReadTimeMs?e.default.createElement(o,null,"Write read time: ",r.writeReadTimeMs," ms"):null,e.default.createElement(o,null,"HTTP request:"),e.default.createElement(o,null,x(r.httpRequest)),r.httpResponse?e.default.createElement(m,{flexDirection:"column"},e.default.createElement(o,null,"HTTP response:"),e.default.createElement(o,null,x(r.httpResponse))):null,r.error?e.default.createElement(o,null,"Error: ",r.error):null)))),u.length>0&&e.default.createElement(m,{flexDirection:"column"},u.map((r,c)=>e.default.createElement(m,{key:c},e.default.createElement(o,{color:"red"},r)))))};var xe=k(N(),1);async function Ie({pollOptions:t,options:{variables:s,developerPlatformClient:n},storeNameById:i,organizationId:a}){let l=async()=>A(n,s,a);return H(xe.default.createElement(Re,{pollOptions:t,resubscribeCallback:l,storeNameById:i,developerPlatformClient:n,organizationId:a}))}g();async function D({pollOptions:t,options:{variables:s,developerPlatformClient:n},storeNameById:i,organizationId:a,consecutiveResubscribeFailures:l=0}){let f=await U({pollOptions:t,developerPlatformClient:n,organizationId:a}),u=L,r=t.jwtToken,c=l,E=f;if(E.errors){let p=await v({response:E,onThrottle:w=>{I(JSON.stringify({message:"Request throttled while polling app logs.",retry_in_ms:w}))},onUnknownError:w=>{I(JSON.stringify({message:"Error while polling app logs.",retry_in_ms:w}))},onResubscribe:()=>A(n,s,a)});if(p.resubscribeResult==="failed"){if(c+=1,c>=P){I(JSON.stringify({message:"App log streaming session has expired. Please restart your dev session."}));return}}else p.resubscribeResult==="succeeded"&&(c=0);p.nextJwtToken&&(r=p.nextJwtToken),u=p.retryIntervalMs}else c=0;let{cursor:y,appLogs:b}=f;b&&b.forEach(p=>{let w=i.get(p.shop_id?.toString());w!==void 0&&F(ye({appLog:p,appLogPayload:Te(p.payload,p.log_type),storeName:w,prettyPrint:!1}))}),setTimeout(()=>{D({options:{variables:s,developerPlatformClient:n},pollOptions:{jwtToken:r||t.jwtToken,cursor:y??t.cursor,filters:t.filters},storeNameById:i,organizationId:a,consecutiveResubscribeFailures:c}).catch(p=>{throw p})},u)}async function Ae(t){let{app:s,remoteApp:n,developerPlatformClient:i}=t,a=await Me(t),l=he(s);if(l.length===0)throw new C("This app has no log sources. Learn more about app logs at https://shopify.dev/docs/api/shopify-cli/app/app-logs");if(t.sources){let y=t.sources.filter(b=>!l.includes(b));if(y.length)throw new C(`Invalid sources: ${y.join(", ")}. Valid sources are: ${l.join(", ")}`)}let f={shopIds:a.storeIds.map(Number),apiKey:n.apiKey},u=await A(i,f,t.organization.id),r={status:t.status,sources:t.sources},c={jwtToken:u,filters:r};t.format==="json"&&F(JSON.stringify({subscribedToStores:t.storeFqdns})),I(`Waiting for app logs...
2
- `),await(t.format==="json"?D:Ie)({options:{variables:f,developerPlatformClient:i},pollOptions:c,storeNameById:a.storeNameById,organizationId:t.organization.id})}async function Me(t){let{app:s,remoteApp:n,developerPlatformClient:i,primaryStore:a,organization:l}=t,f=j(s.configPath);Le(n.title,a.shopDomain,t.storeFqdns,f,l.businessName);let u=new Map;return u.set(a.shopId,a.shopDomain),t.storeFqdns&&t.storeFqdns.length>1&&await Promise.all(t.storeFqdns?.slice(1).map(async c=>{let E=await W(l,c,i);u.set(E.shopId,c)})),{storeIds:Array.from(u.keys()),storeNameById:u}}function Le(t,s,n,i,a){let l=n&&n.length>0?n:[s],f=i?X(i):void 0;G({headline:i?`Using ${f} for default values:`:"Using these settings:",body:Z({appName:t,org:a,devStores:l,messages:[ee]})})}var O=k(Ce(),1);var B=class t extends re{static summary="Stream detailed logs for your Shopify app.";static descriptionWithMarkdown="\n Opens a real-time stream of detailed app logs from the selected app and store.\n Use the `--source` argument to limit output to a particular log source, such as a specific Shopify Function handle. Use the `shopify app logs sources` command to view a list of sources.\n Use the `--status` argument to filter on status, either `success` or `failure`.\n ```\n shopify app logs --status=success --source=extension.discount-function\n ```\n ";static description=this.descriptionForHelp();static flags={...Q,...K,...Y,store:O.Flags.string({char:"s",description:"Store URL. Must be an existing development or Shopify Plus sandbox store.",env:"SHOPIFY_FLAG_STORE",multiple:!0,parse:async s=>$(s)}),source:O.Flags.string({description:"Filters output to the specified log source.",env:"SHOPIFY_FLAG_SOURCE",multiple:!0}),status:O.Flags.string({description:"Filters output to the specified status (success or failure).",options:["success","failure"],env:"SHOPIFY_FLAG_STATUS"})};async run(){let{flags:s}=await this.parse(t);await z(s.path);let n=await te({directory:s.path,clientId:s["client-id"],forceRelink:s.reset,userProvidedConfigName:s.config}),i=await se({appContextResult:n,storeFqdn:s.store?.[0],forceReselectStore:s.reset}),a={...n,primaryStore:i,storeFqdns:s.store,sources:s.source,status:s.status,format:s.json?"json":"text"};return await Ae(a),{app:n.app}}};export{B as a};
@@ -1 +0,0 @@
1
- import{a as m}from"./chunk-HB3MJYBK.js";import{a as I}from"./chunk-SYNCIFJ6.js";import{a as x}from"./chunk-SWNY3RUM.js";import{A as R,D as T,F,I as d,L as u,a as A,e as b,f as k,r as _,v}from"./chunk-Q7PF4VKI.js";import{b as S}from"./chunk-Q4TZD2M6.js";import{b as w}from"./chunk-EZ5F4ZFY.js";import{_ as y,z as g}from"./chunk-RCYQPOJW.js";import{i as a}from"./chunk-ZZ7SOJHH.js";import{g as c}from"./chunk-VKWPEFWQ.js";c();c();var B=5e6,$={readStdin:y,engineVersion:k,writeAgentFindings:v,recordMetadata:I};function E(t){return u(t.record)}function s(t,e){throw new a("The findings document was rejected. Nothing was recorded.",null,[["Fix every error, then run",{command:E(e)},"again."]],[{title:"Errors",body:{list:{items:t}}}])}async function z(t,e){try{return await e.readStdin()}catch(i){throw i instanceof a&&s([i.message],t),i}}async function V(t,e){let i=await z(t,e);if(i===void 0)throw new a("No findings document was piped on stdin.",null,[["Pipe the findings document on stdin:",{command:E(t)}]]);let n=Buffer.byteLength(i,"utf8");n>B&&s([`The findings document is ${n} bytes; the limit is 5 MB.`],t);try{return JSON.parse(i)}catch(o){let r=o instanceof Error?o.message:String(o);s([`The findings document is not valid JSON: ${r}`],t)}}async function f(t,e=$){let{selection:i}=t,n=d(i,t.path),o=await V(n,e),r=b(o,{engineVersion:e.engineVersion()});r.ok||s(r.errors,n);let h=R(r.document);h>_&&s([`The recorded findings would be stored as ${h} bytes; the limit is 5 MB. Shorten or remove findings.`],n);let C=await e.writeAgentFindings(i.appDirectory,T(i),r.document),l=r.document.checks.reduce((D,N)=>D+N.findings.length,0);return await e.recordMetadata({num_security_findings:l}),{path:C,checks:r.document.checks.length,findings:l}}function M(t,e,i){let n=d(e,i);g({headline:"Agent findings recorded.",body:[`Recorded ${m(t.checks,"check")} and ${m(t.findings,"finding")} in`,{filePath:t.path}],nextSteps:[["Run",{command:u(n.review)},"to see the results."]]})}var p=class t extends w{static summary="Record agent findings from an app security check.";static descriptionWithMarkdown="Reads a coding agent's complete findings document from stdin, validates it, and replaces `agent-findings.json` in the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`. `--client-id` is checked against your Shopify account before anything is read, so it needs you to be logged in.\n\nThe document must include a `scope` with the `include_dirs`, `excludes` and `no_git_ignore` values of the `check` run it describes, exactly as typed. It's recorded as reported and never compared with the scan's files.\n\nThe document is recorded all or nothing: if anything is invalid, the command fails with every error, writes nothing, and exits with a non-zero code. It needs the results directory that `shopify app security check` creates.";static description=this.descriptionForHelp();static flags={...S,...A};async run(){let{flags:e}=await this.parse(t),i=await F({path:e.path,config:e.config,clientId:e["client-id"],withoutAppConfig:e["without-app-config"],allowPrompts:!1,validateClientIdFlag:!0});await x(i,e.path);let n=await f({selection:i,path:e.path});M(n,i,e.path)}};export{p as a};
@@ -1 +0,0 @@
1
- import{b as e}from"./chunk-EZ5F4ZFY.js";import{ma as r}from"./chunk-3E3MCY5O.js";import{g as o}from"./chunk-VKWPEFWQ.js";o();var t=class extends e{static hidden=!0;async run(){await r()}};export{t as a};
@@ -1,6 +0,0 @@
1
- import{l as O,n as W}from"./chunk-Q555FV2X.js";import{S as v,a as S}from"./chunk-RCYQPOJW.js";import{f as y}from"./chunk-PQH4U2XV.js";import{i as u,l as L}from"./chunk-ZZ7SOJHH.js";import{Cb as c,Eb as s,Nb as d,Xa as w,Ya as i,_a as D,db as F,qa as x,wb as B,ya as _}from"./chunk-3F42A3XV.js";import{d as r,i as k}from"./chunk-3VYOLEQE.js";import{a as I}from"./chunk-CX5CC6P5.js";import{e as R,g as f}from"./chunk-VKWPEFWQ.js";f();f();function b(e,n){try{return JSON.parse(e)}catch(a){let t=a instanceof Error?a.message:String(a),o=n?` from ${n}`:"";throw new u(`Failed to parse JSON${o}.
2
- ${t}`)}}var l=R(I(),1),N="yarn.lock",j="package-lock.json",$="pnpm-lock.yaml",C="bun.lockb",J="bun.lock",T="pnpm-workspace.yaml",we=[N,$,j,C,J],ye={yarn:[N],npm:[j],pnpm:[$],bun:[C,J],homebrew:[],unknown:[]},E=["yarn","npm","pnpm","bun","homebrew","unknown"],M=class extends u{constructor(){super("Unknown package manager")}},h=class extends u{constructor(n){super(s`The directory ${c.path(n)} doesn't have a package.json.`)}},P=class extends L{constructor(n){super(s`Couldn't find a a package.json traversing directories from ${c.path(n)}`)}};function V(e=process.env){let n=e.npm_config_user_agent;return["yarn","pnpm","bun","npm"].find(a=>n?.includes(a))??"unknown"}function U(e){return i(r(e,C))||i(r(e,J))}function G(e){switch(e){case"yarn":case"npm":case"pnpm":case"bun":return e;case"homebrew":case"unknown":return"npm"}}function K(e,n,...a){switch(e){case"npm":return{command:"npm",args:["exec","--",n,...a]};case"pnpm":return{command:"pnpm",args:["exec",n,...a]};case"yarn":return{command:"yarn",args:["run",n,...a]};case"bun":return{command:"bun",args:["x",n,...a]}}}async function A(e){let n=e;for(d(s`Looking for a lockfile in ${c.path(n)}...`);;){if(i(r(n,N)))return"yarn";if(i(r(n,$))||i(r(n,T)))return"pnpm";if(U(n))return"bun";if(i(r(n,j)))return"npm";let t=k(n);if(t===n)break;n=t}let a=V();return a!=="unknown"?a:"npm"}async function he(e,n,...a){let t=G(await A(e));return K(t,n,...a)}async function xe(e){let n=await D(r(e.directory,"**/package.json"),{ignore:[r(e.directory,"node_modules/**/package.json")],cwd:e.directory,onlyFiles:!0,deep:e.deep}),a=new S;try{await Promise.all(n.map(async t=>{let o=k(t);await z({directory:o,packageManager:e.packageManager,stdout:void 0,stderr:void 0,signal:a.signal,args:[]})}))}catch(t){throw a.abort(),t}}async function z(e){let n={cwd:e.directory,stdin:void 0,stdout:e.stdout,stderr:e.stderr,signal:e.signal},a=["install"];e.args&&(a=a.concat(e.args)),await y("cmd_all_timing_network_ms")(async()=>{await v(e.packageManager,a,n)})}async function ve(e){return(await m(e)).name}async function be(e){return(await m(e)).version}async function H(e){let n=await m(e),a=n.dependencies??{},t=n.devDependencies??{};return{...a,...t}}async function Me(e){let n=r(e,"package.json"),a=await m(n),t=r(e,T);return!!a.workspaces||w(t)}async function Pe(e,n,{cacheExpiryInHours:a=0}={}){let t=async()=>(d(s`Checking if there's a version of ${e} newer than ${n}`),ne(e)),o=`npm-package-${e}`,p;try{p=await O(o,t,a*3600*1e3)}catch{return}if(p&&new l.SemVer(n).compare(p)<0)return p}function Ne(e,n){let a=`npm-package-${e}`,t=W(a)?.value;if(t&&new l.SemVer(n).compare(t)<0)return t}function je(e,n){return(0,l.satisfies)(e,n)}async function m(e){if(!await w(e))throw new h(k(e));return b(await x(e),e)}async function Y(e,n){d(s`Adding the following dependencies if needed:
3
- ${c.json(e)}
4
- With options:
5
- ${c.json(n)}
6
- `);let a=r(n.directory,"package.json");if(!await w(a))throw new h(n.directory);let t=Object.keys(await H(a)),o=e.filter(p=>!t.includes(p.name));o.length!==0&&await q(o,n)}async function q(e,n){let a=e.map(t=>t.version?`${t.name}@${t.version}`:t.name);switch(n.stdout?.write(`Installing ${a.join(" ")} with ${n.packageManager}`),n.packageManager){case"npm":for(let t of a)await g(n,Q(t,n.type));break;case"yarn":await g(n,X(a,n.type,!!n.addToRootDirectory));break;case"pnpm":await g(n,Z(a,n.type,!!n.addToRootDirectory));break;case"bun":await g(n,ee(a,n.type)),await g(n,["install"]);break;case"homebrew":throw new u("Homebrew can't be used to install project dependencies. Use npm, yarn, pnpm, or bun.");case"unknown":throw new M}}async function g(e,n){return y("cmd_all_timing_network_ms")(async()=>v(e.packageManager,n,{cwd:e.directory,stdout:e.stdout,stderr:e.stderr,signal:e.signal}))}async function $e(e,n){await Y(e.map(a=>({name:a,version:void 0})),n)}function Q(e,n){let t=["install",e,{dev:"--save-dev",peer:"--save-peer",prod:"--save-prod"}[n]];return e.match(/@\d/g)&&t.push("--save-exact"),t}function X(e,n,a=!1){let t={dev:"--dev",peer:"--peer",prod:"--prod"};return["add",...a?["-W"]:[],...e,t[n]]}function Z(e,n,a=!1){let t={dev:"--save-dev",peer:"--save-peer",prod:"--save-prod"};return["add",...a?["-w"]:[],...e,t[n]]}function ee(e,n){let t={dev:"--development",peer:"--optional"}[n];return["add",...e,...t?[t]:[]]}async function Ce(e){let n=await F("package.json",{cwd:e,type:"file"});if(n){let a=b(await x(n),n);return{path:n,content:a}}else throw new P(e)}async function Je(e,n){let a=await A(e),t=await m(r(e,"package.json")),o=a==="yarn"?"resolutions":"overrides";t[o]={...t[o],...n},await ae(e,t)}async function ne(e){return d(s`Getting the latest version of NPM package: ${c.raw(e)}`),y("cmd_all_timing_network_ms")(async()=>{let{default:n}=await import("./latest-version-LDWU5F7A.js");return n(e)})}async function ae(e,n){d(s`JSON-encoding and writing content to package.json at ${c.path(e)}...`);let a=r(e,"package.json");await _(a,JSON.stringify(n,null,2))}function _e(e,n=process.env){if(e&&E.includes(e))return e;let a=V(n);if(a!=="unknown")return a;let t=B();return t!=="unknown"?t:"npm"}export{N as a,j as b,$ as c,C as d,T as e,we as f,ye as g,E as h,M as i,h as j,P as k,V as l,A as m,he as n,xe as o,z as p,ve as q,be as r,H as s,Me as t,Pe as u,Ne as v,je as w,m as x,Y as y,q as z,$e as A,Ce as B,Je as C,ae as D,_e as E};
@@ -1,3 +0,0 @@
1
- import{a as A}from"./chunk-VJEKDBGZ.js";import{b as f}from"./chunk-WXT5AKZV.js";import{f as C}from"./chunk-PQH4U2XV.js";import{i as n}from"./chunk-ZZ7SOJHH.js";import{Cb as a,Eb as s,Ia as b,Nb as u,Xa as I,_a as G}from"./chunk-3F42A3XV.js";import{a as k,r as g}from"./chunk-2R2PKQQV.js";import{q as w}from"./chunk-3VYOLEQE.js";import{e as D,g as $}from"./chunk-VKWPEFWQ.js";$();var R=D(A());async function r(e,t){try{return(await f("git",e,{cwd:t})).stdout}catch(o){if(o instanceof Error){let i=new n(o.message);throw i.stack=o.stack,"exitCode"in o&&Object.assign(i,{exitCode:o.exitCode}),i}throw o}}async function K(e,t="main"){if(t.startsWith("-"))throw new n(`Invalid initial branch name: ${t}. Branch names can't start with a hyphen.`);u(s`Initializing git repository at ${a.path(e)}...`),await m(),await r(["init"],e),await r(["checkout","-b",t],e)}async function Q(e,t){try{return(await r(["check-ignore",...t],e)).split(`
2
- `).filter(Boolean)}catch(o){if(o instanceof n&&"exitCode"in o&&o.exitCode===1)return[];throw o}}async function V(e){return C("cmd_all_timing_network_ms")(async()=>{let{repoUrl:t,destination:o,shallow:i,latestTag:l}=e;if(u(s`Git-cloning repository ${t} into ${a.path(o)}...`),await m(),await I(o)){if(!await b(o))throw new n(s`Can't clone to ${a.path(o)}`,"The path exists but isn't a directory.");if((await G(["*",".*"],{cwd:o,deep:1,onlyFiles:!1})).length>0)throw new n(s`Directory ${a.path(o)} already exists and is not empty`,s`Choose a different name or remove the existing directory first.`)}let[E,d]=t.split("#");if(d&&l)throw new n("Error cloning the repository. Git can't clone the latest release with a 'branch'.");if(i&&l)throw new n("Error cloning the repository. Git can't clone the latest release with the 'shallow' property.");let h=["clone","--recurse-submodules"];d&&h.push("--branch",d),i&&h.push("--depth","1"),k()||h.push("-c","core.askpass=true"),h.push(E,o);try{if(await f("git",h),l){let c=await S(o,t);await r(["checkout",c],o)}}catch(c){if(c instanceof n)throw c;if(c instanceof Error){let x=new n(c.message);throw x.stack=c.stack,x}throw c}})}async function S(e,t){let o=await F(e);if(!o)throw new n(`Couldn't obtain the most recent tag of the repository ${t}`);return o}async function X(e){let o=await r(["log","-1","--format=%H%x00%ai%x00%s%x00%D%x00%b%x00%an%x00%ae"],e);if(!o.trim())throw new n("Must have at least one commit to run command",s`Run ${a.genericShellCommand("git commit -m 'Initial commit'")} to create your first commit.`);let i=o.split("\0");return{hash:i[0],date:i[1],message:i[2],refs:i[3],body:i[4],author_name:i[5],author_email:i[6]}}async function Y(e){await r(["add","--all"],e)}async function Z(e,t){let o=["commit","-m",e];if(t?.author){if(t.author.startsWith("-"))throw new n(`Invalid commit author: ${t.author}. Author name/email can't start with a hyphen.`);o.push("--author",t.author)}return await r(o,t?.directory),(await r(["rev-parse","HEAD"],t?.directory)).trim()}async function m(){if(!await g())throw new n("Git is necessary in the environment to continue",s`Install ${a.link("git","https://git-scm.com/book/en/v2/Getting-Started-Installing-Git")}`)}var p=class extends n{};async function N(e){if(await m(),!await v(e))throw new p(`${a.path(e??w())} is not a Git directory`)}async function tt(e){return await g()?v(e):!1}async function v(e){try{return await f("git",["rev-parse","--git-dir"],{cwd:e}),!0}catch(t){if(t instanceof Error&&"exitCode"in t&&t.exitCode===128)return!1;throw t}}var y=class extends n{};async function et(e){if(!await T(e))throw new y(`${a.path(e??w())} is not a clean Git directory`)}async function T(e){return(await r(["status","--porcelain"],e)).trim()===""}async function F(e){try{return(await r(["describe","--tags","--abbrev=0"],e)).trim()||void 0}catch(t){if(t instanceof n&&"exitCode"in t&&t.exitCode===128)return;throw t}}async function ot(e,t="origin"){if(u(s`Removing git remote ${t} from ${a.path(e)}...`),await m(),!(await r(["remote"],e)).split(`
3
- `).filter(Boolean).includes(t)){u(s`Remote ${t} does not exist, no action needed`);return}await r(["remote","remove",t],e)}export{K as a,Q as b,V as c,X as d,Y as e,Z as f,N as g,tt as h,y as i,et as j,T as k,ot as l};
@@ -1 +0,0 @@
1
- import{b as i}from"./chunk-I3J63RFV.js";import{e as n,g as o}from"./chunk-VKWPEFWQ.js";o();var e=n(i(),1),t=["high","medium","low","none"],c={blocking:e.Flags.custom({description:"The minimum finding severity that causes a non-zero exit code.",options:t,default:"none",env:"SHOPIFY_FLAG_APP_SECURITY_BLOCKING"})()};export{c as a};
@@ -1 +0,0 @@
1
- import{a as o}from"./chunk-M7QFZQ23.js";import{g as e}from"./chunk-VKWPEFWQ.js";e();var t=class extends o{};export{t as a};
@@ -1 +0,0 @@
1
- import{n as A}from"./chunk-AKP4QAGL.js";import{a as P}from"./chunk-NDMISEDF.js";import{c as C}from"./chunk-2X3HYG4B.js";import{s as T}from"./chunk-JAY7AGAG.js";import{r as w}from"./chunk-TWS34WUT.js";import{a as D}from"./chunk-46U6C6C6.js";import{K as u}from"./chunk-3E3MCY5O.js";import{B as y,z as h}from"./chunk-RCYQPOJW.js";import{Nb as O,za as p}from"./chunk-3F42A3XV.js";import{d,q as m}from"./chunk-3VYOLEQE.js";import{g as l}from"./chunk-VKWPEFWQ.js";l();async function q(e){P({verbose:e.verbose,noColor:e.noColor});let t=w({store:e.store}),o=await u(t,e.password);await R(o,{path:e.path??m(),force:e.force??!1,silent:e.silent??!1})}var E={article:"ARTICLE",blog:"BLOG",collection:"COLLECTION",company:"COMPANY",company_location:"COMPANY_LOCATION",location:"LOCATION",market:"MARKET",order:"ORDER",page:"PAGE",product:"PRODUCT",variant:"PRODUCTVARIANT",shop:"SHOP"};async function R(e,t){let{force:o,path:i,silent:n}=t;if(!await A(i)&&(process.env.SHOPIFY_LANGUAGE_SERVER==="1"||!await C(o)))return;let f=[],r=[];for(let[a,s]of Object.entries(E))f.push(T(s,e).catch(c=>(r.push(s),[])).then(c=>({[a]:c})));let b=(await Promise.all(f)).reduce((a,s)=>({...a,...s}));if(r.length===Object.values(E).length){n||y({body:"Failed to fetch metafield definitions.",nextSteps:["Check your network connection and try again.","Ensure you have the permission to fetch metafield definitions."],reference:[{link:{label:"Metafield Definition API",url:"https://shopify.dev/docs/api/admin-graphql/latest/queries/metafieldDefinition"}}]});return}await S(i,b),r.length>0&&O(`Failed to fetch metafield definitions for the following owner types: ${r.join(", ")}`),n||h({body:"Metafield definitions have been successfully downloaded."})}async function S(e,t){let o=await D(e),i=d(o,"metafields.json"),n=JSON.stringify(t,null,2);p(i,n)}export{q as a};
@@ -1 +0,0 @@
1
- import{b as s}from"./chunk-I3J63RFV.js";import{a as o}from"./chunk-JD5P5RAJ.js";import{e as i,g as n}from"./chunk-VKWPEFWQ.js";n();var t=i(s(),1),a={"no-input":t.Flags.boolean({description:"Disable interactive prompts and browser authentication.",env:"SHOPIFY_FLAG_NO_INPUT"})};function u(r=process.argv,e=process.env){return r.includes("--no-input")||o(e.SHOPIFY_FLAG_NO_INPUT)}export{a,u as b};
@@ -1,4 +0,0 @@
1
- import{a as L}from"./chunk-JUVJNIEA.js";import{a as J}from"./chunk-55QTRPZ2.js";import{a as X}from"./chunk-SYNCIFJ6.js";import{B,C as m,D as y,F as H,G as K,H as V,I as q,J as Q,K as z,L as h,a as O,c as U,d as b,g as j,i as M,p as W,u as Y}from"./chunk-Q7PF4VKI.js";import{b as N}from"./chunk-Q4TZD2M6.js";import{b as T}from"./chunk-EZ5F4ZFY.js";import{A as g,B as _,D as G,V as E,y as D,z as F}from"./chunk-RCYQPOJW.js";import{Ib as R,sa as $}from"./chunk-3F42A3XV.js";import{b as de}from"./chunk-I3J63RFV.js";import{g as d,q as A}from"./chunk-3VYOLEQE.js";import{e as ue,g as a}from"./chunk-VKWPEFWQ.js";a();a();a();function Z(e,t){return t==="none"?0:e.scan.issues.some(s=>b[s.severity]>=b[t])?1:0}async function ee({includeDirs:e,excludePatterns:t,noGitIgnore:i,...s}){let n=Date.now();return{...await M(s,{includeDirs:e,excludePatterns:t,noGitIgnore:i}),elapsedMilliseconds:Date.now()-n}}function te({includeDirs:e,excludePatterns:t,noGitIgnore:i,...s}){return j(s,{includeDirs:e,excludePatterns:t,noGitIgnore:i})}a();var pe={high:"High",medium:"Medium",low:"Low"},v=3,w=8;function he(e){let t=fe(e),i=W(e.scan.issues);return{type:t,options:{headline:ge(e,i),body:me(e),reference:[{subdued:`Engine: ${e.engine.name} ${e.engine.version}`},{subdued:`Ruleset: ${e.engine.ruleset}`},...i.some(s=>s.issues.length>1)&&!e.verbose?[{subdued:"Use --verbose for every occurrence and fix. deterministic-findings.json retains all file and line details."}]:[]],customSections:ve(e,i)}}}function ie(e){let{type:t,options:i}=he(e);if(t==="success"){F(i);return}if(t==="warning"){g(i);return}_(i)}function ne(e){return e.scan.scan.coverage_gaps.length>0}function fe(e){return e.scan.issues.some(t=>t.severity==="high")?"error":e.scan.issues.length>0||ne(e)?"warning":"success"}function ge(e,t){let i=e.scan.issues.length;return t.length<i?`${t.length} security issue ${t.length===1?"group":"groups"} found (${i} occurrences).`:i>0?`${i} security ${i===1?"issue":"issues"} found.`:ne(e)?"Scan completed with coverage gaps.":"No security issues found."}function me(e){let t=e.scan,i=[{userInput:t.app.name},{char:"."},`${t.scan.files_scanned} files scanned in ${Ie(e.elapsedMilliseconds)}.`],s=t.scan.checks_executed.filter(n=>n.status==="not_applicable").length;return s>0&&i.push({info:`
2
- ${s} check${s===1?"":"s"} not applicable.`}),i.push({info:`
3
- ${e.agentCheckCount} check${e.agentCheckCount===1?"":"s"} ready for your coding agent.`}),i}function ye(e){return[["Have your coding agent run the agent checks"],["Record the agent results with",{command:h(e.commands.record)}],["Review the results with",{command:h(e.commands.review)}]]}function ke(e){let t=m(e)??"not linked";return e.kind==="config"&&e.clientIdOverride?`${t} (from --client-id)`:t}function be(e){let{selection:t}=e;return{title:"Selection",body:{tabularData:[["App directory",t.appDirectory],["Config file",B(t)??"none"],["Client ID",ke(t)],["Scan directories",e.scanDirectories.map(({directory:i})=>d(t.appDirectory,i)||".").join(", ")]],firstColumnSubdued:!0}}}function ve(e,t){let i=[be(e)];for(let n of["high","medium","low"]){let o=t.filter(r=>r.severity===n);o.length!==0&&i.push({title:pe[n],body:{list:{items:o.flatMap(r=>[Se(r),...e.verbose?r.issues.map(we):[]])}}})}if(e.scan.scan.coverage_gaps.length>0){let n=e.scan.scan.coverage_gaps,o=n.slice(0,w).map(r=>r.message);n.length>w&&o.push({info:`${n.length-w} more coverage gaps`}),i.push({title:"Coverage gaps",body:{list:{items:o}}})}let{appDirectory:s}=e.selection;return i.push({title:"Artifacts",body:{list:{items:[["Deterministic findings:",{filePath:d(s,e.deterministicFindingsPath)}],["Agent security check instructions:",{filePath:d(s,e.agentChecksPath)}]]}}}),i.push({title:"Next steps",body:{list:{items:ye(e),ordered:!0}}}),e.verbose&&i.push({title:"Scan details",body:{tabularData:[["Framework",e.scan.detection.framework],["Surface",e.scan.detection.surface],["Languages",e.scan.detection.languages.map(n=>`${n.name} (${n.support})`).join(", ")||"none"],["Capabilities",Ce(e.scan.capabilities)],["Rules run",String(e.scan.scan.rules_run)],["Not run",String(e.scan.scan.rules_skipped)]],firstColumnSubdued:!0}}),i}function we(e){let t=e.location.line?`${e.location.file}:${e.location.line}`:e.location.file,i=[{bold:e.title},se(e.id),{filePath:t}];return i.push({subdued:e.message},{subdued:`Fix: ${e.fix.description}`}),e.fix.guide&&(e.fix.guide.startsWith("https://")||e.fix.guide.startsWith("http://")?i.push({link:{label:"Guide",url:e.fix.guide}}):i.push({subdued:`Guide: ${e.fix.guide}`})),e.snippet&&i.push({subdued:`Code: ${e.snippet}`}),i}function Se(e){let t=e.issues[0],i=e.issues.length,s=e.files.length,n=e.files.slice(0,v).map(o=>{let r=e.issues.find(f=>f.location.file===o);return{filePath:r.location.line?`${o}:${r.location.line}`:o}});return[{bold:t.title},se(t.id),`${i} ${i===1?"occurrence":"occurrences"} across ${s} ${s===1?"file":"files"}`,...n,...s>v?[{subdued:`+${s-v} more files`}]:[]]}function se(e){let t=U(e);return t?{link:{label:e,url:t}}:{subdued:e}}function Ce(e){let t=Object.entries(e).filter(([,i])=>i).map(([i])=>i);return t.length>0?t.join(", "):"none detected"}function Ie(e){return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function xe(e){return{message:`${e} recommended agent ${e===1?"check":"checks"} available to complete your scan. How do you want to pass that prompt to your agent?`,choices:[{label:"Copy instructions to the clipboard",value:"copy"},{label:"Print instructions to the terminal",value:"print"},{label:"Nothing",value:"nothing"}],defaultValue:"copy"}}var Pe={resolveSelection:H,execute:ee,listFiles:te,writeArtifacts:Y,canPrompt:E,selectInstructionsDestination:e=>G(xe(e)),deliverInstructions:J,output:R,renderInfo:D,renderWarning:g,renderReport:ie,setExitCode:e=>{process.exitCode=e},recordMetadata:X};async function Ae(e,t,i,s){return e.skipInstructions?"nothing":e.yes?"print":i?t.selectInstructionsDestination(s):"nothing"}function $e(e,t,i,s,n,o){return{scan:e.scan,selection:n,scanDirectories:o,engine:e.engine,verbose:i,elapsedMilliseconds:e.elapsedMilliseconds,commands:s,deterministicFindingsPath:t.deterministicFindingsPath,agentChecksPath:t.agentChecksPath,agentCheckCount:e.agentChecks.checks.length}}function De(e){return e.replace(/[?*()[\]{}!#\\]/g,"\\$&")}async function oe(e,t){if(e.ignoredScanDirectories.length===0&&e.otherAppDirectories.length===0)return;let i=await $(A()),s=n=>d(i,n)||".";for(let n of e.ignoredScanDirectories)t.renderWarning({headline:`${s(n)} is ignored by Git, so only the files Git tracks in it are scanned.`,body:["Use",{command:"--no-git-ignore"},"to scan everything in it."]});for(let n of e.otherAppDirectories){let o=s(n);t.renderWarning({headline:`${o} holds another app's configuration, so its files are scanned as part of this app.`,body:["Use",{command:`--exclude ${z(De(o),Q())}`},"to leave it out."]})}}async function S(e,t=Pe){let i=await K(e.includeDirs),s=!e.listFiles&&t.canPrompt(),n=await t.resolveSelection({path:e.directory,config:e.configName,clientId:e.clientId,withoutAppConfig:e.withoutAppConfig,allowPrompts:s,validateClientIdFlag:!0}),{appDirectory:o}=n,r={include_dirs:[...e.includeDirs],excludes:[...e.excludePatterns],no_git_ignore:e.noGitIgnore},p=q(n,e.directory,r),f={selection:n,resultsKey:y(n),commands:p};(n.kind==="no-config"?!e.withoutAppConfig:n.appConfigFilePicked===!0)&&t.renderInfo({headline:"To skip these prompts next time, run:",body:[{command:h(p.scan)}]});let re=n.kind==="config"?n.appConfigDirectories??[]:[],{scanDirectories:k,requestedScanDirectories:ce}=V(o,i,re),I={appDirectory:o,scanDirectories:k.map(({directory:c})=>c),requestedScanDirectories:ce,appConfigDirectories:k.filter(({origin:c})=>c==="app_config_directory").map(({directory:c})=>c),appConfigFilePath:n.kind==="config"?n.appConfigFilePath:void 0,clientId:m(n),includeDirs:e.includeDirs,excludePatterns:e.excludePatterns,noGitIgnore:e.noGitIgnore};if(e.listFiles){let{paths:c,...le}=await t.listFiles(I);return await oe(le,t),c.length>0&&t.output(c.join(`
4
- `)),f}let l=await t.execute(I);await oe(l,t),await t.recordMetadata({num_security_findings:l.scan.issues.length});let ae=await t.writeArtifacts(o,y(n),{deterministicFindings:l.deterministicFindings,agentChecks:l.agentChecks});t.renderReport($e(l,ae,e.verbose,p,n,k));let x=await Ae(e,t,s,l.agentChecks.checks.length);x!=="nothing"&&await t.deliverInstructions({appDirectory:o,resultsKey:y(n),copy:x==="copy",scanScope:r,commands:p});let P=Z(l,e.blocking);return P!==0&&t.setExitCode(P),f}var u=ue(de(),1);var C=class e extends T{static summary="Check an app for Shopify-specific security issues and write deterministic-findings.json and agent-checks.json.";static descriptionWithMarkdown="Runs an app security check locally and writes `deterministic-findings.json` and `agent-checks.json` to the results directory, `.shopify/app-security/<results key>/`. The results key is `--client-id` when you pass it, and otherwise the name of the app configuration file without `.toml`; the other `app security` commands take the same selection flags and find the same directory. Every run replaces both files, so it's always safe to run the check again.\n\n`deterministic-findings.json` holds the deterministic scan results. `agent-checks.json` holds the checks for your coding agent to investigate; the agent's results are recorded with `shopify app security record`. Use `--config` to select a specific app configuration when the project has multiple `shopify.app*.toml` files; the check inspects only that configuration. Use `--client-id` to replace the configuration's client ID for this run. `--client-id` is checked against your Shopify account before anything is scanned, so it needs you to be logged in. When no app configuration exists, use `--without-app-config --client-id <client-id>` to scan `--path` anyway with config checks skipped; in an interactive terminal the command offers to do this.\n\nThe check scans the app directory and each `--include-dir`. Git ignore rules apply by default: a file or directory that Git ignores is skipped, using the rules of the repository that contains it, while files that Git tracks are always scanned. Use `--no-git-ignore` to turn Git ignore rules off for every scanned directory.\n\nUse `--exclude` to skip more paths. Each value is a glob that is matched against the path relative to the working directory, so a path above it starts with `../`, and a name at any depth needs `**/`, for example `--exclude '**/generated'`. Repeat the flag to add globs. An exclusion can't remove the selected app configuration file. Quote each value so your shell doesn't expand `*`. The coding-agent instructions this check offers repeat the globs. Other `app security` commands don't take `--exclude` or `--no-git-ignore`, so pass the same flags each time you run the check.\n\nUse `--list-files` to check the scope before scanning: it prints the files the check would gather, one path per line and relative to the app directory, and then stops. It writes no results and never prompts. `--client-id` is still checked, but doesn't change the list.\n\nIn interactive terminals, the command offers to copy the coding-agent instructions, print them, or choose nothing; copying is the default. In CI and other non-interactive environments, instructions aren't offered unless you pass `--yes`, which prints them. You can also run `shopify app security instructions` to print, copy, or write them later.";static description=this.descriptionWithoutMarkdown();static flags={...N,...O,"include-dir":u.Flags.string({description:"Also scan this directory, relative to the working directory. Repeat the flag to add directories. Use it for code that lives outside the app directory, such as a backend or a shared library.",multiple:!0}),exclude:u.Flags.string({description:"Skip paths that match this glob, relative to the working directory. Repeat the flag to add globs. The selected app configuration file can't be excluded.",multiple:!0}),"no-git-ignore":u.Flags.boolean({description:"Turn off Git ignore rules for every scanned directory, so files that Git ignores are scanned too. Files that Git tracks are always scanned.",env:"SHOPIFY_FLAG_NO_GIT_IGNORE"}),"list-files":u.Flags.boolean({description:"Print the files the check would gather, one path per line, and stop. Nothing is scanned, no results are written, and nothing is prompted for.",env:"SHOPIFY_FLAG_LIST_FILES",exclusive:["yes","skip-instructions","blocking"]}),...L,yes:u.Flags.boolean({description:"Print coding-agent instructions without prompting.",default:!1,exclusive:["skip-instructions"],env:"SHOPIFY_FLAG_YES"}),"skip-instructions":u.Flags.boolean({description:"Don't offer to show coding-agent instructions.",default:!1,exclusive:["yes"],env:"SHOPIFY_FLAG_APP_SECURITY_SKIP_INSTRUCTIONS"})};async run(){let{flags:t}=await this.parse(e);await S({directory:t.path,configName:t.config,clientId:t["client-id"],withoutAppConfig:!!t["without-app-config"],verbose:!!t.verbose,blocking:t.blocking,yes:t.yes,skipInstructions:t["skip-instructions"],includeDirs:t["include-dir"]??[],excludePatterns:t.exclude??[],noGitIgnore:!!t["no-git-ignore"],listFiles:!!t["list-files"]})}};export{C as a};
@@ -1 +0,0 @@
1
- import{g as I}from"./chunk-VKWPEFWQ.js";I();var o="4.9.2";export{o as a};
@@ -1,7 +0,0 @@
1
- import{p,v as d}from"./chunk-TWS34WUT.js";import{a as u}from"./chunk-R6IJRVVM.js";import{da as w}from"./chunk-P2MVR6CG.js";import{b as l}from"./chunk-Q4TZD2M6.js";import{z as f}from"./chunk-RCYQPOJW.js";import{i}from"./chunk-ZZ7SOJHH.js";import{Xa as c,qa as h}from"./chunk-3F42A3XV.js";import{f as r,n as m}from"./chunk-3VYOLEQE.js";import{e as _,g as o}from"./chunk-VKWPEFWQ.js";o();o();var g=_(w(),1),P=["AGENTS.md","DESIGN.md","assets/**","blocks/**","config/**","layout/**","listings/**/*","locales/**","sections/**","snippets/**","templates/**","templates/customers/**","release-notes.md","update_extension.json"].join("|");async function y(e){let t=await k(e),s=`${e}/${t}`,n=`${e}/(${P})`;await u({inputDirectory:e,outputZipPath:s,matchFilePattern:n}),f({body:["Your local theme was packaged in",{filePath:m(s)}]})}async function k(e){let t=r(e,"config/settings_schema.json");if(!await c(t))throw new i("Provide a config/settings_schema.json to package your theme.");let s=await v(t);if(s===void 0||s.theme_name===void 0)throw new i("Provide a theme_info.theme_name configuration in config/settings_schema.json.");return`${[s.theme_name,s.theme_version].filter(Boolean).join("-")}.zip`}async function v(e){let t=(0,g.parseJSON)(await h(e),null,!0);if(!t)throw new i("The file config/settings_schema.json contains an error. Please check if the file is valid JSON and includes the theme_info.theme_name configuration.");return t.find(s=>s.name==="theme_info")}var a=class extends d{static summary="Package your theme into a .zip file, ready to upload to the Online Store.";static descriptionWithMarkdown=`Packages your local theme files into a ZIP file that can be uploaded to Shopify.
2
-
3
- Only folders that match the [default Shopify theme folder structure](https://shopify.dev/docs/storefronts/themes/tools/cli#directory-structure) are included in the package.
4
-
5
- The package includes the \`listings\` directory if present (required for multi-preset themes per [Theme Store requirements](https://shopify.dev/docs/storefronts/themes/store/requirements#adding-presets-to-your-theme-zip-submission)).
6
-
7
- The ZIP file uses the name \`theme_name-theme_version.zip\`, based on parameters in your [settings_schema.json](https://shopify.dev/docs/storefronts/themes/architecture/config/settings-schema-json) file.`;static description=this.descriptionForHelp();static flags={...l,path:p.path};static multiEnvironmentsFlags=null;async command(t){await y(t.path)}};export{a};
@@ -1 +0,0 @@
1
- import{b as r,d as u}from"./chunk-WNO2V53C.js";import{a as i}from"./chunk-JD5P5RAJ.js";import{s}from"./chunk-3VYOLEQE.js";import{g as a}from"./chunk-VKWPEFWQ.js";a();a();import o from"crypto";function m(e){return o.createHash("sha256").update(e).digest()}function d(e){return o.createHash("sha1").update(e).digest("hex")}function x(e){return o.createHash("md5").update(e).digest("hex")}function g(){return o.randomUUID()}function p(e){return o.createHash("sha1").update(Buffer.from("6ba7b810-9dad-11d1-80b4-00c04fd430c8".replace(/-/g,""),"hex")).update(e).digest().toString("hex").replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/,"$1-$2-$3-$4-$5")}function t(){return process.env}function N(){let e=t();return e[r.appAutomationToken]??e[r.partnersToken]}function U(){return t()[r.organization]}function c(e){if(e&&!isNaN(Number(e)))return Number(e)}function v(){return c(t()[u.backendPort])}function I(){let e=t()[r.identityToken],n=t()[r.refreshToken];if(!(!e||!n))return{accessToken:e,refreshToken:n,userId:p(e)}}function R(e=t(),n=process.argv){return s(n)||i(e[r.json])}function H(e=t()){return i(e[r.skipNetworkLevelRetry])}function B(e=t()){return c(e[r.maxRequestTimeForNetworkCalls])??30*1e3}export{m as a,d as b,x as c,g as d,p as e,t as f,N as g,U as h,v as i,I as j,R as k,H as l,B as m};
@@ -1 +0,0 @@
1
- import{b as E}from"./chunk-Q4TZD2M6.js";import{b}from"./chunk-EZ5F4ZFY.js";import{Q as F,R as N}from"./chunk-RCYQPOJW.js";import{Kb as k,W as C,Xa as w,qa as O}from"./chunk-3F42A3XV.js";import{i as n}from"./chunk-B4OMIONW.js";import{k as R}from"./chunk-2R2PKQQV.js";import{b as U}from"./chunk-I3J63RFV.js";import{d as u,f as P,g as x,h as g,n as T,q as y}from"./chunk-3VYOLEQE.js";import{e as H,g as d}from"./chunk-VKWPEFWQ.js";d();d();d();d();var m=class{static description="Doctor test suite";context;assertions=[];registeredTests=[];async runSuite(t){this.context=t,this.registeredTests=[];let e=[];this.tests();for(let o of this.registeredTests){this.assertions=[];let s=Date.now();try{await o.fn(),e.push({name:o.name,status:this.hasFailures()?"failed":"passed",duration:Date.now()-s,assertions:[...this.assertions]})}catch(r){e.push({name:o.name,status:"failed",duration:Date.now()-s,assertions:[...this.assertions],error:r instanceof Error?r:new Error(String(r))})}}return e}test(t,e){this.registeredTests.push({name:t,fn:e})}tests(){}async run(t,e){let o=e?.cwd??this.context.workingDirectory,s=await F(t,{cwd:o,env:e?.env});return{command:t,exitCode:s.exitCode,stdout:s.stdout,stderr:s.stderr,output:String(s.stdout)+String(s.stderr),success:s.exitCode===0}}async runInteractive(t,e){let o=e?.cwd??this.context.workingDirectory,s=0;try{await N(t,{cwd:o,env:e?.env,stdin:"inherit"})}catch{s=1}return{command:t,exitCode:s,stdout:"",stderr:"",output:"",success:s===0}}assertSuccess(t,e){this.assertions.push({description:e??`Command succeeded: ${t.command}`,passed:t.success,expected:"exit code 0",actual:`exit code ${t.exitCode}`})}assertError(t,e,o){let s=!t.success;if(e){let h=(typeof e=="string"?new RegExp(e):e).test(t.output),c;s?h?c="matched":c=`output: ${t.output.slice(0,200)}`:c="command succeeded",this.assertions.push({description:o??`Command failed with expected error: ${e}`,passed:s&&h,expected:`failure with error matching ${e}`,actual:c})}else this.assertions.push({description:o??`Command failed: ${t.command}`,passed:s,expected:"non-zero exit code",actual:`exit code ${t.exitCode}`})}async assertFile(t,e,o){let s=g(t)?t:u(this.context.workingDirectory,t),r=x(this.context.workingDirectory,s);if(!await w(s)){this.assertions.push({description:o??`File exists: ${r}`,passed:!1,expected:"file exists",actual:"file not found"});return}if(e){let c=await O(s),D=(typeof e=="string"?new RegExp(e):e).test(c);this.assertions.push({description:o??`File ${r} matches ${e}`,passed:D,expected:`content matching ${e}`,actual:D?"matched":`content: ${c.slice(0,200)}...`})}else this.assertions.push({description:o??`File exists: ${r}`,passed:!0,expected:"file exists",actual:"file exists"})}async assertNoFile(t,e){let o=g(t)?t:u(this.context.workingDirectory,t),s=x(this.context.workingDirectory,o),r=await w(o);this.assertions.push({description:e??`File does not exist: ${s}`,passed:!r,expected:"file does not exist",actual:r?"file exists":"file does not exist"})}async assertDirectory(t,e){let o=g(t)?t:u(this.context.workingDirectory,t),s=x(this.context.workingDirectory,o),r=await w(o);this.assertions.push({description:e??`Directory exists: ${s}`,passed:r,expected:"directory exists",actual:r?"directory exists":"directory not found"})}assertOutput(t,e,o){let r=(typeof e=="string"?new RegExp(e):e).test(t.output);this.assertions.push({description:o??`Output matches ${e}`,passed:r,expected:`output matching ${e}`,actual:r?"matched":`output: ${t.output.slice(0,200)}`})}assertJson(t,e,o){try{let s=JSON.parse(t.stdout);if(e){let r=e(s);this.assertions.push({description:o??"Output is valid JSON matching validator",passed:r,expected:"valid JSON matching validator",actual:r?"matched":"validator returned false"})}else this.assertions.push({description:o??"Output is valid JSON",passed:!0,expected:"valid JSON",actual:"valid JSON"});return s}catch{this.assertions.push({description:o??"Output is valid JSON",passed:!1,expected:"valid JSON",actual:`invalid JSON: ${t.stdout.slice(0,100)}`});return}}assert(t,e){this.assertions.push({description:e,passed:t,expected:"true",actual:String(t)})}assertEqual(t,e,o){this.assertions.push({description:o,passed:t===e,expected:String(e),actual:String(t)})}hasFailures(){return this.assertions.some(t=>!t.passed)}};var p=class extends m{static description="Tests the theme init command creates a valid theme structure";themeName="";themePath="";tests(){this.test("init creates theme directory",async()=>{this.themeName=`doctor-theme-${C("creative")}`,this.themePath=u(this.context.workingDirectory,this.themeName);let t=await this.runInteractive(`shopify theme init ${this.themeName} --path ${this.context.workingDirectory}`);this.assertSuccess(t),this.context.themeName=this.themeName,this.context.themePath=this.themePath}),this.test("essential theme files exist",async()=>{let t=["layout/theme.liquid","config/settings_schema.json","templates/index.json"];await Promise.all(t.map(e=>this.assertFile(u(this.themePath,e))))}),this.test("theme directories exist",async()=>{let t=["sections","snippets","assets","locales"];await Promise.all(t.map(e=>this.assertDirectory(u(this.themePath,e))))}),this.test("layout/theme.liquid has valid content",async()=>{await this.assertFile(u(this.themePath,"layout/theme.liquid"),/<!doctype html>|<html|{{ content_for_header }}/i,"layout/theme.liquid contains expected Liquid markup")})}};d();var l=class extends m{static description="Tests pushing a theme to the store creates an unpublished theme";static requiresStore=!0;tests(){this.test("push creates unpublished theme",async()=>{if(!this.context.themePath){this.assert(!1,"Theme init did not complete successfully; themePath is missing in context");return}let t=this.context.themeName??"doctor-theme",e=`shopify theme push --unpublished --json --path ${this.context.themePath} -t ${t}`;this.context.environment&&(e+=` -e ${this.context.environment}`),this.context.store&&(e+=` -s ${this.context.store}`),this.context.password&&(e+=` --password ${this.context.password}`);let o=await this.run(e);this.assertSuccess(o);let s=this.assertJson(o,r=>typeof r.theme?.id=="number");s?.theme&&(this.assert(typeof s.theme.id=="number","Theme was created with a valid ID"),this.assertEqual(s.theme.role,"unpublished","Theme role is unpublished"),this.assert(s.theme.editor_url.includes("/admin/themes/"),"Editor URL is provided"),this.assert(s.theme.preview_url.includes("preview_theme_id="),"Preview URL is provided"),this.context.themeId=String(s.theme.id),this.context.data.editorUrl=s.theme.editor_url,this.context.data.previewUrl=s.theme.preview_url)})}};d();function _(i){return{workingDirectory:i.path??y(),environment:i.environment,store:i.store,password:i.password,data:{}}}d();var a=i=>k(i),v;function J(i){v=i}function G(i){if(!v)return i;let t=/\/[^\s,)]+/g;return i.replace(t,e=>T(e,v))}function A(i,t){a(""),a(n.bold(n.cyan(`Suite: ${i}`))),a(n.dim(t))}function j(i){a(n.bold(n.blue(`Running: ${i}`)))}function q(i){let t=`(${(i.duration/1e3).toFixed(2)}s)`;if(i.status==="passed"){a(n.bold(n.green(`PASSED: ${i.name} ${n.dim(t)}`)));for(let e of I(i.assertions))a(e)}else if(i.status==="failed"){a(n.red(`FAILED: ${i.name} ${n.dim(t)}`));for(let e of I(i.assertions))a(e);i.error&&a(n.red(` Error: ${G(i.error.message)}`))}else a(n.yellow(`SKIPPED: ${i.name}`))}function S(i){let t=i.filter(h=>h.status==="passed").length,e=i.filter(h=>h.status==="failed").length,o=i.filter(h=>h.status==="skipped").length,s=i.length,r=i.reduce((h,c)=>h+c.duration,0);a(""),a(n.bold("\u2500".repeat(40))),e>0?a(n.red(n.bold(`Doctor Complete: ${e}/${s} tests failed`))):a(n.green(n.bold(`Doctor Complete: ${t}/${s} tests passed`))),a(` Passed: ${n.green(String(t))}`),a(` Failed: ${n.red(String(e))}`),o>0&&a(` Skipped: ${n.yellow(String(o))}`),a(` Total time: ${n.dim(`${(r/1e3).toFixed(2)}s`)}`)}function I(i){return i.map(t=>{if(t.passed)return n.green(` [OK] ${t.description}`);{let e=` (expected: ${t.expected}, actual: ${t.actual})`;return n.red(` [FAIL] ${t.description}${e}`)}})}var Y=[p,l];async function L(i){let t=[],e=_(i);J(e.workingDirectory);for(let o of Y){let s=new o,r=o.description??"Test suite";A(o.name,r);let h=await s.runSuite(e);for(let c of h)if(j(c.name),q(c),t.push(c),c.status==="failed")return S(t),t}return S(t),t}var f=H(U(),1);var $=class i extends b{static description="Run all theme command doctor-release tests";static hidden=!0;static flags={...E,path:f.Flags.string({char:"p",description:"The path to run tests in. Defaults to current directory.",env:"SHOPIFY_FLAG_PATH",parse:async t=>P(t),default:async()=>y()}),environment:f.Flags.string({char:"e",description:"The environment to use from shopify.theme.toml (required for store-connected tests).",env:"SHOPIFY_FLAG_ENVIRONMENT",required:!0}),store:f.Flags.string({char:"s",description:"Store URL (overrides environment).",env:"SHOPIFY_FLAG_STORE"}),password:f.Flags.string({description:"Password from Theme Access app (overrides environment).",env:"SHOPIFY_FLAG_PASSWORD"})};async run(){if(!R())return;let{flags:t}=await this.parse(i);(await L({path:t.path,environment:t.environment,store:t.store,password:t.password})).some(s=>s.status==="failed")&&(process.exitCode=1)}};export{$ as a};
@@ -1 +0,0 @@
1
- import{a,b}from"./chunk-HVU3D3ZU.js";import"./chunk-TQ7URMGS.js";import"./chunk-7ARGLS6W.js";import"./chunk-JLGA3B7P.js";import"./chunk-4S2WKMLJ.js";import"./chunk-IOS4IDZ2.js";import"./chunk-UWHAOGO4.js";import"./chunk-FKIVKNOV.js";import"./chunk-7IRPE3M5.js";import"./chunk-YLQ3LNNY.js";import"./chunk-VJEKDBGZ.js";import"./chunk-EZ5F4ZFY.js";import"./chunk-LFOBYEWG.js";import"./chunk-3E3MCY5O.js";import"./chunk-ZDF5N422.js";import"./chunk-FQKURDZR.js";import"./chunk-MPW2YJWU.js";import"./chunk-Q555FV2X.js";import"./chunk-TQ7MHGY4.js";import"./chunk-LIQSNIB3.js";import"./chunk-T7KHS6RF.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-YRHFPXC3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{a as COMMANDS,b as HOOKS};
@@ -1 +0,0 @@
1
- import{a,b,c,d}from"./chunk-2VDCTMLY.js";import"./chunk-EZ5F4ZFY.js";import"./chunk-LFOBYEWG.js";import"./chunk-3E3MCY5O.js";import"./chunk-ZDF5N422.js";import"./chunk-FQKURDZR.js";import"./chunk-MPW2YJWU.js";import"./chunk-Q555FV2X.js";import"./chunk-TQ7MHGY4.js";import"./chunk-LIQSNIB3.js";import"./chunk-T7KHS6RF.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-YRHFPXC3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{c as DidYouMeanCommands,d as DidYouMeanHook,a as findAlternativeCommand,b as shouldRunCommand};
@@ -1 +0,0 @@
1
- import{a,b}from"./chunk-EMKLN75K.js";import"./chunk-OERMQ2FP.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{b as environmentFilePath,a as loadEnvironment};
@@ -1 +0,0 @@
1
- import{Aa as d,Ba as e,xa as a,ya as b,za as c}from"./chunk-3E3MCY5O.js";import"./chunk-ZDF5N422.js";import"./chunk-FQKURDZR.js";import"./chunk-MPW2YJWU.js";import"./chunk-Q555FV2X.js";import"./chunk-TQ7MHGY4.js";import"./chunk-LIQSNIB3.js";import"./chunk-T7KHS6RF.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-YRHFPXC3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{e as addBugsnagMetadata,c as cleanStackFrameFilePath,a as errorHandler,d as registerCleanBugsnagErrorsFromWithinPlugins,b as sendErrorToBugsnag};
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f}from"./chunk-KY36HSIB.js";import"./chunk-LFOBYEWG.js";import"./chunk-3E3MCY5O.js";import"./chunk-ZDF5N422.js";import"./chunk-FQKURDZR.js";import"./chunk-MPW2YJWU.js";import"./chunk-Q555FV2X.js";import"./chunk-TQ7MHGY4.js";import"./chunk-LIQSNIB3.js";import"./chunk-T7KHS6RF.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-YRHFPXC3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{c as fetchNotifications,d as fetchNotificationsInBackground,e as filterNotifications,b as getNotifications,a as showNotificationsIfNeeded,f as stringifyFilters};
@@ -1 +0,0 @@
1
- import{N as a,O as b,P as c,Q as d,R as e,S as f,T as g,U as h,V as i,W as j,X as k,Y as l,Z as m,_ as n}from"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{d as captureCommandWithExitCode,b as captureOutput,c as captureOutputWithExitCode,f as exec,e as execCommand,j as isCI,l as isInsideContainer,m as isStdinPiped,k as isWsl,a as openURL,n as readStdinString,g as sleep,h as terminalSupportsHyperlinks,i as terminalSupportsPrompting};
@@ -1 +0,0 @@
1
- import{a as c,b as d,c as e,d as f,e as g,f as h}from"./chunk-MP5NZL7C.js";import"./chunk-LWF4EV22.js";import"./chunk-KY36HSIB.js";import"./chunk-LFOBYEWG.js";import"./chunk-3E3MCY5O.js";import"./chunk-ZDF5N422.js";import"./chunk-FQKURDZR.js";import"./chunk-MPW2YJWU.js";import{s as a,t as b}from"./chunk-Q555FV2X.js";import"./chunk-TQ7MHGY4.js";import"./chunk-LIQSNIB3.js";import"./chunk-T7KHS6RF.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-YRHFPXC3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{c as cliInstallCommand,a as getAutoUpgradeEnabled,h as getOutputUpdateCLIReminder,f as hasBlockingAutoUpgradeNotification,d as runCLIUpgrade,b as setAutoUpgradeEnabled,e as versionToAutoUpgrade,g as warnIfUpgradeAvailable};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-TQ7MHGY4.js";import"./chunk-VKWPEFWQ.js";export{a as CLI_KIT_VERSION};
@@ -1 +0,0 @@
1
- import{a,b,c,d}from"./chunk-LWF4EV22.js";import"./chunk-RCYQPOJW.js";import"./chunk-7E4MJCVE.js";import"./chunk-BPVXYM6G.js";import"./chunk-WXT5AKZV.js";import"./chunk-5HBIIYSK.js";import"./chunk-GB3YC4TI.js";import"./chunk-YTJ3EPD3.js";import"./chunk-MQZPASSP.js";import"./chunk-RJ5VF3QY.js";import"./chunk-7UNQOKZW.js";import"./chunk-PQH4U2XV.js";import"./chunk-ZZ7SOJHH.js";import"./chunk-636CTEW7.js";import"./chunk-J7ZG6SO3.js";import"./chunk-3F42A3XV.js";import"./chunk-B4OMIONW.js";import"./chunk-BOAGJ6P5.js";import"./chunk-LD6ZCTZ3.js";import"./chunk-JJZNUFPD.js";import"./chunk-2R2PKQQV.js";import"./chunk-QLHPTMIH.js";import"./chunk-WNO2V53C.js";import"./chunk-I3J63RFV.js";import"./chunk-JD5P5RAJ.js";import"./chunk-3VYOLEQE.js";import"./chunk-TR4OWSEX.js";import"./chunk-ZGASBRSQ.js";import"./chunk-I5A6BPCP.js";import"./chunk-CX5CC6P5.js";import"./chunk-IGE4Y5SE.js";import"./chunk-JFBCE4HN.js";import"./chunk-VKWPEFWQ.js";export{b as globalCLIVersion,d as isMajorVersionChange,c as isPreReleaseVersion,a as localCLIVersion};