@shoplineos/cli 1.4.1 → 1.5.1
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/commands/theme/check.js +1 -1
- package/dist/services/extension/extension.js +1 -1
- package/dist/services/extension/push/shopper.js +1 -1
- package/dist/services/theme/3.0/api.js +4 -2
- package/dist/services/theme/3.0/check.js +1 -0
- package/dist/services/theme/3.0/package.js +1 -1
- package/dist/services/theme/3.0/theme.js +2 -2
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>d});const e=require("commander"),t=u(require("chalk")),i=require("./theme-common-options"),n=require("../../utils/parse-options"),r=u(require("../../services/theme/check")),o=u(require("../../services/theme/3.0/check")),c=require("../../services/theme/check/types"),a=require("../../services/theme/utils"),s=require("../../utils/check-theme-type-version");function u(e){return e&&e.__esModule?e:{default:e}}const p=t.default.red("\n(Unsupported for Theme OS 3.0)\n"),d=()=>{let t=new e.Command("check");return t.description("Validate the theme.").addOption(new e.Option("-C, --config <path>",`Use the config provided, overriding .theme-check.yml if present ${p}`).env("SHOPLINE_FLAG_CONFIG")).addOption(new e.Option("-c, --category <category...>",`Only run this category of checks, Runs checks matching all categories when specified more than once ${p}`).choices(Object.keys(c.ECheckCategory)).default([]).env("SHOPLINE_FLAG_CATEGORY")).addOption(new e.Option("--fail-level <level>",`Minimum severity for exit with error code ${p}`).choices(Object.values(c.EFailLevel)).default(c.EFailLevel.error).env("SHOPLINE_FLAG_FAIL_LEVEL")).addOption(new e.Option("--init",`Generate a .theme-check.yml file ${p}`).env("SHOPLINE_FLAG_INIT")).addOption(new e.Option("-o, --output <output>",`The output format to use ${p}`).choices(Object.values(c.ECheckOutput)).default(c.ECheckOutput.text).env("SHOPLINE_FLAG_OUTPUT")).addOption(new e.Option("--print",`Output active config to STDOUT ${p}`).env("SHOPLINE_FLAG_PRINT")).addOption(new e.Option("--list",`List enabled checks ${p}`).env("SHOPLINE_FLAG_LIST")).addOption((0,i.getPathOption)()).addOption((0,i.getEnvironmentOption)()).showHelpAfterError().action(async(e,t)=>{try{let i=await (0,n.parseOptions)(e,t),c=(0,s.getThemeTypeVersion)(i.path);3===c?await (0,o.default)(i):await (0,r.default)(i)}catch(e){(0,a.handleError)(e)}})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{getSelectedPartner:()=>c,getPartnerName:()=>p,getSelectedApp:()=>d,getSelectedExts:()=>g,getAppLists:()=>f,getAppExts:()=>h,getSelectedShop:()=>w,handleNoStore:()=>y,getPartnerAccessToken:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{getSelectedPartner:()=>c,getPartnerName:()=>p,getSelectedApp:()=>d,getSelectedExts:()=>g,getAppLists:()=>f,getAppExts:()=>h,getSelectedShop:()=>w,handleNoStore:()=>y,getPartnerAccessToken:()=>m,getStoreId:()=>v,getAppName:()=>S,getAvailableProductSkuId:()=>b});const e=require("../../utils/ui/ui"),t=require("./api"),r=require("./utils"),a=require("../../utils/error"),n=require("../../utils/ui/render"),i=require("./openapi"),o=require("../../utils/output"),l=u(require("../../utils/winston")),s=u(require("../../helpers/config"));function u(e){return e&&e.__esModule?e:{default:e}}async function c(){let n=[];if(l.default.log("Loading partner list..."),await (0,e.renderTasks)([{title:"Loading available partner organizations",task:async()=>{n=await (0,t.getPartnerList)()}}]),!n.length)throw new a.AbortError("No partner in your account.");l.default.log("Selecting partner organization...");let i=await (0,e.renderSelectPrompt)({message:"Select partner organization?",choices:(0,r.buildPartnerChoice)(n)}),o=n.find(e=>e.id===i).partnerName;l.default.log(`Selected partner organization: ${o}`);let u={id:i,partnerName:o};return s.default.currentPartner=u,u}async function p(e){let r=await (0,t.getPartnerList)(),n=r.find(t=>t.id===e);if(null==n?void 0:n.partnerName)return n.partnerName;throw new a.AbortError((0,o.outputContent)`The partner id: ${o.outputToken.cyan(e)} does not exist in your account.`,(0,o.outputContent)`Please add the ${o.outputToken.magenta("--reset")} flag after your command.`)}async function d(t){let a=[];if(l.default.log("Loading your apps..."),await (0,e.renderTasks)([{title:"Loading your apps",task:async()=>{a=await f(t.id)}}]),!a.length)throw Error("No apps in your account.");l.default.log("Selecting app...");let n=await (0,e.renderSelectPrompt)({message:"Which app would like to register this extension with?",choices:(0,r.buildAppChoice)(a,t.partnerName)});return l.default.log(`Selected app: ${JSON.stringify(n)}`),n}async function g(t,a){let n=[];l.default.log("Loading your extensions..."),await (0,e.renderTasks)([{title:"Loading your extensions",task:async()=>{n=await h(t,a)}}]),l.default.log("Selecting extension...");let i=await (0,e.renderSelectPrompt)({message:"Which extension would like to register this extension with?",choices:(0,r.buildExtChoice)(n)});return l.default.log(`Selected app: ${JSON.stringify(i)}`),i}async function f(e){let{dataList:r=[]}=await (0,t.getAppList)({pageSize:300,partnerId:e});return r}async function h(e,r){let{dataList:a=[]}=await (0,t.getAppExtList)({appKey:e,pageSize:300,currentPage:1,types:[r]});return a}async function w(a,n){let i=[];if(await (0,e.renderTasks)([{title:"Loading your development store",task:async()=>{i=await (0,t.getStoreList)(a)}}]),i.length){if(1===i.length){let[e]=i;return e}{let t=await (0,e.renderSelectPrompt)({message:"Which development store would you like to use?",choices:(0,r.buildStoreChoice)(i)});return t}}await y(a,n)}async function y(t,a){(0,n.renderWarning)({headline:["This partner account does not have a development store."],body:["Please visit",{link:{label:"the developer platform",url:(0,r.getDeveloperPlatformLink)(a)}},"to create a development store and try again."]});let i=await (0,e.renderSelectPrompt)({message:"How will you proceed to the next step?",choices:[{label:"Developement store has been created, please retry!",value:1},{label:"Abort",value:0}]});i?await w(t,a):process.exit(1)}async function m(e,r){let a=await (0,t.getAccessToken)({storeId:e,appKey:r});return a.token||""}async function v(e,r){let a=await (0,t.getStoreInfo)(e,r);return a.storeId||""}async function S(e,r){let a=await (0,t.getAppInfo)(e,r);return a.appName||""}async function b(e,t,r,n){let l=new a.AbortError(n),s=await m(e,t),u=await (0,i.getOpenApiHttp)(s,r);try{let e=await u.get("/products/products.json",{params:{status:"active"}});if(e.products.length>0){var c,p,d;(0,o.outputDebug)((0,o.outputContent)`You have an available first product variants: ${o.outputToken.json(null===(c=e.products)||void 0===c?void 0:null===(p=c[0])||void 0===p?void 0:p.variants)}`);let t=null===(d=e.products.flatMap(e=>e.variants).find(e=>e.id&&e.inventory_quantity>0))||void 0===d?void 0:d.id;if(t)return t}}catch(e){throw l}throw l}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{getShopperType:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{getShopperType:()=>S,pushShopperExtension:()=>T});const e=P(require("fs")),t=P(require("archiver")),r=P(require("form-data")),n=P(require("fast-glob")),i=P(require("javascript-obfuscator")),o=require("../../../utils/error"),a=require("../api"),s=require("../../../utils/ui/ui"),u=require("../env"),p=require("../const"),l=require("../../../utils/path"),E=require("../zip"),d=require("../../../utils/ui/render"),c=require("../utils"),f=require("../../../utils/output"),g=P(require("../../../utils/winston"));function P(e){return e&&e.__esModule?e:{default:e}}function S(e){let t={1:a.ERegisterType.SHOPPER_CUSTOM_BLOCK,2:a.ERegisterType.SHOPPER_CUSTOM_WEB_PAGE},r=e.split("--")[1];return t[r]}async function T(r){var a;let s=r.readEnvContent(),d=S(r.type);g.default.log("Create web shopper extension instance...");let c=await h(s,d);(0,f.outputDebug)((0,f.outputContent)`Write ${f.outputToken.json(c)} content to ${f.outputToken.cyan(`.env.${r.env}`)} file to ${r.cwd}`),g.default.log(`Write .env.${r.env} file...`),(0,u.writeEnvFile)(r.env,c,r.cwd);let P=(0,l.joinPath)(r.cwd,`${s.EXTENSION_TITLE}.zip`);g.default.log("Compress shopper extension..."),await (a=r.cwd,new Promise((r,s)=>{(0,f.outputDebug)((0,f.outputContent)`Compressing to ${f.outputToken.path(P)}`);let u=(0,t.default)("zip",{zlib:{level:9}}),l=e.default.createWriteStream(P);l.on("close",()=>{}),l.on("finish",()=>{r({size:u.pointer()})}),u.on("error",()=>{s(new o.AbortError("Failed to compress!"))}),u.pipe(l),n.default.sync("assets/js/**/*.js",{cwd:a}).forEach(t=>{let r=e.default.readFileSync(t,"utf-8"),n=i.default.obfuscate(r,{compact:!0,controlFlowFlattening:!1,numbersToExpressions:!1,simplify:!0,stringArray:!0,stringArrayShuffle:!0,splitStrings:!1,stringArrayThreshold:.75,renameGlobals:!1});u.append(n.getObfuscatedCode(),{name:t})}),u.glob("previewImage.png",{cwd:a}).glob("index.html",{cwd:a}).glob("assets/css/**/*.css",{cwd:a}).glob("assets/images/**/*.{png,jpg,gif,svg,webp,lottie,apng}",{cwd:a}).glob(p.SHOPPER_CONFIG_FILE,{cwd:a}).finalize()})),g.default.log("Push shopper extension..."),await y(c,P,r,d),g.default.log("Push shopper extension success!"),(0,f.outputDebug)("Remove .zip file"),g.default.log("Remove .zip file..."),(0,E.removeZip)(P)}async function h(e,t){let r=e;return r.EXTENSION_ID&&r.EXTENSION_UUID?e:(await (0,s.renderTasks)([{title:"Registering with SHOPLINE",task:async()=>{let n=await (0,a.createExtensionInstance)({appKey:e.SHOPLINE_APP_KEY,appSecret:e.SHOPLINE_APP_SECRET,name:e.EXTENSION_TITLE,type:t,category:a.ECategory.SHOPPER}),{id:i,uuid:s}=n||{};if(!i||!s)throw new o.AbortError("Failed to register. Please retry again!");r.EXTENSION_ID=i,r.EXTENSION_UUID=s}}]),r)}async function y(e,t,r,n){(0,f.outputDebug)((0,f.outputContent)`Pushing ${f.outputToken.path(t)} file to remote`),await (0,s.renderTasks)([{title:"Pushing your extension to Shopline",task:async()=>{await I(e,t,r,n)}}])}async function I(t,n,i,s){let u=e.default.createReadStream(n),p=new r.default;p.append("extensionFile",u),p.append("appKey",t.SHOPLINE_APP_KEY),p.append("appSecret",t.SHOPLINE_APP_SECRET),p.append("extensionId",t.EXTENSION_ID),p.append("extensionUuid",t.EXTENSION_UUID),p.append("type",s),p.append("category",a.ECategory.SHOPPER);let l=await (0,a.pushExtension)(p);if(l){let e=(0,c.getAppVersionManageLink)({appKey:t.SHOPLINE_APP_KEY,env:i.env});(0,d.renderSuccess)({headline:["Pushed",{userInput:t.EXTENSION_TITLE},"to a draft on",(0,c.formatTime)(l.updateTime)],body:["Visit",{link:{label:e,url:e}},"to version and publish your extension",{char:"."}]})}else(0,d.renderFatalError)(new o.AbortError(`Pushed to SHOPLINE with errors on ${(0,c.formatTime)()}`))}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{createNewTheme:()=>
|
|
2
|
-
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{createNewTheme:()=>m,getThemes:()=>R,getThemeInfo:()=>g,uploadTheme:()=>v,getThemeFileList:()=>_,deleteFiles:()=>T,updateFile:()=>O,createFile:()=>I,downloadTheme:()=>S,getThemeFileDetail:()=>b,themeCheck:()=>y});const e=f(require("axios")),t=f(require("form-data")),r=f(require("chalk")),o=f(require("../../../helpers/config")),i=require("../../../utils/const"),l=require("../../../utils/error"),n=require("../const"),s=f(require("../../../utils/debug")),d=f(require("../../../utils/winston")),a=require("../../../helpers/sentry"),u=f(require("../no-second-check")),c=require("../../../utils/ui/render");function f(e){return e&&e.__esModule?e:{default:e}}const{loginInfo:E,currentStore:h}=o.default,p=e.default.create({baseURL:`${h}/api/website/admin/theme/cli`,maxContentLength:1/0,maxBodyLength:1/0});p.interceptors.request.use(e=>{if(E){let t=Object.keys(E).map(e=>`${e}=${E[e]}`).join(";"),r=o.default.dfpToken||"";Object.assign(e.headers,{cookie:t,"dfp-token":r,"User-Agent":i.CLI_USER_AGENT})}return(null==e?void 0:e.data)instanceof t.default&&Object.assign(e.headers,null==e?void 0:e.data.getHeaders()),e}),p.interceptors.response.use(async e=>{var t,o,i,f,E,h,p,m,R,g;if("stream"===e.config.responseType)return e;let v=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success,_=null==e?void 0:null===(o=e.data)||void 0===o?void 0:o.code,{config:T}=e;if(s.default.printResponse(T,e),(0,a.reportHttpRes)(e),d.default.logHttp({type:"response",method:e.config.method,url:e.config.baseURL+e.config.url,params:e.config.params,body:e.data,status:e.status,traceId:(null==e?void 0:null===(i=e.data)||void 0===i?void 0:i.trace_id)||(null==e?void 0:null===(f=e.headers)||void 0===f?void 0:f["x-request-id"])||""}),n.ERROR_CODES.THEME_COUNT_LIMIT.includes(_))throw Error(n.ERRORS.THEME_COUNT_LIMIT);if(n.ERROR_CODES.DEVELOPMENT_THEME_NOT_EXIST.includes(_))throw Error(n.ERRORS.THEME_IS_INVALID);if(n.ERROR_CODES.FEATURE_KEY_NOT_EXIST.includes(_))throw Error(n.ERRORS.FEATURE_KEY_NOT_EXIST);if(n.ERROR_CODES.NO_SECOND_CHECK.includes(_))await u.default.run();else if(n.ERROR_CODES.INVALID_FILE.includes(_)){console.log();let{errors:t}=e.data.data;throw t.forEach(({filename:e,message:t})=>{(0,c.renderInfo)({headline:e,body:`${r.default.red("[error]: ")}${t}`})}),new l.AbortError(`Theme Check Summary.
|
|
2
|
+
|
|
3
|
+
${t.length} error${1===t.length?"":"s"} found.`)}if(!v)throw new l.AbortError(`${null!==(m=null==e?void 0:null===(h=e.config)||void 0===h?void 0:h.baseURL)&&void 0!==m?m:""}${null!==(R=null==e?void 0:null===(p=e.config)||void 0===p?void 0:p.url)&&void 0!==R?R:""}
|
|
4
|
+
${JSON.stringify(null!==(g=null==e?void 0:e.data)&&void 0!==g?g:{},null,2)}`);return null==e?void 0:null===(E=e.data)||void 0===E?void 0:E.data},e=>{let t=new l.AbortError(JSON.stringify(e.response.data,null,2));return Promise.reject(t)});const m=e=>p.post("/theme/upload",e),R=async()=>p.get("/themes"),g=e=>p.get(`/theme/${e}`),v=e=>p.post("/files/upload",e),_=e=>p.get("/files",{params:{themeId:e}}),T=(e,t)=>p.delete("/files",{data:{themeId:e,fileNames:t}}),O=e=>p.put("/file",e),I=e=>p.post("/file",e),S=e=>p.get(`/theme/${e}/download`,{responseType:"stream"}),b=(e,t)=>p.get("/files",{params:{themeId:e,fileNames:t.join(",")}}),y=e=>p.post("/theme/check",e);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>h});const e=s(require("form-data")),t=s(require("fs")),r=s(require("ora")),i=s(require("./package")),a=s(require("../../../utils/debug")),u=require("./api"),c=s(require("../../../utils/winston")),l=require("../../../utils/ui/render");function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){return e&&e.__esModule?e:{default:e}}class d extends a.default{getThemeZipFormData(){this.zipFilePath=new i.default({cwd:this.cwd,silent:!0}).pack();let r=new e.default;return r.append("file",t.default.createReadStream(this.zipFilePath)),r}async check(){let e=(0,r.default)("Theme check is running...").start(),i=this.getThemeZipFormData();try{let t=await (0,u.themeCheck)(i);return e.succeed(),t}catch(t){throw e.fail(),t}finally{t.default.unlinkSync(this.zipFilePath)}}constructor(e){super("theme:check"),n(this,"cwd",void 0),n(this,"zipFilePath",""),this.cwd=e.path}}const h=async e=>{c.default.log("Check theme...");let t=new d(e),r=await t.check();(0,l.renderSuccess)({headline:"Theme Check Summary.",body:null==r?void 0:r.message})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>p});const e=c(require("pathe")),t=c(require("fs-extra")),i=c(require("fast-glob")),r=c(require("adm-zip")),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>p});const e=c(require("pathe")),t=c(require("fs-extra")),i=c(require("fast-glob")),r=c(require("adm-zip")),l=require("../../../utils/fs"),a=c(require("../../../utils/debug")),n=require("../../../utils/path"),u=c(require("../../../utils/colors")),s=require("../utils"),o=c(require("../../../utils/winston")),d=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=h(t);if(i&&i.has(e))return i.get(e);var r={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var n=l?Object.getOwnPropertyDescriptor(e,a):null;n&&(n.get||n.set)?Object.defineProperty(r,a,n):r[a]=e[a]}return r.default=e,i&&i.set(e,r),r}(require("../../../utils/logger"));function f(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function c(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(h=function(e){return e?i:t})(e)}class p extends a.default{pack(a){let n=new r.default,f=i.default.sync(a||s.themeDirectoryGlobList3,{cwd:this.cwd});return o.default.log("Pack theme..."),f.forEach(t=>{let i=e.default.dirname(t),r=e.default.join(this.cwd,t);if(this.includeFilter&&this.ignoreFilter){let e=this.ignoreFilter.match(t),l=this.includeFilter.match(t);!e&&l&&(this.silent||d.info(`adding ${u.default.magenta(t)}`,!0),this.log(`adding ${u.default.magenta(t)}`),n.addLocalFile(r,i))}else this.silent||d.info(`adding ${u.default.magenta(t)}`,!0),this.log(`adding ${u.default.magenta(t)}`),n.addLocalFile(r,i)}),(0,l.pathExists)(this.targetZipFilePath)&&t.default.unlinkSync(this.targetZipFilePath),o.default.log(`Write zip file to ${this.targetZipFilePath}...`),n.writeZip(this.targetZipFilePath,e=>{if(e)throw e}),o.default.log(`Write zip file to ${this.targetZipFilePath} success`),this.targetZipFilePath}get targetZipFilePath(){let t=(0,s.getThemeInfo3)(this.cwd),i=`${t.theme_name}-${t.theme_version}.zip`;return e.default.join(this.cwd,i)}constructor({cwd:e,includeFilter:t,ignoreFilter:i,silent:r=!1}){super("theme:package"),f(this,"cwd",(0,n.cwd)()),f(this,"includeFilter",void 0),f(this,"ignoreFilter",void 0),f(this,"silent",void 0),e&&(this.cwd=e),this.silent=r,this.includeFilter=t,this.ignoreFilter=i}}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var a in t)Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}(exports,{default:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var a in t)Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}(exports,{default:()=>N,startThemeService:()=>O,themePresenter:()=>j});const e=k(require("fast-glob")),t=k(require("form-data")),a=k(require("fs")),r=k(require("inquirer")),i=k(require("chokidar")),s=k(require("ora")),l=require("lodash"),n=k(require("../../../utils/debug")),u=k(require("../../../helpers/config")),h=require("../../../utils/messages"),d=require("../../../helpers/sentry"),o=require("../../../utils/path"),c=k(require("../../../utils/winston")),m=require("./api"),p=require("../types"),f=require("../utils"),g=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var a=q(t);if(a&&a.has(e))return a.get(e);var r={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var l=i?Object.getOwnPropertyDescriptor(e,s):null;l&&(l.get||l.set)?Object.defineProperty(r,s,l):r[s]=e[s]}return r.default=e,a&&a.set(e,r),r}(require("../../../utils/logger")),y=k(require("../../../utils/get-objects-diff")),v=k(require("./file")),T=k(require("./package")),w=require("../../../utils/error"),F=require("../const"),D=k(require("../../../utils/colors")),b=k(require("./remote-watcher")),S=require("../../../utils/ui/render");function I(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function k(e){return e&&e.__esModule?e:{default:e}}function q(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,a=new WeakMap;return(q=function(e){return e?a:t})(e)}const E=r.default.createPromptModule();class N extends n.default{async watchRemote(){this.editorSync&&(this.remoteWatcher=new b.default(this),this.remoteWatcher.start())}watch(){this.watchRemote();let e=i.default.watch((0,f.getThemeDirectory3)(this.cwd),{ignored:/(^|[/\\])\../,ignoreInitial:!0});e.on("ready",()=>{e.on("add",(...e)=>{let t=e[0];c.default.log(`Add theme file: ${t}`),this.shouldWatchFile(t)&&this.onAdd(t)}),e.on("change",(...e)=>{let t=e[0];c.default.log(`Change theme file: ${t}`),this.shouldWatchFile(t)&&this.onChange(t)}),e.on("unlink",(...e)=>{let t=e[0];c.default.log(`Unlink theme file: ${t}`),this.shouldWatchFile(t)&&this.onUnlink(t)})})}shouldWatchFile(e){var t;let a=(0,f.parseFileName)(e,this.cwd);if(null===(t=this.remoteWatcher)||void 0===t?void 0:t.shouldUpdateToLocal(a)){this.remoteWatcher.removeUpdateToLocalFiles(a);return}let r=this.ignoreFilter.match(a),i=this.includeFilter.match(a);return!r&&i}async onAdd(e){let r=(0,f.parseFileName)(e,this.cwd),i=new t.default;i.append("file",a.default.createReadStream(e)),i.append("themeId",this.themeId),i.append("fileName",r);let l=(0,s.default)((0,h.getMessage)("theme.serve.syncer.create_strategy.success",{file_name:r})).start();try{var n;await (0,m.createFile)(i),null===(n=this.sse)||void 0===n||n.broadcast(this.getSseData(e,"add")),l.succeed()}catch(e){(0,S.renderFatalError)(e),l.fail()}}async onChange(e){let r=(0,f.parseFileName)(e,this.cwd),i=new t.default;i.append("file",a.default.createReadStream(e)),i.append("themeId",this.themeId),i.append("fileName",r);let l=(0,s.default)((0,h.getMessage)("theme.serve.syncer.update_strategy.success",{file_name:r})).start();try{var n;await (0,m.updateFile)(i),null===(n=this.sse)||void 0===n||n.broadcast(this.getSseData(e)),l.succeed()}catch(e){(0,S.renderFatalError)(e),l.fail()}}async onUnlink(e){var t;let a=(0,f.parseFileName)(e,this.cwd),r=(0,s.default)((0,h.getMessage)("theme.serve.syncer.delete_strategy.success",{file_name:a})).start();await (0,m.deleteFiles)(this.themeId,[a]),null===(t=this.sse)||void 0===t||t.broadcast(this.getSseData(e,"unlink")),r.succeed()}getSseData(e,t){return"full-page"===this.mode||t&&["add","unlink"].includes(t)?{data:{reload_page:!0}}:{data:{modified:[(0,f.getRelativePath)(e,this.cwd)]}}}async syncTheme({nodelete:e}={nodelete:!1}){let t=(0,s.default)(`✨ Syncing theme #${this.themeId} on ${u.default.currentStore}`).start(),{name:a,status:r}=await this.findOrCreateTheme(),{local:i,remote:l}=await this.getFileChecksums(),n=await (0,y.default)(i,l);if(n.length){let t=[],i=[];if(n.forEach(e=>{switch(e.type){case"create":case"update":t.push(e);break;case"delete":i.push(e)}}),!e&&i.length){let e=i.map(e=>e.key);await (0,m.deleteFiles)(this.themeId,e)}if(t.length){let e=t.map(e=>e.key),i=this.getThemeZipFormData({fileList:e,name:a,status:r});await (0,m.uploadTheme)(i)}}t.succeed()}getThemeZipFormData({fileList:e,status:r,name:i}){let s=new T.default({cwd:this.cwd}).pack(e),l=new t.default;return l.append("file",a.default.createReadStream(s)),l.append("themeId",this.themeId||""),l.append("status",r),l.append("name",i),l}async getFileChecksums(){let{localeFileChecksums:e}=this,t=await (0,m.getThemeFileList)(this.themeId),a=t.reduce((e,t)=>(e[t.name]=t.checksum||"",e),Object.create(null)),r=this.getFilterFileChecksums(e),i=this.getFilterFileChecksums(a);return{local:r,remote:i}}getFilterFileChecksums(e){let t=Object.keys(e).reduce((t,a)=>{let r=this.ignoreFilter.match(a),i=this.includeFilter.match(a);return!r&&i&&(t[a]=e[a]),t},{});return t}get localeFileChecksums(){return this.themeFiles().reduce((e,t)=>(e[t.fileName]=t.checksum,e),{})}themeFiles(){let t=e.default.sync(f.themeDirectoryGlobList3,{cwd:this.cwd,onlyFiles:!0,unique:!0});return t.map(e=>new v.default(e,this.cwd))}static async getThemeInfo(e){let{id:t,name:a,status:r,themeTypeVersion:i}=await (0,m.getThemeInfo)(e);return{id:t,name:a,status:r,themeTypeVersion:i}}async findOrCreateTheme(){try{let{id:e,name:t,status:a}=await N.getThemeInfo(this.themeId);return{id:e,name:t,status:a}}catch(r){let{id:e,name:t,status:a}=await this.createNewDevelopmentTheme();return{id:e,name:t,status:a}}}async createNewTheme({name:e,status:t}){let a=this.getThemeZipFormData({status:t,name:e}),{themeId:r}=await (0,m.createNewTheme)(a);return{id:r,name:e,status:t}}async createNewDevelopmentTheme(){let e=(0,f.generateDevThemeName)(),t=this.getThemeZipFormData({name:e,status:p.EThemeStatus.Development}),{themeId:a}=await (0,m.createNewTheme)(t);return this.themeId=a,u.default.developmentThemeId=a,u.default.developmentThemeName=e,{id:a,name:e,status:p.EThemeStatus.Development}}static async getValidDevelopmentInfo(){let e=u.default.developmentThemeId;return await N.isValidDevTheme(e)?{id:e,name:"",status:p.EThemeStatus.Development}:{id:"",name:(0,f.generateDevThemeName)(),status:p.EThemeStatus.Development}}static async isValidDevTheme(e){try{let t=await (0,m.getThemeInfo)(e);if((null==t?void 0:t.status)===p.EThemeStatus.Development)return{id:t.id,name:t.name,status:t.status,themeTypeVersion:t.themeTypeVersion};return null}catch(e){return null}}static async chooseThemeList(e){let t=N.addDevelopmentTheme(await (0,m.getThemes)()),a=t.map(e=>({name:j(e,"short"),value:e.id})).filter(e=>e.value),{themeId:r}=await E([{type:"list",name:"themeId",message:{pull:"Select a theme to pull from",push:"Select theme to push to"}[e],pageSize:a.length,default:a[0].value,loop:!1,choices:a}]),{status:i,name:s,themeTypeVersion:l}=t.find(e=>e.id===r);return{id:r,name:s,status:i,themeTypeVersion:l}}static addDevelopmentTheme(e){let t=u.default.developmentThemeId,a=u.default.developmentThemeName;return t?e.concat({name:a,status:p.EThemeStatus.Development,id:t,themeTypeVersion:""}):e}static async package(e,t=(0,o.cwd)()){try{let e=new T.default({cwd:t});await e.pack()}catch(e){(0,f.handleError)(e)}}static async list(){try{c.default.log("Checking login..."),u.default.isLogin(),console.log((0,h.getMessage)("theme.list.title",{store:u.default.currentStore})),c.default.log("Printing theme list...");let e=await (0,m.getThemes)();e.forEach(e=>{console.log(j(e))}),c.default.log("Print theme list succeed!")}catch(e){(0,f.handleError)(e)}}static async getLiveThemeInfo(){let e=await (0,m.getThemes)(),{id:t,name:a,status:r,themeTypeVersion:i}=e.find(e=>e.status===p.EThemeStatus.Published);return{id:t,name:a,status:r,themeTypeVersion:i}}static async getDevelopmentThemeInfo(){let e=u.default.developmentThemeId,t=u.default.developmentThemeName,a=await N.isValidDevTheme(e);return a?{id:e,name:t,status:a.status,themeTypeVersion:a.themeTypeVersion}:{id:"",name:"",status:"",themeTypeVersion:""}}static checkThemeStandardStructure(e){if(0===e.length)throw new w.AbortError(F.ERRORS.NOT_STANDARD_DIRECTORY);let t=(0,l.difference)(f.standardThemeDirectories3,e);t.length>0&&Error(`
|
|
2
2
|
The presence of ${D.default.bold(null==t?void 0:t[0])} in the directory structure isn't supported.
|
|
3
3
|
|
|
4
4
|
Move any files to a parent folder, then delete unsupported subdirectories.
|
|
5
5
|
|
|
6
6
|
• Required directory structure: https://developer.myshopline.com/docs/introduce/bGgYARTh
|
|
7
|
-
`)}constructor({themeId:e,mode:t,cwd:a,sse:
|
|
7
|
+
`)}constructor({themeId:e,mode:t,cwd:a,sse:r,includeFilter:i,ignoreFilter:s,editorSync:l}){super("theme:theme"),I(this,"cwd",""),I(this,"themeId",""),I(this,"sse",void 0),I(this,"includeFilter",void 0),I(this,"ignoreFilter",void 0),I(this,"editorSync",void 0),I(this,"remoteWatcher",void 0),I(this,"mode",void 0),this.themeId=e||"",this.sse=r,this.cwd=a,this.mode=t||"hot-reload",this.includeFilter=i,this.ignoreFilter=s,this.editorSync=l,this.remoteWatcher=null}}async function O({mode:e,cwd:t,sse:a,includeFilter:r,ignoreFilter:i,editorSync:s}){try{let l=u.default.developmentThemeId,n=new N({themeId:l,mode:e,cwd:t,sse:a,includeFilter:r,ignoreFilter:i,editorSync:s}).watch();return{themeId:l,themeInstance:n}}catch(e){var l,n;return g.error((null==e?void 0:null===(l=e.response)||void 0===l?void 0:null===(n=l.data)||void 0===n?void 0:n.msg)||(null==e?void 0:e.stack)),(0,d.reportAndExit)(e)}}const P={[p.EThemeStatus.Published]:"green",[p.EThemeStatus.Unpublished]:"yellow",[p.EThemeStatus.Development]:"magenta"},_={[p.EThemeStatus.Published]:"live",[p.EThemeStatus.Unpublished]:"unpublished",[p.EThemeStatus.Development]:"development"};function j(e,t="long"){let a=P[e.status],r=[`${D.default[a](`[${_[e.status]}]`)}`];if(e.id===u.default.developmentThemeId&&r.push(D.default.cyan("[yours]")),e.themeTypeVersion&&r.push(D.default.bold.italic.cyan(e.themeTypeVersion)),"long"===t){let t=(0,h.getMessage)("theme.list.long",{id:e.id,name:e.name,tags:r.join(" ")});return t}let i=(0,h.getMessage)("theme.list.short",{name:e.name,tags:r.join(" ")});return i}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shoplineos/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "A CLI tool to build for the Shopline platform",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sl": "./bin/index.js"
|
|
@@ -76,6 +76,7 @@
|
|
|
76
76
|
"htmlparser2": "^9.0.0",
|
|
77
77
|
"ink": "^3.2.0",
|
|
78
78
|
"inquirer": "8.2.5",
|
|
79
|
+
"javascript-obfuscator": "5.1.0",
|
|
79
80
|
"jiti": "^1.18.2",
|
|
80
81
|
"js-yaml": "^4.1.0",
|
|
81
82
|
"killable": "^1.0.1",
|