@shopify/cli
Version:
A CLI tool to build for the Shopify platform
3 lines (2 loc) • 9.09 kB
JavaScript
import{X as j,ha as H,ia as G,ja as w,ka as X,la as A,ma as B,na as v,oa as J,pa as F,qa as W,ra as k,sa as q,ta as R,ua as K}from"./chunk-54CAKCYR.js";import{b as T,e as $,l}from"./chunk-7ESSIN27.js";import{c as z}from"./chunk-4DCQNGUV.js";import{v as I,z as x}from"./chunk-6G6TMKXF.js";import{d as _,f as V}from"./chunk-M56NDIMD.js";import{$ as E,Ib as U,Ta as O,Y as a,qa as N,wa as S,ya as M}from"./chunk-N5PQPIBF.js";import{d as y,j as L}from"./chunk-IU2ZQ6TE.js";import{g as s}from"./chunk-VPRTJUIN.js";s();s();function Q(e){switch(e){case"payments_app":return w;case"payments_app_credit_card":return k;case"payments_app_custom_credit_card":return F;case"payments_app_custom_onsite":return v;case"payments_app_redeemable":return A;case"payments_app_card_present":return R}}function Y(e,i){let t=e.activeVersion?.context??e.draftVersion?.context??Q(e.type);switch(t){case w:return C(e,i,X);case k:return C(e,i,q);case F:return C(e,i,W);case v:return C(e,i,J);case A:return C(e,i,B);case R:return C(e,i,K);default:throw new Error(`Unsupported extension: ${t}`)}}function C(e,i,t){let o=(e.activeVersion??e.draftVersion)?.config;if(!o)throw new Error("No config found for extension");let r=JSON.parse(o),p=t(r,i);p&&delete p.api_version;let c=e.activeVersion?.context??e.draftVersion?.context??Q(e.type);return{api_version:r.api_version,extensions:[{name:e.title,type:"payments_extension",handle:a(e.title.substring(0,l)),...p,targeting:[{target:`${c}`}]}]}}s();s();var pe=new Map(G.map(e=>[e[1],e[0]])),ce=(e,i)=>{let t=pe.get(e.uiType);if(!t)throw new _(`Field type ${e.uiType} is not supported`);let n={key:e.name,description:e.description??void 0,type:t};return i==="flow_action_definition"&&(n.name=e.label,n.required=e.required),n},me=(e,i)=>{let o={type:i==="flow_action_definition"?`${e.name.replace("_id","")}_reference`:`${e.uiType}_reference`};return i==="flow_action_definition"&&(o.required=e.required),e.uiType==="marketing-activity-id"&&(o.marketingActivityCreateUrl=e.marketingActivityCreateUrl,o.marketingActivityDeleteUrl=e.marketingActivityDeleteUrl),o},Z=(e,i)=>i?i.map(n=>n.uiType==="commerce-object-id"||n.uiType==="marketing-activity-id"||H.includes(n.uiType)?me(n,e):ce(n,e)):[];function ee(e){let i=e.activeVersion?.config??e.draftVersion?.config;if(!i)throw new Error("No config found for extension");let t=e.type==="flow_action_definition"?"https://url.com/api/execute":void 0,n;if(e.type==="flow_trigger_discovery_webhook"){let o=JSON.parse(i);n={extensions:[{type:"flow_trigger_lifecycle_callback",name:e.title,handle:a(e.title.substring(0,l)),url:o.url}]}}else{let o=JSON.parse(i),r=Z(e.type,o.fields??[]);n={extensions:[{type:e.type.replace("_definition",""),name:o.title,handle:a(e.title.substring(0,l)),description:o.description,runtime_url:o.url??t,config_page_url:o.custom_configuration_page_url,config_page_preview_url:o.custom_configuration_page_preview_url,validation_url:o.validation_url}],settings:(r?.length??0)>0?{fields:r}:void 0}}return n}s();s();var ie=e=>{let i=e.split("#");if(i.length!==2||i.some(p=>p===""||p===void 0))throw new Error("Invalid context");let t="admin",n=ue(i[0]??""),o=de(i[1]??""),r="link";return o==="selection"?[t,`${n}-index`,`${o}-action`,r].join("."):[t,`${n}-${o}`,"action",r].join(".")},de=e=>{switch(e.toLocaleLowerCase()){case"show":return"details";case"index":return"index";case"action":return"selection";case"fulfilled_card":return"fulfilled-card";default:throw new Error(`Invalid context location: ${e}`)}},ue=e=>e.toLocaleLowerCase()==="variants"?"product-variant":E(e.toLocaleLowerCase().replace(new RegExp("(s)$"),""));function te(e,i,t){let n=e.activeVersion?.config??e.draftVersion?.config;if(!n)throw new Error("No config found for extension");let o=e.activeVersion?.context??e.draftVersion?.context;if(!o)throw new Error("No context found for link extension");let r=JSON.parse(n);if(t.embedded)try{let c=new URL(r.url),m=c.pathname.startsWith("/")?c.pathname.substring(1):c.pathname,d=new URL(`app://${m}`);d.search=c.search,d.hash=c.hash,r.url=d.toString()}catch{}return{extensions:[{type:"admin_link",name:r.text,handle:a(e.title.substring(0,l)),targeting:[{url:r.url,target:ie(o)}]}]}}s();var fe={facebook:"social",instagram:"social",google:"search",pinterest:"social",bing:"search",email:"email",snapchat:"social",sms:"sms",verizon_media:"display",ebay:"marketplace",tiktok:"social",flow:"email"},ge={facebook:"facebook.com",instagram:"instagram.com",google:"google.com",pinterest:"pinterest.com",bing:"bing.com",snapchat:"snapchat.com",verizon_media:null,email:null,sms:null,ebay:"ebay.com",tiktok:"tiktok.com",flow:null};function ye(e){let i=new URL(e);return i.pathname+i.search+i.hash}function ne(e){let i=e.activeVersion?.config??e.draftVersion?.config;if(!i)throw new Error("No config found for extension");let t=JSON.parse(i);return{extensions:[{type:"marketing_activity",name:e.title,handle:a(e.title.substring(0,l)),title:t.title,description:t.description,api_path:ye(t.app_api_url),tactic:t.tactic,marketing_channel:fe[t.platform]??"",referring_domain:ge[t.platform]??"",is_automation:t.is_automation,use_external_editor:t.use_external_editor,preview_data:t.preview_data,fields:t.fields.map(({id:o,...r})=>r)}]}}s();function oe(e){let i=e.activeVersion?.config??e.draftVersion?.config;if(!i)throw new Error("No config found for extension");let t=JSON.parse(i);return{extensions:[{type:"subscription_link_extension",name:e.title,handle:a(e.title.substring(0,l)),pattern:t.pattern}]}}var P=[{label:"Payments Extensions",value:"payments",extensionTypes:["payments_app","payments_app_credit_card","payments_app_custom_credit_card","payments_app_custom_onsite","payments_app_redeemable","payments_extension"],buildExtensionConfig:Y},{label:"Flow Extensions",value:"flow",extensionTypes:["flow_action_definition","flow_trigger_definition","flow_trigger_discovery_webhook"],buildExtensionConfig:ee},{label:"Marketing Activity Extensions",value:"marketing activity",extensionTypes:["marketing_activity_extension"],buildExtensionConfig:ne},{label:"Subscription Link Extensions",value:"subscription link",extensionTypes:["subscription_link","subscription_link_extension"],buildExtensionConfig:oe},{label:"Admin Link extensions",value:"link extension",extensionTypes:["app_link","bulk_action"],buildExtensionConfig:te}];function re(e){return P.filter(i=>i.extensionTypes.some(t=>e.some(n=>n.type.toLowerCase()===t.toLowerCase())))}async function yi(e){if(e.length===1&&e[0])return e[0];let i=e.map(o=>({label:o.label,value:o.value})),t=await x({message:"Extension type to migrate",choices:i}),n=e.find(o=>o.value===t);if(n===void 0)throw new _("Invalid migration choice");return n}s();var Di=P.flatMap(e=>e.extensionTypes);async function _e({name:e,app:i}){let t=E(e),n=y(i.directory,$.extensions.directoryName,t);if(await O(n)){let o=[{label:"Overwrite local TOML with remote configuration",value:"write"},{label:"Keep local TOML",value:"skip"},{label:"Cancel",value:"cancel"}],r=await x({message:`Directory "${t}" already exists. What would you like to do?`,choices:o});if(r==="cancel")throw new V;return{directory:n,action:r}}return await S(n),await N(y(n,T.lockFile)),{directory:n,action:"write"}}async function Ce(e){let{app:i,remoteApp:t,developerPlatformClient:n,extensionTypes:o,extensions:r,buildExtensionConfig:p,all:c}=e,m=r.filter(u=>o.includes(u.type.toLowerCase()));if(m=xe(i,m),m.length===0)throw new _("No extensions to migrate");if(!c){let u=m.map(g=>({label:g.title,value:g.uuid}));m.length>1&&u.push({label:"All",value:"All"});let f=await x({message:"Extensions to migrate",choices:u});f!=="All"&&(m=[m.find(g=>g?.uuid===f)])}let d={},b=m.map(async u=>{let{directory:f,action:g}=await _e({app:i,name:u.title}),se=a(u.title.substring(0,l));if(d[se]=u.uuid,g==="write"){let D=p(u,r,i.configuration),ae=y(f,"shopify.extension.toml");await new z(ae,D).replace(D);let le=y(f,T.lockFile);await M(le)}return{extension:u,directory:y("extensions",L(f))}}),h=await Promise.all(b);Ee(h),await j({app:i,identifiers:{extensions:d,app:t.apiKey},command:"import-extensions",developerPlatformClient:n})}function xe(e,i){let t=e.dotenv?.variables??{},n=e.allExtensions.map(o=>t[o.idEnvironmentVariableName]);return i.filter(o=>!n.includes(o.uuid))}async function Li(e){let i=re(e.extensions);await Promise.all(i.map(async t=>Ce({...e,extensionTypes:t.extensionTypes,buildExtensionConfig:t.buildExtensionConfig,all:!0})))}function Ee(e){I({headline:["Imported the following extensions from the dashboard:"],body:e.map(i=>U`• "${i.extension.title}" at: ${i.directory}`.value).join(`
`)})}s();async function Mi({developerPlatformClient:e,apiKey:i,organizationId:t,extensionTypes:n,onlyDashboardManaged:o=!1}){let r=await e.appExtensionRegistrations({id:i,apiKey:i,organizationId:t}),{dashboardManagedExtensionRegistrations:p,extensionRegistrations:c}=r.app;return(o?p:c.concat(p)).filter(d=>{let b=n.includes(d.type.toLowerCase()),h=d.activeVersion&&d.activeVersion.config,u=d.draftVersion&&d.draftVersion.config;return b&&(h??u)})}export{re as a,yi as b,Di as c,Ce as d,xe as e,Li as f,Mi as g};