UNPKG

@shopify/cli

Version:

A CLI tool to build for the Shopify platform

18 lines (17 loc) • 5.58 kB
import{a as A,h as $,k as b}from"./chunk-OY3PNHPZ.js";import{e as w,f as v}from"./chunk-K6CTUBFC.js";import{e as y}from"./chunk-GVQIPEZT.js";import{l as E,m as C}from"./chunk-CBXSPL4W.js";import{xa as T}from"./chunk-XONFGLJQ.js";import{Qb as p}from"./chunk-N5PQPIBF.js";import{g as S}from"./chunk-VPRTJUIN.js";S();var P=20,_=1024*1024,B=2;function oe(t,e,r,o,s={},l){let n=A(r),i=new Map,c=a=>a.total===0?"[100%]":`[${Math.round(a.current/a.total*100)}%]`,u=j(t,e,n),f=Promise.all([o.ready(),u]).then(()=>L(n,o,t,e,i)),h=f.then(a=>a.promise).then(()=>M(n,o,t,e,s,i)),k=s?.deferPartialWork?u:h.then(a=>a.promise);return s?.backgroundWorkCatch&&Promise.all([u,f.then(a=>a.promise),h.then(a=>a.promise)]).catch(s.backgroundWorkCatch),{uploadResults:i,workPromise:k,renderThemeSyncProgress:async()=>{if(s?.deferPartialWork)return;let{progress:a,promise:m}=await f,d=s.multiEnvironment?4e3:1e3;await y(U({promise:m,titleGetter:()=>`Uploading files to remote theme ${c(a)}`,updateInterval:d}),l?.stderr,s?.multiEnvironment);let{progress:g,promise:F}=await h;await y(U({promise:F,titleGetter:()=>`Cleaning your remote theme ${c(g)}`,updateInterval:d}),l?.stderr,s?.multiEnvironment),await y([{title:"Theme upload complete",task:async()=>{}}],l?.stderr,s?.multiEnvironment),N(i,s?.environment)}}}function U({promise:t,titleGetter:e,updateInterval:r}){let o=[],s=()=>{o.push({title:e(),task:async()=>{await Promise.race([t,new Promise(n=>setTimeout(()=>n("timeout"),r))])==="timeout"&&s()}})};return s(),o}function M(t,e,r,o,s,l){if(s.nodelete)return{progress:{current:0,total:0},promise:Promise.resolve()};let n=W(t,e),i=z(n),c={current:0,total:i.length};if(i.length===0)return{progress:c,promise:Promise.resolve()};let u=[];for(let h=0;h<i.length;h+=P){let k=i.slice(h,h+P),a=E(r.id,k.map(m=>m.key),o).then(m=>{m.forEach(d=>{if(l.set(d.key,d),!d.success){let g=d.errors?.asset?.map(F=>`-${F}`).join(` `);v(d.key,"delete")(new Error(`Failed to delete ${d.key}: ${g}`))}}),c.current+=k.length});u.push(a)}let f=Promise.all(u).then(()=>{c.current=c.total});return{progress:c,promise:f}}function W(t,e){let o=e.applyIgnoreFilters(t).filter(s=>!e.files.has(s.key));return p(`Files to be deleted: ${o.map(s=>`-${s.key}`).join(` `)}`),o}function z(t){let e=b(t);return[...e.contextualizedJsonFiles,...e.templateJsonFiles,...e.sectionJsonFiles,...e.otherJsonFiles,...e.sectionLiquidFiles,...e.blockLiquidFiles,...e.layoutFiles,...e.otherLiquidFiles,...e.configDataFile,...e.configSchemaFile,...e.staticAssetFiles]}var J=[{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 j(t,e,r){let o=new Set(r.map(l=>l.key)),s=J.filter(({key:l})=>!o.has(l));s.length>0&&await C(t.id,s,e)}function L(t,e,r,o,s){let l=x(e,t);e.unsyncedFileKeys.clear(),l.forEach(a=>e.unsyncedFileKeys.add(a.key));let{independentFiles:n,dependentFiles:i}=D(l),c={current:0,total:l.length},u=a=>a.length===0?Promise.resolve():Promise.all(q(a).map(m=>O(m,e,o,r.id,s).then(()=>{c.current+=m.length,m.forEach(d=>e.unsyncedFileKeys.delete(d.key))}))).then(()=>{}),f=i.reduce((a,m)=>a.then(()=>u(m)),Promise.resolve()),h=Promise.resolve().then(()=>u(n.flat())),k=Promise.all([f,h]).then(()=>{c.current=c.total});return{progress:c,promise:k}}function x(t,e){let r=I(t),o=t.applyIgnoreFilters(r),s=new Map(e.map(n=>[n.key,n])),l=o.filter(n=>{let i=s.get(n.key);return!i||i.checksum!==n.checksum});return p(`Files to be uploaded: ${l.map(n=>`-${n.key}`).join(` `)}`),l}function D(t){let e=b(t);return{independentFiles:[e.otherLiquidFiles,e.otherJsonFiles,e.staticAssetFiles],dependentFiles:[e.configSchemaFile,e.layoutFiles,e.blockLiquidFiles,e.sectionLiquidFiles,e.sectionJsonFiles,e.templateJsonFiles,e.contextualizedJsonFiles,e.configDataFile]}}function q(t){let e=[],r=[],o=0;for(let s of t){let l=r.length>=P,n=o>=_;(l||n)&&(e.push(r),r=[],o=0),r.push(s),o+=s.size??0}return r.length>0&&e.push(r),e}function I(t){let e=[];return t.files.forEach((r,o)=>{let s=r.value?Buffer.byteLength(r.value,"utf8"):r.attachment?.length??0;e.push({key:o,checksum:r.checksum,size:s})}),e}async function O(t,e,r,o,s){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}}});p(`Uploading the following files: ${t.map(i=>`-${i.key}`).join(` `)}`),(await R(l,o,r)).forEach(i=>{s.set(i.key,i),G(i,e,o)})}function G(t,e,r){if(t.success)e.uploadErrors.delete(t.key);else{let o=t.errors?.asset??["Response was not successful."];e.uploadErrors.set(t.key,o),$(r,t.key)}}async function R(t,e,r,o=0){if(t.length===0)return[];o>0&&p(`Retry Attempt ${o}/${B} for the following files: ${t.map(n=>`-${n.key}`).join(` `)}`);let s=await C(e,t,r);p(`File Upload Results: ${s.map(n=>`-${n.key}: ${n.success?"success":"failure"}`).join(` `)}`);let l=s.filter(n=>!n.success);if(l.length>0){p(`The following files failed to upload: ${l.map(i=>`-${i.key}`).join(` `)}`);let n=await K(l,t,e,r,o);return s.concat(n)}return s}async function K(t,e,r,o,s){let l=new Set(t.map(i=>i.key)),n=e.filter(i=>l.has(i.key));return s===B?(T("theme-service:upload-failed-retry:max-retry"),p(`Max retry count reached for the following files: ${n.map(i=>`-${i.key}`).join(` `)}`),t):(T(`theme-service:upload-failed-retry:${n.length}`),R(n,r,o,s+1))}function N(t,e){for(let[r,o]of t.entries())if(!o.success){let s=o.errors?.asset?.join(` `)??"File upload failed",l=e?`[${e}] ${r}`:r;w(l,new Error(s))}}export{oe as a};