commercebuild-cli 0.0.13 → 0.0.14
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/index.js +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -107,8 +107,8 @@ Store ID: ${i.store_id}
|
|
|
107
107
|
User ID: ${o?.user?.id}
|
|
108
108
|
User Email: ${o?.user?.email}
|
|
109
109
|
Customer: ${o?.user?.customer.customerCode||""} ${o.user?.customer.name||""}`,{padding:1}))}catch(e){t.fail(`${Te.red(`An error occurred: ${e.message||"An unknown issue was encountered."}`)}
|
|
110
|
-
Please try logging in again, or contact the administrator if the issue persists.`)}finally{process.exit()}});var Mr=G(require("fs")),An=G(require("path"));var ea=G(require("node:path"),1);var o5=G(require("node:process"),1),a5=G(require("node:path"),1),fp=G(require("node:fs"),1),u5=require("node:url");var Yy=class{value;next;constructor(e){this.value=e}},zu=class{#e;#t;#r;constructor(){this.clear()}enqueue(e){let r=new Yy(e);this.#e?(this.#t.next=r,this.#t=r):(this.#e=r,this.#t=r),this.#r++}dequeue(){let e=this.#e;if(e)return this.#e=this.#e.next,this.#r--,e.value}peek(){if(this.#e)return this.#e.value}clear(){this.#e=void 0,this.#t=void 0,this.#r=0}get size(){return this.#r}*[Symbol.iterator](){let e=this.#e;for(;e;)yield e.value,e=e.next}*drain(){for(;this.#e;)yield this.dequeue()}};function lp(t){if(!((Number.isInteger(t)||t===Number.POSITIVE_INFINITY)&&t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=new zu,r=0,n=()=>{r--,e.size>0&&e.dequeue()()},i=async(a,u,l)=>{r++;let c=(async()=>a(...l))();u(c);try{await c}catch{}n()},s=(a,u,l)=>{e.enqueue(i.bind(void 0,a,u,l)),(async()=>(await Promise.resolve(),r<t&&e.size>0&&e.dequeue()()))()},o=(a,...u)=>new Promise(l=>{s(a,l,u)});return Object.defineProperties(o,{activeCount:{get:()=>r},pendingCount:{get:()=>e.size},clearQueue:{value:()=>{e.clear()}}}),o}var cp=class extends Error{constructor(e){super(),this.value=e}},kse=async(t,e)=>e(await t),Use=async t=>{let e=await Promise.all(t);if(e[1]===!0)throw new cp(e[0]);return!1};async function Zy(t,e,{concurrency:r=Number.POSITIVE_INFINITY,preserveOrder:n=!0}={}){let i=lp(r),s=[...t].map(a=>[a,i(kse,a,e)]),o=lp(n?1:Number.POSITIVE_INFINITY);try{await Promise.all(s.map(a=>o(Use,a)))}catch(a){if(a instanceof cp)return a.value;throw a}}var l5={directory:"isDirectory",file:"isFile"};function Wse(t){if(!Object.hasOwnProperty.call(l5,t))throw new Error(`Invalid type specified: ${t}`)}var $se=(t,e)=>e[l5[t]](),Gse=t=>t instanceof URL?(0,u5.fileURLToPath)(t):t;async function Xy(t,{cwd:e=o5.default.cwd(),type:r="file",allowSymlinks:n=!0,concurrency:i,preserveOrder:s}={}){Wse(r),e=Gse(e);let o=n?fp.promises.stat:fp.promises.lstat;return Zy(t,async a=>{try{let u=await o(a5.default.resolve(e,a));return $se(r,u)}catch{return!1}},{concurrency:i,preserveOrder:s})}var c5=require("node:url");function Qy(t){return t instanceof URL?(0,c5.fileURLToPath)(t):t}var zse=Symbol("findUpStop");async function Vse(t,e={}){let r=ea.default.resolve(Qy(e.cwd)??""),{root:n}=ea.default.parse(r),i=ea.default.resolve(r,Qy(e.stopAt??n)),s=e.limit??Number.POSITIVE_INFINITY,o=[t].flat(),a=async l=>{if(typeof t!="function")return Xy(o,l);let c=await t(l.cwd);return typeof c=="string"?Xy([c],l):c},u=[];for(;;){let l=await a({...e,cwd:r});if(l===zse||(l&&u.push(ea.default.resolve(r,l)),r===i||u.length>=s))break;r=ea.default.dirname(r)}return u}async function f5(t,e={}){return(await Vse(t,{...e,limit:1}))[0]}var vi="https://australia-southeast1-xm-development.cloudfunctions.net/httpsExtension",h5=(t,e)=>{if(!t)return"- Unknown -";let r=parseInt(t.substring(0,4),10),n=parseInt(t.substring(4,6),10)-1,i=parseInt(t.substring(6,8),10),s=parseInt(t.substring(8,10),10),o=parseInt(t.substring(10,12),10),a=parseInt(t.substring(12,14),10);return new Date(r,n,i,s,o,a).toISOString().substring(0,19).replace("T"," ")+(e?" - "+e:"")};var Hse=async({name:t,description:e})=>{let r=await fetch(`${vi}?action=createExtension`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,description:e})}),{message:n,data:{extensionId:i}}=await r.json();if(i)return i;throw new Error(n||"Error: Unable to create extension.")};function d5(t,e){Mr.default.existsSync(e)||Mr.default.mkdirSync(e,{recursive:!0});let r=Mr.default.readdirSync(t,{withFileTypes:!0});for(let n of r){let i=An.default.join(t,n.name),s=An.default.join(e,n.name);n.isDirectory()?d5(i,s):Mr.default.copyFileSync(i,s)}}async function p5(){let t="";try{let e="ext",r=0,n=e;for(;n=`${e}${r||""}`,!!Mr.default.existsSync(An.default.join(process.cwd(),n));)r++;let i=await yi.prompt([{type:"input",name:"dirName",message:"Please specify the directory name for the new extension:",validate:function(f){return/^[a-zA-Z0-9-_]+$/.test(f)?!0:"Please enter a valid directory name:"},default:n},{type:"input",name:"name",message:"Please specify the new extension name:",validate:function(f){return/^[a-zA-Z0-9-_ ]+$/.test(f)?!0:"Please enter a valid extension name containing only letters numbers, hyphens (-), underscores (_), and spaces."}},{type:"input",name:"description",message:"Please provide an optional description for the extension (maximum 255 characters):",validate:function(f){return f.length<=100?!0:"Description must be 255 characters or less."}}]),{dirName:s,name:o,description:a}=i;if(!s)throw new Error("A directory name is required. Please provide one.");let u=An.default.resolve(process.cwd(),s);if(Mr.default.existsSync(u))throw new Error(`The directory '${s}' already exists. Please choose a different one.`);if(!o)throw new Error("An extension name is required. Please provide one.");let l=await f5("package.json",{cwd:__dirname});if(!l)throw new Error("Pakcage file not found");let c=An.default.resolve(An.default.dirname(l),"./templates/default");d5(c,u),t=u;let h=await Hse({name:o,description:a}),d=JSON.parse(Mr.default.readFileSync(An.default.join(c,"commercebuild.json"),"utf-8"));d.id=h,d.name=o,d.description=a,Mr.default.writeFileSync(An.default.join(u,"commercebuild.json"),JSON.stringify(d,null,2),"utf-8"),console.log(Te.green(`New Extension [${h}] has been successfully generated at '${s}'.`))}catch(e){console.error(Te.red(`Error: ${e.message||"Unknown Iusse"}`)),Mr.default.existsSync(t)&&Mr.default.rmSync(t)}finally{process.exit()}}var oO=G(sO());async function aO(){let t=rn({spinner:"dots"}).start();try{let n=(await(await fetch("https://australia-southeast1-xm-development.cloudfunctions.net/httpsExtension?action=getExtensions&withUploads=1")).json()).data.extensions||[];t.info("Extension List");let i=new oO.default({head:["Extension Name","Unique ID","Current Version"]});for(let s of n){let o=s.uploads?.find(a=>a.id===s.data.uploadId)?.data.status||void 0;i.push([s.data.extensionName,s.id,h5(s.data.uploadId,o)])}console.log(i.toString())}catch(e){t.fail(e.message)}finally{process.exit()}}var Xu=G(require("path")),Ei=G(require("fs")),UO=G(require("os"));var WO=G(kO());async function $O(t,{directory:e,uploadId:r}){r||(r=(await yi.prompt([{type:"input",name:"uploadId",message:"Please enter a specific upload ID, or choose 'latest' for the most recent version, or 'default' for the currently released version.",default:"latest",required:!0,validate:function(o){return["latest","default"].includes(o)||typeof o=="string"?!0:'Please enter "latest", "default", or any valid string.'}}])).uploadId);let n=rn({spinner:"dots"}).start(),i=Xu.default.join(UO.default.tmpdir(),`cb-ext-${Date.now()}.zip`);try{n.info(`Initiating checkout process for ID: ${t}`);let s=e;s||(s=`extension-${t.split("-").shift()}`);let o=Xu.default.resolve(process.cwd(),s);if(n.info(`Designated target directory: ${Te.blue(s)}`),Ei.default.existsSync(o))throw new Error(`The directory '${s}' already exists. Please choose a different name to avoid overwriting existing files.`);n.info("Downloading and extracting files to the specified directory"),n.start("Processing the files...");let a=await fetch(`${vi}?action=getExtensionUploadZipFile&id=${t}&uploadId=${r||"latest"}`);if(!a.ok)throw new Error(`Failed to fetch the extension upload zip file. HTTP status: ${a.status}`);let u=await a.arrayBuffer(),l=Buffer.from(u);Ei.default.writeFileSync(i,l);let c=new WO.default(i);Ei.default.mkdirSync(o,{recursive:!0}),c.extractAllTo(o,!0),Ei.default.existsSync(Xu.default.join(o,".env"))||Ei.default.writeFileSync(Xu.default.join(o,".env"),"COMMERCEBUILD_STORE_URL=https://mobile.cardemo.commercebuild.com/","utf-8"),n.succeed("The extension has been successfully checked out.")}catch(s){n.fail(`Checkout Failure: ${s.message}`)}finally{Ei.default.existsSync(i)&&Ei.default.rmSync(i),process.exit()}}var Wn=G(require("fs")),QM=G(require("os")),Or=G(require("path")),JM=G(YM());var ZM=1024e4,A_e=[".ts",".tsx","mjs",".js",".jsx",".json",".css"];function T_e(t){return A_e.some(e=>t.endsWith(e))}function XM(t){return t.stats.isFile()&&T_e(t.name)?t:!1}function I_e(t){return new Promise(e=>setTimeout(e,1e3*t))}function yn(){let t=new Date,e=(l,c=2)=>String(l).padStart(c,"0"),r=t.getFullYear(),n=e(t.getMonth()+1),i=e(t.getDate()),s=e(t.getHours()),o=e(t.getMinutes()),a=e(t.getSeconds()),u=e(t.getMilliseconds(),3);return`${r}-${n}-${i} ${s}:${o}:${a}.${u} `}var e6=async(t={})=>{try{let e=await yi.prompt([{type:"input",name:"description",message:"Please provide a description for the commit (maximum 255 characters):",validate:function(c){return c.length<=255?!0:"Description must be 100 characters or less."}}]),{description:r}=e,n=rn({spinner:"dots"}).start(),i=process.cwd(),s=Or.default.join(i,"commercebuild.json");if(!Wn.default.existsSync(s))throw new Error("Missing commercebuild.json file");let{id:o}=JSON.parse(Wn.default.readFileSync(s,"utf-8"));if(!o||typeof o!="string")throw new Error("Invalid Extension ID in commercebuild.json");n.info("=== PUSH EXTENSION ["+o+"] TO SERVER ==="),n.info(yn()+"Compress the source code");let a=Or.default.join(QM.default.tmpdir(),"cb-ext-push-archive.zip"),u=Wn.default.createWriteStream(a),l=(0,JM.default)("zip",{zlib:{level:9}});l.pipe(u),l.directory(Or.default.join(i,"src"),"src",XM),l.file(Or.default.join(i,"package.json"),{name:"package.json"}),l.file(Or.default.join(i,"commercebuild.json"),{name:"commercebuild.json"}),Wn.default.existsSync(Or.default.join(i,"tsconfig.json"))&&l.file(Or.default.join(i,"tsconfig.json"),{name:"tsconfig.json"}),Wn.default.existsSync(Or.default.join(i,".gitignore"))&&l.file(Or.default.join(i,".gitignore"),{name:".gitignore"}),Wn.default.existsSync(Or.default.join(i,".vscode"))&&l.directory(Or.default.join(i,".vscode"),".vscode",XM),u.on("close",async function(){try{n.succeed(yn()+"Compress the source code - complete"),n.info(yn()+"Upload the source code");let c=l.pointer();if(c>ZM)throw Wn.default.rmSync(a),new Error(`The total size of all files (${c} bytes) exceeds the maximum allowed limit (${ZM} bytes), upload denied.`);let h=Wn.default.readFileSync(a),d=await fetch(`${vi}?action=commitExtension`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:o,file:h.toString("base64"),description:r})});if(!d.ok)throw new Error(`HTTP error! status: ${d.status}`);let{message:f,data:{uploadId:m}}=await d.json();if(f)throw new Error(f);if(!m)throw new Error("Unknown Issue - no uploadId");if(n.succeed(yn()+`Upload the source code - complete.
|
|
111
|
-
--- UPLOAD ID: ${m} ---`),t.release){n.start(yn()+"Compile and build the source code...");let x=10,g=0,b=!0,w="";for(;b;){g++;try{let y=await fetch(`${vi}?action=getExtensionUpload&id=${o}&uploadId=${m}`),{message:F,data:{data:{status:C}}}=await y.json();if(F)throw new Error(F);if(w!==C?(n.stopAndPersist({symbol:"\u2139",text:yn()+`Check and compile the source code, STATUS: ${C}`}),w=C,n.start(`Build status: ${C} (polling...)`)):n.text=`Build status: ${C} (polling...)`,await I_e(x),!["IDLE","QUEUED","WORKING"].includes(C))if(b=!1,C==="SUCCESS"){let I=await fetch(`${vi}?action=setExtensionUploadId&id=${o}&uploadId=${m}`),{message:A}=await I.json();if(A)throw new Error(A);n.succeed(yn()+"Compile and build the source code complete.")}else n.fail(yn()+"Compile and build the source code failure.");if(g*x>600)throw b=!1,new Error("Processed failure - Timeout.")}catch(y){if(!b)throw new Error(y.message)}}}n.succeed(yn()+"Processed complete"),process.exit()}catch(c){n.fail(yn()+c.message),process.exit(1)}}),l.on("error",function(c){throw console.log("archive error",c),c}),l.finalize()}catch(e){console.error(Te.red(`Error: ${e.message||"Unknown Iusse"}`)),process.exit(1)}};var zi=new Ys;zi.name("extension").alias("ext").description("commercebuild Extension CLI");zi.command("list").description("show all available extensions").action(async()=>{await aO()});zi.command("create").description("create a new extension").action(async()=>{await p5()});zi.command("clone <extensionId>").option("-d, --directory <directory>","directory name","").option("-u, --uploadId <uploadId>","specify the upload ID","").description("download and prepare an existing extension for local development").action(async(t,e)=>{await $O(t,e)});zi.command("commit").description("save and commit your local changes to the extension repository").action(async()=>{await e6()});zi.command("release").description("publish a new version of the extension").action(async()=>{await e6({release:!0})});var ej="commercebuild-cli",r6="0.0.
|
|
110
|
+
Please try logging in again, or contact the administrator if the issue persists.`)}finally{process.exit()}});var Mr=G(require("fs")),An=G(require("path"));var ea=G(require("node:path"),1);var o5=G(require("node:process"),1),a5=G(require("node:path"),1),fp=G(require("node:fs"),1),u5=require("node:url");var Yy=class{value;next;constructor(e){this.value=e}},zu=class{#e;#t;#r;constructor(){this.clear()}enqueue(e){let r=new Yy(e);this.#e?(this.#t.next=r,this.#t=r):(this.#e=r,this.#t=r),this.#r++}dequeue(){let e=this.#e;if(e)return this.#e=this.#e.next,this.#r--,e.value}peek(){if(this.#e)return this.#e.value}clear(){this.#e=void 0,this.#t=void 0,this.#r=0}get size(){return this.#r}*[Symbol.iterator](){let e=this.#e;for(;e;)yield e.value,e=e.next}*drain(){for(;this.#e;)yield this.dequeue()}};function lp(t){if(!((Number.isInteger(t)||t===Number.POSITIVE_INFINITY)&&t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=new zu,r=0,n=()=>{r--,e.size>0&&e.dequeue()()},i=async(a,u,l)=>{r++;let c=(async()=>a(...l))();u(c);try{await c}catch{}n()},s=(a,u,l)=>{e.enqueue(i.bind(void 0,a,u,l)),(async()=>(await Promise.resolve(),r<t&&e.size>0&&e.dequeue()()))()},o=(a,...u)=>new Promise(l=>{s(a,l,u)});return Object.defineProperties(o,{activeCount:{get:()=>r},pendingCount:{get:()=>e.size},clearQueue:{value:()=>{e.clear()}}}),o}var cp=class extends Error{constructor(e){super(),this.value=e}},kse=async(t,e)=>e(await t),Use=async t=>{let e=await Promise.all(t);if(e[1]===!0)throw new cp(e[0]);return!1};async function Zy(t,e,{concurrency:r=Number.POSITIVE_INFINITY,preserveOrder:n=!0}={}){let i=lp(r),s=[...t].map(a=>[a,i(kse,a,e)]),o=lp(n?1:Number.POSITIVE_INFINITY);try{await Promise.all(s.map(a=>o(Use,a)))}catch(a){if(a instanceof cp)return a.value;throw a}}var l5={directory:"isDirectory",file:"isFile"};function Wse(t){if(!Object.hasOwnProperty.call(l5,t))throw new Error(`Invalid type specified: ${t}`)}var $se=(t,e)=>e[l5[t]](),Gse=t=>t instanceof URL?(0,u5.fileURLToPath)(t):t;async function Xy(t,{cwd:e=o5.default.cwd(),type:r="file",allowSymlinks:n=!0,concurrency:i,preserveOrder:s}={}){Wse(r),e=Gse(e);let o=n?fp.promises.stat:fp.promises.lstat;return Zy(t,async a=>{try{let u=await o(a5.default.resolve(e,a));return $se(r,u)}catch{return!1}},{concurrency:i,preserveOrder:s})}var c5=require("node:url");function Qy(t){return t instanceof URL?(0,c5.fileURLToPath)(t):t}var zse=Symbol("findUpStop");async function Vse(t,e={}){let r=ea.default.resolve(Qy(e.cwd)??""),{root:n}=ea.default.parse(r),i=ea.default.resolve(r,Qy(e.stopAt??n)),s=e.limit??Number.POSITIVE_INFINITY,o=[t].flat(),a=async l=>{if(typeof t!="function")return Xy(o,l);let c=await t(l.cwd);return typeof c=="string"?Xy([c],l):c},u=[];for(;;){let l=await a({...e,cwd:r});if(l===zse||(l&&u.push(ea.default.resolve(r,l)),r===i||u.length>=s))break;r=ea.default.dirname(r)}return u}async function f5(t,e={}){return(await Vse(t,{...e,limit:1}))[0]}var vi="https://australia-southeast1-xm-development.cloudfunctions.net/httpsExtension",h5=(t,e)=>{if(!t)return"- Unknown -";let r=parseInt(t.substring(0,4),10),n=parseInt(t.substring(4,6),10)-1,i=parseInt(t.substring(6,8),10),s=parseInt(t.substring(8,10),10),o=parseInt(t.substring(10,12),10),a=parseInt(t.substring(12,14),10);return new Date(r,n,i,s,o,a).toISOString().substring(0,19).replace("T"," ")+(e?" - "+e:"")};var Hse=async({extensionName:t,description:e})=>{let r=await fetch(`${vi}?action=createExtension`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({extensionName:t,description:e})}),{message:n,data:{extensionId:i}}=await r.json();if(i)return i;throw new Error(n||"Error: Unable to create extension.")};function d5(t,e){Mr.default.existsSync(e)||Mr.default.mkdirSync(e,{recursive:!0});let r=Mr.default.readdirSync(t,{withFileTypes:!0});for(let n of r){let i=An.default.join(t,n.name),s=An.default.join(e,n.name);n.isDirectory()?d5(i,s):Mr.default.copyFileSync(i,s)}}async function p5(){let t="";try{let e="ext",r=0,n=e;for(;n=`${e}${r||""}`,!!Mr.default.existsSync(An.default.join(process.cwd(),n));)r++;let i=await yi.prompt([{type:"input",name:"dirName",message:"Please specify the directory name for the new extension:",validate:function(f){return/^[a-zA-Z0-9-_]+$/.test(f)?!0:"Please enter a valid directory name:"},default:n},{type:"input",name:"extensionName",message:"Please specify the new extension name:",validate:function(f){return/^[a-zA-Z0-9-_ ]+$/.test(f)?!0:"Please enter a valid extension name containing only letters numbers, hyphens (-), underscores (_), and spaces."}},{type:"input",name:"description",message:"Please provide an optional description for the extension (maximum 255 characters):",validate:function(f){return f.length<=100?!0:"Description must be 255 characters or less."}}]),{dirName:s,extensionName:o,description:a}=i;if(!s)throw new Error("A directory name is required. Please provide one.");let u=An.default.resolve(process.cwd(),s);if(Mr.default.existsSync(u))throw new Error(`The directory '${s}' already exists. Please choose a different one.`);if(!o)throw new Error("An extension name is required. Please provide one.");let l=await f5("package.json",{cwd:__dirname});if(!l)throw new Error("Pakcage file not found");let c=An.default.resolve(An.default.dirname(l),"./templates/default");d5(c,u),t=u;let h=await Hse({extensionName:o,description:a}),d=JSON.parse(Mr.default.readFileSync(An.default.join(c,"commercebuild.json"),"utf-8"));d.id=h,d.name=name,d.description=a,Mr.default.writeFileSync(An.default.join(u,"commercebuild.json"),JSON.stringify(d,null,2),"utf-8"),console.log(Te.green(`New Extension [${h}] has been successfully generated at '${s}'.`))}catch(e){console.error(Te.red(`Error: ${e.message||"Unknown Iusse"}`)),Mr.default.existsSync(t)&&Mr.default.rmSync(t)}finally{process.exit()}}var oO=G(sO());async function aO(){let t=rn({spinner:"dots"}).start();try{let n=(await(await fetch("https://australia-southeast1-xm-development.cloudfunctions.net/httpsExtension?action=getExtensions&withUploads=1")).json()).data.extensions||[];t.info("Extension List");let i=new oO.default({head:["Extension Name","Unique ID","Current Version"]});for(let s of n){let o=s.uploads?.find(a=>a.id===s.data.uploadId)?.data.status||void 0;i.push([s.data.extensionName,s.id,h5(s.data.uploadId,o)])}console.log(i.toString())}catch(e){t.fail(e.message)}finally{process.exit()}}var Xu=G(require("path")),Ei=G(require("fs")),UO=G(require("os"));var WO=G(kO());async function $O(t,{directory:e,uploadId:r}){r||(r=(await yi.prompt([{type:"input",name:"uploadId",message:"Please enter a specific upload ID, or choose 'latest' for the most recent version, or 'default' for the currently released version.",default:"latest",required:!0,validate:function(o){return["latest","default"].includes(o)||typeof o=="string"?!0:'Please enter "latest", "default", or any valid string.'}}])).uploadId);let n=rn({spinner:"dots"}).start(),i=Xu.default.join(UO.default.tmpdir(),`cb-ext-${Date.now()}.zip`);try{n.info(`Initiating checkout process for ID: ${t}`);let s=e;s||(s=`extension-${t.split("-").shift()}`);let o=Xu.default.resolve(process.cwd(),s);if(n.info(`Designated target directory: ${Te.blue(s)}`),Ei.default.existsSync(o))throw new Error(`The directory '${s}' already exists. Please choose a different name to avoid overwriting existing files.`);n.info("Downloading and extracting files to the specified directory"),n.start("Processing the files...");let a=await fetch(`${vi}?action=getExtensionUploadZipFile&id=${t}&uploadId=${r||"latest"}`);if(!a.ok)throw new Error(`Failed to fetch the extension upload zip file. HTTP status: ${a.status}`);let u=await a.arrayBuffer(),l=Buffer.from(u);Ei.default.writeFileSync(i,l);let c=new WO.default(i);Ei.default.mkdirSync(o,{recursive:!0}),c.extractAllTo(o,!0),Ei.default.existsSync(Xu.default.join(o,".env"))||Ei.default.writeFileSync(Xu.default.join(o,".env"),"COMMERCEBUILD_STORE_URL=https://mobile.cardemo.commercebuild.com/","utf-8"),n.succeed("The extension has been successfully checked out.")}catch(s){n.fail(`Checkout Failure: ${s.message}`)}finally{Ei.default.existsSync(i)&&Ei.default.rmSync(i),process.exit()}}var Wn=G(require("fs")),QM=G(require("os")),Or=G(require("path")),JM=G(YM());var ZM=1024e4,A_e=[".ts",".tsx","mjs",".js",".jsx",".json",".css"];function T_e(t){return A_e.some(e=>t.endsWith(e))}function XM(t){return t.stats.isFile()&&T_e(t.name)?t:!1}function I_e(t){return new Promise(e=>setTimeout(e,1e3*t))}function yn(){let t=new Date,e=(l,c=2)=>String(l).padStart(c,"0"),r=t.getFullYear(),n=e(t.getMonth()+1),i=e(t.getDate()),s=e(t.getHours()),o=e(t.getMinutes()),a=e(t.getSeconds()),u=e(t.getMilliseconds(),3);return`${r}-${n}-${i} ${s}:${o}:${a}.${u} `}var e6=async(t={})=>{try{let e=await yi.prompt([{type:"input",name:"description",message:"Please provide a description for the commit (maximum 255 characters):",validate:function(c){return c.length<=255?!0:"Description must be 100 characters or less."}}]),{description:r}=e,n=rn({spinner:"dots"}).start(),i=process.cwd(),s=Or.default.join(i,"commercebuild.json");if(!Wn.default.existsSync(s))throw new Error("Missing commercebuild.json file");let{id:o}=JSON.parse(Wn.default.readFileSync(s,"utf-8"));if(!o||typeof o!="string")throw new Error("Invalid Extension ID in commercebuild.json");n.info("=== PUSH EXTENSION ["+o+"] TO SERVER ==="),n.info(yn()+"Compress the source code");let a=Or.default.join(QM.default.tmpdir(),"cb-ext-push-archive.zip"),u=Wn.default.createWriteStream(a),l=(0,JM.default)("zip",{zlib:{level:9}});l.pipe(u),l.directory(Or.default.join(i,"src"),"src",XM),l.file(Or.default.join(i,"package.json"),{name:"package.json"}),l.file(Or.default.join(i,"commercebuild.json"),{name:"commercebuild.json"}),Wn.default.existsSync(Or.default.join(i,"tsconfig.json"))&&l.file(Or.default.join(i,"tsconfig.json"),{name:"tsconfig.json"}),Wn.default.existsSync(Or.default.join(i,".gitignore"))&&l.file(Or.default.join(i,".gitignore"),{name:".gitignore"}),Wn.default.existsSync(Or.default.join(i,".vscode"))&&l.directory(Or.default.join(i,".vscode"),".vscode",XM),u.on("close",async function(){try{n.succeed(yn()+"Compress the source code - complete"),n.info(yn()+"Upload the source code");let c=l.pointer();if(c>ZM)throw Wn.default.rmSync(a),new Error(`The total size of all files (${c} bytes) exceeds the maximum allowed limit (${ZM} bytes), upload denied.`);let h=Wn.default.readFileSync(a),d=await fetch(`${vi}?action=commitExtension`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:o,file:h.toString("base64"),description:r})});if(!d.ok)throw new Error(`HTTP error! status: ${d.status}`);let{message:f,data:{uploadId:m}}=await d.json();if(f)throw new Error(f);if(!m)throw new Error("Unknown Issue - no uploadId");if(n.succeed(yn()+`Upload the source code - complete.
|
|
111
|
+
--- UPLOAD ID: ${m} ---`),t.release){n.start(yn()+"Compile and build the source code...");let x=10,g=0,b=!0,w="";for(;b;){g++;try{let y=await fetch(`${vi}?action=getExtensionUpload&id=${o}&uploadId=${m}`),{message:F,data:{data:{status:C}}}=await y.json();if(F)throw new Error(F);if(w!==C?(n.stopAndPersist({symbol:"\u2139",text:yn()+`Check and compile the source code, STATUS: ${C}`}),w=C,n.start(`Build status: ${C} (polling...)`)):n.text=`Build status: ${C} (polling...)`,await I_e(x),!["IDLE","QUEUED","WORKING"].includes(C))if(b=!1,C==="SUCCESS"){let I=await fetch(`${vi}?action=setExtensionUploadId&id=${o}&uploadId=${m}`),{message:A}=await I.json();if(A)throw new Error(A);n.succeed(yn()+"Compile and build the source code complete.")}else n.fail(yn()+"Compile and build the source code failure.");if(g*x>600)throw b=!1,new Error("Processed failure - Timeout.")}catch(y){if(!b)throw new Error(y.message)}}}n.succeed(yn()+"Processed complete"),process.exit()}catch(c){n.fail(yn()+c.message),process.exit(1)}}),l.on("error",function(c){throw console.log("archive error",c),c}),l.finalize()}catch(e){console.error(Te.red(`Error: ${e.message||"Unknown Iusse"}`)),process.exit(1)}};var zi=new Ys;zi.name("extension").alias("ext").description("commercebuild Extension CLI");zi.command("list").description("show all available extensions").action(async()=>{await aO()});zi.command("create").description("create a new extension").action(async()=>{await p5()});zi.command("clone <extensionId>").option("-d, --directory <directory>","directory name","").option("-u, --uploadId <uploadId>","specify the upload ID","").description("download and prepare an existing extension for local development").action(async(t,e)=>{await $O(t,e)});zi.command("commit").description("save and commit your local changes to the extension repository").action(async()=>{await e6()});zi.command("release").description("publish a new version of the extension").action(async()=>{await e6({release:!0})});var ej="commercebuild-cli",r6="0.0.14",tj="CLI tool for executing commercebuild commands";var P_e=new Ys;P_e.name(ej).description(`${tj}
|
|
112
112
|
|
|
113
113
|
Version: ${r6}`).version(r6).addCommand(Jo).addCommand(zi).addHelpText("after",`
|
|
114
114
|
For more information, see https://docs.commercebuild.com/cli`).parse();
|