@shopify/cli 4.9.5 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics-Q6QDIDYT.js +1 -0
- package/dist/analytics-VKKJNJ62.js +1 -0
- package/dist/assets/hydrogen/starter/CHANGELOG.md +7 -0
- package/dist/assets/hydrogen/starter/package.json +2 -2
- package/dist/assets/hydrogen/vite/package.json +3 -4
- package/dist/assets/hydrogen/vite/vite.config.js +3 -3
- package/dist/bootstrap.js +1 -1
- package/dist/{chunk-MZL6VM3W.js → chunk-24NUJTIH.js} +1 -1
- package/dist/chunk-2CMEKSI7.js +1 -0
- package/dist/chunk-2DID73ML.js +1 -0
- package/dist/chunk-2ORRV7GH.js +1 -0
- package/dist/chunk-2VSNFOKD.js +1 -0
- package/dist/chunk-335BUVBP.js +1 -0
- package/dist/{chunk-PT3OZEBI.js → chunk-3A3DZVEJ.js} +1 -1
- package/dist/chunk-3C6VLJ5D.js +319 -0
- package/dist/{chunk-LCMDVUVO.js → chunk-3G4HJO72.js} +30 -30
- package/dist/chunk-3LVCG4JB.js +1 -0
- package/dist/chunk-43KLFFP7.js +1 -0
- package/dist/{chunk-QLHPTMIH.js → chunk-43R5VGKT.js} +1 -1
- package/dist/chunk-46MSIQ6Z.js +1 -0
- package/dist/chunk-4ARCB6DT.js +1 -0
- package/dist/chunk-4C2DAX5T.js +1 -0
- package/dist/chunk-4CRBTSVP.js +2 -0
- package/dist/chunk-4GCI2YCZ.js +8 -0
- package/dist/chunk-4GOJQKY5.js +1 -0
- package/dist/chunk-4RDFMBRG.js +9 -0
- package/dist/chunk-4SS6DXC7.js +5 -0
- package/dist/{chunk-Z4DESIR5.js → chunk-4TI7U2PN.js} +1 -1
- package/dist/{chunk-7BWSN3SG.js → chunk-52FDK2LC.js} +1 -1
- package/dist/chunk-53BG3NLH.js +3 -0
- package/dist/{chunk-LD6ZCTZ3.js → chunk-5B76DT7X.js} +1 -1
- package/dist/{chunk-YN4FSUFF.js → chunk-5NEGOQT6.js} +1 -1
- package/dist/{chunk-PFXDXD5O.js → chunk-5OMJFPQW.js} +1 -1
- package/dist/chunk-5TB52UUV.js +2 -0
- package/dist/chunk-5UWMXOHM.js +7 -0
- package/dist/chunk-6BNKBCCU.js +1 -0
- package/dist/chunk-6DXP7PQ7.js +1 -0
- package/dist/chunk-6PUU6ZNQ.js +1 -0
- package/dist/chunk-7GHSE7SG.js +1 -0
- package/dist/{chunk-5O7JTVO2.js → chunk-7IFE4UQY.js} +1 -1
- package/dist/chunk-7LAKWAKX.js +25 -0
- package/dist/chunk-7MVWDCI3.js +1 -0
- package/dist/chunk-7NSK77WG.js +3 -0
- package/dist/chunk-7QUZWCJZ.js +3 -0
- package/dist/chunk-7RPFJZLP.js +1 -0
- package/dist/{chunk-35NTERVR.js → chunk-7UOA4DI7.js} +2 -2
- package/dist/chunk-7WPUV7GY.js +6 -0
- package/dist/chunk-7Y7AZRL3.js +10 -0
- package/dist/{chunk-SEXH4EP5.js → chunk-ACA2BGAD.js} +1 -1
- package/dist/chunk-AJMDF3QC.js +1 -0
- package/dist/{chunk-CEQ5S3HH.js → chunk-AXC2MHHO.js} +1 -1
- package/dist/{chunk-5GFVMGAZ.js → chunk-AYL6KBPE.js} +1 -1
- package/dist/chunk-BAHIL37I.js +1 -0
- package/dist/{chunk-S6A7TMR4.js → chunk-BCYTZ7LM.js} +1 -1
- package/dist/{chunk-4VS7YD53.js → chunk-BJPDJIS4.js} +1 -1
- package/dist/{chunk-AJMJQA4J.js → chunk-BN7ZXAZJ.js} +1 -1
- package/dist/chunk-BVSKBX7T.js +16 -0
- package/dist/chunk-BWRNXCVN.js +4 -0
- package/dist/{chunk-ANG44FIF.js → chunk-C3KEDG33.js} +1 -1
- package/dist/{chunk-4BXQTW5G.js → chunk-C7V755IT.js} +1 -1
- package/dist/chunk-CCMDZX35.js +7 -0
- package/dist/chunk-CCQNP5YR.js +1 -0
- package/dist/chunk-CEIJKJOF.js +11 -0
- package/dist/chunk-CIK5BF7V.js +1 -0
- package/dist/{chunk-YIZAQABE.js → chunk-CVVQQLCF.js} +1 -1
- package/dist/chunk-CW2T7EOQ.js +1 -0
- package/dist/chunk-CZ22VZDA.js +376 -0
- package/dist/{chunk-VSFZEGIK.js → chunk-D7NB7YR6.js} +1 -1
- package/dist/{chunk-2VGPNRHH.js → chunk-DFQ4WTET.js} +2 -2
- package/dist/chunk-DJAZBPYA.js +3 -0
- package/dist/chunk-DNMXVMJM.js +47 -0
- package/dist/{chunk-G362JEAV.js → chunk-EGCWR5AS.js} +1 -1
- package/dist/{chunk-7LB6DPB6.js → chunk-EITIW5OX.js} +1 -1
- package/dist/chunk-EMSF57ZB.js +1 -0
- package/dist/{chunk-2II4W4ZF.js → chunk-EXFBZPZS.js} +1 -1
- package/dist/chunk-FDXHQZTO.js +26 -0
- package/dist/{chunk-YLCYRG2T.js → chunk-FFHH5LOR.js} +1 -1
- package/dist/{chunk-KOS53Z7E.js → chunk-FNLECT7B.js} +1 -1
- package/dist/{chunk-MTBABHUB.js → chunk-FWB3GLMW.js} +1 -1
- package/dist/chunk-FZCGRIOM.js +1 -0
- package/dist/{chunk-ND6O6KT6.js → chunk-G6ZMSWEU.js} +1 -1
- package/dist/chunk-GAMC2BNY.js +7 -0
- package/dist/chunk-GB6E3ATN.js +4 -0
- package/dist/chunk-GCNA3HXH.js +8 -0
- package/dist/{chunk-PIGERIRY.js → chunk-GFVKTWFT.js} +1 -1
- package/dist/chunk-GQNOVEKP.js +2 -0
- package/dist/{chunk-WGO2GC6I.js → chunk-GRGFA26K.js} +1 -1
- package/dist/chunk-GXORLBVN.js +2 -0
- package/dist/{chunk-HB4YI2PF.js → chunk-H4V55Y3Z.js} +118 -118
- package/dist/chunk-HCZG7YJ6.js +16 -0
- package/dist/chunk-HF4NDEX3.js +1 -0
- package/dist/chunk-HIRTL45Q.js +1 -0
- package/dist/chunk-I4OVLRQR.js +1 -0
- package/dist/{chunk-RUDHGUIM.js → chunk-I6FRVYGE.js} +1 -1
- package/dist/chunk-IEQ4UOH3.js +4 -0
- package/dist/{chunk-PIZDYS7T.js → chunk-IILLQOUC.js} +60 -60
- package/dist/{chunk-LG6DGIFX.js → chunk-IQVRP7CT.js} +1 -1
- package/dist/{chunk-5VRB3FBD.js → chunk-IUP7POIE.js} +1 -1
- package/dist/chunk-IUTZIN2T.js +10 -0
- package/dist/chunk-IWEKM5Y3.js +1 -0
- package/dist/chunk-IWTNUJGY.js +2 -0
- package/dist/chunk-J6TW43TG.js +1 -0
- package/dist/chunk-JDR6UVZA.js +8 -0
- package/dist/{chunk-NHE46R6C.js → chunk-JEA3C7ON.js} +1 -1
- package/dist/chunk-JOJV5E2K.js +1 -0
- package/dist/chunk-JYMDWR25.js +1 -0
- package/dist/{chunk-EAVD3OH2.js → chunk-KDPQXURV.js} +1 -1
- package/dist/{chunk-DO5YFMTJ.js → chunk-KGRIYAMA.js} +1 -1
- package/dist/chunk-KJQDS5HI.js +1 -0
- package/dist/chunk-KKPOOIE4.js +2 -0
- package/dist/{chunk-4IAGBAQD.js → chunk-KSDU4YOB.js} +1 -1
- package/dist/chunk-L7MSPGDS.js +5 -0
- package/dist/{chunk-JPFHPVIO.js → chunk-LDU5T3DN.js} +1 -1
- package/dist/chunk-LHKVXJPX.js +1 -0
- package/dist/{chunk-VG5ZDVDQ.js → chunk-LMQGNECW.js} +86 -200
- package/dist/{chunk-TQ7URMGS.js → chunk-LQ7ENG4V.js} +1 -1
- package/dist/chunk-LVLAOBJM.js +103 -0
- package/dist/chunk-LWCTKI4Z.js +18 -0
- package/dist/chunk-M3ACZWMR.js +1 -0
- package/dist/chunk-M4BVLMPH.js +31 -0
- package/dist/{chunk-WKVFVT3H.js → chunk-M5TGCSUK.js} +1 -1
- package/dist/chunk-M7LPHCP2.js +274 -0
- package/dist/{chunk-QBIYAMSH.js → chunk-MDRVCBDO.js} +1 -1
- package/dist/chunk-MR2AUT7Q.js +1 -0
- package/dist/chunk-MXJAH2GW.js +5 -0
- package/dist/{chunk-EO422KZZ.js → chunk-MYAIWSOO.js} +1 -1
- package/dist/{chunk-Y5VFOLNQ.js → chunk-N2RFDHRY.js} +1 -1
- package/dist/{chunk-7DSH4CRU.js → chunk-NB4BRW3H.js} +1 -1
- package/dist/chunk-NDKSG4CC.js +97 -0
- package/dist/chunk-NK2MGR6A.js +1 -0
- package/dist/chunk-NOH63WC6.js +12 -0
- package/dist/{chunk-3XAD2E55.js → chunk-OGWPS55W.js} +1 -1
- package/dist/chunk-OQ5CLM2H.js +4 -0
- package/dist/{chunk-MQ4WV4B6.js → chunk-OQU3HLAE.js} +1 -1
- package/dist/chunk-OVWUGAEU.js +11 -0
- package/dist/chunk-OX7UVDSU.js +6 -0
- package/dist/chunk-P33TONYG.js +1 -0
- package/dist/chunk-PEVIRAMR.js +6 -0
- package/dist/{chunk-LLNUIGHP.js → chunk-PGLWZMJU.js} +4 -4
- package/dist/chunk-PIAD3F6M.js +16 -0
- package/dist/chunk-PMHP57MH.js +20 -0
- package/dist/{chunk-XTOOTN4P.js → chunk-POKY4RWR.js} +1 -1
- package/dist/chunk-PSSYLJG4.js +2 -0
- package/dist/chunk-PYIICTLX.js +1 -0
- package/dist/chunk-PZUGDE7N.js +2 -0
- package/dist/{chunk-SUTVPAJF.js → chunk-Q2SZCZE7.js} +1 -1
- package/dist/{chunk-EZG5EB7D.js → chunk-Q2XRITUG.js} +1 -1
- package/dist/chunk-Q5MEFIMV.js +4 -0
- package/dist/chunk-Q66CI37F.js +7 -0
- package/dist/chunk-QFWWCZOI.js +1 -0
- package/dist/{chunk-TR4OWSEX.js → chunk-QFYLJVJW.js} +1 -1
- package/dist/chunk-QKVVJXWS.js +3 -0
- package/dist/chunk-QN3774QI.js +1 -0
- package/dist/chunk-R2BDABJD.js +213 -0
- package/dist/{chunk-RW3P3UMU.js → chunk-R7EMV77H.js} +2 -2
- package/dist/chunk-RFGEM5JC.js +3 -0
- package/dist/{chunk-HY6EXJBZ.js → chunk-RVQV6G5M.js} +1 -1
- package/dist/chunk-S67I4E7M.js +5 -0
- package/dist/chunk-SFPXYHHL.js +1 -0
- package/dist/{chunk-XPDHT3Z4.js → chunk-SFQEHDJY.js} +1 -1
- package/dist/chunk-SL3VBI62.js +3 -0
- package/dist/{chunk-5XTJ4OL4.js → chunk-SNNZ4U2W.js} +1 -1
- package/dist/chunk-T2IUXXCT.js +1 -0
- package/dist/chunk-TPSA4JN5.js +1 -0
- package/dist/chunk-TTEF7GTX.js +1 -0
- package/dist/{chunk-BAHM64B4.js → chunk-U25W35TX.js} +1 -1
- package/dist/chunk-UIQL5ZF3.js +1 -0
- package/dist/chunk-UK6576EO.js +1 -0
- package/dist/chunk-ULD7CIOY.js +4 -0
- package/dist/{chunk-65GNYRYR.js → chunk-UOS2XLGG.js} +2 -2
- package/dist/{chunk-VNG2I7NM.js → chunk-UVRKTMF7.js} +1 -1
- package/dist/{chunk-BD2L6YE5.js → chunk-UWMZ5CSB.js} +1 -1
- package/dist/chunk-UZROQRLX.js +2 -0
- package/dist/{chunk-5BGUKF7L.js → chunk-V75WUEFU.js} +1 -1
- package/dist/chunk-VB7YQMAM.js +5 -0
- package/dist/chunk-VHUD3CBC.js +3 -0
- package/dist/chunk-VMMUJN4T.js +17 -0
- package/dist/{chunk-T3UCIWRH.js → chunk-VW6QS7DO.js} +1 -1
- package/dist/chunk-VWH3VPYI.js +1 -0
- package/dist/{chunk-4TF7ER72.js → chunk-WBJ6ZHYH.js} +1 -1
- package/dist/chunk-WDFCOZAY.js +16 -0
- package/dist/chunk-WFWISGLS.js +1 -0
- package/dist/chunk-WGUOLSMG.js +1 -0
- package/dist/{chunk-VTOPYXHO.js → chunk-WJSUIUBW.js} +2 -2
- package/dist/{chunk-762IKULK.js → chunk-WMAFG2JD.js} +1 -1
- package/dist/chunk-X2H6I2WW.js +5 -0
- package/dist/{chunk-MWWULCLD.js → chunk-X7HVAVSZ.js} +1 -1
- package/dist/{chunk-MF7IHOM5.js → chunk-XBQDMGUN.js} +1 -1
- package/dist/chunk-XITZIDCL.js +18 -0
- package/dist/chunk-XKRJKUA7.js +1 -0
- package/dist/{chunk-K6FH5JSY.js → chunk-XM7YUXTF.js} +2 -2
- package/dist/chunk-XMODGI45.js +1 -0
- package/dist/{chunk-5NCWBBRW.js → chunk-XNNKLUTN.js} +1 -1
- package/dist/chunk-XTREQ4A2.js +1 -0
- package/dist/chunk-YGYEM6QO.js +1 -0
- package/dist/{chunk-XVFQ6CNO.js → chunk-YKS7MH3F.js} +9 -6
- package/dist/chunk-YTUDXZLN.js +1 -0
- package/dist/{chunk-I3J63RFV.js → chunk-YTUUU33R.js} +1 -1
- package/dist/chunk-YVVU4J5O.js +3 -0
- package/dist/{chunk-QUO4RD3W.js → chunk-YVY32DNA.js} +1 -1
- package/dist/chunk-Z5SILNH2.js +7 -0
- package/dist/chunk-ZAA2DXK5.js +5 -0
- package/dist/chunk-ZDQO6CNY.js +1 -0
- package/dist/chunk-ZGV3HNEV.js +1 -0
- package/dist/chunk-ZQDDRIBA.js +22 -0
- package/dist/{chunk-AODTY2BL.js → chunk-ZT5WFUKJ.js} +4 -4
- package/dist/chunk-ZYQ2XWC5.js +5 -0
- package/dist/cli/commands/app/build.js +1 -1
- package/dist/cli/commands/app/bulk/cancel.js +1 -1
- package/dist/cli/commands/app/bulk/execute.js +1 -1
- package/dist/cli/commands/app/bulk/status.js +1 -1
- package/dist/cli/commands/app/config/link.js +1 -1
- package/dist/cli/commands/app/config/pull.js +1 -1
- package/dist/cli/commands/app/config/use.js +1 -1
- package/dist/cli/commands/app/config/validate.js +1 -1
- package/dist/cli/commands/app/demo/watcher.js +1 -1
- package/dist/cli/commands/app/deploy.js +1 -1
- package/dist/cli/commands/app/dev/clean.js +1 -1
- package/dist/cli/commands/app/dev.js +1 -1
- package/dist/cli/commands/app/env/pull.js +1 -1
- package/dist/cli/commands/app/env/show.js +1 -1
- package/dist/cli/commands/app/execute.js +1 -1
- package/dist/cli/commands/app/function/build.js +1 -1
- package/dist/cli/commands/app/function/info.js +1 -1
- package/dist/cli/commands/app/function/replay.js +1 -1
- package/dist/cli/commands/app/function/run.js +1 -1
- package/dist/cli/commands/app/function/schema.js +1 -1
- package/dist/cli/commands/app/function/typegen.js +1 -1
- package/dist/cli/commands/app/generate/extension.js +1 -1
- package/dist/cli/commands/app/graphiql.js +1 -1
- package/dist/cli/commands/app/import/channel-config.js +1 -1
- package/dist/cli/commands/app/import/custom-data-definitions.js +1 -1
- package/dist/cli/commands/app/import/dashboard-extensions.js +1 -1
- package/dist/cli/commands/app/import-custom-data-definitions.js +1 -1
- package/dist/cli/commands/app/import-extensions.js +1 -1
- package/dist/cli/commands/app/info.js +1 -1
- package/dist/cli/commands/app/init.js +1 -1
- package/dist/cli/commands/app/logs.js +1 -1
- package/dist/cli/commands/app/release.js +1 -1
- package/dist/cli/commands/app/security/check.js +1 -1
- package/dist/cli/commands/app/security/clean.js +1 -1
- package/dist/cli/commands/app/security/instructions.js +1 -1
- package/dist/cli/commands/app/security/record.js +1 -1
- package/dist/cli/commands/app/security/review.js +1 -1
- package/dist/cli/commands/app/subscription-migrations/cancel.js +1 -1
- package/dist/cli/commands/app/subscription-migrations/list.js +1 -1
- package/dist/cli/commands/app/subscription-migrations/schedule.js +1 -1
- package/dist/cli/commands/app/subscription-migrations/status.js +1 -1
- package/dist/cli/commands/app/subscription-migrations/unschedule.js +1 -1
- package/dist/cli/commands/app/versions/list.js +1 -1
- package/dist/cli/commands/app/webhook/trigger.js +1 -1
- package/dist/cli/commands/auth/login.js +1 -1
- package/dist/cli/commands/auth/logout.js +1 -1
- package/dist/cli/commands/cache/clear.js +1 -1
- package/dist/cli/commands/config/autoupgrade/off.js +1 -1
- package/dist/cli/commands/config/autoupgrade/on.js +1 -1
- package/dist/cli/commands/config/autoupgrade/status.js +1 -1
- package/dist/cli/commands/debug/command-flags.js +1 -1
- package/dist/cli/commands/doc/fetch.d.ts +34 -1
- package/dist/cli/commands/doc/fetch.js +1 -1
- package/dist/cli/commands/doc/search.d.ts +53 -1
- package/dist/cli/commands/doc/search.js +1 -1
- package/dist/cli/commands/docs/generate.js +1 -1
- package/dist/cli/commands/doctor-release/doctor-release.js +1 -1
- package/dist/cli/commands/doctor-release/theme/index.js +1 -1
- package/dist/cli/commands/help.d.ts +6 -6
- package/dist/cli/commands/help.js +1 -1
- package/dist/cli/commands/kitchen-sink/async.js +1 -1
- package/dist/cli/commands/kitchen-sink/index.js +1 -1
- package/dist/cli/commands/kitchen-sink/prompts.js +1 -1
- package/dist/cli/commands/kitchen-sink/static.js +1 -1
- package/dist/cli/commands/notifications/generate.js +1 -1
- package/dist/cli/commands/notifications/list.js +1 -1
- package/dist/cli/commands/organization/list.js +1 -1
- package/dist/cli/commands/search.js +1 -1
- package/dist/cli/commands/send-analytics.js +1 -1
- package/dist/cli/commands/theme/check.js +1 -1
- package/dist/cli/commands/theme/console.js +1 -1
- package/dist/cli/commands/theme/delete.js +1 -1
- package/dist/cli/commands/theme/dev.js +1 -1
- package/dist/cli/commands/theme/duplicate.js +1 -1
- package/dist/cli/commands/theme/info.js +1 -1
- package/dist/cli/commands/theme/init.js +1 -1
- package/dist/cli/commands/theme/language-server.js +1 -1
- package/dist/cli/commands/theme/list.js +1 -1
- package/dist/cli/commands/theme/metafields/pull.js +1 -1
- package/dist/cli/commands/theme/open.js +1 -1
- package/dist/cli/commands/theme/package.js +1 -1
- package/dist/cli/commands/theme/preview.js +1 -1
- package/dist/cli/commands/theme/profile.js +1 -1
- package/dist/cli/commands/theme/publish.js +1 -1
- package/dist/cli/commands/theme/pull.js +1 -1
- package/dist/cli/commands/theme/push.js +1 -1
- package/dist/cli/commands/theme/rename.js +1 -1
- package/dist/cli/commands/theme/share.js +1 -1
- package/dist/cli/commands/upgrade.d.ts +64 -0
- package/dist/cli/commands/upgrade.js +1 -1
- package/dist/cli/commands/version.js +1 -1
- package/dist/cli/help.js +1 -1
- package/dist/cli/services/commands/doc/fetch-result.d.ts +2 -0
- package/dist/cli/services/commands/doc/fetch-result.js +22 -0
- package/dist/cli/services/commands/doc/fetch.d.ts +2 -1
- package/dist/cli/services/commands/doc/fetch.js +2 -15
- package/dist/cli/services/commands/doc/search-result.d.ts +2 -0
- package/dist/cli/services/commands/doc/search-result.js +14 -0
- package/dist/cli/services/commands/doc/search.d.ts +9 -1
- package/dist/cli/services/commands/doc/search.js +27 -2
- package/dist/cli/services/commands/doc/types.d.ts +107 -0
- package/dist/cli/services/commands/doc/types.js +47 -0
- package/dist/cli/services/commands/help/types.d.ts +6 -6
- package/dist/command-event-context-LFUZ7UCA.js +1 -0
- package/dist/command-json-schema-2UMKY7MY.js +1 -0
- package/dist/command-registry.js +1 -1
- package/dist/conf-store-RI3TL6I4.js +1 -0
- package/dist/custom-oclif-loader-IZCKN67O.js +1 -0
- package/dist/deprecations-IFVUXXDB.js +1 -0
- package/dist/dist-4H2B7BMN.js +1 -0
- package/dist/dist-QNWOGQN3.js +1 -0
- package/dist/{environment-RSUK27TA.js → environment-O7ECODHU.js} +1 -1
- package/dist/environments-CYMEN7NV.js +1 -0
- package/dist/error-IL6WQMSW.js +1 -0
- package/dist/error-handler-74HKA23T.js +1 -0
- package/dist/fs-AINFLJ2E.js +1 -0
- package/dist/hooks/did-you-mean.js +1 -1
- package/dist/hooks/hydrogen-init.js +1 -1
- package/dist/hooks/plugin-plugins.js +1 -1
- package/dist/hooks/postrun.js +1 -1
- package/dist/hooks/prerun.js +1 -1
- package/dist/hooks/public-metadata.js +1 -1
- package/dist/hooks/sensitive-metadata.js +1 -1
- package/dist/hooks/tunnel-provider.js +1 -1
- package/dist/hooks/tunnel-start.js +1 -1
- package/dist/index.js +13 -13
- package/dist/is-global-2VLKV46Q.js +1 -0
- package/dist/json-error-HZB5YIHV.js +1 -0
- package/dist/{lib-TYM5B75S.js → lib-PJHT4MKY.js} +1 -1
- package/dist/{lib-55QUD4AJ.js → lib-VKSQ65BQ.js} +1 -1
- package/dist/{lib-PH52G55H.js → lib-YEZOHXF3.js} +1 -1
- package/dist/{local-ZZGRGYUP.js → local-KOZETREJ.js} +1 -1
- package/dist/{metadata-YQNVKC2R.js → metadata-IBPHZB7N.js} +1 -1
- package/dist/{morph-BABFBRSW.js → morph-CRY35DIK.js} +1 -1
- package/dist/node-package-manager-DXSRNEDC.js +1 -0
- package/dist/notifications-system-XA3EBOGJ.js +1 -0
- package/dist/os-X73O7BAB.js +1 -0
- package/dist/out-B2GISN65.js +1 -0
- package/dist/output-3OYXK3Z5.js +1 -0
- package/dist/{path-CPAYTWQW.js → path-3L2QRACZ.js} +1 -1
- package/dist/system-JWYYT4PM.js +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui-PCG5D6RZ.js +1 -0
- package/dist/upgrade-7U2TUNC4.js +1 -0
- package/dist/version-7DGU2KYH.js +1 -0
- package/dist/version-SXQTRBXB.js +1 -0
- package/dist/workerd-MQZ3NKJI.js +18 -0
- package/oclif.manifest.json +1664 -427
- package/package.json +8 -8
- package/dist/analytics-PBZEKUGU.js +0 -1
- package/dist/analytics-WVGBNFGK.js +0 -1
- package/dist/chunk-2EC5SUGK.js +0 -19
- package/dist/chunk-2QENUJVG.js +0 -1
- package/dist/chunk-2RONPKOD.js +0 -1
- package/dist/chunk-2WDJXERZ.js +0 -25
- package/dist/chunk-32NWVYUC.js +0 -1
- package/dist/chunk-32RRWGNS.js +0 -1
- package/dist/chunk-32VQQ6EU.js +0 -1
- package/dist/chunk-34RFTE5T.js +0 -4
- package/dist/chunk-35VQQKVX.js +0 -1
- package/dist/chunk-3N6NKC2U.js +0 -1
- package/dist/chunk-3Q5BAPQK.js +0 -7
- package/dist/chunk-42DMJGOW.js +0 -2
- package/dist/chunk-4CTTWXUX.js +0 -32
- package/dist/chunk-4HBKQUKY.js +0 -1
- package/dist/chunk-4MQXMIWQ.js +0 -7
- package/dist/chunk-5APLAJCB.js +0 -3
- package/dist/chunk-5AQNISGC.js +0 -1
- package/dist/chunk-5OM72O4N.js +0 -1
- package/dist/chunk-5SLKHURV.js +0 -1
- package/dist/chunk-62GA7XR3.js +0 -18
- package/dist/chunk-62LMVFR7.js +0 -1
- package/dist/chunk-6IDEDOXW.js +0 -2
- package/dist/chunk-72CBJYAG.js +0 -16
- package/dist/chunk-7E4MJCVE.js +0 -10
- package/dist/chunk-7HZU7CYS.js +0 -1
- package/dist/chunk-7Q4EKY3E.js +0 -3
- package/dist/chunk-7YXHILW4.js +0 -383
- package/dist/chunk-7Z6IX7MU.js +0 -1
- package/dist/chunk-A4XREDFZ.js +0 -1
- package/dist/chunk-AHNLGCHF.js +0 -5
- package/dist/chunk-ARRRFY6S.js +0 -4
- package/dist/chunk-BAP2CHI2.js +0 -1
- package/dist/chunk-BQWK222Q.js +0 -1
- package/dist/chunk-C3PXIZY3.js +0 -8
- package/dist/chunk-C6HGU77I.js +0 -1
- package/dist/chunk-CBFAU5AF.js +0 -5
- package/dist/chunk-COP2Q2YT.js +0 -1
- package/dist/chunk-CSWDRG3E.js +0 -1
- package/dist/chunk-CVBWEUWX.js +0 -1
- package/dist/chunk-D3NVUE65.js +0 -1
- package/dist/chunk-DCKRQZLE.js +0 -20
- package/dist/chunk-DYH3ZXJS.js +0 -15
- package/dist/chunk-EBX6DYDX.js +0 -2
- package/dist/chunk-EDRCFY3K.js +0 -16
- package/dist/chunk-EEAY7HFW.js +0 -317
- package/dist/chunk-EJMLNBZA.js +0 -275
- package/dist/chunk-EO3S2TFI.js +0 -2
- package/dist/chunk-EOIGDOUD.js +0 -7
- package/dist/chunk-EYKXHMEJ.js +0 -6
- package/dist/chunk-FHV2H3Z2.js +0 -12
- package/dist/chunk-FOAV642V.js +0 -1
- package/dist/chunk-FVTP7EO4.js +0 -46
- package/dist/chunk-FYIC4JHB.js +0 -26
- package/dist/chunk-GF36WNMH.js +0 -5
- package/dist/chunk-GJ3QUZO6.js +0 -1
- package/dist/chunk-GJZVUEMP.js +0 -11
- package/dist/chunk-GP6O7YRO.js +0 -20
- package/dist/chunk-GW424AJO.js +0 -7
- package/dist/chunk-GXSF6NCR.js +0 -1
- package/dist/chunk-GYVQIRBD.js +0 -1
- package/dist/chunk-H3ZPYOQV.js +0 -1
- package/dist/chunk-H7YSZKZ2.js +0 -1
- package/dist/chunk-HILYTMVA.js +0 -1
- package/dist/chunk-HMWQOQAQ.js +0 -2
- package/dist/chunk-HNSRF4SQ.js +0 -1
- package/dist/chunk-HTODXNY6.js +0 -3
- package/dist/chunk-IUYVJJKE.js +0 -9
- package/dist/chunk-JM2CQP64.js +0 -97
- package/dist/chunk-K4AF7A25.js +0 -1
- package/dist/chunk-KDV4WR5A.js +0 -4
- package/dist/chunk-KF7NL5YM.js +0 -8
- package/dist/chunk-KMJTO7CU.js +0 -103
- package/dist/chunk-KN3MUEWA.js +0 -4
- package/dist/chunk-KYB4JX76.js +0 -5
- package/dist/chunk-LJAU6YHF.js +0 -10
- package/dist/chunk-LMQOFVRC.js +0 -17
- package/dist/chunk-LQSD25YS.js +0 -3
- package/dist/chunk-M2HQFHNO.js +0 -1
- package/dist/chunk-M5WBYWSQ.js +0 -7
- package/dist/chunk-N47RQHEI.js +0 -2
- package/dist/chunk-NRG2WPSM.js +0 -1
- package/dist/chunk-O2CP7DQE.js +0 -1
- package/dist/chunk-O6FXUKI2.js +0 -2
- package/dist/chunk-OHJUEUSA.js +0 -1
- package/dist/chunk-OOKTWSGP.js +0 -4
- package/dist/chunk-OONMCK7X.js +0 -1
- package/dist/chunk-OWK2RI4O.js +0 -6
- package/dist/chunk-P2UEQJJ4.js +0 -5
- package/dist/chunk-QBJ74XPX.js +0 -18
- package/dist/chunk-QGFJOTOH.js +0 -4
- package/dist/chunk-RIO5HKD5.js +0 -1
- package/dist/chunk-S7EKUSO6.js +0 -3
- package/dist/chunk-SJ2ROSXG.js +0 -1
- package/dist/chunk-SNTRSP5K.js +0 -359
- package/dist/chunk-SYCN2GT2.js +0 -3
- package/dist/chunk-TBNEN73P.js +0 -1
- package/dist/chunk-TVI7TQ4C.js +0 -16
- package/dist/chunk-TYMYIUIQ.js +0 -1
- package/dist/chunk-UEQT7TA4.js +0 -1
- package/dist/chunk-UUM367NR.js +0 -5
- package/dist/chunk-V5FZRNXI.js +0 -1
- package/dist/chunk-VE35YELD.js +0 -1
- package/dist/chunk-WEICJ4GW.js +0 -1
- package/dist/chunk-WJJXJNNP.js +0 -3
- package/dist/chunk-XAQUXFN5.js +0 -1
- package/dist/chunk-XE6EUHSS.js +0 -2
- package/dist/chunk-XFEJS652.js +0 -16
- package/dist/chunk-XI4QEULN.js +0 -1
- package/dist/chunk-XP63T4KZ.js +0 -5
- package/dist/chunk-XRCAUZAZ.js +0 -8
- package/dist/chunk-XSRZWJIJ.js +0 -1
- package/dist/chunk-YFJELEVH.js +0 -1
- package/dist/chunk-YNJIDLI3.js +0 -7
- package/dist/chunk-YRX4E67D.js +0 -6
- package/dist/chunk-Z2NL6XQK.js +0 -6
- package/dist/chunk-Z6Z5DPKS.js +0 -1
- package/dist/chunk-ZOE6WXW6.js +0 -1
- package/dist/cli/commands/app/app-logs/sources.js +0 -1
- package/dist/command-json-schema-3RP5P43D.js +0 -1
- package/dist/conf-store-XORTWCKZ.js +0 -1
- package/dist/custom-oclif-loader-ZRYPPYIP.js +0 -1
- package/dist/deprecations-AZDMCRNN.js +0 -1
- package/dist/dist-DTBXLVHF.js +0 -1
- package/dist/dist-SOYIDACZ.js +0 -1
- package/dist/environments-L42SEHB4.js +0 -1
- package/dist/error-H6B5BHYC.js +0 -1
- package/dist/error-handler-JB752NKM.js +0 -1
- package/dist/fs-XHZY6MNM.js +0 -1
- package/dist/is-global-2NBDZWLC.js +0 -1
- package/dist/json-error-OHV2KQFY.js +0 -1
- package/dist/node-package-manager-LN2Y7FQ2.js +0 -1
- package/dist/notifications-system-HWJ3F44U.js +0 -1
- package/dist/os-MHOCCDIB.js +0 -1
- package/dist/out-53ABAVL7.js +0 -1
- package/dist/output-GILH4S6M.js +0 -1
- package/dist/system-6WYK24ET.js +0 -1
- package/dist/ui-RP6SVJUK.js +0 -1
- package/dist/upgrade-5G7FBJJV.js +0 -1
- package/dist/version-TOBC7X2C.js +0 -1
- package/dist/version-UIRCT6RC.js +0 -1
- package/dist/workerd-ARH2OCYL.js +0 -18
package/dist/chunk-KF7NL5YM.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{a as w}from"./chunk-M2HQFHNO.js";import{a as u}from"./chunk-7LB6DPB6.js";import{a as v,b as f}from"./chunk-YY6TFARF.js";import{a as y}from"./chunk-NRG2WPSM.js";import{p as d,v as c}from"./chunk-LQSD25YS.js";import{b as p}from"./chunk-SUTVPAJF.js";import{N as m,y as s}from"./chunk-7YXHILW4.js";import{b as E}from"./chunk-I3J63RFV.js";import{e as T,g as i}from"./chunk-VKWPEFWQ.js";i();i();async function F(t,e){let r=new u(t),g=(await(e.development?r.find():r.fetch()))?.id,n=await y(t,{header:"Select a theme to open",filter:{live:e.live,theme:e.development?`${g}`:e.theme}}),l=v(n,t),a=f(n,t);s({body:["Preview information for theme",...w(n),`
|
|
2
|
-
|
|
3
|
-
`,{list:{items:[{link:{label:"Preview your theme",url:l}},{link:{label:"Customize your theme at the theme editor",url:a}}]}}]}),e.editor?await m(a):await m(l)}var o=T(E(),1);var h=class extends c{static summary="Opens the preview of your remote theme.";static descriptionWithMarkdown=`Returns links that let you preview the specified theme. The following links are returned:
|
|
4
|
-
|
|
5
|
-
- A link to the [editor](https://shopify.dev/docs/themes/tools/online-editor) for the theme in the Shopify admin.
|
|
6
|
-
- A [preview link](https://help.shopify.com/manual/online-store/themes/adding-themes#share-a-theme-preview-with-others) that you can share with other developers.
|
|
7
|
-
|
|
8
|
-
If you don't specify a theme, then you're prompted to select the theme to open from the list of the themes in your store.`;static description=this.descriptionForHelp();static flags={...p,...d,development:o.Flags.boolean({char:"d",description:"Open your development theme. Use --development, --live, or --theme in non-interactive environments.",env:"SHOPIFY_FLAG_DEVELOPMENT"}),editor:o.Flags.boolean({char:"E",description:"Open the theme editor for the specified theme in the browser.",env:"SHOPIFY_FLAG_EDITOR"}),live:o.Flags.boolean({char:"l",description:"Open your live (published) theme. Use --development, --live, or --theme in non-interactive environments.",env:"SHOPIFY_FLAG_LIVE"}),theme:o.Flags.string({char:"t",description:"Theme ID or name of the remote theme. Use --development, --live, or --theme in non-interactive environments.",env:"SHOPIFY_FLAG_THEME_ID"})};static multiEnvironmentsFlags=null;static nonTTYFlagRequirements(){return[{flags:["theme","development","live"]}]}async command(e,r){await F(r,e)}};export{h as a};
|
package/dist/chunk-KMJTO7CU.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import{a as U,b as xt}from"./chunk-JLGA3B7P.js";import{a as ht,b as ft,f as Ie,g as ae,h as A,i as ce,k as Et,n as Tt}from"./chunk-FVTP7EO4.js";import{a as M,l as gt,m as yt}from"./chunk-TBNEN73P.js";import{s as ie,t as W}from"./chunk-LQSD25YS.js";import{a as D,b as O,e as nt,g as rt,i as ot,j as it,k as at,n as ct,p as lt,q as dt,r as oe,s as b,u as ut,w as pt}from"./chunk-Q7BOSHWX.js";import{da as mt}from"./chunk-WKVFVT3H.js";import{pa as L,ra as H}from"./chunk-HB4YI2PF.js";import{A as I,B as te,C as tt,T as st,y as et}from"./chunk-7YXHILW4.js";import{c as Ke}from"./chunk-HILYTMVA.js";import{i as se}from"./chunk-4HBKQUKY.js";import{Aa as Ze,Ca as Qe,Cb as j,Eb as ne,Kb as re,Nb as P,Ob as N,S as Xe,Xa as $,_a as C,ba as $e,fb as ke,qa as k,ya as be}from"./chunk-62GA7XR3.js";import{c as T,f as V,i as Ve,j as q}from"./chunk-6IDEDOXW.js";import{e as Ye,g as h}from"./chunk-VKWPEFWQ.js";h();h();h();var rs=".shopifyignore",Rt=/templates\/\*(\.(json|liquid))?$/,St=new Set;function Le(e,t={}){let s=t.ignoreFromFile??[],n=t.ignore??[],r=t.only??[],[o=[],i=[]]=_e(s),[a=[],u=[]]=_e(n),[p=[],c=[]]=_e(r),l=e.filter(B(o,".shopifyignore"));return l=l.filter(B(a,"--ignore")),l=l.filter(B(p,"--only",!0)),i.length>0&&(l=l.concat(e.filter(B(i,".shopifyignore",!0)))),u.length>0&&(l=l.concat(e.filter(B(u,"--ignore",!0)))),c.length>0&&(l=l.filter(B(c,"--only"))),Xe(l,x=>x.key)}function B(e,t,s=!1){return({key:n})=>{if(e.length===0)return!0;let r=e.some(i=>os(n,i)||cs(i)&&as(n,ls(i)));return(s?!r:r)?(P(`Ignoring theme file ${n} via ${t}...`),!1):!0}}async function wt(e){let t=T(e,rs);return await $(t)?(await k(t,{encoding:"utf8"})).split(/(\r\n|\r|\n)/).map(r=>r.trim()).filter(r=>r&&!r.startsWith("#")):[]}function _e(e){let t=e.filter(n=>n.startsWith("!")).map(n=>n.slice(1));return[e.filter(n=>!n.startsWith("!")),t]}function os(e,t){let s={matchBase:!0,noglobstar:!0};return ke(e,t,s)?!0:(!t.includes("*")&&t.endsWith("/")&&!St.has(t)&&(St.add(t),I({headline:"Directory pattern may be misleading.",body:`For more reliable matching, consider using "${t}*" or "${t}*.<file_extension>" instead.`})),is(t)?ke(e,t.replace(Rt,"templates/**/*$1"),s):!1)}function is(e){return Rt.test(e)}function as(e,t){return t.test(e)}function cs(e){return e.startsWith("/")&&e.endsWith("/")}function ls(e){return new RegExp(e.slice(1,-1))}h();import Ft from"fs/promises";var le=class{notifyPath;isValidUrl;constructor(t){this.notifyPath=t,this.isValidUrl=this.validateUrl(t),this.notifyPath===""&&N("Notification skipped: notifyPath is an empty string")}async notify(t){if(this.notifyPath!=="")try{P(`Notifying filechange listener at ${this.notifyPath}...`),this.isValidUrl?await this.notifyUrl(t):await this.notifyFile(t)}catch(s){L(s);let n=`Failed to notify filechange listener at ${this.notifyPath}`;s instanceof Error&&(n=n.concat(`: ${s.message}`)),N(n)}}async notifyUrl(t){let s=await fetch(this.notifyPath,{method:"POST",body:JSON.stringify({files:[t]}),headers:{"Content-Type":"application/json"}});if(!s.ok)throw new Error(s.statusText)}async notifyFile(t){await Ft.writeFile(this.notifyPath,t),await Ft.utimes(this.notifyPath,new Date,new Date)}validateUrl(t){try{let s=new URL(t);return s.protocol==="http:"||s.protocol==="https:"}catch{return!1}}};h();h();h();import ds from"node:events";var Pt=["assets/**/*.*","locales/**/*.json","blocks/**/*.liquid","snippets/**/*.liquid"];function vt(e){let t=new Map,s=new Set,n=new ds,r=(c,l)=>{n.emit(c,l)},o=async c=>{let l=await ue(e,c),m=de(c,l),x=typeof l=="string"?l:"",f=Buffer.isBuffer(l)?l.toString("base64"):"";return t.set(c,M({key:c,checksum:m,value:x,attachment:f})),l},i=C(Pt,{cwd:e,deep:3,ignore:W}).then(c=>Promise.all(c.map(o))),a=(c,l)=>{let m=V(e,l),x=o(m).then(()=>{let f=t.get(m);return s.add(f.key),f.value??f.attachment??""});st(5).then(()=>{s.delete(m)}).catch(()=>{}),r(c,{fileKey:m,onContent:f=>{x.then(g=>{g&&f(g)}).catch(()=>{})},onSync:f=>{}})},u=c=>{let l=V(e,c);s.delete(l),t.delete(l),r("unlink",{fileKey:l,onSync:m=>m()})},p=new Set(Pt.map(c=>T(e,c.split("/").shift()??"")));return{root:e,files:t,unsyncedFileKeys:s,ready:async()=>i.then(()=>{}),delete:async c=>{t.delete(c)},write:async c=>{t.set(c.key,c)},read:o,addEventListener:(c,l)=>{n.on(c,l)},startWatcher:async()=>{let{default:c}=await import("./chokidar-5RWEYTNQ.js");c.watch([...p],{ignored:W,persistent:!process.env.SHOPIFY_UNIT_TEST,ignoreInitial:!0}).on("add",a.bind(null,"add")).on("change",a.bind(null,"change")).on("unlink",u.bind(null))}}}h();h();var us="https://unpkg.com/@shopify/polaris@13.9.2/build/esm/styles.css";function $t(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function bt(e){return(0,String.raw)`<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<title>${e.title}</title>
|
|
5
|
-
<link rel="stylesheet" href="${us}" />
|
|
6
|
-
</head>
|
|
7
|
-
<body>
|
|
8
|
-
<div style="display: flex; justify-content: center; padding-top: 2rem;">
|
|
9
|
-
<div style="width: 80%;">
|
|
10
|
-
<div class="Polaris-Banner Polaris-Banner--withinPage" tabindex="0" role="alert" aria-live="polite">
|
|
11
|
-
<div class="Polaris-Box" style="--pc-box-width:100%">
|
|
12
|
-
<div
|
|
13
|
-
class="Polaris-BlockStack"
|
|
14
|
-
style="--pc-block-stack-align:space-between;--pc-block-stack-order:column"
|
|
15
|
-
>
|
|
16
|
-
<div
|
|
17
|
-
class="Polaris-Box"
|
|
18
|
-
style="--pc-box-color: var(--p-color-text-critical-on-bg-fill); --pc-box-background: var(--p-color-bg-fill-critical); --pc-box-padding-block-start-xs: var(--p-space-300); --pc-box-padding-block-end-xs: var(--p-space-300); --pc-box-padding-inline-start-xs: var(--p-space-300); --pc-box-padding-inline-end-xs: var(--p-space-300); --pc-box-border-start-start-radius: var(--p-border-radius-300); --pc-box-border-start-end-radius: var(--p-border-radius-300);"
|
|
19
|
-
>
|
|
20
|
-
<div
|
|
21
|
-
class="Polaris-InlineStack"
|
|
22
|
-
style="--pc-inline-stack-align:space-between;--pc-inline-stack-block-align:center;--pc-inline-stack-wrap:nowrap;--pc-inline-stack-gap-xs:var(--p-space-200);--pc-inline-stack-flex-direction-xs:row"
|
|
23
|
-
>
|
|
24
|
-
<div
|
|
25
|
-
class="Polaris-InlineStack"
|
|
26
|
-
style="--pc-inline-stack-wrap:nowrap;--pc-inline-stack-gap-xs:var(--p-space-100);--pc-inline-stack-flex-direction-xs:row"
|
|
27
|
-
>
|
|
28
|
-
<span class="Polaris-Banner--textCriticalOnBgFill">
|
|
29
|
-
<span class="Polaris-Icon">
|
|
30
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
|
31
|
-
<path d="M10 6a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5a.75.75 0 0 1 .75-.75Z" />
|
|
32
|
-
<path d="M11 13a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z" />
|
|
33
|
-
<path
|
|
34
|
-
fill-rule="evenodd"
|
|
35
|
-
d="M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0Zm-1.5 0a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0Z"
|
|
36
|
-
/>
|
|
37
|
-
</svg>
|
|
38
|
-
</span>
|
|
39
|
-
</span>
|
|
40
|
-
<h2 class="Polaris-Text--root Polaris-Text--headingSm Polaris-Text--break">
|
|
41
|
-
${e.header}
|
|
42
|
-
</h2>
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
<div
|
|
47
|
-
class="Polaris-Box"
|
|
48
|
-
style="--pc-box-padding-block-start-xs:var(--p-space-300);--pc-box-padding-block-end-xs:var(--p-space-300);--pc-box-padding-block-end-md:var(--p-space-400);--pc-box-padding-inline-start-xs:var(--p-space-300);--pc-box-padding-inline-start-md:var(--p-space-400);--pc-box-padding-inline-end-xs:var(--p-space-300);--pc-box-padding-inline-end-md:var(--p-space-400)"
|
|
49
|
-
>
|
|
50
|
-
<div
|
|
51
|
-
class="Polaris-BlockStack"
|
|
52
|
-
style="--pc-block-stack-order:column;--pc-block-stack-gap-xs:var(--p-space-300)"
|
|
53
|
-
>
|
|
54
|
-
${e.errors.map(s=>`
|
|
55
|
-
<div>
|
|
56
|
-
<span class="Polaris-Text--root Polaris-Text--headingSm">${$t(s.message)}</span>
|
|
57
|
-
<ul class="Polaris-List">
|
|
58
|
-
<li class="Polaris-List__Item">${$t(s.code)}</li>
|
|
59
|
-
</ul>
|
|
60
|
-
</div>`).join("")}
|
|
61
|
-
</div>
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
</div>
|
|
68
|
-
</body>
|
|
69
|
-
</html>`}h();h();var ps=/<head(\s[^>]*)?>/i,qe="https://cdn.shopify.com/storefront",ms=`${qe}/standard-events.js`,hs=`${qe}/standard-events.dev.js`,kt=`${qe}/standard-events-inspector.js`,It="shopify-cli-standard-events-inspector",fs=new RegExp(`<script\\b[^>]*(?:\\bid=["']${je(It)}["']|\\bsrc=["']${je(kt)}["'])[^>]*>`,"i"),gs=new RegExp(je(ms),"g");function pe(e){return fs.test(e)?e:e.replace(ps,t=>`${t}<script id="${It}" src="${kt}" defer></script>`)}function _t(e){return e.replace(gs,hs)}function je(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}h();var Lt=80;function X(e,t,s){if(!ys(e)||s.type==="theme-extension")return;let n=e.path.length>Lt?`${e.path.substring(0,Lt)}...`:e.path,o=t.headers.get("server-timing")?.match(/cfRequestDuration;dur=([\d.]+)/)?.[1],i=o?`${Math.round(Number(o))}ms`:"",a=Es(t.status),u=e.method.padStart(6);re(ne`• ${ie.format(new Date)} Request ${j.raw("\xBB")} ${u} ${a(String(t.status))} ${n} ${j.gray(i)}`)}function ys(e){let t=[z,J,"/checkouts","/payments"],s=[".js",".css",".json",".map"];if(t.some(o=>e.path.startsWith(o)))return!1;let[n]=e.path.split("?"),r=q(n);return!s.includes(r)}function Es(e){return e<300?j.green:e<400?j.yellow:j.errorText}var J="/cdn/",z="/ext/cdn/",Ce="/api/collect",Ts=/^\/cart\//,xs=/^\/cart(\/|\.js|\.json|$)/,Ae=/^\/checkouts\/(?!internal\/)/,jt=/^\/account(\/login\/multipass(\/[^/]+)?|\/logout)?\/?$/,Ss=new RegExp(`^${J}`),Rs=new RegExp(`^${z}`),ws=/^\/api\/(unstable|\d{4}-\d{2})\/graphql\.json/,Fs=["/.well-known","/shopify/monorail","/mini-profiler-resources","/web-pixels-manager","/web-pixels@","/wpm","/services/",Ce,"/cdn-cgi/challenge-platform"],qt="_shopify_essential",Ps=new RegExp(`${qt}=([^;]*)(;|$)`);function Ct(e,t){return b(async s=>{if(Fs.some(n=>s.path.startsWith(n)))return null;if(vs(s)){let n=s.path.split("?")[0]??"";return Ne(s,t).then(async r=>{if(X(s,r,t),r.ok){let o=n.split("/").at(-1)??"";if(t.localThemeFileSystem.files.has(`assets/${o}.liquid`)){let i=Z(await r.text(),t);return new Response(i,r)}}return r}).catch(async r=>{let{status:o,statusText:i,...a}=A(r,`Failed to proxy request to ${n}`);return o>=500&&!n.endsWith(".js.map")&&I(a),new Response(r.message,{status:o,statusText:i})})}})}function vs(e){if(e.method!=="GET"||e.path.match(Ts)||e.path.match(Ae)||e.path.match(jt)||e.path.match(Ss)||e.path.match(Rs))return!0;let[t]=e.path.split("?"),s=q(t),n=e.headers.get("accept")??"*/*";return s===".html"||n.includes("text/html")?!1:!!s||n!=="*/*"}function $s(e){let[t]=e.split("?");return!(xs.test(t)||Ae.test(t)||jt.test(t))}function me(e){return e.session.storeFqdn.replace(/\\/g,"\\\\").replace(/\./g,"\\.")}function bs(e){return ws.test(e.path)}function Z(e,t){let s=e,n=`(data-shs-beacon-endpoint=["'])https://${me(t)}${Ce}`,r=new RegExp(n,"g");s=s.replace(r,`$1${Ce}`);let o=new RegExp(`(https?:)?//${me(t)}${J}`,"g");s=s.replace(o,J);let i=/(?:https?:)?\/\/cdn\.shopify\.com\/(.*?\/(assets\/[^?#"'`>\s]+))/g,a=c=>c.startsWith("assets/"),u=new Set([...t.localThemeFileSystem.files.keys()].filter(a)),p=new Set([...t.localThemeExtensionFileSystem.files.keys()].filter(a));return s=s.replace(i,(c,l,m)=>{let x=m&&u.has(m),f=m&&p.has(m)&&l.startsWith("extensions/");return U(m).startsWith("image/")?c:f?`${z}${l}`:x?`${J}${l}`:c}),t.options.standardEventsDevBundle&&(s=_t(s)),s}function ks(e,t){let s=`http://${t.options.host}:${t.options.port}`,n=new RegExp(`data-base-url=["']((?:https?:)?//${me(t)})[^"']*?["']`,"g");return e.replace(n,(r,o)=>r.replace(o,s))}function Is(e,t){let s=new RegExp(`Domain=${me(t)};\\s*`,"gi");return e.map(n=>n.replace(s,""))}async function Q(e,t,s){let n=Ht(e,t);if(n.status>=300&&n.status<400)return n;t.headers.get("content-type")?.includes("application/json")||n.headers.set("content-type","text/html; charset=utf-8");let i=await n.text();return i=Z(i,e),i=ks(i,e),e.options.standardEventsInspector&&(i=pe(i)),s&&(i=s(i)??i),new Response(i,n)}var At=["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","expect","content-security-policy","host"];function Ht(e,t){let s=new Response(t.body,t);s.headers.delete("content-length"),s.headers.delete("content-encoding");for(let i of At)s.headers.delete(i);s.headers.delete("access-control-allow-origin"),s.headers.delete("access-control-allow-credentials"),s.headers.delete("access-control-allow-methods"),s.headers.delete("access-control-allow-headers"),s.headers.delete("access-control-expose-headers"),s.headers.delete("access-control-max-age");let n=s.headers.get("Link");n&&s.headers.set("Link",Z(n,e));let r=s.headers.get("Location");if(r){let i=new URL(r,"https://shopify.dev");Ae.test(i.pathname)||(i.searchParams.delete("_fd"),i.searchParams.delete("pb"),s.headers.set("Location",i.href.replace(i.origin,"")))}let o=s.headers.getSetCookie();if(o?.length){s.headers.set("Set-Cookie",Is(o,e).join(","));let i=o.join(",").match(Ps)?.[1];i&&(e.session.sessionCookies[qt]=i)}return s}function He(e){let t=nt(e);for(let n of At)delete t[n];delete t["upgrade-insecure-requests"];let s=rt(e);return s&&(t["X-Forwarded-For"]=s),t}function Ne(e,t){let s=e.path.replace(new RegExp(z,"g"),"/"),n=e.path.startsWith(z)?"cdn.shopify.com":t.session.storeFqdn,r=new URL(s,`https://${n}`);if(r.hostname!==n)return Promise.reject(new Error(`Request failed: Hostname mismatch. Expected host: ${n}. Resulting URL hostname: ${r.hostname}`));let o=ot(e),i=He(e);return bs(e)||(/\/assets\/[^/]+\.(css|js)$/.test(r.pathname)&&/\?\d+$/.test(r.search)&&(r.search=`?v=${Date.now()}`),r.searchParams.set("_fd","0"),r.searchParams.set("pb","0"),i=ft({...i,...ht(),...n===t.session.storeFqdn?t.session.crawlerSignatureHeaders:{},referer:r.origin,Cookie:Et(t.session,{headers:i}),...t.type==="theme"&&$s(e.path)?{Authorization:`Bearer ${t.session.storefrontToken}`}:{}})),fetch(r,{method:e.method,body:o,duplex:o?"half":void 0,redirect:"manual",headers:i}).then(a=>Ht(t,a)).catch(a=>{throw ae(L(a),r)})}var De=0,_s=5;function Dt(e,t){return b(s=>{let[n="/",r=""]=s.path.split("?");return js(s)&&(t.lastRequestedPath=s.path),t.options.errorOverlay!=="silent"&&t.localThemeFileSystem.uploadErrors.size>0?Nt(t,{status:500,statusText:"Internal Server Error"},{title:"Failed to Upload Theme Files",header:"Upload Errors",errors:Array.from(t.localThemeFileSystem.uploadErrors.entries()).map(([i,a])=>({message:i,code:a.join(`
|
|
70
|
-
`)}))}):ce(t.session,{method:s.method,path:n,query:[...new URLSearchParams(r)],themeId:String(e.id),sectionId:"",headers:He(s),replaceExtensionTemplates:fe(t),replaceTemplates:Oe(t,n,it(s,"localization")?.toLowerCase())}).then(async i=>{if(i.status>=400&&i.status<500&&!Ls(s)){let a=await qs(s,t,i);if(a)return X(s,a,t),a}return X(s,i,t),Q(t,i,a=>(Cs(i,a,String(e.id)),De=0,We(a,t)))}).catch(async i=>{if(i instanceof he&&(P(`Theme ID mismatch: expected ${i.getExpectedThemeId()} but got ${i.getActualThemeId()}; refreshing session...`),H("theme-service:error-page:theme-id-mismatch"),t.session.refresh)){De++,De>_s&&(tt(new se(i.getMessage())),process.exit(1)),await t.session.refresh();let x=new URLSearchParams(r),f=new URLSearchParams([...x].filter(([Pe])=>!Pe.startsWith("__sfr"))),g=n+(f.toString()?`?${f}`:"");return new Response(null,{status:302,headers:{Location:g}})}let{status:a,statusText:u,cause:p,...c}=A(i,"Failed to render storefront"),[l,...m]=c.headline.split(`
|
|
71
|
-
`);return te(c),Nt(t,{status:a,statusText:u},{title:l,header:l,errors:[{message:[...m,p.message].join("<br>"),code:p.stack?.replace(`${p.message}
|
|
72
|
-
`,"")??""}]})})})}function Nt(e,t,s){let n=We(bt(s),e);return e.options.standardEventsInspector&&(n=pe(n)),H("theme-service:error-page:rendered"),new Response(n,{...t,headers:t.headers??{"Content-Type":"text/html; charset=utf-8"}})}function Ls(e){let t=new URLSearchParams(e.path.split("?")[1]);return["section_id","sections","app_block_id"].some(s=>t.has(s))}function js(e){return e.headers.get("sec-fetch-mode")==="navigate"}async function qs(e,t,s){P(`Render failed for ${e.path} with ${s.status} (x-request-id: ${s.headers.get("x-request-id")}), trying proxy...`);let n=await Ne(e,t).catch(r=>new Response(null,A(r)));if(n.status<400)return P(`Proxy status: ${n.status}. Returning proxy response.`),t.options.standardEventsInspector&&(n.headers.get("content-type")??"").includes("text/html")?Q(t,n):n;P(`Proxy status: ${n.status}. Returning render error.`)}function Cs(e,t,s){let n=t.match(/Shopify\.theme\s*=\s*{[^}]+?"id":\s*"?(\d+)"?(}|,)/)?.[1];if(n&&n!==s)throw new he(s,n,e)}var he=class extends Error{response;expectedThemeId;actualThemeId;constructor(t,s,n){super([`Theme ID mismatch: expected ${t} but got ${s}.`,`Request ID: ${n.headers.get("x-request-id")}`,`URL: ${n.url}`,"This is likely related to an issue in upstream Shopify APIs.","Please try again in a few minutes and report this issue:","https://community.shopify.dev/c/shopify-cli-libraries/14"].join(`
|
|
73
|
-
`)),this.response=n,this.expectedThemeId=t,this.actualThemeId=s}getMessage(){return this.message}getResponse(){return this.response}getExpectedThemeId(){return this.expectedThemeId}getActualThemeId(){return this.actualThemeId}};h();h();function ge(e,t){let s=new RegExp(`{%-?\\s*${t}\\s*-?%}`),n=new RegExp(`{%-?\\s*end${t}\\s*-?%}`),r=s.exec(e);if(!r)return;let o=r.index+r[0].length;n.lastIndex=o;let i=n.exec(e);if(!i)return;let a=i.index;return e.slice(o,a)}h();function ye(e){let{pathname:t,search:s,searchParams:n}=new URL(e.path,"http://e.c");return{pathname:t,search:s,searchParams:n}}var As={stylesheet:new Map,javascript:new Map};function Ot(e,t){return b(async s=>{if(s.method!=="GET")return;if(Os(s,t))return Ws(s,t);let{file:n,fileKey:r,isUnsynced:o}=Ds(s,t);if(!r)return;let i=U(r);if(i.startsWith("image/")&&s.path.includes("&")&&!o)return;if(ct(s,"X-Local-Asset","true"),!n){o&&O(s,D({statusCode:404,statusMessage:"Not found"}));return}let a=n.value?Buffer.from(Z(n.value,t)):Buffer.from(n.attachment??"","base64");return oe(s,{getContents:()=>a,getMeta:()=>({type:i,size:a.length,mtime:n.stats?.mtime})})})}var Hs=/^(?:\/cdn\/(?!extensions\/).*?)?\/assets\/([^?]+)/,Ns=/^(?:\/(?:ext\/)?cdn\/extensions\/.*?)?\/assets\/([^?]+)/;function Ds(e,t){let s=(n,r)=>{let o=e.path.match(n)?.[1];if(o){let i=T("assets",o),a=r.files.get(i),u=r.unsyncedFileKeys.has(i);if(a||u)return{file:a,isUnsynced:u,fileKey:i}}};return s(Hs,t.localThemeFileSystem)??s(Ns,t.localThemeExtensionFileSystem)??{isUnsynced:!1,fileKey:void 0,file:void 0}}function Os(e,t){return t.type==="theme"&&e.path.includes("/compiled_assets")}function Ws(e,t){switch(ye(e).pathname.split("/").at(-1)){case"styles.css":return Ms(t,e);case"block-scripts.js":return Me(t,e,"block");case"snippet-scripts.js":return Me(t,e,"snippet");case"scripts.js":return Me(t,e,"section");case void 0:break;default:break}}function Ms(e,t){let s=Ee(e,"section"),n=Ee(e,"block"),r=Ee(e,"snippet"),o=[`/*** GENERATED LOCALLY ***/
|
|
74
|
-
`];for(let[,a]of[...s,...n,...r]){let u=Wt(a,"stylesheet");u&&o.push(u)}let i=o.join(`
|
|
75
|
-
`);return oe(t,{getContents:()=>i,getMeta:()=>({type:"text/css",size:Buffer.byteLength(i),mtime:new Date})})}function Me(e,t,s){let n=Ee(e,s),r=`${s}s`,o=[`
|
|
76
|
-
/*** GENERATED LOCALLY ***/
|
|
77
|
-
|
|
78
|
-
(function () {
|
|
79
|
-
var __${r}__ = {};
|
|
80
|
-
|
|
81
|
-
(function () {
|
|
82
|
-
var element = document.getElementById("${r}-script");
|
|
83
|
-
var attribute = element ? element.getAttribute("data-${r}") : "";
|
|
84
|
-
var ${r} = attribute.split(",").filter(Boolean);
|
|
85
|
-
|
|
86
|
-
for (var i = 0; i < ${r}.length; i++) {
|
|
87
|
-
__${r}__[${r}[i]] = true;
|
|
88
|
-
}
|
|
89
|
-
})();`];for(let[a,u]of n){let p=a.split("/").pop()?.replace(".liquid",""),c=Wt(u,"javascript")??"";p&&c&&o.push(`
|
|
90
|
-
(function () {
|
|
91
|
-
if (!__${r}__["${p}"] && !Shopify.designMode) return;
|
|
92
|
-
try {
|
|
93
|
-
${c}
|
|
94
|
-
} catch (e) {
|
|
95
|
-
console.error(e);
|
|
96
|
-
}
|
|
97
|
-
})();`)}o.push("})();");let i=o.join(`
|
|
98
|
-
`);return oe(t,{getContents:()=>i,getMeta:()=>({type:"text/javascript",size:Buffer.byteLength(i),mtime:new Date})})}function Ee(e,t){return[...e.localThemeFileSystem.files.entries()].filter(([s])=>s.endsWith(".liquid")&&s.startsWith(`${t}s/`)).sort(([s],[n])=>s.localeCompare(n))}function Wt(e,t){let s=As[t],n=s.get(e.key);if(n?.checksum===e.checksum)return n.content;if(s.delete(e.key),!e.value)return;let r=[`/* ${e.key} */`],o=ge(e.value??"",t)?.trimEnd();if(o&&r.push(o),r.length>1){let i=r.join(`
|
|
99
|
-
`);return s.set(e.key,{checksum:e.checksum,content:i}),i}}h();import*as Mt from"node:os";function Us(e,t){let s=new Set,n=`:${t}`,r=e.toLowerCase().trim();if(s.add(`${r}${n}`),["localhost","127.0.0.1","::1","0.0.0.0"].includes(r)&&(s.add(`localhost${n}`),s.add(`127.0.0.1${n}`),s.add(`[::1]${n}`)),r==="0.0.0.0"||r==="::")for(let i of Object.values(Mt.networkInterfaces()))for(let a of i??[]){let u=a.address.toLowerCase().split("%")[0],c=a.family==="IPv6"?`[${u}]`:u;s.add(`${c}${n}`)}return s}function Bs(e){if(e)return e.toLowerCase().replace(/\.(?=:\d|$)/,"")}function Ut(e,t){let s=Us(e,t);return b(n=>{let r=n.node.req.headers.host,o=Bs(r);if(!o||!s.has(o))return O(n,D({statusCode:400,statusMessage:"Bad Request",message:"Invalid Host header"}))})}h();function Bt(){return Jt()}function Cr(){return Jt()}function Jt(){return{root:"",files:new Map,unsyncedFileKeys:new Set,uploadErrors:new Map,ready:()=>Promise.resolve(),delete:async e=>{},read:async e=>"",write:async e=>{},stat:async e=>({mtime:new Date,size:1}),addEventListener:()=>{},startWatcher:async()=>{}}}import{createServer as Js}from"node:http";async function Yr(e,t){let s=await Gs(e,t);return await Ys(e,s),zs(e,s)}function zs(e,t){let s=ut();s.use(Ut(t.options.host,t.options.port)),s.use(zt(e,t)),s.use(Ot(e,t)),s.use(Ct(e,t)),s.use(Dt(e,t));let n=Js(pt(s));return{dispatch:s.handler.bind(s),start:async()=>new Promise(r=>n.listen({port:t.options.port,host:t.options.host},()=>r({close:async()=>{await Promise.all([new Promise(o=>{n.closeAllConnections(),n.close(o)})])}})))}}async function Gs(e,t){let{adminSession:s,storefrontPassword:n,themeExtensionPort:r,themeExtensionDirectory:o,crawlerSignatureHeaders:i}=t,a="127.0.0.1",u=r??9293,p=Bt(),c=vt(o);return await c.ready(),{session:await Tt(e.id.toString(),s,void 0,n,i),localThemeFileSystem:p,localThemeExtensionFileSystem:c,directory:o,type:"theme-extension",lastRequestedPath:"",options:{themeEditorSync:!1,noDelete:!1,ignore:[],only:[],host:a,port:u,liveReload:"hot-reload",standardEventsDevBundle:!1,standardEventsInspector:!1,open:!1,errorOverlay:"default"}}}async function Ys(e,t){let s=t.localThemeExtensionFileSystem,n=({fileKey:r,onContent:o,onSync:i})=>{o(()=>{Te(e,t,i,{type:"update",key:r,payload:{isThemeExtension:!0}})})};return s.addEventListener("add",n),s.addEventListener("change",n),s.ready().then(async()=>s.startWatcher())}function fe(e){let t={},s=e.localThemeExtensionFileSystem;for(let n of s.unsyncedFileKeys){let r=s.files.get(n),o=r?.value??r?.attachment;o&&(t[n]=o)}return t}var Re=Ye(mt(),1);import Vs from"node:events";var Ue=new Map,K=new Map;function Gt(e,t){let s=(0,Re.parseJSON)(t,null,!0);if(!s)return;let n=s?.sections;n&&!e.startsWith("locales/")?K.set(e,Object.entries(n||{}).map(([r,{type:o}])=>[o,r])):K.delete(e)}function Be(e){return!e.startsWith("assets/")&&[".liquid",".json"].includes(q(e))}function Oe(e,t,s){let n={},r=/^templates\/.+\.json$/,o=t?`${T("templates",t.replace(/^\//,"").replace(/\.html$/,"")||"index")}.json`:"",i=!!t&&e.localThemeFileSystem.files.has(o),a=/^locales\/.+\.json$/,u=!!s&&(e.localThemeFileSystem.files.has(`locales/${s}.json`)||e.localThemeFileSystem.files.has(`locales/${s}.default.json`));for(let p of e.localThemeFileSystem.unsyncedFileKeys)if(Be(p)){if(i&&r.test(p)){if(p!==o)continue}else if(a.test(p)){if(u){if(!p.startsWith(`locales/${s}.`))continue}else if(!p.includes(".default."))continue}n[p]=e.localThemeFileSystem.files.get(p)?.value??""}return n}function uo(e,t){let s=({fileKey:r,onContent:o,onSync:i})=>{let a=q(r);o(u=>{!en(r)&&Be(r)&&a===".json"&&Gt(r,u),Te(e,t,i,{type:"update",key:r,payload:Qs(r,t)})})},n=({fileKey:r,onSync:o})=>{K.delete(r),Te(e,t,o,{type:"delete",key:r})};return t.localThemeFileSystem.addEventListener("add",s),t.localThemeFileSystem.addEventListener("change",s),t.localThemeFileSystem.addEventListener("unlink",n),t.localThemeFileSystem.ready().then(async()=>{let r=[...t.localThemeFileSystem.files];return Promise.allSettled(r.map(async([o,i])=>{if(o.endsWith(".json")){let a=i.value??await t.localThemeFileSystem.read(o);a&&typeof a=="string"&&Gt(o,a)}else o.endsWith(".liquid")&&Zt(i)}))})}var Xs="1",Vt=new Vs;function Se(e){Vt.emit("hot-reload",{...e,version:Xs})}function zt(e,t){return b(s=>{let n=s.headers.get("accept")==="text/event-stream",r=ye(s).searchParams;if(n){let o=dt(s);return Vt.on("hot-reload",i=>{o.push(JSON.stringify(i)).catch(a=>{I({headline:"Failed to send HotReload event.",body:a.stack})})}),Se({type:"open",pid:String(process.pid),themeId:String(e.id)}),o.send().then(()=>o.flush())}if(r.has("hr-log")){let o=(0,Re.parseJSON)(r.get("hr-log")??"",null);return o&&(o.headline=`[HotReload] ${o.headline}`,o.type==="error"?te(o):o.type==="warn"?I(o):o.type==="info"?et(o):I({headline:`Unknown HotReload log type: ${o.type}`})),null}if(s.path===Xt)return k(we()).then(o=>at(s,o,"application/javascript")).catch(o=>O(s,D({cause:o})));if(r.has("section_id")||r.has("app_block_id")){let o=r.get("section_key")??"",i=r.get("section_id")??"",a=r.get("app_block_id")??"",u=s.path.split("?")[0]??"",p=new URLSearchParams(r);if(p.delete("section_key"),p.delete("section_id"),p.delete("app_block_id"),p.delete("_fd"),p.delete("pb"),i===""&&a==="")return;let c={};if(i){let l=t.localThemeFileSystem.unsyncedFileKeys;if(l.has(o)){let m=t.localThemeFileSystem.files.get(o)?.value;if(!m)return"";c[o]=m}for(let m of l)if(m.endsWith(".json")){for(let[x,f]of K.get(m)??[])if(i.endsWith(`__${f}`)){let g=t.localThemeFileSystem.files.get(m)?.value;g&&(c[m]=g);continue}}}return ce(t.session,{method:s.method,path:u??"/",query:[...p.entries()],themeId:String(e.id),sectionId:i,appBlockId:a,replaceTemplates:c,headers:lt(s),replaceExtensionTemplates:fe(t)}).then(async l=>{if(!l.ok)throw H("theme-service:hot-reload:section:render-failed"),ae(l);return Q(t,l)}).catch(async l=>{let{status:m,statusText:x,...f}=A(L(l),"Failed to render section on Hot Reload");return H("theme-service:hot-reload:section:render-error"),a||I(f),new Response(null,{status:m,statusText:x})})}})}var ee=(e,t)=>Se({themeId:String(e),type:"full",key:t});function Te(e,t,s,n){let r=()=>ee(e.id,n.key);if(t.options.liveReload==="off")return;if(t.options.liveReload==="full-page"){s(r);return}let o=String(e.id);Se({sync:"local",themeId:o,...n}),s(()=>Se({sync:"remote",themeId:o,...n}),r)}function Zs(e,t){let s=new Set;if(e.endsWith(".json")){let n=t.localThemeFileSystem.files.get(e)?.value;if(n){let r=(0,Re.parseJSON)(n,null,!0)?.sections;for(let o of Object.keys(r??{}))s.add(o)}}else{let n=e.match(/^sections\/(.+)\.liquid$/)?.[1];if(n)for(let[r,o]of K)for(let[i,a]of o)i===n&&s.add(a)}return[...s]}function Qs(e,t){let[s]=e.split("/"),n=t.localThemeFileSystem.files.get(e);return{sectionNames:s==="sections"?Zs(e,t):[],replaceTemplates:Be(e)?Oe(t):{},updatedFileParts:n&&Zt(n)}}var xe="hot-reload-client",Ks="/cdn/shopifycloud/theme-hot-reload/theme-hot-reload.js",Yt=new RegExp(`<script id="${xe}"[^>]*>[^<]*</script>`),Xt="/@shopify/theme-hot-reload";function We(e,t){return t.options.liveReload==="off"?e.replace(Yt,""):process.env.SHOPIFY_CLI_LOCAL_HOT_RELOAD?e.replace(Yt,"").replace(/<\/head>/,`<script id="${xe}" src="${Xt}" defer></script></head>`):e.includes(`<script id="${xe}"`)?e:e.replace(/<\/head>/,`<script id="${xe}" src="${Ks}" defer></script></head>`)}function en(e){return e.startsWith("assets/")}function Zt(e){if(!(["sections/","snippets/","blocks/"].some(c=>e.key.startsWith(c))&&e.key.endsWith(".liquid")))return;let n={stylesheetTag:!1,javascriptTag:!1,schemaTag:!1,liquid:!1},r={checksum:e.checksum,liquid:"",stylesheetTag:"",javascriptTag:"",schemaTag:""},o=Ue.get(e.key);if(o?.checksum===e.checksum||(Ue.delete(e.key),!e.value))return n;let i=["stylesheet","javascript","schema"],a=c=>c?.replace(/\s+/g," ").trim(),u=e.value,p=(c,l)=>{u=u.replace(l,"");let m=a(l),x=`${c}Tag`;n[x]=!o||m!==o[x],r[x]=m};for(let c of i){let l=ge(e.value??"",c);l&&p(c,l)}return u=a(u.replace(/<!--[\s\S]*?-->/g,"").replace(/{%\s*comment\s*%}[\s\S]*?{%\s*endcomment\s*%}/g,"").replace(/{%\s*doc\s*%}[\s\S]*?{%\s*enddoc\s*%}/g,"")),r.liquid=u,n.liquid=!o||u!==o.liquid,Ue.set(e.key,r),n}h();var Qt=Ye(mt(),1);function tn(e){return(e.startsWith("templates/")||e.startsWith("sections/"))&&e.endsWith(".json")}async function Kt(e,t,s){if(tn(s)){let n=T(e,"listings",t,s);if(await $(n))return n}}async function es(e,t){let s=T(e,"config","settings_data.json"),n=await k(s,{encoding:"utf8"}),r=(0,Qt.parseJSON)(n,null,!0);return r?(r.current=$e(t),JSON.stringify(r,null,2)):n}async function Eo(e,t){let s=T(e,"listings"),n=T(s,t);if(await $(n))return;let o=[];await $(s)&&(o=await C("*",{cwd:s,onlyDirectories:!0,deep:1}));let i=o.length>0?`Available presets: ${o.map(a=>`"${$e(a)}"`).join(", ")}`:'No presets found under "listings/"';throw new se(`Listing preset "${t}" was not found. ${i}.`,`Add the preset to config/settings_data.json and its corresponding "listings/${t}" folder, or remove the --listing flag to use the default theme settings.`)}import sn from"node:events";import{fileURLToPath as nn}from"node:url";var rn=250,ts=["AGENTS.md","DESIGN.md","assets/**/*.*","config/**/*.json","config/styles.css","layout/**/*.liquid","locales/**/*.json","sections/**/*.{liquid,json}","blocks/**/*.liquid","snippets/**/*.liquid","templates/**/*.{liquid,json}","templates/customers/**/*.{liquid,json}"],v={documentationFilesRegex:/^(AGENTS|DESIGN)\.md$/,layoutLiquidRegex:/^layout\/.+\.liquid$/,sectionLiquidRegex:/^sections\/.+\.liquid$/,blockLiquidRegex:/^blocks\/.+\.liquid$/,configSchemaRegex:/^config\/settings_schema\.json$/,configDataRegex:/^config\/settings_data\.json$/,configStylesheetRegex:/^config\/styles\.css$/,sectionJsonRegex:/^sections\/.+\.json$/,templateJsonRegex:/^templates\/.+\.json$/,jsonRegex:/^(?!config\/).*\.json$/,contextualizedJsonRegex:/\.context\.[^.]+\.json$/i,staticAssetRegex:/^assets\/(?!.*\.liquid$)/};function Ho(e,t){let s=new Map,n=new Map,r=new Set,o={ignoreFromFile:[],ignore:t?.filters?.ignore??[],only:t?.filters?.only??[]},i=new sn,a=(d,y)=>{i.emit(d,y)},u=t?.notify?new le(t.notify):void 0,p=async d=>{let y=t?.listing?await an(e,d,t.listing):await ue(e,d),E=de(d,y);return s.set(d,M({key:d,checksum:E,value:typeof y=="string"?y:"",attachment:Buffer.isBuffer(y)?y.toString("base64"):""})),y},c=C(ts,{cwd:e,deep:3,ignore:W}).then(d=>Promise.all([wt(e),...d.map(p)])).then(([d])=>{Array.isArray(d)&&o.ignoreFromFile.push(...d)}),l=d=>V(e,d),m=d=>Le([{key:d}],o).length===0;function x(d,y,E,S){if(process.env.SHOPIFY_CLI_LOCAL_HOT_RELOAD&&S===we()){ee(y,S);return}let w=l(S);if(t?.listing&&w.startsWith(`listings/${t.listing}/`)){let R=w.replace(`listings/${t.listing}/`,"");if(R.startsWith("templates/")||R.startsWith("sections/"))w=R;else return}f(w).then(()=>{switch(d){case"add":case"change":return g(d,y,E,w);case"unlink":return Pe(y,E,w,n)}}).catch(R=>{N(`Error handling file event for ${w}: ${R}`)})}function f(d){return u?.notify(d)??Promise.resolve()}let g=(d,y,E,S)=>{if(m(S))return;let w=s.get(S)?.checksum,R=p(S).then(async()=>{let F=s.get(S);if(F)return F.checksum!==w&&r.add(S),{value:F.value||void 0,attachment:F.attachment}}),_=R.then(F=>{if(F)return on(r,n,S,y,E)(F)}).catch(Ie(S,"upload"));a(d,{fileKey:S,onContent:F=>{R.then(G=>{r.has(S)&&F(G?.value??G?.attachment??"")}).catch(()=>{})},onSync:(F,G)=>{_.then(Y=>{Y?F():G?.()}).catch(()=>{})}})},Pe=(d,y,E,S)=>{if(m(E))return;S.delete(E),s.delete(E),r.add(E);let w=t?.noDelete?Promise.resolve():gt(Number(d),[E],y).then(async R=>{if(!R[0]?.success)throw new Error(`Failed to delete file "${E}" from remote theme.`);return r.delete(E),ss("delete",E),!0}).catch(R=>(Ie(E,"delete")(R),!1));a("unlink",{fileKey:E,onSync:R=>{w.then(_=>{_&&R()}).catch(()=>{})}})},ve=new Set(ts.map(d=>T(e,d.split("/").shift()??"")));return t?.listing&&ve.add(T(e,"listings",t.listing)),process.env.SHOPIFY_CLI_LOCAL_HOT_RELOAD&&ve.add(we()),{root:e,files:s,unsyncedFileKeys:r,uploadErrors:n,ready:()=>c,delete:async d=>{s.delete(d),await cn(e,d)},write:async d=>{let y=(d.key.startsWith("templates/")||d.key.startsWith("sections/"))&&d.key.endsWith(".json");if(t?.listing&&y){let E=T("listings",t.listing,d.key),S=T(e,E),w=await $(S);s.set(d.key,M({key:d.key,checksum:d.checksum,value:d.value??"",attachment:d.attachment??""})),w?await Je(e,{...d,key:E}):await Je(e,d);return}s.set(d.key,M({key:d.key,checksum:d.checksum,value:d.value??"",attachment:d.attachment??""})),await Je(e,d)},read:p,applyIgnoreFilters:d=>Le(d,o),addEventListener:(d,y)=>{i.on(d,y)},startWatcher:async(d,y)=>{let{default:E}=await import("./chokidar-5RWEYTNQ.js"),S=E.watch([...ve],{ignored:W,persistent:!process.env.SHOPIFY_UNIT_TEST,ignoreInitial:!0}),w=new Map,R=(_,F)=>{let Y=`${l(F)}:${_}`,Ge=w.get(Y);Ge&&clearTimeout(Ge);let ns=setTimeout(()=>{w.delete(Y),x(_,d,y,F)},rn);w.set(Y,ns)};S.on("add",R.bind(null,"add")).on("change",R.bind(null,"change")).on("unlink",R.bind(null,"unlink")).on("error",_=>{N(`File watcher error: ${_}`),L("theme-service:file-watcher:error")})}}}function on(e,t,s,n,r){return async o=>{if(!e.has(s))return!1;let[i]=await yt(Number(n),[{key:s,...o}],r);if(!i?.success){let a=i?.errors?.asset??["Response was not successful."];throw t.set(s,a),ee(n,s),new Error(a.join(`
|
|
100
|
-
`))}return t.delete(s)&&ee(n,s),e.delete(s),ss("update",s),!0}}async function Je(e,{key:t,attachment:s,value:n}){let r=T(e,t);if(await ln(r),s){let o=Buffer.from(s,"base64");await be(r,o,{encoding:"base64"})}else await be(r,n??"")}async function ue(e,t){let s=Fe(t)?{encoding:"utf8"}:{},n=T(e,t);if(!await $(n)){P(`File ${n} can't be read because it doesn't exist...`);return}return k(n,s)}async function an(e,t,s){if(t==="config/settings_data.json")return es(e,s);let n=await Kt(e,s,t);if(n){let r=Fe(t)?{encoding:"utf8"}:{};return k(n,r)}return ue(e,t)}async function cn(e,t){let s=T(e,t);if(!await $(s)){P(`File ${s} can't be removed because it doesn't exist...`);return}await Qe(s)}function No(e){let t=[],s=[],n=[],r=[],o=[],i=[],a=[],u=[],p=[],c=[],l=[],m=[],x=[];return e.forEach(f=>{let g=f.key;v.documentationFilesRegex.test(g)?x.push(f):g.endsWith(".liquid")?v.sectionLiquidRegex.test(g)?t.push(f):v.blockLiquidRegex.test(g)?l.push(f):v.layoutLiquidRegex.test(g)?m.push(f):s.push(f):v.configSchemaRegex.test(g)?a.push(f):v.configDataRegex.test(g)?u.push(f):v.configStylesheetRegex.test(g)?p.push(f):v.jsonRegex.test(g)?v.contextualizedJsonRegex.test(g)?i.push(f):v.sectionJsonRegex.test(g)?n.push(f):v.templateJsonRegex.test(g)?r.push(f):o.push(f):v.staticAssetRegex.test(g)&&c.push(f)}),{sectionLiquidFiles:t,otherLiquidFiles:s,sectionJsonFiles:n,templateJsonFiles:r,contextualizedJsonFiles:i,otherJsonFiles:o,configSchemaFile:a,configDataFile:u,configStylesheetFiles:p,staticAssetFiles:c,blockLiquidFiles:l,layoutFiles:m,documentationFiles:x}}function Fe(e){return xt({liquid:"application/liquid",sass:"text/x-sass",scss:"text/x-scss"}),["application/javascript","application/json","application/liquid","text/css","text/x-sass","text/x-scss","image/svg+xml","text/markdown"].includes(U(e))}async function Do(e){let t=new Set(await C("*",{cwd:e,deep:1,onlyDirectories:!0}));return["config","layout","templates"].every(n=>t.has(n))}async function ln(e){let t=dn(e);await $(t)||await Ze(t)}function dn(e){let t=Ve(e),s=e.lastIndexOf(t);return e.substring(0,s)}function ss(e,t){re(ne`• ${ie.format(new Date)} Synced ${j.raw("\xBB")} ${e} ${t}`)}function we(){let e=process.env.SHOPIFY_CLI_LOCAL_HOT_RELOAD;return!e||e==="true"?T(nn(import.meta.url.split("/cli/")[0]??""),"theme-hot-reload/dist/theme-hot-reload.js"):e}function de(e,t){return t?Buffer.isBuffer(t)?ze(t):hn(e)?un(t):pn(e,t):""}function un(e){let t=e;return t=t.replace(/\r\n/g,`
|
|
101
|
-
`),t=t.replace(/\/\*[\s\S]*?\*\//,""),t=mn(t),ze(t)}function pn(e,t){let s=t;return Fe(e)&&(s=s.replace(/\r\n/g,`
|
|
102
|
-
`)),ze(s)}function mn(e){let t=!1,s=!1,n="";for(let r of e)r==='"'&&!s&&(t=!t),!(!t&&(r===" "||r===`
|
|
103
|
-
`))&&(n+=r,s=r==="\\"&&!s);return n}function ze(e){let t=Buffer.isBuffer(e)?e:Buffer.from(e);return Ke(t)}function Bo(e){let t=new Set(e.filter(({key:s})=>s.startsWith("assets/")&&s.endsWith(".liquid")).map(({key:s})=>s));return e.filter(({key:s})=>s.startsWith("assets/")?!t.has(`${s}.liquid`):!0)}function hn(e){return e.endsWith("/settings_data.json")}export{Bo as a,Ct as b,Dt as c,Ot as d,Ut as e,Cr as f,Yr as g,uo as h,zt as i,ee as j,Eo as k,Ho as l,No as m,Do as n};
|
package/dist/chunk-KN3MUEWA.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{b as U,c as w}from"./chunk-762IKULK.js";import{c as O,e as T}from"./chunk-XTOOTN4P.js";import{B as y,m as E,t as N,u as R,v as g,z as _}from"./chunk-5VRB3FBD.js";import{q as S,s as h}from"./chunk-AODTY2BL.js";import{a as s}from"./chunk-GYVQIRBD.js";import{S as F,W as C,z as x}from"./chunk-7YXHILW4.js";import{i as v}from"./chunk-4HBKQUKY.js";import{Cb as c,Eb as p,Kb as d,Nb as u,Ob as M,tb as D,wb as V,xb as P}from"./chunk-62GA7XR3.js";import{d as J}from"./chunk-PT3OZEBI.js";import{o as $,p as A,q as L}from"./chunk-6IDEDOXW.js";import{a as H}from"./chunk-CX5CC6P5.js";import{e as B,g as I}from"./chunk-VKWPEFWQ.js";I();var Y=B(H());function j(){let e=V();if(!(!e||e==="unknown"))return e==="homebrew"?"brew upgrade shopify-cli":e==="yarn"?`${e} global add @shopify/cli@latest`:`${e} ${e==="pnpm"?"add":"install"} -g @shopify/cli@latest`}async function fe(e={}){let n=L()??A(),o=P(n),t=D();if(J()){d("Skipping upgrade in development mode.");return}if(!(e.autoupgrade&&!t))if(t){let r=j();if(!r)throw new Error("Could not determine the package manager");let[a,...i]=r.split(" ");if(!a)throw new Error("Could not determine the command to run");let l=g("@shopify/cli",s),q=l?`\u2728 New version of Shopify CLI available! (${s} \u2192 ${l})`:"\u2728 New version of Shopify CLI available!";d(p`${q}
|
|
2
|
-
Now upgrading by running: ${c.genericShellCommand(r)}...`),await F(a,i,{stdio:"inherit"});let f=await U();if(!f)throw new v("Couldn't verify the Shopify CLI version after upgrading.",p`Check the installed version by running ${c.genericShellCommand("shopify version")}.`);let k=l??s;if((0,Y.lt)(f,k))throw new v(`Failed to upgrade Shopify CLI. Expected to be on version ${k}, but version ${f} is now installed.`,"Your package manager may be resolving @shopify/cli from a registry with outdated versions. Check your npm registry configuration and try again.");x({headline:"Shopify CLI upgraded.",body:`You're now on version ${f}.`})}else if(o)await z(o,s);else throw new Error("Could not determine the local project directory")}function ge(){let e=s,n=g("@shopify/cli",e);if(!n){u("Auto-upgrade: No newer version available.");return}if(process.env.SHOPIFY_CLI_FORCE_AUTO_UPGRADE==="1")return u("Auto-upgrade: Forcing auto-upgrade because of SHOPIFY_CLI_FORCE_AUTO_UPGRADE."),n;if(!h()){u("Auto-upgrade: Skipping because auto-upgrade is not enabled.");return}if(C()){u("Auto-upgrade: Skipping auto-upgrade in CI.");return}if(w(e)){u("Auto-upgrade: Skipping auto-upgrade for pre-release version.");return}return n}async function me(){try{let{notifications:e}=await O();return T(e,"",["autoupgrade"]).some(o=>o.type==="error")}catch{return!1}}async function he(){if(C()||w(s)||h())return;let e=g("@shopify/cli",s);e&&await S("warn-on-available-upgrade",{days:1},async()=>{M(K(e))})}function K(e,n=!1){let o=j(),t=o?p`💡 Version ${e} available! Run ${c.genericShellCommand(o)}`.value:p`💡 Version ${e} available!`.value;if(n){let r=`https://github.com/Shopify/cli/releases/tag/${e}`,a=p`⚠️ This is a major version — review breaking changes before upgrading:\n ${c.link(r,r)}`.value;return`${t}
|
|
3
|
-
|
|
4
|
-
${a}`}return t}async function z(e,n){let o=(await y(e)).content,t=o.dependencies??{},r=o.devDependencies??{},i={...t,...r}[await b()];if(!i){u("Auto-upgrade: CLI dependency not found in project dependencies, skipping local upgrade.");return}i.slice(0,1).match(/[\^~]/)&&(i=n);let l=await R(await b(),i);l?Z(i,l):X(i),await G("prod",t,e),await G("dev",r,e)}async function G(e,n,o){let t=[await b(),...await Q()].filter(a=>!!n[a]).map(a=>({name:a,version:"latest"})),r=await N(o);t.length>0&&await _(t,{packageManager:await E(o),type:e,directory:o,stdout:process.stdout,stderr:process.stderr,addToRootDirectory:r})}async function b(){return(await W()).name}async function Q(){return(await W())?.oclif?.plugins??[]}var m;async function W(){if(!m){let e=await y($(import.meta.url));m=m??e.content}return m}function X(e){d(p`You're on the latest version, ${c.yellow(e)}, no need to upgrade!`)}function Z(e,n){d(p`Upgrading CLI from ${c.yellow(e)} to ${c.yellow(n)}...`)}export{j as a,fe as b,ge as c,me as d,he as e,K as f};
|
package/dist/chunk-KYB4JX76.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{a as C}from"./chunk-32VQQ6EU.js";import{b as ne,c as re}from"./chunk-2QENUJVG.js";import{c as ee,d as te}from"./chunk-YRX4E67D.js";import{A as M}from"./chunk-GF36WNMH.js";import{a as Z}from"./chunk-5SLKHURV.js";import{a as Q}from"./chunk-MTBABHUB.js";import{Ha as X}from"./chunk-EEAY7HFW.js";import{b as z,c as Y,f as V}from"./chunk-SUTVPAJF.js";import{F as K,a as b,d as v,e as l,f as s,g as j,h as H,i as G,l as J,m as q,n as x,t as R}from"./chunk-7YXHILW4.js";import{i as O}from"./chunk-4HBKQUKY.js";import{a as B}from"./chunk-N47RQHEI.js";import{qa as N}from"./chunk-62GA7XR3.js";import{g as U}from"./chunk-PT3OZEBI.js";import{b as ye}from"./chunk-I3J63RFV.js";import{c as I}from"./chunk-6IDEDOXW.js";import{e as S,g as c}from"./chunk-VKWPEFWQ.js";c();c();c();c();c();var h=S(v(),1);import{Writable as oe}from"stream";function ie({selectedRun:e,abortController:t,app:o,extension:r,appWatcher:i}){let a={type:"functionRun",input:e.payload.input,output:e.payload.output,logs:e.payload.logs,name:e.source,size:0,memory_usage:0,instructions:e.payload.fuelConsumed},[u,f]=(0,h.useState)([]),[p,m]=(0,h.useState)([a,a]),[y,d]=(0,h.useState)(void 0),{input:E,export:_}=e.payload,[fe,k]=(0,h.useState)(`Watching for changes to ${e.source}...`);return(0,h.useEffect)(()=>{let A=new b;t.signal.addEventListener("abort",()=>{A.abort()});let $=async()=>{let w=await Ee(r,JSON.stringify(E),_);m(g=>[w,g[0]]),k(`Watching for changes to ${e.source}...`),f(g=>[...g,w])},de=async()=>{k("Replaying log with local function..."),await $()},ge=async()=>{i.onEvent(async g=>{let F=g.extensionEvents.find(L=>L.extension.handle===r.handle);if(!(!F||F.type!==ee.Updated)){if(F.buildResult?.status==="error"){d(`Error while reloading and building extension: ${F.buildResult?.error}`);return}d(void 0),k("Re-running with latest changes..."),await $()}});let w=new oe({write(g,F,L){f(he=>[...he,{type:"systemMessage",message:g.toString()}]),L()}});await i.start({stdout:w,stderr:w,signal:A.signal},!1)};return de().then(()=>{ge()}),()=>{A.abort()}},[E,_,o,r]),R(t.signal,async()=>{setTimeout(()=>{U()||B(process.pid,"SIGINT",!1,()=>{process.exit(0)})},2e3)}),{logs:u,statusMessage:fe,recentFunctionRuns:p,error:y}}async function Ee(e,t,o){let r="",i=new oe({write(u,f,p){r+=u,p()}});return await C({functionExtension:e,input:t,export:o,stdout:i,json:!0}),{...JSON.parse(r),type:"functionRun"}}var n=S(v(),1);var ae=({selectedRun:e,abortController:t,app:o,extension:r})=>{let{isAborted:i}=R(t.signal),{isRawModeSupported:a}=H(),u=new te(o),{logs:f,statusMessage:p,recentFunctionRuns:m,error:y}=ie({selectedRun:e,abortController:t,app:o,extension:r,appWatcher:u});return G((d,E)=>{q(d,E,()=>t.abort()),d==="q"&&t.abort()},{isActive:!!a}),n.default.createElement(n.default.Fragment,null,n.default.createElement(j,{items:f},(d,E)=>n.default.createElement(l,{key:`replayOutputScrollerLog${E}`,flexDirection:"column"},n.default.createElement(Re,{log:d}))),i?null:n.default.createElement(l,{marginY:1,paddingTop:1,flexDirection:"column",flexGrow:1,borderStyle:"single",borderBottom:!1,borderLeft:!1,borderRight:!1,borderTop:!0},a?n.default.createElement(l,{flexDirection:"column"},n.default.createElement(l,{flexDirection:"row"},n.default.createElement(s,null,x.pointerSmall," ",p)),n.default.createElement(be,{recentFunctionRuns:m}),n.default.createElement(s,null,x.pointerSmall," Press ",n.default.createElement(s,{bold:!0},"q")," ",x.lineVertical," quit")):null,y?n.default.createElement(s,{color:"red"},y):null))};function D({title:e,backgroundColor:t}){let o=Math.max(Math.round((28-e.length)/2),0),r=" ".repeat(o);return n.default.createElement(s,{backgroundColor:t,color:"black"},`
|
|
2
|
-
|
|
3
|
-
`,r,e,r,`
|
|
4
|
-
`)}function we({input:e}){return n.default.createElement(l,{flexDirection:"column"},n.default.createElement(D,{title:"Input",backgroundColor:"yellow"}),n.default.createElement(s,null,M(e)))}function Fe({logs:e}){return n.default.createElement(l,{flexDirection:"column"},n.default.createElement(D,{title:"Logs",backgroundColor:"blueBright"}),n.default.createElement(s,null,e))}function xe({output:e}){return n.default.createElement(l,{flexDirection:"column"},n.default.createElement(D,{title:"Output",backgroundColor:"greenBright"}),n.default.createElement(s,null,M(e)))}function Se({functionRun:e}){return n.default.createElement(l,{flexDirection:"column"},n.default.createElement(D,{title:"Benchmark Results",backgroundColor:"green"}),n.default.createElement(s,null,"Name: ",e.name),n.default.createElement(s,null,"Linear Memory Usage: ",e.memory_usage,"KB"),n.default.createElement(s,null,"Instructions: ",e.instructions/1e3,"K"),n.default.createElement(s,null,"Size: ",e.size,"KB"))}function be({recentFunctionRuns:e}){let t=e[0].instructions-e[1].instructions;return n.default.createElement(l,{flexDirection:"column"},n.default.createElement(s,null,x.pointerSmall," Instruction count change: ",t>0?"+":"",t))}function Re({log:e}){switch(e.type){case"functionRun":return n.default.createElement(l,{flexDirection:"column"},n.default.createElement(we,{input:e.input}),n.default.createElement(Fe,{logs:e.logs}),n.default.createElement(xe,{output:e.output}),n.default.createElement(Se,{functionRun:e}),n.default.createElement(s,null,"\xA0"));case"systemMessage":return n.default.createElement(s,null,e.message);default:return null}}var se=S(v(),1);async function ce({selectedRun:e,abortController:t,app:o,extension:r}){return J(se.default.createElement(ae,{selectedRun:e,abortController:t,app:o,extension:r}),{exitOnCtrlC:!1})}c();async function le(e){if(e.length===0)return;let t=i=>({label:`${i.logTimestamp} (${i.status}) - ${i.identifier}`,value:i}),o=e.map(t);return await K({message:"Which function run would you like to replay locally?",choices:o})}import{existsSync as Ce,readdirSync as De}from"fs";var T=100;async function ue(e){let{watch:t,extension:o,app:r}=e,i=new b;try{let a=r.getLogsDir(),u=e.log?await ke(a,o.handle,e.log):await Le(a,o.handle),{input:f,export:p}=u.payload;t?await ce({selectedRun:u,abortController:i,app:r,extension:o}):await C({functionExtension:o,json:e.json,input:JSON.stringify(f),export:p})}catch(a){throw i.abort(),a}}async function ke(e,t,o){let r=await Ae(e,t,o);if(r===void 0)throw new O(`No log found for '${o}'.
|
|
5
|
-
Searched ${e} for function ${t}.`);let i=await N(r);return JSON.parse(i)}function me(e){let t=e.split(/[_.]/);if(!(t.length<6))return{namespace:t[3],functionHandle:t[4],identifier:t[5]}}async function Ae(e,t,o){let r=pe(e).find(i=>{let a=me(i);return a?.namespace==="extensions"&&a?.functionHandle===t&&a?.identifier===o});return r?I(e,r):void 0}async function Le(e,t){let o=await Ie(e,t),r=await le(o);if(r===void 0)throw new O(`No logs found in ${e}`);return r}async function Ie(e,t){let o=pe(e).filter(i=>{let a=me(i);return a?.namespace==="extensions"&&a?.functionHandle===t}).reverse(),r=[];for(let i=0;i<o.length&&r.length<T;i+=T){let u=o.slice(i,i+T).map(m=>I(e,m)),p=(await Promise.all(u.map(async m=>{let y=await N(m);return{...JSON.parse(y),identifier:Ne(m)}}))).filter(m=>m.payload.input!=null);r=r.concat(p)}return r}function Ne(e){return e.split("_").pop().substring(0,6)}function pe(e){return Ce(e)?De(e):[]}var P=S(ye(),1),W=class e extends Z{static get requiresSyncAnalytics(){return!0}static summary="Replays a function run from an app log.";static descriptionWithMarkdown="Runs the function from your current directory for [testing purposes](https://shopify.dev/docs/apps/functions/testing-and-debugging). To learn how you can monitor and debug functions when errors occur, refer to [Shopify Functions error handling](https://shopify.dev/docs/api/functions/errors).";static description=this.descriptionForHelp();static flags={...z,...Q,...ne,...Y,log:V(P.Flags.string({char:"l",description:"Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name.",env:"SHOPIFY_FLAG_LOG"})),watch:P.Flags.boolean({char:"w",hidden:!1,allowNo:!0,default:!0,description:"Re-run the function when the source code changes.",env:"SHOPIFY_FLAG_WATCH"})};async run(){let{flags:t}=await this.parse(e),{app:o}=await X({directory:t.path,clientId:t["client-id"],forceRelink:t.reset,userProvidedConfigName:t.config}),r=await re(o,t.path);return await ue({app:o,extension:r,path:t.path,log:t.log,json:t.json,watch:t.watch}),{app:o}}};export{W as a};
|
package/dist/chunk-LJAU6YHF.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{c as ge}from"./chunk-BD2L6YE5.js";import{a as he,c as ye}from"./chunk-K6FH5JSY.js";import{b as ue}from"./chunk-RW3P3UMU.js";import{a as Te}from"./chunk-5SLKHURV.js";import{Da as Fe,Ha as Le,J as ve,R as Pe,T as Ae,V as ke,da as xe,ga as Ce,h as we}from"./chunk-EEAY7HFW.js";import{A as be,ma as Ie,ra as Re}from"./chunk-TVI7TQ4C.js";import{b as fe,f as de}from"./chunk-SUTVPAJF.js";import{B as ie,D as re,E as oe,f as C,g as ee,i as te,p as ae}from"./chunk-5VRB3FBD.js";import{e as Q}from"./chunk-AODTY2BL.js";import{a as z}from"./chunk-GYVQIRBD.js";import{D as $,H as ce,y as le,z as pe}from"./chunk-7YXHILW4.js";import{c as ne}from"./chunk-2VGPNRHH.js";import{d as se}from"./chunk-MWWULCLD.js";import{i as m}from"./chunk-4HBKQUKY.js";import{Aa as Y,Cb as h,Db as F,Eb as b,Ga as I,Na as V,Sa as K,Xa as R,Ya as x,Za as B,_a as W,ca as H,db as Z,oa as q,qa as O,ub as X,vb as J,wa as T,ya as _}from"./chunk-62GA7XR3.js";import{f as me}from"./chunk-PT3OZEBI.js";import{b as He}from"./chunk-I3J63RFV.js";import{c as l,d as k,e as M,o as U,p as D}from"./chunk-6IDEDOXW.js";import{e as De,g as c}from"./chunk-VKWPEFWQ.js";c();c();var y={reactRouter:{url:"https://github.com/Shopify/shopify-app-template-react-router",label:"Build a React Router app (recommended)",visible:!0,branches:{prompt:"For your React Router template, which language do you want?",options:{javascript:{branch:"javascript-cli",label:"JavaScript"},typescript:{branch:"main-cli",label:"TypeScript"}}}},remix:{url:"https://github.com/Shopify/shopify-app-template-remix",label:"Build a Remix app",visible:!1,branches:{prompt:"For your Remix template, which language do you want?",options:{javascript:{branch:"javascript",label:"JavaScript"},typescript:{branch:"main",label:"TypeScript"}}}},none:{url:"https://github.com/Shopify/shopify-app-template-extension-only",label:"Build an extension-only app",visible:!0},node:{url:"https://github.com/Shopify/shopify-app-template-node",visible:!1},ruby:{url:"https://github.com/Shopify/shopify-app-template-ruby",visible:!1}},S=Object.keys(y),L=S.filter(e=>y[e].visible),qe=["reactRouter","none"],Oe=async e=>{let t=e.template,a=e.flavor,r={template:y.reactRouter.url};t??=await $({choices:qe.map(o=>({label:y[o].label||o,value:o})),message:"Get started building your app:",defaultValue:S.find(o=>y[o].url===r.template)});let i={...e,template:t,templateType:P(t)?t:"custom",globalCLIResult:{install:!1,alreadyInstalled:!1}},n,s;if(i.templateType!=="custom"){let o=y[i.templateType];n=o.url,o.branches&&(a?s=o.branches.options[a]?.branch:s=await $({message:o.branches.prompt||"Choose a flavor:",choices:Object.entries(o.branches.options).map(([f,u])=>({value:u.branch,label:u.label}))}))}return s&&(n=`${n}#${s}`),i.template=n||i.template||r.template,i.globalCLIResult=await J(),i},_e=Oe;function P(e){return S.includes(e)}function $e(e){return e!==void 0&&P(e)&&y[e].branches!==void 0}c();c();import{platform as Ye}from"os";async function Se({packageJSON:e,local:t,useGlobalCLI:a}){if(e.dependencies=e.dependencies??{},a?delete e.dependencies["@shopify/cli"]:e.dependencies["@shopify/cli"]=z,delete e.dependencies["@shopify/app"],t){let r=await Ve("cli");e.dependencies["@shopify/cli"]=r;let i={"@shopify/cli":r};e.overrides=e.overrides?{...e.overrides,...i}:i,e.resolutions=e.resolutions?{...e.resolutions,...i}:i}return e}async function Ve(e){return`file:${await Z(`packages/${e}`,{type:"directory",cwd:U(import.meta.url)})}`}async function Ge({from:e,packageManager:t}){let a=Ye()==="win32"&&t==="yarn"?["--network-concurrency","1"]:[];return ae({directory:k(e),packageManager:t,args:a})}c();async function G(e,t){let r=(await W([l(e,"**",".git"),l(e,"**",".github"),l(e,"**",".gitmodules"),l(e,"**",".cli-liquid-bypass"),l(e,"LICENSE*"),l(e,"**","frontend/LICENSE*"),l(e,"package.json.cli2")],{dot:!0,onlyFiles:!1,onlyDirectories:!1,ignore:["**/node_modules/**"]})).map(s=>I(s,{force:!0})),i=new Set(ee[t]),n=C.filter(s=>!i.has(s)).map(s=>{let o=l(e,s);if(x(o))return V(o)});return Promise.all([...r,...n])}async function Ke(e){let t=e.packageManager,a=H(e.name),r=l(e.directory,a),i=ge(e.template);await Ee(r,a),await Be(r),le({body:["Initializing project with",{command:t},`
|
|
2
|
-
Use the`,{command:"--package-manager"},"flag to select a different package manager."]}),await q(async o=>{let f=l(o,"download"),u=i.filePath?l(f,i.filePath):f,d=l(o,"app"),A=i.branch?`${i.baseURL}#${i.branch}`:i.baseURL;await Y(f);let w=[{title:`Downloading template from ${A}`,task:async()=>{await ye({repoUrl:A,destination:f,shallow:!0})}}];w.push({title:"Parsing liquid",task:async()=>{await ue(u,d,{dependency_manager:t,app_name:e.name})}},{title:"Updating package.json",task:async()=>{let p=(await ie(d)).content;p.name=a,p.author=await ne()??"",p.private=!0;let v=["extensions/*"].concat(We(d));switch(t){case"npm":case"yarn":case"bun":p.workspaces=v;break;case"pnpm":{await Ze(d,v),await T(l(d,".npmrc"),`auto-install-peers=true
|
|
3
|
-
`);break}case"homebrew":case"unknown":throw new te}await Se({packageJSON:p,local:e.local,directory:d,useGlobalCLI:e.useGlobalCLI}),await re(d,p)}}),e.postCloneActions.removeLockfilesFromGitignore&&w.push({title:"Removing lockfiles from .gitignore",task:async()=>{let p=l(d,".gitignore");if(await R(p)){let v=await O(p);C.forEach(Me=>{let Ue=new RegExp(`^${Me.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}$`,"gm");v=v.replace(Ue,"")}),await _(p,v.trim())}}}),await me()&&w.push({title:"[Shopifolks-only] Configuring the project's NPM registry",task:async()=>{let p=l(d,".npmrc");await T(p,`@shopify:registry=https://registry.npmjs.org
|
|
4
|
-
`)}});let N=!1;w.push({title:"Preparing project directory",task:async()=>{await Ee(r,a),N=!0,await K(d,r)}}),w.push({title:`Installing dependencies with ${t}`,task:async()=>{await Ge({from:r,packageManager:t})}},{title:"Cleaning up",task:async()=>{await G(r,t)}},{title:"Initializing a Git repository...",task:async()=>{await he(r)}});try{await ce(w)}catch(p){throw N&&await I(r).catch(()=>{}),p}});let n;if(e.selectedAppOrNameResult.result==="new"){let o=await ve(r,e.name),f=e.selectedAppOrNameResult.org;n=await e.developerPlatformClient.createApp(f,o)}else n=e.selectedAppOrNameResult.app;await Fe({directory:r,apiKey:n.apiKey,appId:n.id,organizationId:n.organizationId,configName:"shopify.app.toml",developerPlatformClient:e.developerPlatformClient,isNewApp:!0},!1);let s=await Le({directory:r,clientId:void 0,forceRelink:!1,userProvidedConfigName:void 0});return pe({headline:[{userInput:a},"is ready for you to build!"],nextSteps:[["Run",{command:`cd ${a}`}],["For extensions, run",{command:F(t,"shopify app generate extension")}],["To see your app, run",{command:F(t,"shopify app dev")}]],reference:[{link:{label:"Shopify docs",url:"https://shopify.dev"}},[{link:{label:"Shopify Dev MCP,",url:"https://shopify.dev/docs/apps/build/devmcp"}},"connect your AI assistant to development resources"],["For an overview of commands, run",{command:F(t,"shopify app","--help")}]]}),{app:s.app}}async function Ee(e,t){if(await R(e))throw new m(`
|
|
5
|
-
A directory with this name (${t}) already exists.
|
|
6
|
-
Choose a new name for your app.`)}async function Be(e){let t=new Q({projectName:"shopify-cli-app"}),a=k(e);t.delete(a)}function We(e){return["web","web/frontend"].filter(t=>x(l(e,t)))}async function Ze(e,t){let a=l(e,"pnpm-workspace.yaml");if(await R(a))return;let r=t.map(i=>` - '${i}'`).join(`
|
|
7
|
-
`);await _(a,`packages:
|
|
8
|
-
${r}`)}var je=Ke;c();c();function E(e){try{return new URL(e)}catch{return}}function Qe(e){if(!e)return;let t=e.toLowerCase();for(let r of[t,`https://${t}`]){let i=E(r)?.hostname;if(i)return i}let a=t.replace(/^https?:\/\//,"").split("/")[0];if(a)return a}function jt(e){let t=Qe(e);if(!t)return;let a=t.match(/^([^.]+)\.myshopify\.com$/);return a?a[1]:void 0}function Ne(e){if(!e)return;let t=E(e);if(t&&t.origin!=="https://github.com")throw new m("Only GitHub repository references are supported, e.g., https://github.com/Shopify/<repository>/[subpath]#[branch]");if(!t&&!P(e))throw new m(b`Only ${L.map(a=>b`${h.yellow(a)}`.value).join(", ")} template aliases are supported, please provide a valid URL`)}function ze(e,t){if(!e){if(t)throw new m(b`The ${h.yellow("--flavor")} flag requires the ${h.yellow("--template")} flag to be set`);return}if(!t)return;if(!P(e))throw new m(b`The ${h.yellow("--flavor")} flag is not supported for custom templates`);let a=y[e];if(!a.branches)throw new m(b`The ${h.yellow(e)} template does not support flavors`);if(!a.branches.options[t])throw new m(b`Invalid option for ${h.yellow("--flavor")}\nThe ${h.yellow("--flavor")} flag for ${h.yellow(e)} accepts only ${Object.keys(a.branches.options).map(r=>b`${h.yellow(r)}`.value).join(", ")}`)}var g=De(He(),1);var j=class e extends Te{static get requiresSyncAnalytics(){return!0}static summary="Create a new app project";static examples=["<%= config.bin %> <%= command.id %> --name my-app --organization-id 123 --template reactRouter --flavor typescript","<%= config.bin %> <%= command.id %> --client-id 123 --template none"];static flags={...fe,name:g.Flags.string({char:"n",env:"SHOPIFY_FLAG_NAME",hidden:!1,description:"The name for the new app. When provided, skips the app selection prompt and creates a new app with this name. Required in non-interactive environments unless --client-id is provided."}),path:g.Flags.string({char:"p",env:"SHOPIFY_FLAG_PATH",parse:async t=>M(t),default:async()=>D(),hidden:!1}),template:de(g.Flags.string({description:`The app template. Accepts one of the following:
|
|
9
|
-
- <${L.join("|")}>
|
|
10
|
-
- Any GitHub repo with optional branch and subpath, e.g., https://github.com/Shopify/<repository>/[subpath]#[branch]`,env:"SHOPIFY_FLAG_TEMPLATE"})),flavor:g.Flags.string({description:"Which flavor of the given template to use. Required in non-interactive environments when the selected template offers multiple flavors.",env:"SHOPIFY_FLAG_TEMPLATE_FLAVOR"}),"package-manager":g.Flags.string({char:"d",env:"SHOPIFY_FLAG_PACKAGE_MANAGER",hidden:!1,options:["npm","yarn","pnpm","bun"]}),local:g.Flags.boolean({char:"l",env:"SHOPIFY_FLAG_LOCAL",default:!1,hidden:!0}),"client-id":g.Flags.string({hidden:!1,description:"The Client ID of your app. Use this to automatically link your new project to an existing app. In non-interactive environments, provide this flag or both --name and --organization-id.",env:"SHOPIFY_FLAG_CLIENT_ID",exclusive:["config"]}),"organization-id":g.Flags.string({hidden:!1,description:"The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/<organization-id>. Required in non-interactive environments unless --client-id is provided.",env:"SHOPIFY_FLAG_ORGANIZATION_ID",exclusive:["client-id"]})};static nonTTYFlagRequirements(){return[{flags:["name","client-id"]},{flags:["organization-id","client-id"]},{flags:["flavor"],when:t=>$e(t.template)}]}async run(){let{flags:t}=await this.parse(e);if(Ne(t.template),ze(t.template,t.flavor),t.name!==void 0&&t.name.trim()==="")throw new m("The --name flag can't be empty","Provide a valid app name, for example: --name my-app");let a=oe(t["package-manager"]),r=t.name??await Xe(t.path),i=Ie();await i.session();let n=await _e({template:t.template,flavor:t.flavor}),s,o;if(t["client-id"]){let u=await xe({apiKey:t["client-id"]});o=u.title,s={result:"existing",app:u}}else{let u;t["organization-id"]?u=await Re(t["organization-id"],i):u=await Ce();let{organization:d,apps:A,hasMorePages:w}=await i.orgAndApps(u.id);s=await Je(t.name!==void 0,r,A,w,d,i),o=s.result==="new"?s.name:s.app.title}n.globalCLIResult.install&&await X(a),await se(()=>({cmd_create_app_template:n.templateType,cmd_create_app_template_url:n.template}));let{app:f}=await je({name:o,selectedAppOrNameResult:s,packageManager:a,template:n.template,local:t.local,directory:t.path,useGlobalCLI:n.globalCLIResult.alreadyInstalled||n.globalCLIResult.install,developerPlatformClient:i,postCloneActions:{removeLockfilesFromGitignore:n.templateType!=="custom"}});return{app:f}}};async function Xe(e){for(let t=0;t<3;t++){let a=await B({suffix:"app",directory:e});if(be(a))return a}return""}async function Je(e,t,a,r,i,n){let s=a.length===0||e;if(s||(s=await ke()),s)return{result:"new",name:e?t:await Ae(t),org:i};{let o=await Pe(we(n,i.id),a,r);if(!o)throw new m("Unable to select an app: the selection prompt was interrupted.");let f=await n.appFromIdentifiers(o.apiKey);if(!f)throw new m(`App with id ${o.id} not found`);return{result:"existing",app:f}}}export{Qe as a,jt as b,j as c};
|
package/dist/chunk-LMQOFVRC.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import{a as B,j as C,m as P}from"./chunk-KMJTO7CU.js";import{e as U,f as _}from"./chunk-FVTP7EO4.js";import{e as g}from"./chunk-M2HQFHNO.js";import{l as v,m as w}from"./chunk-TBNEN73P.js";import{ra as E}from"./chunk-HB4YI2PF.js";import{Nb as m}from"./chunk-62GA7XR3.js";import{g as T}from"./chunk-VKWPEFWQ.js";T();var $=20,J=1024*1024,A=2;function oe(t,e,r,s,o={},l){let n=B(r),i=new Map,c=a=>a.total===0?"[100%]":`[${Math.round(a.current/a.total*100)}%]`,u=R(t,e,n),h=Promise.all([s.ready(),u]).then(()=>q(n,s,t,e,i)),p=h.then(a=>a.promise).then(()=>j(n,s,t,e,o,i)),k=o?.deferPartialWork?u:p.then(a=>a.promise);return o?.backgroundWorkCatch&&Promise.all([u,h.then(a=>a.promise),p.then(a=>a.promise)]).catch(o.backgroundWorkCatch),{uploadResults:i,workPromise:k,renderThemeSyncProgress:async()=>{if(o?.deferPartialWork)return;let{progress:a,promise:d}=await h,f=o.multiEnvironment?4e3:1e3;await g(b({promise:d,titleGetter:()=>`Uploading files to remote theme ${c(a)}`,updateInterval:f}),l?.stderr,o?.multiEnvironment);let{progress:y,promise:F}=await p;await g(b({promise:F,titleGetter:()=>`Cleaning your remote theme ${c(y)}`,updateInterval:f}),l?.stderr,o?.multiEnvironment),await g([{title:"Theme upload complete",task:async()=>{}}],l?.stderr,o?.multiEnvironment),H(i,o?.environment)}}}function b({promise:t,titleGetter:e,updateInterval:r}){let s=[],o=()=>{s.push({title:e(),task:async()=>{await Promise.race([t,new Promise(n=>setTimeout(()=>n("timeout"),r))])==="timeout"&&o()}})};return o(),s}function j(t,e,r,s,o,l){if(o.nodelete)return{progress:{current:0,total:0},promise:Promise.resolve()};let n=L(t,e),i=x(n),c={current:0,total:i.length};if(i.length===0)return{progress:c,promise:Promise.resolve()};let u=[];for(let p=0;p<i.length;p+=$){let k=i.slice(p,p+$),a=v(r.id,k.map(d=>d.key),s).then(d=>{d.forEach(f=>{if(l.set(f.key,f),!f.success){let y=f.errors?.asset?.map(F=>`-${F}`).join(`
|
|
2
|
-
`);_(f.key,"delete")(new Error(`Failed to delete ${f.key}: ${y}`))}}),c.current+=k.length});u.push(a)}let h=Promise.all(u).then(()=>{c.current=c.total});return{progress:c,promise:h}}function L(t,e){let s=e.applyIgnoreFilters(t).filter(o=>!e.files.has(o.key));return m(`Files to be deleted:
|
|
3
|
-
${s.map(o=>`-${o.key}`).join(`
|
|
4
|
-
`)}`),s}function x(t){let e=P(t);return[...e.contextualizedJsonFiles,...e.templateJsonFiles,...e.sectionJsonFiles,...e.otherJsonFiles,...e.sectionLiquidFiles,...e.blockLiquidFiles,...e.layoutFiles,...e.otherLiquidFiles,...e.configDataFile,...e.configStylesheetFiles,...e.documentationFiles,...e.configSchemaFile,...e.staticAssetFiles]}var D=[{key:"config/settings_schema.json",value:"[]"},{key:"layout/password.liquid",value:"{{ content_for_header }}{{ content_for_layout }}"},{key:"layout/theme.liquid",value:"{{ content_for_header }}{{ content_for_layout }}"}];async function R(t,e,r){let s=new Set(r.map(l=>l.key)),o=D.filter(({key:l})=>!s.has(l));o.length>0&&await w(t.id,o,e)}function q(t,e,r,s,o){let l=S(e,t);e.unsyncedFileKeys.clear(),l.forEach(a=>e.unsyncedFileKeys.add(a.key));let{independentFiles:n,dependentFiles:i}=I(l),c={current:0,total:l.length},u=a=>a.length===0?Promise.resolve():Promise.all(z(a).map(d=>N(d,e,s,r.id,o).then(()=>{c.current+=d.length,d.forEach(f=>e.unsyncedFileKeys.delete(f.key))}))).then(()=>{}),h=i.reduce((a,d)=>a.then(()=>u(d)),Promise.resolve()),p=Promise.resolve().then(()=>u(n.flat())),k=Promise.all([h,p]).then(()=>{c.current=c.total});return{progress:c,promise:k}}function S(t,e){let r=K(t),s=t.applyIgnoreFilters(r),o=new Map(e.map(n=>[n.key,n])),l=s.filter(n=>{let i=o.get(n.key);return!i||i.checksum!==n.checksum});return m(`Files to be uploaded:
|
|
5
|
-
${l.map(n=>`-${n.key}`).join(`
|
|
6
|
-
`)}`),l}function I(t){let e=P(t);return{independentFiles:[e.otherLiquidFiles,e.otherJsonFiles,e.staticAssetFiles,e.configStylesheetFiles,e.documentationFiles],dependentFiles:[e.configSchemaFile,e.layoutFiles,e.blockLiquidFiles,e.sectionLiquidFiles,e.sectionJsonFiles,e.templateJsonFiles,e.contextualizedJsonFiles,e.configDataFile]}}function z(t){let e=[],r=[],s=0;for(let o of t){let l=r.length>=$,n=s>=J;(l||n)&&(e.push(r),r=[],s=0),r.push(o),s+=o.size??0}return r.length>0&&e.push(r),e}function K(t){let e=[];return t.files.forEach((r,s)=>{let o=r.value?Buffer.byteLength(r.value,"utf8"):r.attachment?.length??0;e.push({key:s,checksum:r.checksum,size:o})}),e}async function N(t,e,r,s,o){let l=t.map(i=>{let c=e.files.get(i.key)?.value,u=e.files.get(i.key)?.attachment;return{key:i.key,...c&&{value:c},...u&&{attachment:u}}});m(`Uploading the following files:
|
|
7
|
-
${t.map(i=>`-${i.key}`).join(`
|
|
8
|
-
`)}`),(await M(l,s,r)).forEach(i=>{o.set(i.key,i),W(i,e,s)})}function W(t,e,r){if(t.success)e.uploadErrors.delete(t.key);else{let s=t.errors?.asset??["Response was not successful."];e.uploadErrors.set(t.key,s),C(r,t.key)}}async function M(t,e,r,s=0){if(t.length===0)return[];s>0&&m(`Retry Attempt ${s}/${A} for the following files:
|
|
9
|
-
${t.map(n=>`-${n.key}`).join(`
|
|
10
|
-
`)}`);let o=await w(e,t,r);m(`File Upload Results:
|
|
11
|
-
${o.map(n=>`-${n.key}: ${n.success?"success":"failure"}`).join(`
|
|
12
|
-
`)}`);let l=o.filter(n=>!n.success);if(l.length>0){m(`The following files failed to upload:
|
|
13
|
-
${l.map(i=>`-${i.key}`).join(`
|
|
14
|
-
`)}`);let n=await G(l,t,e,r,s);return o.concat(n)}return o}async function G(t,e,r,s,o){let l=new Set(t.map(i=>i.key)),n=e.filter(i=>l.has(i.key));return o===A?(E("theme-service:upload-failed-retry:max-retry"),m(`Max retry count reached for the following files:
|
|
15
|
-
${n.map(i=>`-${i.key}`).join(`
|
|
16
|
-
`)}`),t):(E(`theme-service:upload-failed-retry:${n.length}`),M(n,r,s,o+1))}function H(t,e){for(let[r,s]of t.entries())if(!s.success){let o=s.errors?.asset?.join(`
|
|
17
|
-
`)??"File upload failed",l=e?`[${e}] ${r}`:r;U(l,new Error(o))}}export{oe as a};
|
package/dist/chunk-LQSD25YS.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{a as ne}from"./chunk-5O7JTVO2.js";import{d as ie}from"./chunk-SUTVPAJF.js";import{a as se,b as q}from"./chunk-DCKRQZLE.js";import{B as C,K as L,pa as V,ra as U,sa as X,u as w}from"./chunk-HB4YI2PF.js";import{e as x}from"./chunk-AODTY2BL.js";import{A as N,B as I,E as re,a as Q,x as te}from"./chunk-7YXHILW4.js";import{b as K}from"./chunk-HILYTMVA.js";import{d as Z,e as ee}from"./chunk-MWWULCLD.js";import{i as F,l as oe}from"./chunk-4HBKQUKY.js";import{Cb as R,Eb as l,Ja as W,Nb as h,Ya as _}from"./chunk-62GA7XR3.js";import{b as Ie}from"./chunk-I3J63RFV.js";import{c as Y,e as k,h as J,p as $}from"./chunk-6IDEDOXW.js";import{e as Te,g as f}from"./chunk-VKWPEFWQ.js";f();var T=Te(Ie(),1);var O={path:T.Flags.string({description:"The path where you want to run the command. Defaults to the current working directory.",env:"SHOPIFY_FLAG_PATH",parse:async t=>{let e=k(t);return _(e)?W(e)?e:(I({headline:"The path must be a directory, not a file.",body:[`The provided path is not a directory: ${e}`,`Did you mean: ${J(e)}`]}),process.exit(1)):(I({headline:"A path was explicitly provided but doesn't exist.",body:[`Please check the path and try again: ${e}`]}),process.exit(1))},default:async()=>$(),noCacheDefault:!0}),password:T.Flags.string({description:"Password generated from the Theme Access app or an Admin API token.",env:"SHOPIFY_CLI_THEME_TOKEN"}),store:T.Flags.string({char:"s",description:"Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).",env:"SHOPIFY_FLAG_STORE",parse:async t=>w(t)}),environment:T.Flags.string({char:"e",description:"The environment to apply to the current command.",env:"SHOPIFY_FLAG_ENVIRONMENT",multiple:!0})},ae="Wrap the value in double quotes if you're using wildcards.",qe=t=>({only:T.Flags.string({char:"o",multiple:!0,description:`${t.charAt(0).toUpperCase()+t.slice(1)} only the specified files (Multiple flags allowed). ${ae}`,env:"SHOPIFY_FLAG_ONLY"}),ignore:T.Flags.string({char:"x",multiple:!0,description:`Skip ${t}ing the specified files (Multiple flags allowed). ${ae}`,env:"SHOPIFY_FLAG_IGNORE"})});f();f();import{AsyncLocalStorage as _e}from"node:async_hooks";var pe=new _e,ce,ue,me,de;function S(){return ce??=new x({projectName:"shopify-cli-theme-conf"}),ce}function j(){return ue??=new x({projectName:"shopify-cli-development-theme-config"}),ue}function D(){return me??=new x({projectName:"shopify-cli-repl-theme-config"}),me}function M(){return de??=new x({projectName:"shopify-cli-theme-store-password"}),de}function B(t=S()){return pe.getStore()?.store??t.get("themeStore")}function fe(t,e=S()){e.set("themeStore",t)}function He(t=S()){return h(l`Getting development theme...`),j().get(v(t))}function ze(t,e=S()){h(l`Setting development theme...`),j().set(v(e),t)}function Ye(t=S()){h(l`Removing development theme...`),j().delete(v(t))}function Je(t=S()){return h(l`Getting REPL theme...`),D().get(v(t))}function We(t,e=S()){h(l`Setting REPL theme to ${t}...`),D().set(v(e),t)}function Ke(t=S()){h(l`Removing REPL theme...`),D().delete(v(t))}function Qe(t=S()){let e=v(t);return h(l`Getting storefront password for shop ${e}...`),M().get(e)}function Ve(t,e=S()){let o=v(e);h(l`Setting storefront password for shop ${o}...`),M().set(o,t)}function Xe(t=S()){let e=v(t);h(l`Removing storefront password for ${e}...`),M().delete(e)}function v(t=S()){let e=B(t);if(!e)throw new oe("Theme store is not set. This indicates an unexpected issue with the CLI. Please report this to the Shopify CLI team.",["It may be possible to recover by running",{command:"shopify theme list --store <store>"},"(setting the store flag to the store you wish to use) and then running the command again."]);return e}async function he(t,e){return pe.run({store:t},e)}function le(t){let e=t.store??B();if(!e)throw V(new F("A store is required",`Specify the store passing ${l`${R.genericShellCommand(`--${O.store.name}=example.myshopify.com`)}`.value} or set the ${l`${R.genericShellCommand(O.store.env)}`.value} environment variable.`));return fe(e),e}f();f();var Se="shopify.theme.toml",ct=new Intl.DateTimeFormat(void 0,{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}),ut=["**/.git","**/.vscode","**/.hg","**/.bzr","**/.svn","**/_darcs","**/CVS","**/*.sublime-(project|workspace)","**/.DS_Store","**/.sass-cache","**/Thumbs.db","**/desktop.ini","**/config.yml","**/node_modules/",".prettierrc.json","**/{blocks,layout,snippets}/**/*.liquid.tmp.*","**/{config,locales}/**/*.json.tmp.*","**/{sections,templates}/**/*.{liquid,json}.tmp.*"],mt=50;f();f();var G="7e9cb568cfd431c538f36d1ad3f2b4f6";var Fe="shopify-cli-store",be=240*1e3,ge;function P(){return ge??=new x({projectName:Fe}),ge}function b(t){return`${G}::${Ee(t)}`}function Ee(t){return t.replace(/\\/g,"\\\\").replace(/\./g,"\\.")}function d(t){return typeof t=="string"}function ke(t){if(!t||typeof t!="object")return;let e=t;if(typeof e.id=="number")return{id:e.id,...d(e.email)?{email:e.email}:{},...d(e.firstName)?{firstName:e.firstName}:{},...d(e.lastName)?{lastName:e.lastName}:{},...typeof e.accountOwner=="boolean"?{accountOwner:e.accountOwner}:{}}}function $e(t){if(!t||typeof t!="object")return;let e=t;if(!(!d(e.shopId)||!d(e.name)||!d(e.createdAt)))return{shopId:e.shopId,name:e.name,createdAt:e.createdAt,...d(e.placeholderAccountUuid)?{placeholderAccountUuid:e.placeholderAccountUuid}:{},...d(e.country)?{country:e.country}:{},...d(e.accessUrl)?{accessUrl:e.accessUrl}:{}}}function Pe(t){if(!t||typeof t!="object")return;let e=t;if(!d(e.store)||!d(e.clientId)||!d(e.userId)||!d(e.accessToken)||!Array.isArray(e.scopes)||!e.scopes.every(d)||!d(e.acquiredAt))return;let o=ke(e.associatedUser),r=e.kind==="preview"?"preview":"standard",n=r==="preview"?$e(e.preview):void 0;if(!(r==="preview"&&!n))return{store:e.store,clientId:e.clientId,userId:e.userId,accessToken:e.accessToken,scopes:e.scopes,acquiredAt:e.acquiredAt,...d(e.refreshToken)?{refreshToken:e.refreshToken}:{},...d(e.expiresAt)?{expiresAt:e.expiresAt}:{},...d(e.refreshTokenExpiresAt)?{refreshTokenExpiresAt:e.refreshTokenExpiresAt}:{},...o?{associatedUser:o}:{},...r==="preview"?{kind:r}:{},...n?{preview:n}:{}}}function ye(t,e,o){if(!e||typeof e!="object")return;let{sessionsByUserId:r,currentUserId:n}=e;if(!(r!==void 0||n!==void 0))return;let s=b(t);if(!r||typeof r!="object"||Array.isArray(r)||typeof n!="string"){o.delete(s);return}let a=Object.fromEntries(Object.entries(r).flatMap(([u,c])=>{let p=Pe(c);return p?[[u,p]]:[]}));if(Object.keys(a).length!==Object.keys(r).length)if(a[n])o.set(s,{currentUserId:n,sessionsByUserId:a});else{o.delete(s);return}return{currentUserId:n,sessionsByUserId:a}}function H(t,e){return ye(t,e.get(b(t)),e)}function Ce(t){return t.config?.store??{}}function we(t=P()){let e=[],o=`${G}::`;for(let[r,n]of Object.entries(Ce(t))){if(!r.startsWith(o))continue;let i=ye(r.slice(o.length),n,t),s=i?.sessionsByUserId[i.currentUserId];s&&e.push(s)}return e}function Ae(t,e=P()){let o=w(t),r=H(o,e);if(!r)return;let n=r.sessionsByUserId[r.currentUserId];if(!n){e.delete(b(o));return}return n}function wt(t,e=P()){let o=b(t.store),r=H(t.store,e),n={currentUserId:t.userId,sessionsByUserId:{...r?.sessionsByUserId??{},[t.userId]:t}};e.set(o,n)}function At(t,e,o){let r=w(t),n=typeof e=="string"?e:void 0,i=(typeof e=="string"?o:e)??P(),s=b(r);if(!n){i.delete(s);return}let a=H(r,i);if(!a)return;let{[n]:u,...c}=a.sessionsByUserId,p=Object.keys(c);if(p.length===0){i.delete(s);return}i.set(s,{currentUserId:a.currentUserId===n?p[0]:a.currentUserId,sessionsByUserId:c})}function ve(t){if(!t.expiresAt)return!1;let e=new Date(t.expiresAt).getTime();return Number.isNaN(e)?!0:e-be<Date.now()}var z=class extends q{static baseFlags={...q.baseFlags,...ie};environmentsFilename(){return Se}async command(e,o,r=!1,n,i){}async run(e){let o=this.constructor,r=o.multiEnvironmentsFlags,{args:n,flags:i}=await this.parse(o),s="password"in o.flags,a=(Array.isArray(i.environment)?i.environment:[i.environment]).filter(Boolean),u=r!==null&&r.some(m=>Array.isArray(m)?m.includes("store"):m==="store");if(a.length<=1){if(a[0]&&!i.store&&u)throw new F("Please provide a valid environment.");let m=s?await this.createSession(i):void 0,A=this.constructor.name.toLowerCase();if(U(`theme-command:${A}:single-env:authenticated`),i.path&&!_(i.path))throw new F(`Path does not exist: ${i.path}`);try{await this.command(i,m,!1,n)}finally{await this.logAnalyticsData(m)}return}if(r===null){N({body:"This command does not support multiple environments."});return}let{flags:c}=await this.parse(se(o),this.argv);if("path"in c){this.errorOnGlobalPath();return}let p=await this.loadEnvironments(a,i,c),g=await this.validateEnvironments(p,r,s);"force"in o.flags&&!i.force&&!await this.showConfirmation(this.constructor.name,r,g)||await this.runConcurrent(g.valid)}storeAuthScopes(){}async loadEnvironments(e,o,r){let n=new Map;for(let i of e){let s=await ne(i,"shopify.theme.toml",{from:o.path,silent:!0});s?.store&&typeof s.store=="string"&&(s.store=w(s.store)),s?.path&&typeof s.path=="string"&&(s.path=k(s.path)),n.set(i,{flags:{...o,...s,...r,environment:[i]},validationFlags:{...s,...r}})}return n}async validateEnvironments(e,o,r){let n=[],i=[],s=r?this.storeAuthSessionsForTheme(Array.from(e.values()).map(({validationFlags:u})=>u)):new Map,a=Array.from(e.entries()).map(([u,{flags:c,validationFlags:p}])=>({environmentName:u,flags:c,validationFlags:p,storeAuthSession:this.storeAuthSessionFromCache(p,s)}));for(let{environmentName:u,flags:c,validationFlags:p,storeAuthSession:g}of a){let y=this.validConfig(p,o,u,g);if(y!==!0){let m=y.join(", ");i.push({environment:u,reason:`Missing flags: ${m}`});continue}n.push({environment:u,flags:c,requiresAuth:r,storeAuthSession:g})}return{valid:n,invalid:i}}async showConfirmation(e,o,r){let s={message:[`Run ${e.toLowerCase()} in the following environments?`],confirmationMessage:"Yes, proceed",cancellationMessage:"Cancel"},a=[...r.valid.map(({environment:u,flags:c})=>{let p=o.map(g=>{let y=Array.isArray(g)?g.find(m=>c[m]):g;if(y==="password")return"password";if(y==="path"&&typeof c.path=="string"){let m=c.path.split(/[/\\]/);if(m.length===1)return`path: ${c.path}`;let A=m[0]===""?`/${m[1]}`:m[0],E=m.at(-1);return`path: ${A}/.../${E}`}return y&&`${y}: ${c[y]}`}).join(", ");return[u,{subdued:p||"No flags required"}]}),...r.invalid.map(({environment:u,reason:c})=>[u,{error:`Skipping | ${c}`}])];return s.infoTable={Environment:a},r.invalid.length>0&&(s.confirmationMessage="Proceed anyway (will skip invalid environments)"),re(s)}async runConcurrent(e){let o=new Q,r=e.map(s=>s.flags.store),n=new Set(r),i=r.length===n.size?[e]:this.createSequentialGroups(e);for(let s of i)await te({processes:s.map(({environment:a,flags:u,requiresAuth:c,storeAuthSession:p})=>({prefix:a,action:async(g,y,m)=>{try{let A=u.store;await he(A,async()=>{let E=c?await this.createSession(u,p):void 0,xe=this.constructor.name.toLowerCase();U(`theme-command:${xe}:multi-env:authenticated`);try{await this.command(u,E,!0,{},{stdout:g,stderr:y})}finally{await this.logAnalyticsData(E)}})}catch(A){A instanceof Error&&(A.message=`Environment ${a} failed:
|
|
2
|
-
|
|
3
|
-
${A.message}`,I({body:[A.message]}))}}})),abortSignal:o.signal,showTimestamps:!0,renderOptions:{stdout:process.stderr}})}createSequentialGroups(e){let o=[];return e.forEach(r=>{let n=o.find(i=>!i.some(s=>s.flags.store===r.flags.store));n?n.push(r):o.push([r])}),o}async createSession(e,o){let r=le({store:e.store}),n=e.password;return n?await L(r,n):o??await this.storeAuthSessionForTheme({store:r})??await L(r,n)}async storeAuthSessionForTheme(e){let o=this.storeAuthScopes();if(!o)return;let r=typeof e.store=="string"?e.store:void 0,n=e.password;if(!r||n)return;let i=w(r),s=Ae(i);if(s)return this.adminSessionFromStoreAuthSession(s,i,o)}storeAuthSessionsForTheme(e){let o=this.storeAuthScopes();if(!o)return new Map;let r=new Set(e.filter(({store:n,password:i})=>typeof n=="string"&&!i).map(({store:n})=>w(n)));return r.size===0?new Map:new Map(we().map(n=>{let i=w(n.store);if(!r.has(i))return;let s=this.adminSessionFromStoreAuthSession(n,i,o);return s?[i,s]:void 0}).filter(n=>n!==void 0))}storeAuthSessionFromCache(e,o){let r=typeof e.store=="string"?e.store:void 0,n=e.password;if(!(!r||n))return o.get(w(r))}adminSessionFromStoreAuthSession(e,o,r){if(ve(e)){h(`Ignoring stored store auth session for ${o}: it expired at ${e.expiresAt??"unknown"}.`);return}if(!this.hasRequiredStoreAuthScopes(e.scopes,r)){h(`Ignoring stored store auth session for ${o}: it is missing required scopes (has: ${e.scopes.join(", ")}; needs: ${r.join(", ")}).`);return}return h(`Using stored store auth session for ${o} (scopes: ${e.scopes.join(", ")}).`),C(e.userId),{token:e.accessToken,storeFqdn:o}}expandImpliedStoreAuthScopes(e){let o=new Set(e);for(let r of e){let n=r.match(/^(unauthenticated_)?write_(.*)$/);n&&o.add(`${n[1]??""}read_${n[2]}`)}return o}hasRequiredStoreAuthScopes(e,o){let r=this.expandImpliedStoreAuthScopes(e);return o.every(n=>r.has(n))}validConfig(e,o,r,n){let i=o.filter(s=>Array.isArray(s)?!s.some(a=>this.hasRequiredFlag(e,a,n)):!this.hasRequiredFlag(e,s,n)).map(s=>Array.isArray(s)?s.join(" or "):s);return i.length>0?(N({body:[`Missing required flags in environment configuration${r?` for ${r}`:""}:`,{list:{items:i}}]}),i):!0}hasRequiredFlag(e,o,r){return o==="password"&&r?!0:!!e[o]}errorOnGlobalPath(){let e=Y($(),"shopify.theme.toml"),o=_(e);I({body:["Can't use `--path` flag with multiple environments.",...o?["Configure each environment's theme path in your shopify.theme.toml file instead."]:["Run this command from the directory containing shopify.theme.toml.","No shopify.theme.toml found in current directory."]]})}async logAnalyticsData(e){if(!e)return;let o=X();await Z(()=>({store_fqdn_hash:K(e.storeFqdn),store_domain:e.storeFqdn,cmd_theme_timings:JSON.stringify(o.timings),cmd_theme_errors:JSON.stringify(o.errors),cmd_theme_retries:JSON.stringify(o.retries),cmd_theme_events:JSON.stringify(o.events)})),await ee(()=>({store_fqdn:e.storeFqdn}))}};export{G as a,we as b,Ae as c,wt as d,At as e,B as f,He as g,ze as h,Ye as i,Je as j,We as k,Ke as l,Qe as m,Ve as n,Xe as o,O as p,qe as q,le as r,ct as s,ut as t,mt as u,z as v};
|
package/dist/chunk-M2HQFHNO.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as p}from"./chunk-TBNEN73P.js";import{ra as i}from"./chunk-HB4YI2PF.js";import{A as f,B as d,E as m,H as l,V as a}from"./chunk-7YXHILW4.js";import{i as s}from"./chunk-4HBKQUKY.js";import{b as c}from"./chunk-QLHPTMIH.js";import{g as u}from"./chunk-VKWPEFWQ.js";u();function h(e){return[`'${e.name}'`,{subdued:`(#${e.id})`}]}function $(e){return{list:{items:e.map(h)}}}async function T(e,r="It doesn't seem like you're running this command in a theme directory.",o,n){if(e)return!0;if(n)return d({headline:o?`Environment: ${o}`:"",body:r}),!1;if(f({body:r}),c())throw new s("This command must run from a theme directory when user input is unavailable.","Run the command from a theme directory, or use `--force` to continue.");if(!a())return!0;let t=await m({message:"Do you want to proceed?"});return i(`theme-service:confirm-directory:${t}`),t}async function C(e,r,o){if(e.role!==p||o)return!0;if(!a())throw new s(`Can't ${r} on the live theme when user input is unavailable.`,"Use `--allow-live` to confirm that you want to continue.");let n=`You're about to ${r} on your live theme "${e.name}". This will make changes visible to customers. Are you sure you want to proceed?`,t=await m({message:n,confirmationMessage:"Yes, proceed with live theme",cancellationMessage:"No, cancel"});return i(`theme-service:confirm-live-theme:${t}`),t}async function x(e,r,o=!1){e.length>0&&await l(e,{renderOptions:{stdout:r??process.stderr},noProgressBar:o})}export{h as a,$ as b,T as c,C as d,x as e};
|
package/dist/chunk-M5WBYWSQ.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{a as P}from"./chunk-5SLKHURV.js";import{a as D}from"./chunk-MTBABHUB.js";import{Aa as m,Ba as _,Ha as L}from"./chunk-EEAY7HFW.js";import{b as A,c as $}from"./chunk-SUTVPAJF.js";import{A as R,z as F}from"./chunk-7YXHILW4.js";import{a as S}from"./chunk-AJMJQA4J.js";import{i}from"./chunk-4HBKQUKY.js";import{Aa as N,Ib as v,Xa as T,b as s,fb as O,ya as C}from"./chunk-62GA7XR3.js";import{b as Y}from"./chunk-I3J63RFV.js";import{c as l,f as d,h as b,i as E}from"./chunk-6IDEDOXW.js";import{e as H,g as c}from"./chunk-VKWPEFWQ.js";c();c();c();async function j({remoteApp:o,developerPlatformClient:e}){let t=await e.channelSpecExport(o);if(t.status===404)throw new i("The channel spec export endpoint is not available for this app.","Check that the app and organization are correct.");if(!t.ok){let r=typeof t.body?.reason=="string"?t.body.reason:void 0;if(t.status===426)throw new i(`Failed to fetch the channel spec export: ${r??"This version of the Shopify CLI is no longer supported."}`,"Upgrade the Shopify CLI and try again.");if(t.status===422)return{success:!1,reason:r??`http_${t.status}`};throw t.status===401||t.status===403?new i(`Failed to fetch the channel spec export: authentication failed (status ${t.status}).`,"Run `shopify auth logout` and try again."):new i(`Failed to fetch the channel spec export: the server responded with status ${t.status}.`,"Try again in a moment.")}let{handle:a,filename:p,toml:h,warnings:n}=t.body;if(typeof a!="string"||typeof p!="string"||typeof h!="string")throw new i("Failed to fetch the channel spec export: the response was missing required fields.");return{success:!0,handle:a,filename:p,toml:h,warnings:J(n)}}function J(o){return Array.isArray(o)?o.flatMap(e=>e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"?[e]:[]):[]}c();var k=s.object({code:s.string(),message:s.string()}),w=S({name:"ImportChannelConfigResult",schema:s.object({handle:s.string(),filename:s.string(),path:s.string(),toml:s.string(),warnings:s.array(k)}),definitions:{ChannelSpecExportWarning:k}});var u=l("extensions","channel-config"),pe=l(u,_),x="shopify.extension.toml",G=`name = "Channel config"
|
|
2
|
-
type = "${m}"
|
|
3
|
-
handle = "channel-config"
|
|
4
|
-
`,X=["extensions/*"],z={no_exportable_frozen_record:"This app doesn't have a channel spec that can be exported yet.",multiple_exportable_records:"This app has more than one channel spec, so it can't be exported automatically.",not_allowlisted:"This app isn't part of the channel spec export prototype yet.",contains_no_public_fields:"This app's channel spec has no public channel_config fields.",invalid_public_schema:"This app's channel spec doesn't match the public channel_config schema."};async function M(o){let{app:e,remoteApp:t,developerPlatformClient:a,force:p,json:h}=o,n=await j({remoteApp:t,developerPlatformClient:a});if(!n.success){let g=z[n.reason];throw g?new i(g):new i(`The channel spec for this app could not be exported (reason: ${n.reason}).`)}let{extensionDirectory:r,createExtension:y}=B(e),f=l(r,_,E(n.filename));if(!p&&await T(f))throw new i(`A channel spec already exists at ${d(e.directory,f)}.`,"Re-run with `--force` to replace it.");if(await N(b(f)),y&&await C(l(r,x),G),await C(f,n.toml),h){v(w.encode({handle:n.handle,filename:E(n.filename),path:d(e.directory,f),toml:n.toml,warnings:n.warnings}));return}n.warnings.forEach(g=>R({body:g.message})),F({headline:["Imported the channel spec for",{userInput:t.title},{char:"."}],body:["The spec was written to",{filePath:d(e.directory,f)},{char:"."},...y?["Also created",{filePath:d(e.directory,l(r,x))},"so the spec is included when your app is deployed."]:[]],nextSteps:["Review the generated spec and make any changes your channel needs.",["Run",{command:"shopify app dev"},"to try the spec on a development store before releasing it."],["Run",{command:"shopify app deploy"},"to deploy the spec as part of your app."]]})}function B(o){let e=o.allExtensions.filter(r=>r.type===m);if(e.length>1){let r=e.map(y=>d(o.directory,y.directory)).join(", ");throw new i(`This app has more than one ${m} extension (${r}).`,"Only one is allowed. Remove the extras and try again.")}if(e.length===1)return{extensionDirectory:e[0].directory,createExtension:!1};let t=o.configuration.extension_directories,a=t&&t.length>0?t:X;if(!a.some(r=>O(`${u}/${x}`,`${r}/*.extension.toml`)))throw new i(`Your shopify.app.toml only loads extensions from ${a.join(", ")}, so a new extension at ${u} wouldn't be deployed.`,`Create a ${m} extension in one of those directories with a ${x} like:
|
|
5
|
-
|
|
6
|
-
${G}
|
|
7
|
-
then re-run this command.`);let h=l(o.directory,u),n=o.allExtensions.find(r=>r.directory===h);if(n)throw new i(`${u} already contains a ${n.type} extension.`,"Move that extension to another directory, then re-run this command.");return{extensionDirectory:h,createExtension:!0}}var W=H(Y(),1);var I=class o extends P{static hidden=!0;static summary="Import your app's default channel spec as a channel_config extension.";static descriptionWithMarkdown="Imports the Shopify-authored channel spec for your app as a `channel_config` extension.\n\n The generated TOML only includes public `channel_config` fields. Review it, then deploy it with `shopify app deploy`.";static description=this.descriptionWithoutMarkdown();static get jsonOutputSchema(){return w}static flags={...A,...D,...$,force:W.Flags.boolean({description:"Overwrite the existing channel spec file without prompting.",env:"SHOPIFY_FLAG_FORCE",default:!1})};async run(){let{flags:e}=await this.parse(o),{app:t,remoteApp:a,developerPlatformClient:p}=await L({directory:e.path,clientId:e["client-id"],forceRelink:e.reset,userProvidedConfigName:e.config});return await M({app:t,remoteApp:a,developerPlatformClient:p,force:e.force,json:e.json}),{app:t}}};export{I as a};
|
package/dist/chunk-N47RQHEI.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Nb as d}from"./chunk-62GA7XR3.js";import{g as p}from"./chunk-VKWPEFWQ.js";p();import{spawn as m}from"child_process";function b(n=process.pid,s="SIGTERM",e=!0,i){$(n,s,e,i??(t=>{t&&d(`Failed to kill process ${n}: ${t}`)}))}function $(n,s,e,i){let o=typeof n=="number"?n.toString():n;if(!/^\d+$/.test(o)){i(new Error("pid must be a number"));return}let t={};t[o]=[];let r=new Set;switch(r.add(o),process.platform){case"win32":{m("taskkill",["/pid",o,"/T","/F"]).on("close",f=>{f===0?i():i(new Error(`taskkill exited with code ${f}`))});break}case"darwin":h(o,t,r,function(c){return m("pgrep",["-lfP",c])},function(){k(t,s,o,e,i)});break;default:h(o,t,r,function(c){return m("ps",["-o","pid command","--no-headers","--ppid",c])},function(){k(t,s,o,e,i)});break}}function k(n,s,e,i,o){let t=new Set;try{Object.keys(n).forEach(function(r){n[r].forEach(function(c){t.has(c)||(w(c,s),t.add(c))}),r===e&&i&&!t.has(r)&&(w(r,s),t.add(r))})}catch(r){o(r);return}o()}function w(n,s){try{process.kill(parseInt(n,10),s)}catch(e){if(e.code!=="ESRCH")throw e}}function h(n,s,e,i,o){let t=i(n),r="";t.stdout?.on("data",function(f){let a=f.toString("ascii");r+=a});let c=f=>{if(e.delete(n),f!==0){if(e.size===0){o();return}return}r.trim().split(`
|
|
2
|
-
`).forEach(function(a){let l=a.match(/^(\d+)\s(.*)$/);if(l){let u=l[1],E=l[2];s[n].push(u),s[u]=[],d(`Killing process ${u}: ${E}`),e.add(u),h(u,s,e,i,o)}})};t.on("close",c)}export{b as a};
|
package/dist/chunk-NRG2WPSM.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as m,d as f,e as p}from"./chunk-XAQUXFN5.js";import{d as c,f as w,j as T}from"./chunk-TBNEN73P.js";import{g as d}from"./chunk-LQSD25YS.js";import{F as u}from"./chunk-7YXHILW4.js";import{i as l}from"./chunk-4HBKQUKY.js";import{X as i}from"./chunk-62GA7XR3.js";import{g as s}from"./chunk-VKWPEFWQ.js";s();async function A(e,r){let n=await m(e),t=new p(r.filter),a=e.storeFqdn;if(t.any())return f(a,n,t)[0];let y=r.header??"",h=n.map(o=>{let S=o.id.toString()===d()?" [current]":"";return{value:async()=>o,label:`${o.name}${S}`,group:i(o.role)}});return r.create&&h.unshift(g(e)),(await u({message:y,choices:h}))()}async function B(e,r){return(await m(e)).find(t=>t.id.toString()===r)}async function C(e,r){let n=await m(e),t=new p(r),a=e.storeFqdn;return t.any()?f(a,n,t):[]}function g(e){return{value:async()=>{let r=c,n=await w("Name of the new theme"),t=await T({name:n,role:r},e);if(!t)throw new l("The theme could not be created.");return t},label:"[Create a new theme]",group:i(c)}}export{A as a,B as b,C as c};
|
package/dist/chunk-O2CP7DQE.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as v}from"./chunk-32VQQ6EU.js";import{b as y,c as P,d as b}from"./chunk-2QENUJVG.js";import{a as F}from"./chunk-OHJUEUSA.js";import{a as m}from"./chunk-MTBABHUB.js";import{Ia as x}from"./chunk-EEAY7HFW.js";import{b as d,c as h}from"./chunk-SUTVPAJF.js";import{F as g,M as l}from"./chunk-7YXHILW4.js";import{Nb as n}from"./chunk-62GA7XR3.js";import{b as _}from"./chunk-I3J63RFV.js";import{e as U,g as u}from"./chunk-VKWPEFWQ.js";u();var i=U(_(),1);var a="_start",s=class w extends F{static summary="Run a function locally for testing.";static descriptionWithMarkdown="Runs the function from your current directory for [testing purposes](https://shopify.dev/docs/apps/functions/testing-and-debugging). To learn how you can monitor and debug functions when errors occur, refer to [Shopify Functions error handling](https://shopify.dev/docs/api/functions/errors).";static description=this.descriptionForHelp();static flags={...d,...m,...y,...h,input:i.Flags.string({char:"i",description:"The input JSON to pass to the function. If omitted, standard input is used.",env:"SHOPIFY_FLAG_INPUT"}),export:i.Flags.string({char:"e",hidden:!1,description:"Name of the WebAssembly export to invoke.",env:"SHOPIFY_FLAG_EXPORT"}),profile:i.Flags.boolean({description:"Generate a WebAssembly performance profile for the function run. The profile can be viewed in Speedscope.",env:"SHOPIFY_FLAG_PROFILE"})};async run(){let{flags:t}=await this.parse(w),o=a,{app:p}=await x({directory:t.path,userProvidedConfigName:t.config}),e=await P(p,t.path);if(t.export!==void 0)n(`Using export ${t.export} from the --export flag.`),o=t.export;else if(e.configuration.targeting!==void 0&&e.configuration.targeting.length>0){let r=e.configuration.targeting;if(r.length>1&&l({})){let O=r.map(f=>({label:f.target,value:f.export||a}));o=await g({message:"Which target would you like to execute?",choices:O})}else o=r?.[0]?.export||a,n(`Using export '${o}'. Use the --export flag or an interactive terminal to select a different export.`)}else n(`No targeting information found. Using the default export '${o}'. Use the --export flag or an interactive terminal to select a different export.`);let c=e?.configuration.targeting?.[0]?.input_query,T=c&&`${e?.directory}/${c}`,A=await b(e,t.path,t["client-id"],t.reset,t.config);return await v({functionExtension:e,json:t.json,inputPath:t.input,export:o,stdin:"inherit",schemaPath:A,queryPath:T,profile:t.profile}),{app:p}}};export{s as a};
|
package/dist/chunk-O6FXUKI2.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as N,b as $,c as w}from"./chunk-EZG5EB7D.js";import{j as T}from"./chunk-HB4YI2PF.js";import{a as D,b}from"./chunk-WGO2GC6I.js";import{S as P,T as k,a as F}from"./chunk-7YXHILW4.js";import{l as A}from"./chunk-4HBKQUKY.js";import{Ba as y,Da as _,Ma as U,Nb as u,Pa as I,R as x,Ta as O,Ya as p}from"./chunk-62GA7XR3.js";import{g as h}from"./chunk-PT3OZEBI.js";import{c as m,h as l,i as S}from"./chunk-6IDEDOXW.js";import{g as f}from"./chunk-VKWPEFWQ.js";f();f();import{fileURLToPath as q}from"url";import Y from"util";import{pipeline as j}from"stream";import{execSync as z,execFileSync as B}from"child_process";var H="2026.10.3",W=`https://github.com/cloudflare/cloudflared/releases/download/${H}/`,G={arm64:"cloudflared-linux-arm64",arm:"cloudflared-linux-arm",x64:"cloudflared-linux-amd64",ia32:"cloudflared-linux-386"},V={arm64:"cloudflared-darwin-arm64.tgz",x64:"cloudflared-darwin-amd64.tgz"},X={x64:"cloudflared-windows-amd64.exe",ia32:"cloudflared-windows-386.exe",arm64:"cloudflared-windows-amd64.exe"},v={linux:G,darwin:V,win32:X};function Z(r=process.platform,t=process.arch){if(!Object.keys(v).includes(r))throw new Error(`Unsupported system platform: ${r}`);let n=v[r][t];if(n===void 0)throw new Error(`Unsupported system arch: ${t}`);return W+n}function J(r=process.env,t=process.platform){return r.SHOPIFY_CLI_CLOUDFLARED_PATH?r.SHOPIFY_CLI_CLOUDFLARED_PATH:m(l(q(import.meta.url)),"..","bin",t==="win32"?"cloudflared.exe":"cloudflared")}async function g(r=process.env,t=process.platform,e=process.arch){if(r.SHOPIFY_CLI_IGNORE_CLOUDFLARED){u("Skipping cloudflared installation because SHOPIFY_CLI_IGNORE_CLOUDFLARED is set");return}let n=Z(t,e),o=J(r,t);if(p(o))try{let i=B(o,["--version"],{encoding:"utf8"}).split(" "),a=i.length>2?i[2]:"0.0.0";if(!K(H,a)){u("cloudflared already installed, skipping");return}}catch{u("version check failed, reinstalling")}if(t==="linux")await Q(n,o);else if(t==="darwin")await rt(n,o);else if(t==="win32")await tt(n,o);else throw new Error(`Unsupported platform: ${t}`)}function K(r,t){let[e,n,o]=r.split(".").map(Number),[i,a,c]=t.split(".").map(Number);return e!==i?(e??0)>(i??0):n!==a?(n??0)>(a??0):(o??0)>(c??0)}async function Q(r,t){await C(r,t),await O(t,"755")}async function tt(r,t){await C(r,t)}async function rt(r,t){await C(r,`${t}.tgz`);let e=S(`${t}.tgz`);z(`tar -xzf ${e}`,{cwd:l(t)}),U(`${t}.tgz`),await _(`${l(t)}/cloudflared`,t)}async function C(r,t){p(l(t))||y(l(t));let e=Y.promisify(j),n=await T(r,{redirect:"follow"},"slow-request");if(!n.ok||!n.body)throw new Error(`Couldn't download file ${r} (${n.status} ${n.statusText})`);let o=I(t);return await e(n.body,o),t}import{Writable as et}from"stream";import{fileURLToPath as nt}from"url";var $t=$({provider:w,action:it}),ot=h()?.2:40,st=5;async function it(r){try{let t=new R(r);return await t.startTunnel(),D(t)}catch(t){let e=new N("unknown",t.message);return b(e)}}var R=class{port;provider=w;currentStatus={status:"not-started"};abortController=void 0;constructor(t){this.port=t}async startTunnel(){try{await g(),this.tunnel()}catch(t){this.currentStatus={status:"error",message:t.message,tryMessage:d()}}}getTunnelStatus(){return this.currentStatus}stopTunnel(){this.abortController?.abort()}tunnel(t=0){this.abortController=new F;let e=!1;if(t>=st){e=!0,this.currentStatus={status:"error",message:"Could not start Cloudflare tunnel: max retries reached.",tryMessage:d()};return}let n=["tunnel","--url",`http://localhost:${this.port}`,"--no-autoupdate"],o=[],i=!1,a;this.currentStatus={status:"starting"},setTimeout(()=>{if(!e){e=!0;let s=x(o).slice(-5).join(`
|
|
2
|
-
`);s===""?this.currentStatus={status:"error",message:"Could not start Cloudflare tunnel: unknown error.",tryMessage:d()}:this.currentStatus={status:"error",message:s,tryMessage:d()},this.abortController?.abort()}},ot*1e3);let c=this,E=new et({write(s,mt,M){if(u(s.toString()),e)return;a??=at(s),ct(s)&&(i=!0),i&&(a?(e=!0,c.currentStatus={status:"connected",url:a}):c.currentStatus={status:"error",message:"Could not start Cloudflare tunnel: URL not found."});let L=lt(s);L&&o.push(L),M()}});P(dt(),n,{stdout:E,stderr:E,signal:this.abortController.signal,externalErrorHandler:async s=>{if(e)throw new A(`Could not start Cloudflare tunnel: process crashed after stablishing a connection: ${s.message}`,d());u(`Cloudflare tunnel crashed: ${s.message}, restarting...`),h()||await k(1),this.tunnel(t+1)}})}};function d(){return["You can run the command again, or try networking with Shopify via",{command:"--use-localhost"},"or",{command:"--tunnel-url <custom tunnel>"},".",{link:{label:"See documentation for details.",url:"https://shopify.dev/docs/apps/build/cli-for-apps/networking-options"}}]}function at(r){let t=new RegExp(`(https:\\/\\/[^\\s]+\\.${ft()})`),e=r.toString().match(t)??void 0;return e&&e[1]}function lt(r){if([/failed to request quick Tunnel/,/failed to unmarshal quick Tunnel/,/failed to parse quick Tunnel ID/,/failed to provision routing/,/ERR Couldn't start tunnel/,/ERR Failed to serve quic connection/,/ERR Failed to create new quic connection error/].some(n=>n.test(r.toString())))return`Could not start Cloudflare tunnel: ${ut(r.toString())}`}function ut(r){let t=/^[0-9TZ:-]+ (ERR )?/g,e=/connIndex.*/g;return r.replace(t,"").replace(e,"")}function ct(r){let t=r.toString().match(/(INF Registered tunnel connection|INF Connection)/)??void 0;return t&&t[0]}function dt(){return process.env.SHOPIFY_CLI_CLOUDFLARED_PATH?process.env.SHOPIFY_CLI_CLOUDFLARED_PATH:m(l(nt(import.meta.url)),"..","bin",process.platform==="win32"?"cloudflared.exe":"cloudflared")}function ft(){return process.env.SHOPIFY_CLI_CLOUDFLARED_DOMAIN??"trycloudflare.com"}export{$t as a};
|
package/dist/chunk-OHJUEUSA.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as o}from"./chunk-QBIYAMSH.js";import{g as e}from"./chunk-VKWPEFWQ.js";e();var t=class extends o{};export{t as a};
|
package/dist/chunk-OOKTWSGP.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{b as A}from"./chunk-SUTVPAJF.js";import{b as w}from"./chunk-DCKRQZLE.js";import{j as g}from"./chunk-HB4YI2PF.js";import{i as a}from"./chunk-4HBKQUKY.js";import{Aa as m,Ib as y,Kb as v,ya as u}from"./chunk-62GA7XR3.js";import{b as L}from"./chunk-I3J63RFV.js";import{e as h,h as f}from"./chunk-6IDEDOXW.js";import{e as x,g as s}from"./chunk-VKWPEFWQ.js";s();s();var U="text/markdown",b="X-Shopify-Surface",R="cli",F=["shopify.dev"];async function S(t,e,p){let c;try{c=new URL(t)}catch{throw new a(`Invalid URL: ${t}`)}let{hostname:d}=c;if(!F.some(o=>d===o||d.endsWith(`.${o}`)))throw new a(`Only documents from the following hosts can be fetched: ${F.join(", ")}.`);let i=await g(t,{headers:{Accept:U,[b]:R,...p?{"Accept-Language":p}:{}}});if(!i.ok)throw new a(`Failed to fetch ${t}: ${i.status} ${i.statusText}`);let l=await i.text();if(e){let o=h(e);await m(f(o)),await u(o,l),v(`Saved ${t} to ${o}`);return}y(l)}var n=x(L(),1),r=class t extends w{static description="Download a complete document from shopify.dev. Every page on shopify.dev has a Markdown version, and that is what this tool returns. Use this to pull an entire document verbatim \u2014 for example, a set of instructions an agent follows like a centrally-served skill. Pass `--language` for the language of the app you are building so code examples match your stack. For finding the relevant pieces of content across shopify.dev instead, use `doc search`.";static examples=[`# fetch the Markdown version of a Shopify.dev page
|
|
2
|
-
shopify doc fetch --url https://shopify.dev/docs/api/shopify-cli`,`# filter code examples to the language of the app you are building
|
|
3
|
-
shopify doc fetch --url https://shopify.dev/docs/api/shopify-cli --language ruby`,`# save the document to a file instead of printing it
|
|
4
|
-
shopify doc fetch --url https://shopify.dev/docs/api/shopify-cli --output docs/shopify-cli.md`];static flags={...A,url:n.Flags.string({description:"The shopify.dev URL to fetch.",env:"SHOPIFY_FLAG_URL",required:!0}),language:n.Flags.string({description:"Filter code examples in the returned Markdown to this language. Supply the language of the app you are building so examples match your stack. Optional \u2014 if omitted, or if shopify.dev does not recognize the language for a given page, the document includes examples in every language.",env:"SHOPIFY_FLAG_LANGUAGE",options:["javascript","typescript","python","ruby","php","rust","curl","liquid","graphql","html"]}),output:n.Flags.string({description:"Write the document to this file path instead of printing it to stdout.",env:"SHOPIFY_FLAG_OUTPUT"})};async run(){let{flags:e}=await this.parse(t);await S(e.url,e.output,e.language)}};export{r as a};
|
package/dist/chunk-OONMCK7X.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as u,b as l}from"./chunk-BAP2CHI2.js";import{f as d,i as m}from"./chunk-JM2CQP64.js";import{a as c}from"./chunk-5SLKHURV.js";import{Ha as p}from"./chunk-EEAY7HFW.js";import{i as s}from"./chunk-4HBKQUKY.js";import{g as e}from"./chunk-VKWPEFWQ.js";e();e();async function f({clientId:a,operationIds:t,getOperation:n=m}){return Promise.all(t.map(async i=>{let o=await n({clientId:a,operationId:i});if(!o)throw new s(`Migration operation not found: ${i}`);return o}))}var r=class a extends c{static summary="Checks the status of app subscription migration operations.";static descriptionWithMarkdown="Checks app subscription migration operation status.\n\nRepeat `--id` for every operation GID returned by a multi-batch submission. With `--watch`, the command displays the current state while polling and outputs the final state after all requested operations reach a terminal status.\n\n`RUNNING` means an operation is still processing. `COMPLETED` means processing finished, but you must inspect the per-shop results to confirm each outcome. `FAILED` means the operation failed, and `CANCELED` means cancellation stopped further processing.\n\nUse `--json` to output every operation and its per-shop results as structured JSON.\n\nRun the command from an app project. By default, it uses the Client ID from the active app configuration. Use `--path` to select an app directory or `--config` to select a configuration. Pass `--client-id` to select a different app within the project. Use `--reset` to relink the app.";static description=this.descriptionWithoutMarkdown();static examples=["<%= config.bin %> <%= command.id %> --id <operation-id>","<%= config.bin %> <%= command.id %> --path ../my-app --config staging --id <operation-id-1> --id <operation-id-2> --watch","<%= config.bin %> <%= command.id %> --client-id <client-id> --id <operation-id> --json"];static flags={...d};async run(){let{flags:t}=await this.parse(a),{app:n,remoteApp:i}=await p({directory:t.path,clientId:t["client-id"],forceRelink:t.reset,userProvidedConfigName:t.config}),o=t.watch?await l({clientId:i.apiKey,operationIds:t.id}):await f({clientId:i.apiKey,operationIds:t.id});return u(o,t.json),{app:n}}};export{r as a};
|
package/dist/chunk-OWK2RI4O.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{a as v}from"./chunk-J3JPJCWP.js";import{a as ue}from"./chunk-LMQOFVRC.js";import{b as ne,c as se,d as ie,e as ae,f as le,h as ce,i as me,k as de,l as fe,n as he}from"./chunk-KMJTO7CU.js";import{a as x}from"./chunk-S6A7TMR4.js";import{c as Z,e as b,m as ee,n as te}from"./chunk-FVTP7EO4.js";import{c as re,e as oe}from"./chunk-M2HQFHNO.js";import{k as P,l as X,n as w}from"./chunk-TBNEN73P.js";import{s as C,u as k}from"./chunk-LQSD25YS.js";import{a as Y,b as Q}from"./chunk-XPDHT3Z4.js";import{o as j,s as z,t as N,u as B,w as V}from"./chunk-Q7BOSHWX.js";import{na as L,ra as _}from"./chunk-HB4YI2PF.js";import{A as R,C as G,D as U,N as J,V as K,w as W,y as M,z as q}from"./chunk-7YXHILW4.js";import{b as $}from"./chunk-HILYTMVA.js";import{d as H,e as I}from"./chunk-MWWULCLD.js";import{i as y}from"./chunk-4HBKQUKY.js";import{Cb as g,Eb as T,Kb as E,Nb as u}from"./chunk-62GA7XR3.js";import{i as p}from"./chunk-B4OMIONW.js";import{g as f}from"./chunk-VKWPEFWQ.js";f();f();f();f();var pe={workPromise:Promise.resolve()};async function ye(e,t,o,r,n){if(o.length===0)return pe;u("Initiating theme asset reconciliation process");let{filesOnlyPresentLocally:i,filesOnlyPresentOnRemote:s,filesWithConflictingChecksums:l}=Se(o,r),a=i.length===0&&s.length===0&&l.length===0;if(_(`theme-service:theme-reconciliation:manual:${a}`),a)return u("Local and remote checksums match - no need to reconcile theme assets"),pe;let m=await Fe({filesOnlyPresentLocally:i,filesOnlyPresentOnRemote:s,filesWithConflictingChecksums:l},n);return{workPromise:Oe(e,t,r,m)}}function Se(e,t){let o=new Set,r=[],n=[];for(let s of e){o.add(s.key);let l=t.files.get(s.key);l?s.checksum!==l.checksum&&n.push(s):r.push(s)}let i=Array.from(t.files.values()).filter(s=>!o.has(s.key));return{filesOnlyPresentOnRemote:S(r,t),filesOnlyPresentLocally:S(i,t),filesWithConflictingChecksums:S(n,t)}}function S(e,t){return t.applyIgnoreFilters(e).filter(r=>r.key.endsWith(".json"))}async function A(e,t,o,r){if(e.length===0)return;if(r){Ae(e,o,r);return}M({body:{list:{title:t,items:e.map(i=>i.key)}}}),await U({message:"Reconciliation Strategy",choices:[{label:o.remote.label,value:D},{label:o.local.label,value:we}]})===D?o.remote.callback(e):o.local.callback(e)}function Ae(e,t,o){switch(o){case"keep-remote":t.remote.callback(e);break;case"keep-local":t.local.callback(e);break;case"abort":break}}function De(e){let t=[{title:"The files listed below are only present locally.",files:e.filesOnlyPresentLocally},{title:"The files listed below are only present on the remote theme.",files:e.filesOnlyPresentOnRemote},{title:"The files listed below differ between the local and remote versions.",files:e.filesWithConflictingChecksums}];throw new y("Theme JSON files need reconciliation.",t.filter(o=>o.files.length>0).map(o=>`${o.title}
|
|
2
|
-
${o.files.map(r=>`- ${r.key}`).join(`
|
|
3
|
-
`)}`).join(`
|
|
4
|
-
|
|
5
|
-
`))}async function Oe(e,t,o,r){let{localFilesToDelete:n,filesToDownload:i,remoteFilesToDelete:s}=r,l=n.map(d=>o.delete(d.key)),a=v(i,k,async d=>{let c=await P(e.id,d.map(h=>h.key),t);return Promise.all(c.map(h=>{if(h)return o.write(h)}))}),m=X(e.id,s.map(d=>d.key),t);await Promise.all([...l,...a,m])}async function Fe(e,t){let{filesOnlyPresentLocally:o,filesOnlyPresentOnRemote:r,filesWithConflictingChecksums:n}=e,{reconciliationStrategy:i}=t,s=[],l=[],a=[],m={filesOnlyPresentLocally:t.noDelete?[]:o,filesOnlyPresentOnRemote:r,filesWithConflictingChecksums:n},d=Object.values(m).some(c=>c.length>0);return i==="abort"&&d&&De(m),t.noDelete||await A(o,"The files listed below are only present locally. What would you like to do?",{remote:{label:"Delete files from the local directory",callback:c=>{s.push(...c)}},local:{label:"Upload local files to the remote theme",callback:()=>{}}},i),await A(r,"The files listed below are only present on the remote theme. What would you like to do?",{remote:{label:"Download remote files to the local directory",callback:c=>{l.push(...c)}},local:{label:"Delete files from the remote theme",callback:c=>{a.push(...c)}}},i),await A(n,"The files listed below differ between the local and remote versions. What would you like to do?",{remote:{label:"Keep the remote version",callback:c=>{l.push(...c)}},local:{label:"Keep the local version",callback:c=>{a.push(...c)}}},i),{localFilesToDelete:s,filesToDownload:l,remoteFilesToDelete:a}}f();var $e=3e3,O=class extends Error{};function ke(e,t,o,r,n,i){u("Listening for changes in the theme editor");let s=5,l=0,a="",m=o,d=async()=>{await new Promise(c=>setTimeout(c,$e)),m=await Le(e,t,m,r,n).then(c=>(l=0,a="",c)).catch(c=>{if(l++,c.message!==a&&(a=c.message,b("Error while polling for changes.",c)),l>=s){let h=new y("Too many polling errors...","Please check the errors above and ensure you have a stable internet connection.");G(h),i(h)}return m})};setTimeout(async()=>{for(;;)await d()})}async function Le(e,t,o,r,n){let i=new Set(r.unsyncedFileKeys),s=ge(o,r,i),l=await w(e.id,t).then(d=>ge(d,r,i)),a=He(s,l),m=_e(l,s);return await Me(r,a),await Ie(e,t,r,a),await We(r,m,n),l}function _e(e,t){let o=new Map(e.map(n=>[n.key,n]));return t.filter(n=>o.get(n.key)===void 0)}function He(e,t){let o=new Map(e.map(n=>[n.key,n]));return t.filter(n=>{let i=o.get(n.key);if(!i||i.checksum!==n.checksum)return!0})}async function Ie(e,t,o,r){let n=r.filter(s=>o.files.get(s.key)?.checksum!==s.checksum),i=v(n,k,async s=>P(e.id,s.map(l=>l.key),t).then(l=>Promise.all(l.map(async a=>{a&&(await o.write(a),E(T`• ${C.format(new Date)} Synced ${g.raw("\xBB")} ${g.gray(`download ${a.key} from remote theme`)}`))}))));await Promise.all(i)}async function We(e,t,o){if(!o.noDelete)return Promise.all(t.map(r=>{if(e.files.get(r.key))return e.delete(r.key).then(()=>{E(T`• ${C.format(new Date)} Synced ${g.raw("\xBB")} ${g.gray(`remove ${r.key} from local theme`)}`)})}))}async function Me(e,t){let o=new Map(e.files);await Promise.all(t.map(r=>e.read(r.key)));for(let r of t){let n=o.get(r.key)?.checksum,i=e.files.get(r.key)?.checksum;if(n!==i)throw new O(`Detected changes to the file '${r.key}' on both local and remote sources. Aborting...`)}}function ge(e,t,o){return t.applyIgnoreFilters(e).filter(n=>n.key.endsWith(".json")).filter(n=>!o.has(n.key))}var we="local",D="remote";async function Pe(e,t,o,r,n,i){u("Initiating theme asset reconciliation process"),await r.ready();let{workPromise:s}=await ye(e,t,o,r,n);return{updatedRemoteChecksumsPromise:s.then(async()=>{let a=await w(e.id,t);return ke(e,t,a,r,n,i),a}),workPromise:s}}import{createServer as qe}from"node:http";function be(e,t){let{promise:o,resolve:r,reject:n}=Promise.withResolvers(),i=ce(e,t),s=Ge(e,t,n),l=Promise.all([i,s.workPromise]).then(()=>t.localThemeFileSystem.startWatcher(e.id.toString(),t.session)),a=Je(e,t,l);return{workPromise:l,serverStart:a.start,dispatchEvent:a.dispatch,renderDevSetupProgress:s.renderProgress,backgroundJobPromise:o,resolveBackgroundJob:r}}function Ge(e,t,o){let r=a=>(b("Failed to perform the initial theme synchronization.",a),o(a),new Promise(()=>{})),i=w(e.id,t.session).then(a=>Ue(e,t,a,o)),s=i.then(async({updatedRemoteChecksumsPromise:a})=>{let m=await a;return ue(e,t.session,m,t.localThemeFileSystem,{nodelete:t.options.noDelete,deferPartialWork:!0,backgroundWorkCatch:r})});return{workPromise:s.then(a=>a.workPromise).catch(r),renderProgress:async()=>{if(t.options.themeEditorSync){let{workPromise:m}=await i;await oe([{title:"Performing file synchronization. This may take a while...",task:async()=>{await m}}])}let{renderThemeSyncProgress:a}=await s;await a()}}}function Ue(e,t,o,r){return t.options.themeEditorSync?Pe(e,t.session,o,t.localThemeFileSystem,{noDelete:t.options.noDelete,ignore:t.options.ignore,only:t.options.only,reconciliationStrategy:t.options.reconciliationStrategy},r):Promise.resolve({updatedRemoteChecksumsPromise:Promise.resolve(o),workPromise:Promise.resolve()})}function Je(e,t,o){let r=B(),n=[`http://${t.options.host}:${t.options.port}`,`https://${t.session.storeFqdn}`,"https://online-store-web.shopifyapps.com"];r.use(ae(t.options.host,t.options.port)),r.use(N(async()=>(await o,z(s=>{s.node.req.headers.origin&&j(s,{origin:a=>n.includes(a),credentials:!0,methods:["GET","POST","HEAD","OPTIONS"],preflight:{statusCode:204}})})))),t.options.liveReload!=="off"&&r.use(me(e,t)),r.use(ie(e,t)),r.use(ne(e,t)),r.use(se(e,t));let i=qe(V(r));return{dispatch:r.handler.bind(r),start:async()=>new Promise(s=>i.listen({port:t.options.port,host:t.options.host},()=>s({close:async()=>{await Promise.all([new Promise(l=>{i.closeAllConnections(),i.close(l)})])}})))}}import Ke from"readline";var je="127.0.0.1",ze=9292,ve=!1;async function er(e){if(!await he(e.directory)&&!await re(e.force))return;e.password?.startsWith("shpat_")&&R({headline:"Admin API token missing features:",body:["Directly using an Admin API token will result in some missing features.","We recommend generating a password from the Theme Access app.","Alternatively, you can authenticate normally by not passing the --password flag.",`
|
|
6
|
-
`,{list:{title:"Known limitations:",items:["Hot module reloading","Password protected storefronts"]}}],link:{label:"Theme Access app",url:"https://shopify.dev/docs/storefronts/themes/tools/theme-access"}}),e.listing&&await de(e.directory,e.listing);let[t,o]=await Promise.all([ee(e.adminSession),Z(e.adminSession)]),r=o?await x(e.storePassword,e.adminSession.storeFqdn,t):void 0,n=le(),i=fe(e.directory,{filters:e,listing:e.listing,noDelete:e.noDelete,notify:e.notify}),s=e.host??je,l;if(e.port){if(!await Q(e.port))throw new y(`Port ${e.port} is not available. Try a different port or remove the --port flag to use an available port.`);l=e.port}else l=await Y(ze);let a={local:`http://${s}:${l}`,giftCard:`http://${s}:${l}/gift_cards/[store_id]/preview`,themeEditor:`https://${e.store}/admin/themes/${e.theme.id}/editor?hr=${l}`,preview:`https://${e.store}/?preview_theme_id=${e.theme.id}`},d={session:await te(e.theme.id.toString(),e.adminSession,e.password,r,t),localThemeFileSystem:i,localThemeExtensionFileSystem:n,directory:e.directory,type:"theme",lastRequestedPath:"",options:{themeEditorSync:e["theme-editor-sync"],reconciliationStrategy:e.reconciliationStrategy,host:s,port:l,open:e.open,liveReload:e["live-reload"],standardEventsDevBundle:!0,standardEventsInspector:e["standard-events-inspector"],noDelete:e.noDelete,ignore:e.ignore,only:e.only,errorOverlay:e["error-overlay"]}},{serverStart:c,renderDevSetupProgress:h,backgroundJobPromise:Te,resolveBackgroundJob:Ee}=be(e.theme,d),F=K();if(F){Ke.emitKeypressEvents(process.stdin);let Ce=Be(a,d,Ee);process.stdin.on("keypress",Ce)}await Promise.all([Te,h().then(c).then(()=>{F&&process.stdin.setRawMode(!0),Ye(a),e.open&&Re(a.local,"development server")})]),await Ne(e.commandConfig,e.adminSession),process.exit(0)}async function Ne(e,t){if(!ve){ve=!0;try{await H(()=>({store_fqdn_hash:$(t.storeFqdn)})),await I(()=>({store_fqdn:t.storeFqdn})),await L({config:e,exitMode:"ok"})}catch{}}}function Be(e,t,o){let r=W(Re,100,{leading:!0,trailing:!1});return(n,i)=>{if(i.ctrl&&i.name==="c"){o();return}switch(i.name){case void 0:break;case"t":r(e.local,"localhost");break;case"p":r(e.preview,"theme preview");break;case"e":r(t.lastRequestedPath==="/"?e.themeEditor:`${e.themeEditor}&previewPath=${encodeURIComponent(t.lastRequestedPath)}`,"theme editor");break;case"g":r(e.giftCard,"gift card preview");break;default:break}}}function Re(e,t){J(e).catch(Ve(t))}function Ve(e){return t=>{R({headline:`Failed to open ${e}.`,body:t.stack??t.message})}}function Ye(e){q({body:[{list:{title:p.bold("Preview your theme ")+p.cyan("(t)"),items:[{link:{url:e.local}}]}}],nextSteps:[[{link:{label:`Share your theme preview ${p.cyan("(p)")}`,url:e.preview}},{subdued:e.preview}],[{link:{label:`Customize your theme at the theme editor ${p.cyan("(e)")}`,url:e.themeEditor}}],[{link:{label:`Preview your gift cards ${p.cyan("(g)")}`,url:e.giftCard}}]]})}export{er as a,Re as b};
|
package/dist/chunk-P2UEQJJ4.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{a as f}from"./chunk-VNG2I7NM.js";import{a as h}from"./chunk-5SLKHURV.js";import{a as c}from"./chunk-MTBABHUB.js";import{Ha as m}from"./chunk-EEAY7HFW.js";import{b as l}from"./chunk-SUTVPAJF.js";import{u as a}from"./chunk-HB4YI2PF.js";import{z as p}from"./chunk-7YXHILW4.js";import{i as d}from"./chunk-4HBKQUKY.js";import{b as C}from"./chunk-I3J63RFV.js";import{e as g,g as s}from"./chunk-VKWPEFWQ.js";s();s();async function v(t){let e=t.appContextResult.developerPlatformClient,o=t.appContextResult.remoteApp,r=await e.devSessionDelete({shopFqdn:t.store.shopDomain,appId:o.id});if(r.devSessionDelete?.userErrors.length){let u=r.devSessionDelete.userErrors.map(w=>w.message).join(`
|
|
2
|
-
`);throw new d(`Failed to stop the dev preview: ${u}`)}p({headline:"Dev preview stopped.",body:[`The dev preview has been stopped on ${t.store.shopDomain} and the app's active version has been restored.`,"You can start it again with",{command:"shopify app dev"}]})}var i=g(C(),1);var n=class t extends h{static summary="Cleans up the dev preview from the selected store.";static descriptionWithMarkdown=`Stop the dev preview that was started with \`shopify app dev\`.
|
|
3
|
-
|
|
4
|
-
It restores the app's active version to the selected development store.
|
|
5
|
-
`;static description=this.descriptionForHelp();static flags={...l,...c,"client-id":i.Flags.string({hidden:!1,description:"The Client ID of your app. Use with --config to clean up the dev preview for a different app than the one it is linked to.",env:"SHOPIFY_FLAG_CLIENT_ID"}),store:i.Flags.string({hidden:!1,char:"s",description:"Store URL. Must be an existing development store.",env:"SHOPIFY_FLAG_STORE",parse:async e=>a(e)})};async run(){let{flags:e}=await this.parse(t),o=await m({directory:e.path,clientId:e["client-id"],forceRelink:e.reset,userProvidedConfigName:e.config}),r=await f({appContextResult:o,storeFqdn:e.store,forceReselectStore:e.reset});return await v({appContextResult:o,store:r}),{app:o.app}}};export{n as a};
|
package/dist/chunk-QBJ74XPX.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import{c as ee,e as ne,f as te,g as ie}from"./chunk-XE6EUHSS.js";import{a as J,c as Z,d as Q,e as X}from"./chunk-ZOE6WXW6.js";import{b as I}from"./chunk-MF7IHOM5.js";import{a as q}from"./chunk-5SLKHURV.js";import{a as j}from"./chunk-MTBABHUB.js";import{Ha as W,K as z,N as H,ea as K,g as Y}from"./chunk-EEAY7HFW.js";import{a as G}from"./chunk-LG6DGIFX.js";import{b as V}from"./chunk-SUTVPAJF.js";import{E as U,H as B,M as N,x as O,y as F,z as M}from"./chunk-7YXHILW4.js";import{d as L}from"./chunk-MWWULCLD.js";import{i as h,k as $}from"./chunk-4HBKQUKY.js";import{Aa as E,Db as S,Ga as R,Kb as A,P as D,Pb as C}from"./chunk-62GA7XR3.js";import{b as ce}from"./chunk-I3J63RFV.js";import{c as x,h as P}from"./chunk-6IDEDOXW.js";import{e as pe,g}from"./chunk-VKWPEFWQ.js";g();g();g();async function oe(e){let n,t;e.bundlePath&&(n=await X(e.developerPlatformClient,{id:e.apiKey,apiKey:e.apiKey,organizationId:e.organizationId}),await Q(n,e.bundlePath));let i={appManifest:e.appManifest,appId:e.appId,apiKey:e.apiKey,name:e.name,organizationId:e.organizationId,skipPublish:!e.release,message:e.message,versionTag:e.version,commitReference:e.commitReference};n&&(i.bundleUrl=n),e.appModules.length>0&&(i.appModules=e.appModules);let a=await e.developerPlatformClient.deploy(i);if(!a.appDeploy.appVersion){let o=ue(a.appDeploy.userErrors??[],e.appModuleRegistrationIds,e.appModules,{version:e.version});throw new h({bold:"Version couldn't be created."},null,[],o)}return a.appDeploy.userErrors?.length>0&&(t=a.appDeploy.userErrors.map(o=>o.message).join(", ")),{validationErrors:a.appDeploy.appVersion.appModuleVersions.filter(o=>o.validationErrors.length>0).map(o=>({uuid:o.registrationUuid,errors:o.validationErrors})),versionTag:a.appDeploy.appVersion.versionTag,location:a.appDeploy.appVersion.location,message:a.appDeploy.appVersion.message,deployError:t}}var w=`
|
|
2
|
-
Validation errors`,k=`
|
|
3
|
-
`;function ue(e,n,t,i={}){let a=l=>l.details?.some(y=>y.extension_id)??!1,s=(l,y)=>{let b=l.details?.find(_=>typeof _.extension_id<"u")?.extension_id??"";return Object.values(y).includes(b.toString())},o=l=>{let y=l.on?l.on[0]:void 0;return t.some(b=>b.uid===y?.user_identifier)},[d,u]=I(e,l=>o(l)),[p,c]=I(u,l=>a(l)),[m,r]=I(p,l=>s(l,n));return[...fe(c,{version:i.version}),...me(m,n),...he(r),...ge(d,t)]}function fe(e,n={}){return e.length>0?e.filter(t=>t.field&&t.field.includes("version_tag")&&t.message==="has already been taken").length>0&&n.version?[{body:["An app version with the name",{userInput:n.version},"already exists. Deploy again with a different version name."]}]:e.length===1?[{body:e[0]?.message??""}]:[{body:{list:{items:e.map(t=>t.message)}}}]:[]}function me(e,n){return e.reduce((t,i)=>{let a=(i.field??["unknown"]).join(".").replace("extension_points","extensions.targeting"),s=a==="base"?i.message:`${a}: ${i.message}`,o=i.details.find(r=>typeof r.extension_title<"u")?.extension_title,d=i.details.find(r=>typeof r.specification_identifier<"u")?.specification_identifier,u=i.details.find(r=>typeof r.extension_id<"u")?.extension_id?.toString(),c=Object.keys(n).find(r=>n[r]===u)??o;d==="webhook_subscription"&&(c="Webhook Subscription");let m=t.find(r=>r.title===c);if(m){let r=m.body,f=i.category==="invalid"?r.find(l=>l.list.title===w):r.find(l=>l.list.title===k);f?f.list.items.includes(s)||f.list.items.push(s):r.push({list:{title:i.category==="invalid"?w:k,items:[s]}})}else t.push({title:c,body:[{list:{title:i.category==="invalid"?w:k,items:[s]}}]});return t.forEach(r=>{r.body.sort((f,l)=>f.list.title===w?1:l.list.title===w?-1:0)}),t},[])}function ge(e,n){return e.reduce((t,i)=>{let s=(i.on?i.on[0]:void 0)?.user_identifier,o=n.find(r=>r.uid===s),d=s?`Extension with uid: ${s}`:"Unknown Extension",u=o?.handle??d,c=`${(i.field??["unknown"]).join(".")}: ${i.message}`,m=t.find(r=>r.title===u);if(m){let f=m.body.find(l=>l.list.title===w);f&&(f.list.items.includes(c)||f.list.items.push(c))}else t.push({title:u,body:[{list:{title:w,items:[c]}}]});return t},[])}function he(e){return e.reduce((n,t)=>{let i=t.details.find(s=>typeof s.extension_title<"u")?.extension_title,a=n.find(s=>s.title===i);return a?a.errorCount+=1:n.push({title:i,errorCount:1}),n},[]).map(n=>({title:n.title,body:`
|
|
4
|
-
${n.errorCount} error${n.errorCount>1?"s":""} found in your extensions. Fix these issues and try deploying again.`}))}g();async function ae(e){let n=x(e.app.directory,".shopify","deploy-bundle");await R(n,{force:!0}),await E(n),await J(e.appManifest,n),e.skipBuild||await Y(e.app);let t=e.app.allExtensions.map(a=>({prefix:a.localIdentifier,action:async(s,o,d)=>{await a.buildForBundle({stderr:o,stdout:s,signal:d,app:e.app,environment:"production",skipBuild:e.skipBuild},n)}}));if(await O({processes:t,showTimestamps:!1}),e.app.allExtensions.some(a=>a.hasDeploySteps))return await Z(n,e.bundlePath),e.bundlePath}async function ye(e){let{app:n,remoteApp:t,developerPlatformClient:i,noRelease:a,allowUpdates:s,allowDeletes:o,extensions:d}=e,u=[a,s,o].some(Boolean),p=[`App can't be deployed until Partner Dashboard managed extensions are added to your version or removed from your app:
|
|
5
|
-
`,d.map(f=>` - ${f.title}`).join(`
|
|
6
|
-
`)],c=[`
|
|
7
|
-
|
|
8
|
-
Run `,{command:"shopify app import dashboard-extensions"}," to add legacy extensions."];if(u||!N())throw new h(p,c);let m=[`
|
|
9
|
-
|
|
10
|
-
Run `,{command:"shopify app import dashboard-extensions"}," to add legacy extensions now?"];if(await U({message:[...p,...m],confirmationMessage:"Yes, add legacy extensions and deploy",cancellationMessage:"No, don't add legacy extensions"}))return await te({app:n,remoteApp:t,developerPlatformClient:i,extensions:d}),z(n);throw new $}async function ve(e){let{app:n,remoteApp:t,developerPlatformClient:i}=e,a=await ie({developerPlatformClient:i,apiKey:t.apiKey,organizationId:t.organizationId,extensionTypes:ee,onlyDashboardManaged:!0}),s=ne(e.app,a);return s.length===0?n:ye({...e,extensions:s})}async function se(e){let{remoteApp:n,developerPlatformClient:t,noRelease:i,allowUpdates:a,allowDeletes:s}=e,o=await ve({app:e.app,remoteApp:n,developerPlatformClient:t,noRelease:i,allowUpdates:a,allowDeletes:s}),{deployIdentifiers:d,didMigrateExtensionsToDevDash:u}=await K({...e,app:o,developerPlatformClient:t,allowUpdates:a,allowDeletes:s}),p=!i,c=n.apiKey;C(),p?A(`Releasing a new app version as part of ${n.title}`):A(`Creating a new app version as part of ${n.title}`),C();let m,r=x(e.app.directory,".shopify",`deploy-bundle.${t.bundleFormat}`);await E(P(r));let f=await o.manifest(be(o,d.appModuleUuids)),l=await ae({app:o,appManifest:f,bundlePath:r,skipBuild:e.skipBuild}),y;return p?y="Releasing an app version":y="Creating an app version",await B([{title:"Running validation",task:async()=>{await o.preDeployValidation()}},{title:y,task:async()=>{let _=await Promise.all(o.allExtensions.flatMap(de=>de.bundleConfig({appModuleUuids:d.appModuleUuids,developerPlatformClient:t,apiKey:c,appConfiguration:o.configuration})));m=await oe({appManifest:f,appId:n.id,apiKey:c,name:o.name,organizationId:n.organizationId,bundlePath:l,appModules:D(_),release:p,developerPlatformClient:t,appModuleRegistrationIds:d.appModuleRegistrationIds,message:e.message,version:e.version,commitReference:e.commitReference})}}]),await we({app:o,project:e.project,release:p,uploadExtensionsBundleResult:m,didMigrateExtensionsToDevDash:u}),{app:o}}async function we({app:e,project:n,release:t,uploadExtensionsBundleResult:i,didMigrateExtensionsToDevDash:a}){let s=[{link:{label:i.versionTag??"version",url:i.location}},i.message?`
|
|
11
|
-
${i.message}`:""],o=[];if(a){let d=await H(e.directory),u=Object.values(d).filter(c=>c!==d[e.configuration.client_id]),p=[];u.length>0&&p.push("\u2022 Map extension IDs to other copies of your app by running",{command:S(n.packageManager,"shopify app deploy")},"for: ",{list:{items:u}}),p.push("\u2022 Commit to source control to ensure your extension IDs aren't regenerated on the next deploy."),o=[{title:"Next steps",body:p},{title:"Reference",body:["\u2022 ",{link:{label:"Migrating from the Partner Dashboard",url:"https://shopify.dev/docs/apps/build/dev-dashboard/migrate-from-partners"}}]}]}return t?i.deployError?F({headline:"New version created, but not released.",body:[...s,`
|
|
12
|
-
|
|
13
|
-
${i.deployError}`],customSections:o}):M({headline:"New version released to users.",body:s,customSections:o}):M({headline:"New version created.",body:s,customSections:o,nextSteps:[["Run",{command:S(n.packageManager,"shopify app release",`--version=${i.versionTag}`)},"to release this version to users."]]})}function be(e,n){return Object.fromEntries(e.allExtensions.filter(t=>t.isUUIDStrategyExtension).map(t=>[t.localIdentifier,n[t.localIdentifier]]))}g();function re(e){if(typeof e>"u")return;let n=["Invalid version name:",{userInput:e}],t=100;if(e.length>t)throw new h(n,`Version name must be ${t} characters or less.`);let i=[".",".."];if(i.find(s=>e===s))throw new h(n,`Version name may not be any of: ${i.map(s=>`'${s}'`).join(" , ")}`);let a=/^[a-zA-Z0-9.\-_]+$/;if(!e.match(a))throw new h(n,["Version name can only contain alphanumeric characters, periods, hyphens, and underscores"])}g();function le(e){if(typeof e>"u")return;let n=["Invalid message:",{userInput:e}],t=200;if(e.length>t)throw new h(n,`Message name must be ${t} characters or less.`)}var v=pe(ce(),1);var T=class e extends q{static summary="Deploy your Shopify app.";static descriptionWithMarkdown=`[Builds the app](https://shopify.dev/docs/api/shopify-cli/app/app-build), then deploys your app configuration and extensions.
|
|
14
|
-
|
|
15
|
-
This command creates an app version, which is a snapshot of your app configuration and all extensions. This version is then released to users.
|
|
16
|
-
|
|
17
|
-
This command doesn't deploy your [web app](https://shopify.dev/docs/apps/tools/cli/structure#web-components). You need to [deploy your web app](https://shopify.dev/docs/apps/deployment/web) to your own hosting solution.
|
|
18
|
-
`;static description=this.descriptionForHelp();static flags={...V,...j,"client-id":v.Flags.string({hidden:!1,description:"The Client ID of your app. Use with --config to deploy that configuration to a different app than the one it is linked to.",env:"SHOPIFY_FLAG_CLIENT_ID"}),"allow-updates":v.Flags.boolean({hidden:!1,description:"Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments. In non-interactive environments, provide this flag, --allow-deletes, or --no-release.",env:"SHOPIFY_FLAG_ALLOW_UPDATES"}),"allow-deletes":v.Flags.boolean({hidden:!1,description:"Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates. In non-interactive environments, provide this flag, --allow-updates, or --no-release.",env:"SHOPIFY_FLAG_ALLOW_DELETES"}),"no-release":v.Flags.boolean({hidden:!1,description:"Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required. In non-interactive environments, provide this flag, --allow-updates, or --allow-deletes.",env:"SHOPIFY_FLAG_NO_RELEASE",default:!1,exclusive:["allow-updates","allow-deletes"]}),"no-build":v.Flags.boolean({description:"Use with caution: Skips building any elements of the app that require building. You should ensure your app has been prepared in advance, such as by running `shopify app build` or by caching build artifacts.",env:"SHOPIFY_FLAG_NO_BUILD",default:!1}),message:v.Flags.string({hidden:!1,description:"Optional message that will be associated with this version. This is for internal use only and won't be available externally.",env:"SHOPIFY_FLAG_MESSAGE"}),version:v.Flags.string({hidden:!1,description:"Optional version tag that will be associated with this app version. If not provided, an auto-generated identifier will be generated for this app version.",env:"SHOPIFY_FLAG_VERSION"}),"source-control-url":v.Flags.string({hidden:!1,description:"URL associated with the new app version.",env:"SHOPIFY_FLAG_SOURCE_CONTROL_URL"})};static nonTTYFlagRequirements(){return[{flags:["allow-updates","allow-deletes","no-release"]}]}async run(){let{flags:n}=await this.parse(e);await G.addPublicMetadata(()=>({cmd_deploy_flag_message_used:!!n.message,cmd_deploy_flag_version_used:!!n.version,cmd_deploy_flag_source_url_used:!!n["source-control-url"]})),re(n.version),le(n.message);let t=n["client-id"];await L(()=>({cmd_app_reset_used:n.reset}));let{app:i,project:a,remoteApp:s,developerPlatformClient:o,organization:d}=await W({directory:n.path,clientId:t,forceRelink:n.reset,userProvidedConfigName:n.config}),u=n["no-release"]||n["allow-updates"],p=n["no-release"]||n["allow-deletes"];return{app:(await se({app:i,project:a,remoteApp:s,organization:d,developerPlatformClient:o,reset:n.reset,allowUpdates:u,allowDeletes:p,noRelease:n["no-release"],message:n.message,version:n.version,commitReference:n["source-control-url"],skipBuild:n["no-build"]})).app}}};export{T as a};
|
package/dist/chunk-QGFJOTOH.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{a as d}from"./chunk-5SLKHURV.js";import{a as f}from"./chunk-MTBABHUB.js";import{Da as c,Ha as s}from"./chunk-EEAY7HFW.js";import{b as r,f as a}from"./chunk-SUTVPAJF.js";import{i as n}from"./chunk-4HBKQUKY.js";import{b as u}from"./chunk-I3J63RFV.js";import{e as h,g as t}from"./chunk-VKWPEFWQ.js";t();var i=h(u(),1);var o=class l extends d{static summary="Fetch your app configuration from the Developer Dashboard.";static descriptionWithMarkdown=`Pulls app configuration from the Developer Dashboard and creates or overwrites a configuration file. You can create a new app with this command to start with a default configuration file.
|
|
2
|
-
|
|
3
|
-
For more information on the format of the created TOML configuration file, refer to the [App configuration](https://shopify.dev/docs/apps/tools/cli/configuration) page.
|
|
4
|
-
`;static description=this.descriptionForHelp();static flags={...r,...f,config:i.Flags.string({hidden:!1,char:"c",description:"The name of the local app configuration to read and overwrite. Use --file-name instead when specifying --client-id.",env:"SHOPIFY_FLAG_APP_CONFIG"}),"organization-id":i.Flags.string({hidden:!0,env:"SHOPIFY_FLAG_ORGANIZATION_ID",exclusive:["client-id"]}),"client-id":a(i.Flags.string({hidden:!1,description:"The Client ID of the remote app to link. Use --file-name to specify the destination configuration file.",env:"SHOPIFY_FLAG_CLIENT_ID"})),"file-name":i.Flags.string({hidden:!1,description:"The name of the app configuration file to create or overwrite. Requires --force to overwrite an existing file.",env:"SHOPIFY_FLAG_APP_CONFIG_FILE_NAME",exclusive:["config"]}),force:i.Flags.boolean({hidden:!1,description:"Overwrite an existing configuration file without prompting.",env:"SHOPIFY_FLAG_FORCE",dependsOn:["file-name"]})};async run(){let{flags:e}=await this.parse(l);if(e.config!==void 0&&e["client-id"]!==void 0)throw new n("The --config and --client-id flags can't be used together.","Use --file-name instead of --config to choose the configuration file to create or overwrite.");let p={directory:e.path,apiKey:e["client-id"],organizationId:e["organization-id"],configName:e.config,fileName:e["file-name"],force:e.force??!1},g=await c(p),{app:m}=await s({directory:e.path,clientId:void 0,forceRelink:!1,userProvidedConfigName:g.configFileName});return{app:m}}};export{o as a};
|
package/dist/chunk-RIO5HKD5.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as u,I as a,L as s,j as f,t as g,w as h,z as y}from"./chunk-VG5ZDVDQ.js";import{i as o}from"./chunk-4HBKQUKY.js";import{i as d}from"./chunk-6IDEDOXW.js";import{g as p}from"./chunk-VKWPEFWQ.js";p();async function k(t,e){let r=u(t);if(await h(t.appDirectory,r))return;let{scan:n}=a(t,e);throw new o(`No app security check results for ${r} in ${t.appDirectory}.`,`Run \`${s(n)}\`.`)}async function T(t,e){await k(t,e);let r=g(t.appDirectory,u(t)),[n,i]=await Promise.all([b(r.deterministicFindingsPath,"deterministic"),b(r.agentFindingsPath,"agent")]),c=[S(n,"deterministic"),S(i,"agent")].filter(w=>w!==void 0);c.length>0&&D(c,a(t,e));let l=v(n),m=v(i);return{sources:{deterministic:l,agent:m},checks:f({deterministic:l?.document??null,agent:m?.document??null})}}async function b(t,e){return{path:t,result:await y(t,e)}}function S(t,e){if(t.result.status==="invalid")return{source:e,path:t.path,errors:t.result.errors}}function v(t){return t.result.status!=="ok"?null:{path:t.path,document:t.result.value}}function D(t,e){let r=t.length===1?"The app security check results could not be loaded because a results file is invalid.":"The app security check results could not be loaded because both results files are invalid.",n=[...t.map(i=>F(i.source,e,`${d(i.path)}.`)),["Or run",{command:s(e.clean)},"to delete both results files and start over."]];throw new o(r,null,n,t.map(R))}function F(t,e,r){return t==="deterministic"?["Run",{command:s(e.scan)},`to regenerate ${r}`]:["Have your coding agent run",{command:s(e.record)},`again to regenerate ${r}`]}function R(t){return{title:t.path,body:{list:{items:t.errors}}}}export{k as a,T as b};
|
package/dist/chunk-S7EKUSO6.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{c as g,g as h}from"./chunk-JM2CQP64.js";import{a as m}from"./chunk-5SLKHURV.js";import{Ha as d}from"./chunk-EEAY7HFW.js";import{i as f}from"./chunk-4HBKQUKY.js";import{Ib as s}from"./chunk-62GA7XR3.js";import{g as r}from"./chunk-VKWPEFWQ.js";r();r();var v=250,c=class extends Error{constructor(){super("Migratable subscriptions were not found"),this.name="MigratableSubscriptionsNotFoundError"}},l=class extends Error{constructor(t){super(t),this.name="MigrationListProtocolError"}};async function*b({clientId:i,status:t,getPage:n=h}){let e=new Set,a;for(;;){let p=await n({clientId:i,first:v,after:a,status:t});if(p===null)throw new c;if(yield p.subscriptions,!p.pageInfo.hasNextPage)return;let{endCursor:o}=p.pageInfo;if(o===null||o.trim()==="")throw new l("Migratable subscription page has no cursor for its next page");if(e.has(o))throw new l(`Migratable subscription pagination repeated cursor: ${o}`);e.add(o),a=o}}r();var w="shop_id,status,manual_subscription_name,manual_subscription_price_amount,manual_subscription_price_currency_code,manual_subscription_interval,target_plan_handle,notification_kind,notification_opt_out_deadline,notification_sent_at,price_behavior,effective_date,last_failure_reason";function y(i){return JSON.stringify({schemaVersion:1,subscriptions:i},null,2)}async function _({pages:i,json:t}){t?s(y(await S(i))):await C(i)}async function S(i){let t=[];for await(let n of i)t.push(...n);return t}async function C(i){let t=!1;for await(let n of i){let e=x(n);t?e.length>0&&s(e.join(`
|
|
2
|
-
`)):(s([w,...e].join(`
|
|
3
|
-
`)),t=!0)}t||s(w)}function x(i){return i.map(t=>[t.shopId,t.status,t.manualSubscriptionName,t.manualSubscriptionPrice?.amount,t.manualSubscriptionPrice?.currencyCode,t.manualSubscriptionInterval,t.targetPlanHandle,t.notification?.kind,t.notification?.optOutDeadline,t.notification?.sentAt,t.priceBehavior,t.effectiveDate,t.lastFailureReason].map(E).join(","))}function E(i){let t=i??"";return/[",\r\n]/.test(t)?`"${t.replaceAll('"','""')}"`:t}var u=class i extends m{static summary="Lists app subscriptions eligible for migration.";static descriptionWithMarkdown="Lists every app subscription eligible for migration.\n\nBy default, the command writes CSV to stdout, streaming each page of results as it arrives. If a later page fails, the rows already written remain valid CSV. Use `--json` to fetch all pages first and then write a single versioned JSON envelope to stdout. Use shell redirection to save either format, for example `shopify app subscription-migrations list > subscriptions.csv` or `shopify app subscription-migrations list --json > subscriptions.json`.\n\nUse `--status` to filter subscriptions by migration status. Supported values are `UNSCHEDULED`, `SCHEDULED`, and `MIGRATED`.\n\nRun the command from an app project. By default, it uses the Client ID from the active app configuration. Use `--path` to select an app directory or `--config` to select a configuration. Pass `--client-id` to select a different app within the project. Use `--reset` to relink the app.";static description=this.descriptionWithoutMarkdown();static examples=["<%= config.bin %> <%= command.id %>","<%= config.bin %> <%= command.id %> --status SCHEDULED > scheduled-subscriptions.csv","<%= config.bin %> <%= command.id %> --json","<%= config.bin %> <%= command.id %> --json > subscriptions.json","<%= config.bin %> <%= command.id %> --client-id <client-id> > subscriptions.csv"];static flags={...g};async run(){let{flags:t}=await this.parse(i),{app:n,remoteApp:e}=await d({directory:t.path,clientId:t["client-id"],forceRelink:t.reset,userProvidedConfigName:t.config});try{let a=b({clientId:e.apiKey,status:t.status});await _({pages:a,json:t.json})}catch(a){throw a instanceof c?new f("App not found"):a}return{app:n}}};export{u as a};
|
package/dist/chunk-SJ2ROSXG.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as d,b as f,c as g,d as x,g as C}from"./chunk-XE6EUHSS.js";import{a as c}from"./chunk-5SLKHURV.js";import{a as l}from"./chunk-MTBABHUB.js";import{Ha as m}from"./chunk-EEAY7HFW.js";import{b as p}from"./chunk-SUTVPAJF.js";import{z as s}from"./chunk-7YXHILW4.js";import{b as I}from"./chunk-I3J63RFV.js";import{e as y,g as a}from"./chunk-VKWPEFWQ.js";a();var h=y(I(),1);var o=class u extends c{static description="Import dashboard-managed extensions into your app.";static flags={...p,...l,"client-id":h.Flags.string({hidden:!1,description:"The Client ID of your app.",env:"SHOPIFY_FLAG_CLIENT_ID",exclusive:["config"]})};async run(){let{flags:i}=await this.parse(u),e=await m({directory:i.path,clientId:i["client-id"],forceRelink:i.reset,userProvidedConfigName:i.config}),t=await C({developerPlatformClient:e.developerPlatformClient,apiKey:e.remoteApp.apiKey,organizationId:e.remoteApp.organizationId,extensionTypes:g}),n=d(t);if(n.length===0)s({headline:["No extensions to migrate."]});else{let r=await f(n);await x({...e,extensions:t,extensionTypes:r.extensionTypes,buildExtensionConfig:r.buildExtensionConfig})}return{app:e.app}}};export{o as a};
|