@shoplineos/cli 1.4.1 → 1.5.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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>c});const e=require("commander"),t=require("./theme-common-options"),i=require("../../utils/parse-options"),n=function(e){return e&&e.__esModule?e:{default:e}}(require("../../services/theme/check")),o=require("../../services/theme/check/types"),r=require("../../services/theme/utils"),c=()=>{let c=new e.Command("check");return c.description("Validate the theme.").addOption(new e.Option("-C, --config <path>","Use the config provided, overriding .theme-check.yml if present").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").choices(Object.keys(o.ECheckCategory)).default([]).env("SHOPLINE_FLAG_CATEGORY")).addOption(new e.Option("--fail-level <level>","Minimum severity for exit with error code").choices(Object.values(o.EFailLevel)).default(o.EFailLevel.error).env("SHOPLINE_FLAG_FAIL_LEVEL")).addOption(new e.Option("--init","Generate a .theme-check.yml file").env("SHOPLINE_FLAG_INIT")).addOption(new e.Option("-o, --output <output>","The output format to use").choices(Object.values(o.ECheckOutput)).default(o.ECheckOutput.text).env("SHOPLINE_FLAG_OUTPUT")).addOption(new e.Option("--print","Output active config to STDOUT").env("SHOPLINE_FLAG_PRINT")).addOption(new e.Option("--list","List enabled checks").env("SHOPLINE_FLAG_LIST")).addOption((0,t.getPathOption)()).addOption((0,t.getEnvironmentOption)()).showHelpAfterError().action(async(e,t)=>{try{let o=await (0,i.parseOptions)(e,t);await (0,n.default)(o)}catch(e){(0,r.handleError)(e)}})};
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,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:()=>p,getThemes:()=>R,getThemeInfo:()=>g,uploadTheme:()=>m,getThemeFileList:()=>v,deleteFiles:()=>_,updateFile:()=>O,createFile:()=>T,downloadTheme:()=>h,getThemeFileDetail:()=>I});const e=u(require("axios")),t=u(require("form-data")),r=u(require("../../../helpers/config")),o=require("../../../utils/const"),i=require("../../../utils/error"),l=require("../const"),s=u(require("../../../utils/debug")),n=u(require("../../../utils/winston")),a=require("../../../helpers/sentry"),d=u(require("../no-second-check"));function u(e){return e&&e.__esModule?e:{default:e}}const{loginInfo:c,currentStore:E}=r.default,f=e.default.create({baseURL:`${E}/api/website/admin/theme/cli`,maxContentLength:1/0,maxBodyLength:1/0});f.interceptors.request.use(e=>{if(c){let t=Object.keys(c).map(e=>`${e}=${c[e]}`).join(";"),i=r.default.dfpToken||"";Object.assign(e.headers,{cookie:t,"dfp-token":i,"User-Agent":o.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}),f.interceptors.response.use(async e=>{var t,r,o,u,c,E,f,p,R,g;if("stream"===e.config.responseType)return e;let m=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success,v=null==e?void 0:null===(r=e.data)||void 0===r?void 0:r.code,{config:_}=e;if(s.default.printResponse(_,e),(0,a.reportHttpRes)(e),n.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===(o=e.data)||void 0===o?void 0:o.trace_id)||(null==e?void 0:null===(u=e.headers)||void 0===u?void 0:u["x-request-id"])||""}),l.ERROR_CODES.THEME_COUNT_LIMIT.includes(v))throw Error(l.ERRORS.THEME_COUNT_LIMIT);if(l.ERROR_CODES.DEVELOPMENT_THEME_NOT_EXIST.includes(v))throw Error(l.ERRORS.THEME_IS_INVALID);if(l.ERROR_CODES.FEATURE_KEY_NOT_EXIST.includes(v))throw Error(l.ERRORS.FEATURE_KEY_NOT_EXIST);if(l.ERROR_CODES.NO_SECOND_CHECK.includes(v))await d.default.run();else if(l.ERROR_CODES.INVALID_FILE.includes(v))throw new i.ValidatorError({code:v,errors:e.data.data.errors,message:e.data.msg});if(!m)throw new i.AbortError(`${null!==(p=null==e?void 0:null===(E=e.config)||void 0===E?void 0:E.baseURL)&&void 0!==p?p:""}${null!==(R=null==e?void 0:null===(f=e.config)||void 0===f?void 0:f.url)&&void 0!==R?R:""}
2
- ${JSON.stringify(null!==(g=null==e?void 0:e.data)&&void 0!==g?g:{},null,2)}`);return null==e?void 0:null===(c=e.data)||void 0===c?void 0:c.data},e=>{let t=new i.AbortError(JSON.stringify(e.response.data,null,2));return Promise.reject(t)});const p=e=>f.post("/theme/upload",e),R=async()=>f.get("/themes"),g=e=>f.get(`/theme/${e}`),m=e=>f.post("/files/upload",e),v=e=>f.get("/files",{params:{themeId:e}}),_=(e,t)=>f.delete("/files",{data:{themeId:e,fileNames:t}}),O=e=>f.put("/file",e),T=e=>f.post("/file",e),h=e=>f.get(`/theme/${e}/download`,{responseType:"stream"}),I=(e,t)=>f.get("/files",{params:{themeId:e,fileNames:t.join(",")}});
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")),a=require("../../../utils/fs"),l=c(require("../../../utils/debug")),n=require("../../../utils/path"),u=c(require("../../../utils/colors")),o=require("../utils"),s=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={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var n=a?Object.getOwnPropertyDescriptor(e,l):null;n&&(n.get||n.set)?Object.defineProperty(r,l,n):r[l]=e[l]}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 l.default{pack(l){let n=new r.default,f=i.default.sync(l||o.themeDirectoryGlobList3,{cwd:this.cwd});return s.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),a=this.includeFilter.match(t);!e&&a&&(d.info(`adding ${u.default.magenta(t)}`,!0),this.log(`adding ${u.default.magenta(t)}`),n.addLocalFile(r,i))}else d.info(`adding ${u.default.magenta(t)}`,!0),this.log(`adding ${u.default.magenta(t)}`),n.addLocalFile(r,i)}),(0,a.pathExists)(this.targetZipFilePath)&&t.default.unlinkSync(this.targetZipFilePath),s.default.log(`Write zip file to ${this.targetZipFilePath}...`),n.writeZip(this.targetZipFilePath,e=>{if(e)throw e}),s.default.log(`Write zip file to ${this.targetZipFilePath} success`),this.targetZipFilePath}get targetZipFilePath(){let t=(0,o.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}){super("theme:package"),f(this,"cwd",(0,n.cwd)()),f(this,"includeFilter",void 0),f(this,"ignoreFilter",void 0),e&&(this.cwd=e),this.includeFilter=t,this.ignoreFilter=i}}
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:()=>E,startThemeService:()=>N,themePresenter:()=>_});const e=I(require("fast-glob")),t=I(require("form-data")),a=I(require("fs")),i=I(require("inquirer")),r=I(require("chokidar")),s=I(require("ora")),l=require("lodash"),n=I(require("../../../utils/debug")),u=I(require("../../../helpers/config")),h=require("../../../utils/messages"),d=require("../../../helpers/sentry"),o=require("../../../utils/path"),c=I(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=k(t);if(a&&a.has(e))return a.get(e);var i={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var l=r?Object.getOwnPropertyDescriptor(e,s):null;l&&(l.get||l.set)?Object.defineProperty(i,s,l):i[s]=e[s]}return i.default=e,a&&a.set(e,i),i}(require("../../../utils/logger")),v=I(require("../../../utils/get-objects-diff")),y=I(require("./file")),T=I(require("./package")),w=require("../../../utils/error"),F=require("../const"),D=I(require("../../../utils/colors")),b=I(require("./remote-watcher"));function S(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function I(e){return e&&e.__esModule?e:{default:e}}function k(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,a=new WeakMap;return(k=function(e){return e?a:t})(e)}const q=i.default.createPromptModule();class E extends n.default{async watchRemote(){this.editorSync&&(this.remoteWatcher=new b.default(this),this.remoteWatcher.start())}watch(){this.watchRemote();let e=r.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 i=this.ignoreFilter.match(a),r=this.includeFilter.match(a);return!i&&r}async onAdd(e){var i;let r=(0,f.parseFileName)(e,this.cwd),l=new t.default;l.append("file",a.default.createReadStream(e)),l.append("themeId",this.themeId),l.append("fileName",r);let n=(0,s.default)((0,h.getMessage)("theme.serve.syncer.create_strategy.success",{file_name:r})).start();await (0,m.createFile)(l),null===(i=this.sse)||void 0===i||i.broadcast(this.getSseData(e,"add")),n.succeed()}async onChange(e){var i;let r=(0,f.parseFileName)(e,this.cwd),l=new t.default;l.append("file",a.default.createReadStream(e)),l.append("themeId",this.themeId),l.append("fileName",r);let n=(0,s.default)((0,h.getMessage)("theme.serve.syncer.update_strategy.success",{file_name:r})).start();await (0,m.updateFile)(l),null===(i=this.sse)||void 0===i||i.broadcast(this.getSseData(e)),n.succeed()}async onUnlink(e){var t;let a=(0,f.parseFileName)(e,this.cwd),i=(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")),i.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:i}=await this.findOrCreateTheme(),{local:r,remote:l}=await this.getFileChecksums(),n=await (0,v.default)(r,l);if(n.length){let t=[],r=[];if(n.forEach(e=>{switch(e.type){case"create":case"update":t.push(e);break;case"delete":r.push(e)}}),!e&&r.length){let e=r.map(e=>e.key);await (0,m.deleteFiles)(this.themeId,e)}if(t.length){let e=t.map(e=>e.key),r=this.getThemeZipFormData({fileList:e,name:a,status:i});await (0,m.uploadTheme)(r)}}t.succeed()}getThemeZipFormData({fileList:e,status:i,name:r}){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",i),l.append("name",r),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)),i=this.getFilterFileChecksums(e),r=this.getFilterFileChecksums(a);return{local:i,remote:r}}getFilterFileChecksums(e){let t=Object.keys(e).reduce((t,a)=>{let i=this.ignoreFilter.match(a),r=this.includeFilter.match(a);return!i&&r&&(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 y.default(e,this.cwd))}static async getThemeInfo(e){let{id:t,name:a,status:i,themeTypeVersion:r}=await (0,m.getThemeInfo)(e);return{id:t,name:a,status:i,themeTypeVersion:r}}async findOrCreateTheme(){try{let{id:e,name:t,status:a}=await E.getThemeInfo(this.themeId);return{id:e,name:t,status:a}}catch(i){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:i}=await (0,m.createNewTheme)(a);return{id:i,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 E.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=E.addDevelopmentTheme(await (0,m.getThemes)()),a=t.map(e=>({name:_(e,"short"),value:e.id})).filter(e=>e.value),{themeId:i}=await q([{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:r,name:s,themeTypeVersion:l}=t.find(e=>e.id===i);return{id:i,name:s,status:r,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(_(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:i,themeTypeVersion:r}=e.find(e=>e.status===p.EThemeStatus.Published);return{id:t,name:a,status:i,themeTypeVersion:r}}static async getDevelopmentThemeInfo(){let e=u.default.developmentThemeId,t=u.default.developmentThemeName,a=await E.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(`
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:i,includeFilter:r,ignoreFilter:s,editorSync:l}){super("theme:theme"),S(this,"cwd",""),S(this,"themeId",""),S(this,"sse",void 0),S(this,"includeFilter",void 0),S(this,"ignoreFilter",void 0),S(this,"editorSync",void 0),S(this,"remoteWatcher",void 0),S(this,"mode",void 0),this.themeId=e||"",this.sse=i,this.cwd=a,this.mode=t||"hot-reload",this.includeFilter=r,this.ignoreFilter=s,this.editorSync=l,this.remoteWatcher=null}}async function N({mode:e,cwd:t,sse:a,includeFilter:i,ignoreFilter:r,editorSync:s}){try{let l=u.default.developmentThemeId,n=new E({themeId:l,mode:e,cwd:t,sse:a,includeFilter:i,ignoreFilter:r,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 O={[p.EThemeStatus.Published]:"green",[p.EThemeStatus.Unpublished]:"yellow",[p.EThemeStatus.Development]:"magenta"},P={[p.EThemeStatus.Published]:"live",[p.EThemeStatus.Unpublished]:"unpublished",[p.EThemeStatus.Development]:"development"};function _(e,t="long"){let a=O[e.status],i=[`${D.default[a](`[${P[e.status]}]`)}`];if(e.id===u.default.developmentThemeId&&i.push(D.default.cyan("[yours]")),e.themeTypeVersion&&i.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:i.join(" ")});return t}let r=(0,h.getMessage)("theme.list.short",{name:e.name,tags:i.join(" ")});return r}
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.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "A CLI tool to build for the Shopline platform",
5
5
  "bin": {
6
6
  "sl": "./bin/index.js"