@shoplineos/cli 1.3.0 → 1.4.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.
- package/dist/services/extension/api.js +3 -3
- package/dist/services/extension/const.js +1 -1
- package/dist/services/extension/context.js +1 -1
- package/dist/services/extension/create/index.js +1 -1
- package/dist/services/extension/extension.js +1 -1
- package/dist/services/extension/generate.js +1 -1
- package/dist/services/extension/push/index.js +1 -1
- package/dist/services/extension/push/post-purchase.js +1 -0
- package/dist/services/extension/serve/extension.js +1 -1
- package/dist/services/extension/serve/payload.js +1 -1
- package/dist/services/extension/serve.js +1 -1
- package/dist/services/extension/types.js +1 -1
- package/dist/services/extension/utils.js +1 -1
- package/dist/services/theme/3.0/push.js +1 -1
- package/dist/services/theme/file.js +1 -1
- package/dist/services/theme/push.js +1 -1
- package/dist/services/theme/update.js +1 -1
- package/dist/services/theme/uploader.js +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var e,t,r;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{ECategory:()=>e,ERegisterType:()=>t,EExtensionState:()=>r,http:()=>
|
|
1
|
+
"use strict";var e,t,r;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{ECategory:()=>e,ERegisterType:()=>t,EExtensionState:()=>r,http:()=>R,authHttp:()=>L,changeBaseURL:()=>U,createExtensionInstance:()=>m,pushExtension:()=>C,getAppList:()=>A,getAppExtList:()=>N,getPartnerList:()=>y,getStoreList:()=>I,getAccessToken:()=>H,getAppInfo:()=>b,getStoreInfo:()=>x,getFunctionTemplates:()=>q,registerFunction:()=>B,pushFunction:()=>M});const n=g(require("form-data")),o=g(require("axios")),a=g(require("../../helpers/config")),s=require("./const"),i=g(require("../../utils/debug")),u=require("../../utils/error"),l=require("../../utils/ui/render"),d=require("../../utils/messages"),c=require("../../utils/misc"),p=require("../../helpers/sentry"),E=require("../../utils/const"),f=g(require("../../utils/winston"));function g(e){return e&&e.__esModule?e:{default:e}}function _(e){return`${e}/api/v1/cli/app/ext`}function T(e){return`${e}/api/v3/cli/app/ext`}function O(e){return`${e}/api/v1/cli`}function h(e){return`${e}/api/v3/cli`}function v(e,t={}){let r=e=>{let{loginInfo:t,dfpToken:r,currentPartner:n}=a.default;if(t){n&&(t.a_dc_partnerid=n.id,Object.assign(e.headers,{dc_partner_f:"1"}));let o=Object.keys(t).map(e=>`${e}=${t[e]}`).join(";");Object.assign(e.headers,{cookie:o,"dfp-token":r||""})}};e.interceptors.request.use(e=>(i.default.printRequest(e),t.useThemeAuth&&r(e),e.data instanceof n.default&&Object.assign(e.headers,e.data.getHeaders()),f.default.logHttp({type:"request",method:e.method,url:e.baseURL+e.url,params:e.params}),e),e=>Promise.reject(e)),e.interceptors.response.use(e=>{var t,r,n,o,l,E,g,_;let T=(null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success)||(null==e?void 0:null===(r=e.data)||void 0===r?void 0:r.code)==="SUCCESS",O=null==e?void 0:null===(n=e.data)||void 0===n?void 0:n.code,{config:h}=e,v=(0,c.getUrlOrigin)(h.baseURL);i.default.printResponse(h,e),(0,p.reportHttpRes)(e);let R=(null==e?void 0:null===(o=e.headers)||void 0===o?void 0:o.traceid)||(null==e?void 0:null===(l=e.data)||void 0===l?void 0:l.trace_id)||(null==e?void 0:null===(E=e.data)||void 0===E?void 0:E.traceId)||"";if(f.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:R}),O===s.ERRORS.PARTNER_INFO_NOT_COMPLETE)throw a.default.deleteCurrentPartner(),new u.ApiError({code:O,message:e.data.message,tryMessage:v?(0,d.getMessage)("extension.create.connect.try_partner_info_not_complete_message",{link:`${v}/info/fill`}):void 0});if(O===s.ERRORS.USER_NOT_LOGIN)throw new u.ApiError({code:O,message:e.data.message,tryMessage:(0,d.getMessage)("core.whoami.not_logged_in")});if("boolean"==typeof T&&!1===T){let t="";try{t=JSON.stringify(e.data,null,2)}catch(r){t=`error code: ${O}
|
|
2
2
|
error message: ${null==e?void 0:null===(_=e.data)||void 0===_?void 0:_.message}
|
|
3
|
-
trace id: ${
|
|
3
|
+
trace id: ${R}`}throw new u.AbortError(`url: ${e.config.baseURL+e.config.url}`,t)}return null===(g=e.data)||void 0===g?void 0:g.data},e=>{if((0,p.reportBug)(e),e.response){var t,r,n,o;(0,p.reportHttpRes)(e.response);let{response:a}=e,s=a.config.url,i=(null==a?void 0:null===(t=a.data)||void 0===t?void 0:t.trace_id)||(null==a?void 0:null===(r=a.data)||void 0===r?void 0:r.traceid)||(null==a?void 0:null===(n=a.data)||void 0===n?void 0:n.traceId)||(null==a?void 0:null===(o=a.headers)||void 0===o?void 0:o["x-request-id"])||"";(0,l.renderFatalError)(Error(`url: ${s}
|
|
4
4
|
status: ${a.status}
|
|
5
5
|
traceId: ${i}
|
|
6
|
-
${e}`))}return Promise.reject(e)})}const
|
|
6
|
+
${e}`))}return Promise.reject(e)})}const R=o.default.create({baseURL:_(s.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json","User-Agent":E.CLI_USER_AGENT}}),P=o.default.create({baseURL:T(s.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json","User-Agent":E.CLI_USER_AGENT}});v(R),v(P);const L=o.default.create({baseURL:O(s.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json"}}),S=o.default.create({baseURL:h(s.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json"}});function U(e){let t=s.EXTENSION_ENDPOINTS[e];R.defaults.baseURL=_(t),L.defaults.baseURL=O(t),P.defaults.baseURL=T(t),S.defaults.baseURL=h(t)}v(L,{useThemeAuth:!0}),v(S,{useThemeAuth:!0}),function(e){e.CHECKOUT="CHECKOUT",e.THEME="THEME",e.PIXELS="WEB_PIXEL",e.SHOPPER="SHOPPER",e.POST_PURCHASE="POST_PURCHASE"}(e||(e={})),function(e){e.THEME_APP_BLOCK="THEME_APP_BLOCK",e.CHECKOUT_UI="CHECKOUT_UI",e.PIXELS="WEB_PIXEL_EXT",e.SHOPPER_CUSTOM_BLOCK="SHOPPER_CUSTOM_BLOCK",e.SHOPPER_CUSTOM_WEB_PAGE="SHOPPER_CUSTOM_WEB_PAGE",e.POST_PURCHASE="POST_PURCHASE_EXT"}(t||(t={})),function(e){e.DRAFT="DRAFT",e.WORKING_DRAFT="WORKING_DRAFT"}(r||(r={}));const m=e=>P.post("/register",JSON.stringify({...e})),C=e=>P.post("/push",e),A=e=>S.post("/auth/app/list",e),N=e=>S.post("/auth/app/ext/list",e),y=()=>S.post("/auth/partner/list");function I(e){return S.post("/auth/store/list",{partnerId:e})}function H(e){return S.post("/auth/generate/accessToken",e)}function b(e,t){return S.post("/auth/app/queryByAppKey",{partnerId:e,appKey:t})}function x(e,t){return S.post("/auth/store/queryByHandle",{partnerId:e,handle:t})}function q(){return S.post("/function/template/list")}function B(e){return S.post("/function/register",e)}function M(e){return S.post("/function/deploy",e)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,s){for(var o in s)Object.defineProperty(e,o,{enumerable:!0,get:s[o]})}(exports,{EXTENSION_ENDPOINTS:()=>o,DEFAULT_EXTENSION_ENDPOINT:()=>t,DEFAULT_EXTENSION_NAME:()=>E,ENVS:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,s){for(var o in s)Object.defineProperty(e,o,{enumerable:!0,get:s[o]})}(exports,{EXTENSION_ENDPOINTS:()=>o,DEFAULT_EXTENSION_ENDPOINT:()=>t,DEFAULT_EXTENSION_NAME:()=>E,ENVS:()=>_,TARGETS:()=>n,EXTENSION_LINK_PATH:()=>i,APP_VERSION_MANAGE_LINK_PATH:()=>r,TAGS:()=>p,OPTION_TYPES:()=>c,EXTENSION_NAME_LENGTH_LIMIT:()=>l,MAX_ALL_FILE_SIZE:()=>T,MAX_BLOCKS_FILE_COUNT:()=>N,MAX_BLOCKS_FILE_SIZE:()=>a,MAX_BLOCKS_FILE_SIZE_3:()=>O,SUPPORTED_ASSET_EXTS:()=>I,SUPPORTED_ASSET_EXTS_3:()=>S,SUPPORTED_BUCKETS:()=>m,SUPPORTED_BUCKETS_3:()=>u,SUPPORTED_LOCALE_EXTS:()=>d,EXTENSION_CONFIG_FILE:()=>P,CHECKOUT_UI_CONFIG_FILE:()=>A,POST_PURCHASE_CONFIG_FILE:()=>L,PIXELS_CONFIG_FILE:()=>h,FUNCTION_CONFIG_FILE:()=>x,SHOPPER_CONFIG_FILE:()=>g,ERRORS:()=>U,ALL_TEMPLATES:()=>C,ALL_TEMPLATES_3:()=>F,EXTENSION_TYPES:()=>R,DEFAULT_EXTENSION_TYPE:()=>M,DEFAULT_CHECKOUT_UI_CUSTOMIZER_NAME:()=>v,DEFAULT_CHECKOUT_POST_PURCHASE_NAME:()=>y,DEFAULT_PIXELS_EXTENSION_NAME:()=>D,DEFAULT_SHOPPER_EXTENSION_NAME:()=>X});const e=require("../../utils/messages"),s=require("./types"),o={dev:"https://devcenter.myshoplinedev.com",test:"https://opendoc.myshoplinestg.com",pre:"https://devcenter-pre.myshopline.com",prod:"https://developer.myshopline.com"},t=o.prod,E="shopline-app-extension",_=["dev","test","pre","prod"],n=["section","head","body"],i="app/edit-extension",r="app/version-manage/add",p=["article","aside","div","footer","header","section"],c=["checkbox","radio","select"],l=50,T=10485760,N=25,a=102400,O=102400,I=[".jpg",".js",".css",".png",".svg",".hbs"],S=[".jpg",".js",".css",".png",".svg"],m=["assets","blocks","snippets","locales"],u=["blocks","components","i18n","public","compatibility"],d=[".json"],P=".shopline-cli.yml",A="shopline.ui.customizer.toml",L="shopline.post-purchase.customizer.toml",h="shopline.pixels.extension.toml",x="shopline.function.extension.toml",g="shopline.shopper.extension.toml",U={EXTENSION_NAME_LENGTH_LIMIT:(0,e.getMessage)("extension.create.invalid_name",{limit:l}),ENV_INVALID:(0,e.getMessage)("extension.invalid_env",{envs:_.join(", ")}),ENV_FILE_NOT_FOUND:(0,e.getMessage)("extension.no_env_file"),SHOPLINE_CONFIG_NOT_FOUND:(0,e.getMessage)("extension.no_config_file",{config_name:P}),UNSUPPORTED_PROJECT_TYPE:(0,e.getMessage)("extension.invalid_type"),REPEAT_DIR_NAME:"The theme app extension directory already exists. Please rename or use another name.",INVALID_INTERPOLATION:"must be of the form {{ apps.metafields.<namespace>.<key>.value }}",PARTNER_INFO_NOT_COMPLETE:"PARTNER_INFO_NOT_COMPLETE",USER_NOT_LOGIN:"USER_NOT_LOGIN",NOT_IN_PARTNER:"NOT_IN_PARTNER"},C=["index","collections_all","collection","products/detail","cart","blogs/list","blogs/detail","404","products/search","page","customers/login","customers/register","customers/account","customers/reset_password","customers/addresses","customers/order/list","customers/order/detail","password","app_proxy"],F=["index","collections_all","collection","product","cart","blog","article","404","search","page","policy","password","gift_card","customers/login","customers/register","customers/account","customers/addresses","customers/orders","customers/order","customers/activate_account","customers/forgot_password","customers/company","app_proxy"],R=[{label:"Theme App Extension",value:s.EExtensionTypes.themeAppExtension},{label:"Checkout UI Customizer",value:s.EExtensionTypes.checkoutUiCustomizer},!1,{label:"Shopline Pixels Extension",value:s.EExtensionTypes.pixelsExtension},{label:"Shopline Shopper Extension",value:s.EExtensionTypes.shopperExtension}].filter(Boolean),M="themeAppExtension",v="checkout-ui-customizer",y="post-purchase-customizer",D="pixels-extension",X="shopper-extension";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{ensureCurrentEnvs:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{ensureCurrentEnvs:()=>N,showEnvInfos:()=>c,showPushEnvInfos:()=>u,getCartPathFromExtension:()=>p,getCheckoutPageUrlFromExtension:()=>l,getPartnerInfoIfNeed:()=>_,ExtensionContext:()=>d});const e=require("../../utils/node-package-manager"),t=require("./const"),n=require("./env"),i=require("./extension"),r=require("./types"),E=require("./utils"),s=require("../../utils/ui/render"),o=require("../../utils/output"),a=require("../../utils/error"),I=require("./connect/context");function P(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}async function N(e,s,I,P){let N=await (0,n.resolveEnvContents)(e,s),c={},u="",l="",_="";if(N.PARTNER_ID)c.PARTNER_ID=N.PARTNER_ID,l=await (0,i.getPartnerName)(N.PARTNER_ID);else{let{id:e,partnerName:t}=await (0,i.getSelectedPartner)();c.PARTNER_ID=e,l=t}if(N.SHOPLINE_APP_KEY&&N.SHOPLINE_APP_SECRET&&N.EXTENSION_TITLE&&N.EXTENSION_UUID){c.SHOPLINE_APP_KEY=N.SHOPLINE_APP_KEY,c.SHOPLINE_APP_SECRET=N.SHOPLINE_APP_SECRET,c.EXTENSION_TITLE=N.EXTENSION_TITLE,c.EXTENSION_UUID=N.EXTENSION_UUID;let e=await (0,i.getAppName)(c.PARTNER_ID,N.SHOPLINE_APP_KEY);if(e)_=e;else throw new a.AbortError("The application name corresponding to the app key cannot be found.")}else{let e={id:c.PARTNER_ID,partnerName:l},{appKey:n,appName:r,appSecret:s}=await (0,i.getSelectedApp)(e);_=r,c.SHOPLINE_APP_KEY=n,c.SHOPLINE_APP_SECRET=s,c.EXTENSION_TITLE=t.DEFAULT_CHECKOUT_UI_CUSTOMIZER_NAME,c.EXTENSION_UUID=(0,E.generateDevUUID)()}if(N.SHOP){c.SHOP=N.SHOP;let t=(0,E.getShopHandle)(N.SHOP,e);if(t)u=await (0,i.getStoreId)(N.PARTNER_ID,t);else throw new a.AbortError(`The developer store domain \`${o.outputToken.cyan(N.SHOP)}\` you have currently configured is incorrect.`)}else{let t=await (0,i.getSelectedShop)(c.PARTNER_ID,e);c.SHOP=(0,E.getStoreUrl)(null==t?void 0:t.handle,e),u=t.storeId}if(I===r.EExtensionTypes.checkoutUiCustomizer){let{SHOPLINE_APP_KEY:e,SHOP:t}=c,n=await p(u,e,t,P);c.EXTENSION_RESOURCE_URL=n}return{envObject:c,partnerName:l,appName:_,storeId:u}}function c(e,t,n,i){let r=[`Org: ${e}`,`App: ${t}`,`Dev store: ${i}`,`Extension name: ${n}`];(0,s.renderInfo)({headline:["Using your previous dev settings",{char:":"}],body:[{list:{items:r}},"\nTo reset your default dev config, run",{command:"sl extension serve --reset"}]})}function u(e,t,n){let i=[`Org: ${e}`,`App: ${t}`,`Extension name: ${n}`];(0,s.renderInfo)({headline:["Your configs for dev were",{char:":"}],body:[{list:{items:i}},"\nTo reset your default dev config, run",{command:"sl extension push --reset"}]})}async function p(e,t,n,r){let E=await (0,i.getAvailableProductSkuId)(e,t,n,r);return`/cart/${E}:1`}function l(e){let{url:t,checkoutCartUrl:n,shop:i}=e,r=encodeURIComponent(`${t}/extensions`);return`https://${i}${n}?dev=${r}`}async function _(e,t){try{let r=await (0,n.resolveEnvContents)(e,t);if(r.PARTNER_ID){let e=await (0,i.getPartnerName)(r.PARTNER_ID);return{id:r.PARTNER_ID,partnerName:e}}}catch(e){}return(0,i.getSelectedPartner)()}class d{async getPackageManager(){return(0,e.getPackageManager)(this.cwd)}readEnvContent(){let e=(0,n.resolveEnvContents)(this.env,this.cwd);return e}async getInitializeLocaleEnvInNeed(){let e=await this.getPartnerInfoIfNeed(),t=await this.getAppInfo(e);return{partnerInfo:e,appInfo:t}}async getPartnerInfoIfNeed(){if(this.envObject.PARTNER_ID){let e=this.envObject.PARTNER_ID,t=await (0,i.getPartnerName)(e);return{id:e,partnerName:t}}return(0,i.getSelectedPartner)()}async getExtInfo(e){try{let t=(0,E.getExtType)(this.type),n=await (0,I.getAppExts)(e,t);return null==n?void 0:n[0]}catch(e){return null}}async getExt(e){var t,n,i;let r=await this.getExtInfo(e),s=null===(t=await (0,E.getExtensionConfig)(this.type,this.cwd))||void 0===t?void 0:t.name;return{extensionId:(null==r?void 0:r.id)?String(r.id):"",extensionUuid:null!==(n=null==r?void 0:r.uuid)&&void 0!==n?n:"",extensionName:null!==(i=null==r?void 0:r.name)&&void 0!==i?i:s}}async getFuncAppInfo(e){if(this.envObject.SHOPLINE_APP_KEY&&this.envObject.SHOPLINE_APP_SECRET&&this.envObject.EXTENSION_TITLE&&this.envObject.EXTENSION_UUID){let{SHOPLINE_APP_KEY:t,SHOPLINE_APP_SECRET:n,EXTENSION_TITLE:r,EXTENSION_UUID:E}=this.envObject,s=await (0,i.getAppName)(e.id,this.envObject.SHOPLINE_APP_KEY);if(s)return{EXTENSION_TITLE:r,appName:s,EXTENSION_UUID:E,SHOPLINE_APP_KEY:t,SHOPLINE_APP_SECRET:n};throw new a.AbortError("The application name corresponding to the app key cannot be found.")}{let{appKey:t,appName:n,appSecret:r}=await (0,i.getSelectedApp)(e),E=await this.getExt(t);return{EXTENSION_TITLE:E.extensionName,EXTENSION_UUID:E.extensionUuid,appName:n,SHOPLINE_APP_KEY:t,SHOPLINE_APP_SECRET:r}}}async getOtherAppInfo(e){if(this.envObject.SHOPLINE_APP_KEY&&this.envObject.SHOPLINE_APP_SECRET&&this.envObject.EXTENSION_TITLE&&this.envObject.EXTENSION_UUID&&this.envObject.EXTENSION_ID){let{SHOPLINE_APP_KEY:t,SHOPLINE_APP_SECRET:n,EXTENSION_TITLE:r,EXTENSION_UUID:E,EXTENSION_ID:s}=this.envObject,o=await (0,i.getAppName)(e.id,this.envObject.SHOPLINE_APP_KEY);if(o)return{EXTENSION_ID:s,EXTENSION_TITLE:r,appName:o,EXTENSION_UUID:E,SHOPLINE_APP_KEY:t,SHOPLINE_APP_SECRET:n};throw new a.AbortError("The application name corresponding to the app key cannot be found.")}if(this.type===r.EExtensionTypes.checkoutUiCustomizer||this.type.startsWith(r.EExtensionTypes.shopperExtension)){if(this.reset){var t;let{appKey:n,appName:r,appSecret:s}=await (0,i.getSelectedApp)(e),o=await (0,i.getSelectedExts)(n,(0,E.getExtType)(this.type)),a=null===(t=await (0,E.getExtensionConfig)(this.type,this.cwd))||void 0===t?void 0:t.name;return{EXTENSION_TITLE:(null==o?void 0:o.name)||a,EXTENSION_UUID:(null==o?void 0:o.uuid)||"",EXTENSION_ID:(null==o?void 0:o.id)?String(o.id):"",appName:r,SHOPLINE_APP_KEY:n,SHOPLINE_APP_SECRET:s}}let n=await (0,i.getAppName)(e.id,this.envObject.SHOPLINE_APP_KEY);return{EXTENSION_TITLE:this.envObject.EXTENSION_TITLE,EXTENSION_UUID:this.envObject.EXTENSION_UUID,EXTENSION_ID:"",appName:n,SHOPLINE_APP_KEY:this.envObject.SHOPLINE_APP_KEY,SHOPLINE_APP_SECRET:this.envObject.SHOPLINE_APP_SECRET}}{let{appKey:t,appName:n,appSecret:r}=await (0,i.getSelectedApp)(e),E=await this.getExt(t);return{EXTENSION_TITLE:E.extensionName,EXTENSION_UUID:E.extensionUuid,EXTENSION_ID:E.extensionId,appName:n,SHOPLINE_APP_KEY:t,SHOPLINE_APP_SECRET:r}}}async getAppInfo(e){return[r.EExtensionTypes.checkoutUiCustomizer,r.EExtensionTypes.themeAppExtension,r.EExtensionTypes.pixelsExtension,r.EExtensionTypes.postPurchaseCustomizer].includes(this.type)||this.type.startsWith(r.EExtensionTypes.shopperExtension)?this.getOtherAppInfo(e):this.getFuncAppInfo(e)}constructor(e,t,n,i=!1){P(this,"type",void 0),P(this,"cwd",void 0),P(this,"env",void 0),P(this,"envObject",void 0),P(this,"reset",void 0),this.type=null!=e?e:r.EExtensionTypes.themeAppExtension,this.env=t,this.cwd=null!=n?n:process.cwd(),this.envObject=this.readEnvContent(),this.reset=i}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{createEntry:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{createEntry:()=>E,beforeCreate:()=>x,getSelectedExtType:()=>y,buildGenerateOptions:()=>g,renderSuccessMessage:()=>m});const e=require("fs-extra"),t=require("../../../utils/ui/ui"),n=require("../env"),r=require("../extension"),i=require("../types"),o=require("../utils"),s=require("../api"),u=require("../generate"),a=require("../../../utils/error"),p=require("../const"),l=require("../../../utils/path"),c=require("../../../utils/output"),f=require("../../../utils/ui/render"),d=require("../functions/info"),h=function(e){return e&&e.__esModule?e:{default:e}}(require("../../../utils/winston"));async function E(e){let t=await x(e),n=await g(t),r=await (0,u.generateExtension)(n);await m(r),h.default.log(`Extension created: ${r.directory}`)}async function x(t){var i;let s=null==t?void 0:t.name,u=null!==(i=null==t?void 0:t.cwd)&&void 0!==i?i:process.cwd(),f=await (0,n.getEnv)();h.default.log(`Current store environment: ${f}`);let d=await y(),E=(0,o.getExtensionName)(s,d);h.default.log(`Current extension name: ${E}`),function(t,n){if(!t)throw new a.AbortError("Please specify an extension name");if(t.length>p.EXTENSION_NAME_LENGTH_LIMIT)throw new a.AbortError(p.ERRORS.EXTENSION_NAME_LENGTH_LIMIT);if((0,e.existsSync)((0,l.joinPath)(n,t)))throw new a.AbortError((0,c.outputContent)`${c.outputToken.cyan(t)} directory already exists.`.value)}(E,u);let x=await (0,r.getSelectedPartner)(),g=await (0,r.getSelectedApp)(x);return{extensionName:E,cwd:u,env:f,partnerInfo:x,appInfo:g,type:d}}async function y(){let e=[];h.default.log("Loading function extension templates..."),e=await (0,s.getFunctionTemplates)(),h.default.log("Choosing extension type to create...");let n=await (0,t.renderSelectPrompt)({message:"What type of extension are you creating?",choices:(0,o.buildExtensionTypeChoice)(e)});return h.default.log(`Current selected extension type: ${n}`),n}async function g(e){let{extensionName:t,appInfo:n,type:r,env:o,cwd:s,partnerInfo:u}=e,a=async()=>{if(r===i.EExtensionTypes.themeAppExtension)return"https://github.com/shoplineos/theme-app-extension-template.git";if(r===i.EExtensionTypes.checkoutUiCustomizer)return"https://github.com/shoplineos/checkout-ui-customizer-template.git";if(r===i.EExtensionTypes.postPurchaseCustomizer)return SL_DEFAULT_POST_PURCHASE_CUSTOMIZER_REPO;if(r===i.EExtensionTypes.pixelsExtension)return"https://github.com/shoplineos/pixels-extension-template.git";if(r===i.EExtensionTypes.shopperExtension)return"https://github.com/shoplineos/shopper-app-template.git";let e=await (0,d.getFunctionInfo)(r);if(e)return e.templateGit},p=await a();return h.default.log(`Current clone url: ${p}`),{name:t,app:{appKey:n.appKey,appSecret:n.appSecret},partnerId:u.id,type:r,cloneUrl:p,env:o,cwd:s}}async function m(e){let{specification:t}=e,n={headline:["Your extension was created in",{filePath:e.directory},{char:"."}],nextSteps:[],reference:[]};t.type===i.EExtensionTypes.checkoutUiCustomizer&&n.nextSteps.push(["To preview this extension along with the rest of the project, run",{command:"sl extension serve"}]),(0,f.renderSuccess)(n)}
|
|
@@ -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:()=>
|
|
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:()=>v,getStoreId:()=>m,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 v(e,r){let a=await (0,t.getAccessToken)({storeId:e,appKey:r});return a.token||""}async function m(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 v(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;(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=(()=>{var t;let r=e.products.find(e=>e.variants.length&&e.variants.some(e=>e.id));return null===(t=null==r?void 0:r.variants[0])||void 0===t?void 0:t.id})();if(t)return t}}catch(e){throw l}throw l}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"generateExtension",{enumerable:!0,get:()=>g});const e=f(require("pathe")),t=require("./types"),a=require("./clone-repo"),i=require("../../utils/path"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"generateExtension",{enumerable:!0,get:()=>g});const e=f(require("pathe")),t=require("./types"),a=require("./clone-repo"),i=require("../../utils/path"),o=require("../../utils/hbs"),n=require("../../utils/fs"),l=require("../../utils/node-package-manager"),s=require("../../utils/ui/ui"),r=require("../../utils/output"),p=require("./env"),u=require("./utils"),d=require("./functions/generate"),c=f(require("../../utils/winston"));function f(e){return e&&e.__esModule?e:{default:e}}async function g(a){switch(a.type){case t.EExtensionTypes.themeAppExtension:await m(a);break;case t.EExtensionTypes.checkoutUiCustomizer:await w(a);break;case t.EExtensionTypes.postPurchaseCustomizer:await E(a);break;case t.EExtensionTypes.pixelsExtension:await y(a);break;case t.EExtensionTypes.shopperExtension:await $(a);break;default:await (0,d.initFunctionExtension)(a)}return{directory:(0,i.relativizePath)(e.default.join(a.cwd,a.name),a.cwd),specification:a}}async function y(e){let{app:{appKey:t,appSecret:l},name:s,env:r,cwd:p,cloneUrl:u,partnerId:d}=e,f=(0,i.joinPath)(p,`.${s}`);c.default.log(`Downloading repository: ${u}`),await (0,a.downloadRepository)(u,f,p);let g=(0,i.joinPath)(f,"templates"),y=(0,i.joinPath)(p,s);(0,n.pathExists)(g)&&(c.default.log(`Copying template files from ${g} to ${y}`),await (0,o.recursiveHbsTemplateCopy)(g,y,{name:s},f),await P(y),c.default.log(`Write .env.${r} file`),h({partnerId:d,appKey:t,appSecret:l,name:s},r,p))}async function w(e){let{app:{appKey:t,appSecret:l},name:s,env:r,cwd:p,cloneUrl:u,partnerId:d}=e,f=(0,i.joinPath)(p,`.${s}`);c.default.log(`Downloading repository: ${u}`),await (0,a.downloadRepository)(u,f,p);let g=(0,i.joinPath)(p,s);(0,n.pathExists)(f)&&(c.default.log(`Copying template files from ${f} to ${g}`),await (0,o.recursiveHbsTemplateCopy)(f,g,{name:s},f),await P(g),c.default.log(`Write .env.${r} file`),h({partnerId:d,appKey:t,appSecret:l,name:s},r,p))}async function E(e){let{app:{appKey:t,appSecret:l},name:s,env:r,cwd:p,cloneUrl:u,partnerId:d}=e,f=(0,i.joinPath)(p,`.${s}`);c.default.log(`Downloading repository: ${u}`),await (0,a.downloadRepository)(u,f,p);let g=(0,i.joinPath)(p,s);(0,n.pathExists)(f)&&(c.default.log(`Copying template files from ${f} to ${g}`),await (0,o.recursiveHbsTemplateCopy)(f,g,{name:s},f),await P(g),c.default.log(`Write .env.${r} file`),h({partnerId:d,appKey:t,appSecret:l,name:s},r,p))}async function m(e){let{app:{appKey:t,appSecret:n},name:l,env:s,cwd:r,cloneUrl:p,partnerId:u}=e,d=(0,i.joinPath)(r,`.${l}`),f=(0,i.joinPath)(r,l);c.default.log(`Downloading repository: ${p}`),await (0,a.downloadRepository)(p,d,r,{"--branch":"main"}),c.default.log(`Copying template files from .${l} to ${l}`),await (0,o.recursiveThemeTemplateCopy)(d,f),c.default.log(`Write .env.${s} file`),h({partnerId:u,appKey:t,appSecret:n,name:l},s,r)}async function $(e){let{app:{appKey:t,appSecret:l},name:s,env:r,cwd:p,cloneUrl:u,partnerId:d}=e,f=(0,i.joinPath)(p,`.${s}`);c.default.log(`Downloading repository: ${u}`),await (0,a.downloadRepository)(u,f,p);let g=(0,i.joinPath)(p,s);(0,n.pathExists)(f)&&(c.default.log(`Copying template files from ${f} to ${g}`),await (0,o.recursiveHbsTemplateCopy)(f,g,{name:s},f),c.default.log(`Write .env.${r} file`),h({partnerId:d,appKey:t,appSecret:l,name:s},r,p))}function h(e,t,a){let i={PARTNER_ID:e.partnerId,SHOPLINE_APP_KEY:e.appKey,SHOPLINE_APP_SECRET:e.appSecret,EXTENSION_TITLE:e.name,EXTENSION_UUID:(0,u.generateDevUUID)()};(0,p.writeEnvFile)(t,i,`${a}/${e.name}`),(0,r.outputCompleted)((0,r.outputContent)`.env saved to project root`)}async function P(e){c.default.log("Get package manager...");let t=await (0,l.getPackageManager)(e);c.default.log(`Using ${t}`),c.default.log("Installing dependencies..."),await (0,s.renderTasks)([{title:`Installing dependencies with ${t}`,task:async()=>{await (0,l.addNPMDependencies)([],{type:"prod",directory:e,packageManager:t})}}]),c.default.log("Dependencies installed successfully"),(0,r.outputCompleted)((0,r.outputContent)`Dependencies installed`)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"pushExtension",{enumerable:!0,get:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"pushExtension",{enumerable:!0,get:()=>c});const e=require("../../../utils/error"),t=require("../context"),n=require("../env"),r=require("../types"),i=require("../utils"),s=require("./checkout-ui"),o=require("./pixels"),u=require("./shopper"),a=require("./theme"),p=require("./show"),l=require("../functions/push"),h=function(e){return e&&e.__esModule?e:{default:e}}(require("../../../utils/winston")),x=require("./post-purchase");async function c(c,E){var w;let{env:d}=c,f=null!==(w=null==c?void 0:c.cwd)&&void 0!==w?w:process.cwd(),q=await (0,n.getEnv)(d);h.default.log(`Current store environment: ${q}`);let m=await (0,i.getExtensionType)(f);if(h.default.log(`Current selected extension type: ${m}`),!m)throw new e.AbortError("Unknown extension type");c.reset&&(h.default.log("Clearing environment variables..."),(0,n.clearEnvFile)(q,f));let v=new t.ExtensionContext(m,q,f,c.reset);E||(h.default.log("Show environment information..."),await (0,p.showReuseInfo)(v)),m===r.EExtensionTypes.themeAppExtension?await (0,a.pushThemeExt)(v):m===r.EExtensionTypes.checkoutUiCustomizer?await (0,s.pushCheckoutUiCustomizer)(v):m===r.EExtensionTypes.pixelsExtension?await (0,o.pushPixelsExtension)(v):m.startsWith(r.EExtensionTypes.shopperExtension)?await (0,u.pushShopperExtension)(v):m===r.EExtensionTypes.postPurchaseCustomizer?await (0,x.pushPostPurchaseCustomizer)(v):await (0,l.pushFunctionExt)(v)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}(exports,{pushPostPurchaseCustomizer:()=>T,buildPostPurchaseExtension:()=>h});const e=S(require("fs")),t=S(require("archiver")),i=S(require("form-data")),a=S(require("path")),n=require("../../../utils/error"),o=require("../api"),r=require("../../../utils/ui/ui"),u=require("../env"),l=require("../const"),s=require("../../../utils/path"),p=require("../../../utils/node-package-manager"),c=require("../../../utils/system"),d=require("../zip"),f=require("../../../utils/ui/render"),E=require("../utils"),g=require("../serve/localization"),P=require("../../../utils/output"),w=S(require("../../../utils/winston"));function S(e){return e&&e.__esModule?e:{default:e}}async function T(e){let t=e.readEnvContent();w.default.log("Create post purchase instance...");let i=await y(t);(0,P.outputDebug)((0,P.outputContent)`Write ${P.outputToken.json(i)} content to ${P.outputToken.cyan(`.env.${e.env}`)} file to ${e.cwd}`),w.default.log(`Write .env.${e.env} file...`),(0,u.writeEnvFile)(e.env,i,e.cwd),w.default.log("Validate localization files..."),await _(e.cwd),w.default.log("Build post purchase..."),await I(e.cwd);let a=(0,s.joinPath)(e.cwd,`${t.EXTENSION_TITLE}.zip`);w.default.log("Compress post purchase..."),await v(a,e.cwd),w.default.log("Push post purchase..."),await N(i,a,e),w.default.log("Push post purchase success!"),(0,P.outputDebug)("Remove .zip file"),w.default.log("Remove .zip file..."),(0,d.removeZip)(a)}async function h(t){let i=t.readEnvContent();w.default.log("Create post purchase instance...");let n=await y(i);(0,P.outputDebug)((0,P.outputContent)`Write ${P.outputToken.json(n)} content to ${P.outputToken.cyan(`.env.${t.env}`)} file`),w.default.log(`Write .env.${t.env} file...`),(0,u.writeEnvFile)(t.env,n,t.cwd),w.default.log("Validate localization files..."),await _(t.cwd),w.default.log("Build post purchase..."),await I(t.cwd);let r=a.default.join(t.cwd,".plugin.zip");w.default.log("Compress post purchase..."),await v(r,t.cwd);let l=a.default.join(t.cwd,".plugin.json"),{SHOPLINE_APP_KEY:s,SHOPLINE_APP_SECRET:p,EXTENSION_ID:c,EXTENSION_UUID:d}=n;w.default.log("Write configuration to .plugin.json file..."),e.default.writeFileSync(l,JSON.stringify({appKey:s,appSecret:p,extensionId:c,extensionUuid:d,type:o.ERegisterType.POST_PURCHASE,category:o.ECategory.POST_PURCHASE},null,2))}async function y(e){let t=e;return t.EXTENSION_ID&&t.EXTENSION_UUID?e:(await (0,r.renderTasks)([{title:"Registering with SHOPLINE",task:async()=>{let i=await (0,o.createExtensionInstance)({appKey:e.SHOPLINE_APP_KEY,appSecret:e.SHOPLINE_APP_SECRET,name:e.EXTENSION_TITLE,type:o.ERegisterType.POST_PURCHASE,category:o.ECategory.POST_PURCHASE}),{id:a,uuid:r}=i||{};if(!a||!r)throw new n.AbortError("Failed to register. Please retry again!");t.EXTENSION_ID=a,t.EXTENSION_UUID=r}}]),t)}async function _(e){(0,P.outputDebug)("Validating locales/*.json default localization file");let t=await (0,g.getLocalizationFilePaths)({directory:e}),i=(0,g.findDefaultLocale)(t);(0,g.validateDefaultLanguage)(i,t)}async function I(e){(0,P.outputDebug)("Start build post purchase");let t=await (0,p.getPackageManager)(e);await (0,r.renderConcurrent)({processes:[{prefix:`Building extension with ${t}`,action:async(e,i)=>{let a=[];"npm"===t&&a.push("run"),a.push("build"),await (0,c.exec)(t,a,{stdout:e,stderr:i})}}],showTimestamps:!1})}function v(i,a){return new Promise((o,r)=>{(0,P.outputDebug)((0,P.outputContent)`Compressing to ${P.outputToken.path(i)}`);let u=(0,t.default)("zip",{zlib:{level:9}}),s=e.default.createWriteStream(i);s.on("close",()=>{}),s.on("finish",()=>{o({size:u.pointer()})}),u.on("error",()=>{r(new n.AbortError("Failed to compress!"))}),u.pipe(s),u.glob("locales/**/*.json",{cwd:a}).glob("build/**/*.js",{cwd:a}).glob(l.POST_PURCHASE_CONFIG_FILE,{cwd:a}).finalize()})}async function N(e,t,i){(0,P.outputDebug)((0,P.outputContent)`Pushing ${P.outputToken.path(t)} file to remote`),await (0,r.renderTasks)([{title:"Pushing your extension to Shopline",task:async()=>{await O(e,t,i)}}])}async function O(t,a,r){let u=e.default.createReadStream(a),l=new i.default;l.append("extensionFile",u),l.append("appKey",t.SHOPLINE_APP_KEY),l.append("appSecret",t.SHOPLINE_APP_SECRET),l.append("extensionId",t.EXTENSION_ID),l.append("extensionUuid",t.EXTENSION_UUID),l.append("type",o.ERegisterType.POST_PURCHASE),l.append("category",o.ECategory.POST_PURCHASE);let s=await (0,o.pushExtension)(l);if(null==s?void 0:s.id){let e=(0,E.getAppVersionManageLink)({appKey:t.SHOPLINE_APP_KEY,env:r.env});(0,f.renderSuccess)({headline:["Pushed",{userInput:t.EXTENSION_TITLE},"to a draft on",(0,E.formatTime)(s.updateTime)],body:["Visit",{link:{label:e,url:e}},"to version and publish your extension",{char:"."}]})}else(0,f.renderFatalError)(new n.AbortError(`Pushed to SHOPLINE with errors on ${(0,E.formatTime)()}`))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{devUiCustomizer:()=>l,devPixelsExtension:()=>c});const e=require("../../../utils/output"),t=require("../context"),n=require("./bundler"),o=require("./payload"),r=require("./server"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{devUiCustomizer:()=>l,devPixelsExtension:()=>c});const e=require("../../../utils/output"),t=require("../context"),n=require("./bundler"),o=require("./payload"),r=require("./server"),s=require("./websocket"),i=require("../../../utils/abort"),u=function(e){return e&&e.__esModule?e:{default:e}}(require("../../../utils/winston")),a=require("../../../utils/ui/ui");async function l(i){let a={...i,checkoutCartUrl:await (0,t.getCartPathFromExtension)(i.storeId,i.appKey,i.shop,i.extension.noProductErrorMessage)},l={...a,websocketURL:function(e){let t=new URL("/extensions",e);return t.protocol="wss:",t.toString()}(i.url)},c=await (0,o.getExtensionsPayloadStoreRawPayload)(i.extension,l),d=new o.ExtensionsPayloadStore(c,l);(0,e.outputDebug)("Setting up the UI extensions HTTP server..."),u.default.log("Setting up the UI extensions HTTP server...");let p=(0,r.setupHTTPServer)({devOptions:a,payloadStore:d});(0,e.outputDebug)("Setting up the UI extensions Websocket server..."),u.default.log("Setting up the UI extensions Websocket server...");let g=(0,s.setupWebsocketConnection)({...i,httpServer:p,payloadStore:d});(0,e.outputDebug)("Setting up the UI extensions bundler and file watching..."),u.default.log("Setting up the UI extensions bundler and file watching...");let x=await (0,n.setupBundlerAndFileWatcher)({devOptions:a,payloadStore:d});i.signal.addEventListener("abort",()=>{x.close(),g.close(),p.close()})}async function c(t){let o=new i.AbortController;o.signal.addEventListener("abort",()=>{(0,e.outputDebug)(`Closing locale file watching for extension with ID ${t.extension.uuid}`)}),await (0,a.renderConcurrent)({processes:[{prefix:"Serve Pixels Extension",action:async(e,o,r)=>{await (0,n.servePixelsExtension)(t,{stdout:e,stderr:o,signal:r})}}],showTimestamps:!1,abortController:o})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var
|
|
1
|
+
"use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var o in t)Object.defineProperty(e,o,{enumerable:!0,get:t[o]})}(exports,{ExtensionsPayloadStoreEvent:()=>e,getExtensionsPayloadStoreRawPayload:()=>d,getUiCustomizerPayload:()=>c,ExtensionsPayloadStore:()=>p,getExtensionPoints:()=>y,getUiCustomizer:()=>P,getUiConfiguration:()=>f,reloadNoticePath:()=>x,getReloadNoticeUrl:()=>g,getPreviewPath:()=>U});const t=function(e){return e&&e.__esModule?e:{default:e}}(require("events")),o=require("../../../utils/fs"),i=require("./localization"),n=require("../schemas"),a=require("../../../utils/output"),r=require("../loader"),s=require("../../../utils/path"),u=require("../const");function l(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}async function d(e,t){return{root:{url:new URL("/extensions",t.url).toString()},socket:{url:t.websocketURL},store:t.shop,extensions:[await c(e,t)]}}async function c(e,t){var n,a,r,s;let{localization:u}=await (0,i.getLocalization)(e),l={assets:{main:{name:"main",url:`${t.url}/assets/main.js`,lastUpdated:null!==(r=await (0,o.fileLastUpdatedTimestamp)(e.outputBundlePath))&&void 0!==r?r:0}},capabilities:{blockProgress:(null===(n=e.configuration.capabilities)||void 0===n?void 0:n.block_progress)||!1,networkAccess:(null===(a=e.configuration.capabilities)||void 0===a?void 0:a.network_access)||!1},extensionPoints:e.configuration.extensionPoints,localization:null!=u?u:null,type:e.configuration.type,externalType:e.externalType,uuid:e.devUUID,version:"0",title:e.configuration.name,approvalScopes:[]};return l}(e||(e={})).Update="PayloadUpdatedEvent:UPDATE";class p extends t.default{getConnectedPayload(){let e=this.getRawPayload();return{root:e.root,socket:e.socket,store:e.store,extensions:e.extensions}}getRawPayload(){return this.rawPayload}getRawPayloadFilteredByExtensionIds(e){return{...this.rawPayload,extensions:this.rawPayload.extensions.filter(t=>e.includes(t.uuid))}}async updateExtension(e,t){let o=this.rawPayload.extensions,i=o.findIndex(t=>t.uuid===e.devUUID);if(-1===i){(0,a.outputDebug)((0,a.outputContent)`Could not updateExtension() for extension with uuid: ${e.devUUID}`);return}o[i]=await c(e,{...t}),this.rawPayload.extensions=o,this.emitUpdate([e.devUUID])}emitUpdate(t){this.emit(e.Update,t)}constructor(e,t){super(),l(this,"options",void 0),l(this,"rawPayload",void 0),this.rawPayload=e,this.options=t}}function y(e){return e}async function P(e){return{type:e.type,configuration:await f(e),devUUID:e.uuid,directory:e.cwd,externalType:e.externalType,outputBundlePath:e.outputBundlePath,noProductErrorMessage:e.noProductErrorMessage}}async function f(e){let t={checkout_ui_customizer:u.CHECKOUT_UI_CONFIG_FILE,post_purchase_customizer:u.POST_PURCHASE_CONFIG_FILE},o=await (0,r.parseConfigurationFile)(n.BaseUiCustomizerSchema,(0,s.joinPath)(e.cwd,t[e.type]));return{name:e.name,type:e.type,extensionPoints:o.extensionPoints,capabilities:o.capabilities}}const x="/reloadNotice";function g(e){return`${e}${x}`}function U(e){return`/extensions/${e}`}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"serve",{enumerable:!0,get:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"serve",{enumerable:!0,get:()=>h});const e=require("../../utils/error"),t=require("./types"),r=require("./utils"),o=require("./env"),n=require("./context"),i=require("../../utils/tcp"),s=require("./serve/extension"),u=require("./serve/payload"),a=require("../../utils/path"),l=require("../../utils/abort"),p=require("../../utils/output"),c=require("./functions/info"),d=function(e){return e&&e.__esModule?e:{default:e}}(require("../../utils/winston")),E=require("./tunnel/cloudflared"),v={[t.EExtensionTypes.checkoutUiCustomizer]:{externalType:"checkout_ui",type:"checkout_ui_customizer",noProductErrorMessage:"Your store needs to have at least one product to serve checkout ui customizer"},[t.EExtensionTypes.postPurchaseCustomizer]:{externalType:"post_purchase",type:"post_purchase_customizer",noProductErrorMessage:"Your store needs to have at least one product to serve post purchase customizer"}};async function h(h){var w;let P=await (0,o.getEnv)();d.default.log(`Current store environment: ${P}`);let g=null!==(w=null==h?void 0:h.cwd)&&void 0!==w?w:process.cwd(),x=await (0,r.getExtensionType)(g);if(d.default.log(`Current selected extension type: ${x}`),x===t.EExtensionTypes.themeAppExtension)throw new e.AbortError("Shopline extension serve is not support for theme app extension.");if(await (0,c.isFunctionType)(x))throw new e.AbortError("Shopline extension serve is not support for Functions extension.");h.reset&&(d.default.log("Clearing environment variables..."),(0,o.clearEnvFile)(P,g)),d.default.log("Ensure current environment...");let{envObject:y,appName:T,partnerName:m,storeId:b}=await (0,n.ensureCurrentEnvs)(P,g,x,v[x].noProductErrorMessage);d.default.log("Write environment variables..."),(0,o.writeEnvFile)(P,y,g),d.default.log("Show environment information..."),(0,n.showEnvInfos)(m,T,y.EXTENSION_TITLE,y.SHOP),h.port&&(d.default.log("Checking port..."),await f(h.port)),d.default.log("Get Available TCP Port...");let _=await (0,i.getAvailableTCPPort)();if(d.default.log(`Web Proxy Port: ${_}`),x===t.EExtensionTypes.checkoutUiCustomizer||x===t.EExtensionTypes.postPurchaseCustomizer){d.default.log("Start cloudflared tunnel...");let e=await (0,E.startTunnel)(_);d.default.log(`Tunnel URL: ${e}`),(0,p.outputSuccess)((0,p.outputContent)`cloudflared tunnel running at ${p.outputToken.link(e,e)}.`);let t=new l.AbortController;await (0,s.devUiCustomizer)({extension:await (0,u.getUiCustomizer)({name:y.EXTENSION_TITLE,cwd:g,externalType:v[x].externalType,outputBundlePath:(0,a.joinPath)(g,"build/main.js"),uuid:y.EXTENSION_UUID,type:v[x].type,noProductErrorMessage:v[x].noProductErrorMessage}),reloadNoticeUrl:(0,u.getReloadNoticeUrl)(e),appKey:y.SHOPLINE_APP_KEY,shop:y.SHOP,storeId:b,port:h.port,webProxyPort:_,signal:t.signal,url:e,previewPath:(0,u.getPreviewPath)(y.EXTENSION_UUID)})}else x===t.EExtensionTypes.pixelsExtension&&await (0,s.devPixelsExtension)({extension:{uuid:y.EXTENSION_UUID,directory:h.cwd},port:h.port,shop:y.SHOP})}async function f(t){if(!t)throw new e.AbortError("Please provide a port number");let r=await (0,i.checkPortAvailability)(t);if(!r)throw new e.AbortError(`Development port ${t} is not available, please choose another one.`)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t,n;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{ExtensionType:()=>e,EFunctionTypes:()=>t,EExtensionTypes:()=>n}),function(e){e.THEME_APP_EXTENSION="THEME_APP_EXTENSION",e.CHECKOUT_UI_CUSTOMIZER="CHECKOUT_UI_CUSTOMIZER"}(e||(e={})),(t||(t={})).PaymentCustomization="PaymentCustomization",function(e){e.themeAppExtension="themeAppExtension",e.checkoutUiCustomizer="checkoutUiCustomizer",e.pixelsExtension="pixelsExtension",e.shopperExtension="shopperExtension"}(n||(n={}));
|
|
1
|
+
"use strict";var e,t,n;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{ExtensionType:()=>e,EFunctionTypes:()=>t,EExtensionTypes:()=>n}),function(e){e.THEME_APP_EXTENSION="THEME_APP_EXTENSION",e.CHECKOUT_UI_CUSTOMIZER="CHECKOUT_UI_CUSTOMIZER"}(e||(e={})),(t||(t={})).PaymentCustomization="PaymentCustomization",function(e){e.themeAppExtension="themeAppExtension",e.checkoutUiCustomizer="checkoutUiCustomizer",e.postPurchaseCustomizer="postPurchaseCustomizer",e.pixelsExtension="pixelsExtension",e.shopperExtension="shopperExtension"}(n||(n={}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}(exports,{extractSchema:()=>y,removeFile:()=>x,getEnvPath:()=>N,formatTime:()=>I,getExtensionLink:()=>_,getAppVersionManageLink:()=>
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}(exports,{extractSchema:()=>y,removeFile:()=>x,getEnvPath:()=>N,formatTime:()=>I,getExtensionLink:()=>_,getAppVersionManageLink:()=>P,getDeveloperPlatformLink:()=>S,getStoreUrl:()=>O,getShopHandle:()=>w,validateSchemaError:()=>F,isMatchedInterpolation:()=>v,getNonMatchedOptionInterpolation:()=>C,buildPartnerChoice:()=>$,buildAppChoice:()=>g,buildExtChoice:()=>L,buildExtensionTypeChoice:()=>A,buildStoreChoice:()=>U,getExtensionType:()=>j,getExtensionConfig:()=>b,generateDevUUID:()=>q,getExtShowType:()=>D,getExtType:()=>R,getExtensionName:()=>X});const e=require("path"),t=d(require("fs-extra")),i=require("uuid"),n=require("light-date"),o=d(require("js-yaml")),s=require("./const"),r=require("./types"),a=require("./api"),p=d(require("../../utils/colors")),l=require("../../utils/path"),u=require("../../utils/fs"),E=require("../../utils/toml"),c=require("./schemas"),m=require("../../utils/error"),f=require("./functions/schemas"),h=require("./functions/info"),T=require("./push/shopper");function d(e){return e&&e.__esModule?e:{default:e}}function y(e){let t=e.match(/{{\s*#schema\s*}}([\s\S]*?){{\s*\/schema\s*}}/);return t?t[1]:""}function x(e){t.default.existsSync(e)&&t.default.removeSync(e)}function N(t,i=process.cwd()){return t?(0,e.join)(i,`.env.${t}`):(0,e.join)(i,".env")}function I(e=Date.now(),t="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}"){let i=new Date(e);return(0,n.format)(i,t)}function _(e){let t=s.DEFAULT_EXTENSION_ENDPOINT;return e.env&&(t=s.EXTENSION_ENDPOINTS[e.env]),`${t}/${s.EXTENSION_LINK_PATH}/${e.appKey}/${e.extensionUuid}`}function P(e){let t=s.DEFAULT_EXTENSION_ENDPOINT;return e.env&&(t=s.EXTENSION_ENDPOINTS[e.env]),`${t}/${s.APP_VERSION_MANAGE_LINK_PATH}?appKey=${e.appKey}`}function S(e){return e?s.EXTENSION_ENDPOINTS[e]:s.DEFAULT_EXTENSION_ENDPOINT}function O(e,t){return"dev"===t?`${e}.myshoplinedev.com`:"test"===t?`${e}.myshoplinestg.com`:"pre"===t?`${e}.preview.myshopline.com`:`${e}.myshopline.com`}function w(e,t){if("dev"===t){let t=e.match(/^([^.]+)\.myshoplinedev\.com$/);return null==t?void 0:t[1]}if("test"===t){let t=e.match(/^([^.]+)\.myshoplinestg\.com$/);return null==t?void 0:t[1]}if("pre"===t){let t=e.match(/^([^.]+)\.preview\.myshopline\.com$/);return null==t?void 0:t[1]}if("prod"===t){let t=e.match(/^([^.]+)\.myshopline\.com$/);return null==t?void 0:t[1]}let i=e.match(/^([^.]+)\.myshopline\.com$/);return null==i?void 0:i[1]}function F(e){return(t,i)=>{if(i)throw Error(`[${e}] Invalid tag 'schema': ${i}: ${t}`);if(t)throw Error(`[${e}] Invalid schema: ${t}`);throw Error(`[${e}] Invalid schema`)}}function v(e){return/^{{\s*apps\.metafields\.\w+(\.\w+)+?(?:\.value)\s*}}$/.test(e)}function C(e){let t=e.map((e,t)=>{if(Object.prototype.hasOwnProperty.call(e,"options")&&"string"==typeof e.options){let i=s.OPTION_TYPES.includes(e.type);if(v(e.options)&&i)return{pass:!0,reason:"",field:""};if(v(e.options))return{pass:!1,reason:`must be one of ${s.OPTION_TYPES.join(", ")}`,field:`settings[${t}].type`};if(i)return{pass:!1,reason:s.ERRORS.INVALID_INTERPOLATION,field:`settings[${t}].options`}}return{pass:!0,reason:"",field:""}});return t.filter(e=>!e.pass)}function $(e){return e.map(e=>({label:e.partnerName,value:e.id}))}function g(e,t){return e.map(e=>({label:`${e.appName} ${p.default.magenta(`by ${t}`)}`,value:e}))}function L(e){return[...e.map(e=>({label:`${e.name} ${p.default.magenta(e.type)}`,value:e})),{label:"Register a new extension",value:{}}]}function A(e){let t=s.EXTENSION_TYPES;return e.length>0?t.concat(e.map(e=>({label:`${e.templateName} - Function`,value:e.templateName}))):t}function U(e){return e.map(e=>({label:e.storeName,value:e}))}async function j(e){let i=(0,l.joinPath)(e,s.EXTENSION_CONFIG_FILE),n=(0,l.joinPath)(e,s.CHECKOUT_UI_CONFIG_FILE),a=(0,l.joinPath)(e,s.POST_PURCHASE_CONFIG_FILE),p=(0,l.joinPath)(e,s.FUNCTION_CONFIG_FILE),T=(0,l.joinPath)(e,s.PIXELS_CONFIG_FILE),d=(0,l.joinPath)(e,s.SHOPPER_CONFIG_FILE);if(await (0,u.fileExists)(i)){let e=o.default.load(t.default.readFileSync(i,"utf8"));if("extension"===e.project_type)return r.EExtensionTypes.themeAppExtension}if(await (0,u.fileExists)(n)){let e=await (0,u.readFile)(n),t=(0,E.decodeToml)(e),{type:i}=await c.TypeSchema.parse(t);if("checkout_ui_customizer"===i)return r.EExtensionTypes.checkoutUiCustomizer}if(await (0,u.fileExists)(a)){let e=await (0,u.readFile)(a),t=(0,E.decodeToml)(e),{type:i}=await c.TypeSchema.parse(t);if("post_purchase_customizer"===i)return r.EExtensionTypes.postPurchaseCustomizer}if(await (0,u.fileExists)(p)){let e=await (0,u.readFile)(p),t=(0,E.decodeToml)(e),{type:i}=await f.FunctionTypeSchema.parse(t);if(await (0,h.isFunctionType)(i))return i}if(await (0,u.fileExists)(T)){let e=await (0,u.readFile)(T),t=(0,E.decodeToml)(e),{type:i}=await c.TypeSchema.parse(t);if("shopline-pixels-extension"===i)return r.EExtensionTypes.pixelsExtension}if(await (0,u.fileExists)(d)){let e=await (0,u.readFile)(d),t=(0,E.decodeToml)(e),{type:i}=await c.TypeSchema.parse(t);if([1,2].includes(i))return`${r.EExtensionTypes.shopperExtension}--${i}`}throw new m.AbortError("The directory you are in is not a valid extension project.")}async function b(e,i){if(e===r.EExtensionTypes.themeAppExtension){let e=(0,l.joinPath)(i,s.EXTENSION_CONFIG_FILE);if(await (0,u.fileExists)(e)){let i=o.default.load(t.default.readFileSync(e,"utf8"));if("extension"===i.project_type)return{type:r.EExtensionTypes.themeAppExtension,name:"theme-app-extension"}}}if(e===r.EExtensionTypes.checkoutUiCustomizer){let e=(0,l.joinPath)(i,s.CHECKOUT_UI_CONFIG_FILE);if(await (0,u.fileExists)(e)){let t=await (0,u.readFile)(e),i=(0,E.decodeToml)(t),{name:n}=await c.TypeSchema.parse(i);return{type:r.EExtensionTypes.checkoutUiCustomizer,name:n}}}if(e===r.EExtensionTypes.postPurchaseCustomizer){let e=(0,l.joinPath)(i,s.POST_PURCHASE_CONFIG_FILE);if(await (0,u.fileExists)(e)){let t=await (0,u.readFile)(e),i=(0,E.decodeToml)(t),{name:n}=await c.TypeSchema.parse(i);return{type:r.EExtensionTypes.postPurchaseCustomizer,name:n}}}if(e===r.EExtensionTypes.pixelsExtension){let e=(0,l.joinPath)(i,s.PIXELS_CONFIG_FILE);if(await (0,u.fileExists)(e)){let t=await (0,u.readFile)(e),i=(0,E.decodeToml)(t),{name:n}=await c.TypeSchema.parse(i);return{type:r.EExtensionTypes.pixelsExtension,name:n}}}let n=(0,l.joinPath)(i,s.FUNCTION_CONFIG_FILE);if(await (0,u.fileExists)(n)){let e=await (0,u.readFile)(n),t=(0,E.decodeToml)(e),{type:i,name:o}=await f.FunctionTypeSchema.parse(t);if(await (0,h.isFunctionType)(i))return{type:i,name:o}}if(e.startsWith(r.EExtensionTypes.shopperExtension)){let t=(0,l.joinPath)(i,s.SHOPPER_CONFIG_FILE);if(await (0,u.fileExists)(t)){let i=await (0,u.readFile)(t),n=(0,E.decodeToml)(i),{name:o}=await c.TypeSchema.parse(n);return{type:(0,T.getShopperType)(e),name:o}}}throw new m.AbortError(`Invalid extension type: ${e}`)}function q(){return`dev-${(0,i.v4)()}`}function D(e){let t=s.EXTENSION_TYPES.find(t=>t.value===e);return null==t?void 0:t.label}function R(e){return e===r.EExtensionTypes.checkoutUiCustomizer?a.ERegisterType.CHECKOUT_UI:e===r.EExtensionTypes.themeAppExtension?a.ERegisterType.THEME_APP_BLOCK:e===r.EExtensionTypes.pixelsExtension?a.ERegisterType.PIXELS:e.startsWith(r.EExtensionTypes.shopperExtension)?(0,T.getShopperType)(e):e===r.EExtensionTypes.postPurchaseCustomizer?a.ERegisterType.POST_PURCHASE:void 0}function X(e,t){return e||(t===r.EExtensionTypes.checkoutUiCustomizer?"checkout-ui-customizer":t===r.EExtensionTypes.themeAppExtension?"theme-app-extension":t===r.EExtensionTypes.pixelsExtension?"shopline-pixels-extension":t.startsWith(r.EExtensionTypes.shopperExtension)?"shopper-extension":t===r.EExtensionTypes.postPurchaseCustomizer?"post-purchase-customizer":t||s.DEFAULT_EXTENSION_NAME)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}(exports,{default:()=>w,prompt:()=>v});const e=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}(exports,{default:()=>w,prompt:()=>v});const e=p(require("inquirer")),t=p(require("ora")),i=p(require("../../../utils/debug")),r=require("../../../utils/path"),s=p(require("../../../utils/print-preview")),l=require("../../../utils/output"),u=require("../types"),n=p(require("./theme")),o=require("../../../utils/ui/ui"),a=p(require("../../../utils/ignore-filter")),h=p(require("../../../utils/include-filter")),d=p(require("../../../utils/winston")),c=require("../../../utils/error"),m=require("../../../utils/check-theme-type-version");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 p(e){return e&&e.__esModule?e:{default:e}}const v=e.default.createPromptModule();class w extends i.default{async confirmPushMode(){if(this.includes.length>0||this.ignores.length>0)return;let{mode:e}=await v([{type:"list",name:"mode",message:"Please choose an action (Use arrow keys)",default:"overwrite",choices:[{name:"Push all static files (safe mode)",value:"safe"},{name:"Push all files (overwrite existing ones)",value:"overwrite"}]}]);({safe:()=>{this.includeFilter=new h.default(["!**/*.json"],this.cwd)},overwrite:()=>{}})[e]()}async push(){d.default.log("Prepare push theme...");let e=await this.prepareTheme();if(!e)return;await this.confirmPushMode();let i=(0,t.default)("Uploading your theme...").start(),r=e.id;if(e.status!==u.EThemeStatus.Unpublished||e.id){let t=new n.default({themeId:e.id,cwd:this.cwd,includeFilter:this.includeFilter,ignoreFilter:this.ignoreFilter});await t.syncTheme({nodelete:this.nodelete})}else{let t=new n.default({cwd:this.cwd,includeFilter:this.includeFilter,ignoreFilter:this.ignoreFilter}),i=await t.createNewTheme({status:e.status,name:e.name});r=i.id}i.succeed(),d.default.log(`Push theme (${r}) successfully`),(0,l.outputSuccess)("Your theme was pushed successfully"),(0,s.default)(r)}async prepareTheme(){if(this.development){let{id:e,name:t,status:i}=await n.default.getValidDevelopmentInfo();return{id:e,name:t,status:i}}if(this.live){let{id:e,name:t,status:i}=await n.default.getLiveThemeInfo();if(!e)throw new c.AbortError('Theme "live" doesn\'t exist, please try again!');return{id:e,name:t,status:i}}if(this.unpublished){let e=await w.getThemeNamePrompt();return{id:"",name:e,status:u.EThemeStatus.Unpublished}}if(this.themeId){let{id:e,name:t,status:i}=await n.default.getThemeInfo(this.themeId);return{id:e,name:t,status:i}}let{id:e,status:t,name:i,themeTypeVersion:r}=await n.default.chooseThemeList("push"),s=t===u.EThemeStatus.Published,l=(0,m.getThemeTypeVersion)(this.cwd,!0);if(l!==r)throw new c.AbortError(`The theme type version is not matched, local: ${l}, selected: ${r}`);if(s){if(this.allowAlive)return{id:e,name:i,status:t};let r=await w.confirmOverrideStoreTheme();return r?{id:e,name:i,status:t}:null}return{id:e,name:i,status:t}}static async confirmOverrideStoreTheme(){let{isOverride:e}=await v([{type:"confirm",name:"isOverride",message:"Are you sure you want to push to your live theme?",default:!0}]);return e}static async getThemeNamePrompt(){return(0,o.renderTextPrompt)({message:"Please input the unpublished theme name",validate:e=>{if(!e.trim())return"Theme name cannot be empty"}})}constructor(e,t=(0,r.cwd)()){var i,s,l,u,n;super("theme:push"),f(this,"cwd",void 0),f(this,"themeId",void 0),f(this,"live",void 0),f(this,"allowAlive",void 0),f(this,"development",void 0),f(this,"unpublished",void 0),f(this,"includeFilter",void 0),f(this,"ignoreFilter",void 0),f(this,"nodelete",void 0),f(this,"includes",void 0),f(this,"ignores",void 0),this.cwd=t,this.themeId=e.theme||"",this.live=null!==(i=e.live)&&void 0!==i&&i,this.allowAlive=e.allowLive,this.development=null!==(s=e.development)&&void 0!==s&&s,this.unpublished=e.unpublished,this.nodelete=null!==(l=e.nodelete)&&void 0!==l&&l,this.includes=null!==(u=e.only)&&void 0!==u?u:[],this.ignores=null!==(n=e.ignore)&&void 0!==n?n:[],this.log("includes: %O",this.includes),this.log("ignores: %O",this.ignores),this.includeFilter=new h.default(this.includes,this.cwd),this.ignoreFilter=new a.default(this.ignores,this.cwd)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>r});const e=require("crypto"),t=function(e){return e&&e.__esModule?e:{default:e}}(require("mime")),i=require("../../utils/path"),s=require("../../utils/fs");function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class r{get fullPath(){return(0,i.joinPath)(this.cwd,this.filePath)}get extName(){return(0,i.extname)(this.filePath)}get isExist(){return(0,s.fileExistsSync)(this.fullPath)}get isConfigSchemaFile(){return"config/settings_schema.json"===this.fileName}get isConfigFile(){return["config/settings_schema.json","config/settings_data.json"].includes(this.fileName)}get mimeType(){return this.isExist?t.default.getType(this.filePath):""}get isImageType(){var e,t;return(null===(e=this.mimeType)||void 0===e?void 0:e.startsWith("image/"))&&!(null===(t=this.mimeType)||void 0===t?void 0:t.startsWith("image/svg"))}get fileName(){return this.filePath}get fileContent(){return this.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>r});const e=require("crypto"),t=function(e){return e&&e.__esModule?e:{default:e}}(require("mime")),i=require("../../utils/path"),s=require("../../utils/fs");function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class r{get fullPath(){return(0,i.joinPath)(this.cwd,this.filePath)}get extName(){return(0,i.extname)(this.filePath)}get isExist(){return(0,s.fileExistsSync)(this.fullPath)}get isConfigSchemaFile(){return"config/settings_schema.json"===this.fileName}get isConfigFile(){return["config/settings_schema.json","config/settings_data.json"].includes(this.fileName)}get mimeType(){return this.isExist?t.default.getType(this.filePath):""}get isImageType(){var e,t;return(null===(e=this.mimeType)||void 0===e?void 0:e.startsWith("image/"))&&!(null===(t=this.mimeType)||void 0===t?void 0:t.startsWith("image/svg"))}get fileName(){return this.filePath}get fileContent(){return this.filePath.startsWith("assets/")?(0,s.readFileSync)(this.localeFullFilePath,{}):(0,s.readFileSync)(this.localeFullFilePath)}get localeFullFilePath(){let e=this.filePath.endsWith(".preview")?this.filePath.replace(".preview",""):this.filePath,t=(0,i.joinPath)(this.cwd,e);return t}get checksum(){return(0,e.createHash)("sha256").update(this.fileContent).digest("hex")}constructor(e,t){l(this,"cwd",(0,i.cwd)()),l(this,"filePath",void 0),this.filePath=e,this.cwd=t}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}(exports,{PushService:()=>T,pushAction:()=>q});const e=b(require("../../helpers/config")),t=require("./types"),i=require("./utils"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}(exports,{PushService:()=>T,pushAction:()=>q});const e=b(require("../../helpers/config")),t=require("./types"),i=require("./utils"),s=b(require("../../utils/print-preview")),r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=P(t);if(i&&i.has(e))return i.get(e);var s={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var l=r?Object.getOwnPropertyDescriptor(e,u):null;l&&(l.get||l.set)?Object.defineProperty(s,u,l):s[u]=e[u]}return s.default=e,i&&i.set(e,s),s}(require("./choose-theme-list")),u=b(require("./index")),l=b(require("../../utils/ignore-filter")),n=b(require("../../utils/include-filter")),a=require("../../utils/system"),o=b(require("../../utils/debug")),h=require("../../utils/output"),d=require("../../utils/ui/ui"),m=require("../../utils/parse-options"),c=b(require("./uploader")),f=require("../../utils/path"),p=require("../../utils/error"),v=b(require("../../utils/winston")),g=require("../../utils/check-theme-type-version"),w=b(require("./3.0/push"));function y(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function b(e){return e&&e.__esModule?e:{default:e}}function P(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(P=function(e){return e?i:t})(e)}class T extends o.default{async confirmPushMode(){if(this.includes.length>0||this.ignores.length>0)return;let{mode:e}=await (0,r.prompt)([{type:"list",name:"mode",message:"Please choose an action (Use arrow keys)",default:"overwrite",choices:[{name:"Push all static files (safe mode)",value:"safe"},{name:"Push all files (overwrite existing ones)",value:"overwrite"}]}]);({safe:()=>{this.ignoreFilter=new l.default(["**/*.json"],this.cwd),this.uploader=new c.default({ignore:this.ignoreFilter,include:this.includeFilter},!this.nodelete,this.cwd)},overwrite:()=>{}})[e]()}async push(){v.default.log("Prepare push theme...");let e=await this.prepareTheme();e&&(await this.confirmPushMode(),v.default.log(`Current push theme info: ${JSON.stringify(e)}`),await this.pushThemePackage(e))}async prepareTheme(){if(this.themeId){let e=await u.default.getThemeInfo(this.themeId);return{id:this.themeId,name:e.name,status:e.status}}if(this.live){let e=await u.default.getLiveThemeId();if(!e)throw new p.AbortError('Theme "live" doesn\'t exist, please try again!');return{id:e,name:"",status:t.EThemeStatus.Published}}if(this.development){let e=await u.default.getValidDevelopmentInfo();return e}if(this.unpublished){let e=await T.getThemeNamePrompt();return{id:"",name:e,status:t.EThemeStatus.Unpublished}}let{themeId:e,isPublished:i,status:s}=await (0,r.default)("push");if(i){if(this.allowAlive)return{id:e,name:"",status:t.EThemeStatus.Published};let i=await T.confirmOverrideStoreTheme();return i?{id:e,name:"",status:t.EThemeStatus.Published}:null}return{id:e,name:"",status:s}}async pushThemePackage(t){v.default.log("Get theme info from local...");let r=(0,i.getThemeInfo)(this.cwd),u=t.id?{themeId:t.id,status:t.status}:{themeName:t.name,status:t.status};u.themeName&&(v.default.log(`Create a new theme base on ${u.themeName}...`),u.themeId=await c.default.createNewTheme(u.themeName));let l=u.themeId;console.log((0,i.getKeyMessage)(`Pushing theme files to ${decodeURIComponent(t.id?null==r?void 0:r.theme_name:t.name)} ${t.id?`(#${t.id}) `:""}on ${e.default.currentStore}`)),v.default.log(`Pushing theme (${l}) files...`),await this.uploader.upload(l,u.status),this.live?(v.default.log(`Publish theme (${l}) to live successfully`),(0,h.outputSuccess)(`Your theme is now live at ${e.default.currentStore}`)):(v.default.log(`Push theme (${l}) successfully`),(0,h.outputSuccess)("Your theme was pushed successfully"),(0,s.default)(l))}static async confirmOverrideStoreTheme(){let{isOverride:e}=await (0,r.prompt)([{type:"confirm",name:"isOverride",message:"Are you sure you want to push to your live theme?",default:!0}]);return e}static async getThemeNamePrompt(){return(0,d.renderTextPrompt)({message:"Please input the unpublished theme name",validate:e=>{if(!e.trim())return"Theme name cannot be empty"}})}constructor(e,t=(0,f.cwd)()){var i,s,r,u;super("theme:push"),y(this,"cwd",void 0),y(this,"themeId",void 0),y(this,"live",void 0),y(this,"development",void 0),y(this,"allowAlive",void 0),y(this,"publish",void 0),y(this,"unpublished",void 0),y(this,"includeFilter",void 0),y(this,"ignoreFilter",void 0),y(this,"uploader",void 0),y(this,"nodelete",void 0),y(this,"includes",void 0),y(this,"ignores",void 0),this.cwd=t,this.themeId=e.theme||"",this.live=null!==(i=e.live)&&void 0!==i&&i,this.development=null!==(s=e.development)&&void 0!==s&&s,this.allowAlive=e.allowLive,this.unpublished=e.unpublished,this.nodelete=e.nodelete,this.includes=null!==(r=e.only)&&void 0!==r?r:[],this.ignores=null!==(u=e.ignore)&&void 0!==u?u:[],this.log("includes: %O",this.includes),this.log("ignores: %O",this.ignores),this.includeFilter=new n.default(this.includes,this.cwd),this.ignoreFilter=new l.default(this.ignores,this.cwd),this.uploader=new c.default({ignore:this.ignoreFilter,include:this.includeFilter},!this.nodelete,t)}}async function q(t,s){try{let i=await (0,m.parseOptions)(t,s),r=i.path;v.default.log("Checking login..."),e.default.isLogin();let u=(0,g.getThemeTypeVersion)(r);(0,a.rmZipOnExit)(void 0,r),3===u?await new w.default(i,r).push():await new T(i,r).push()}catch(e){(0,i.handleError)(e)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>k});const e=F(require("fs-extra")),t=F(require("form-data")),l=F(require("../../helpers/config")),i=require("./api"),a=require("./utils"),s=require("./const"),r=F(require("../../utils/get-objects-diff")),o=require("./types"),u=F(require("../../utils/tiny-queue")),d=F(require("./index")),n=require("../../utils/messages"),f=require("./inquirer"),c=F(require("../../utils/debug")),h=F(require("./uploader")),m=require("../../utils/error"),p=F(require("./file")),g=F(require("./operation")),y=F(require("../../utils/winston"));function w(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function F(e){return e&&e.__esModule?e:{default:e}}class k extends c.default{setUpdateQueue(e){this.updateQueue=e}setUpdateMode(e){this.updateMode=e}async syncTheme(){y.default.log("Ensure development theme..."),await this.ensureDevelopmentTheme(),this.printSyncMessage(),y.default.log(`Check theme (${this.themeId}) is uncompleted dev theme...`);let e=await d.default.isUncompletedDevTheme(this.themeId);y.default.log(`The theme ${this.themeId}) is uncompleted dev theme: ${e}`),e?(y.default.log("Upload theme files..."),await this.uploadThemeFiles()):(y.default.log("Sync theme files..."),await this.syncUpdate())}printSyncMessage(){console.log(`✨ Syncing theme #${this.themeId} on ${l.default.currentStore}`)}getFilterFileChecksums(e){let t=Object.keys(e).reduce((t,l)=>{let i=this.ignoreFilter.match(l),a=this.includeFilter.match(l);return!i&&a&&(t[l]=e[l]),t},{});return t}async getFileChecksums(){let{localeFileChecksums:e}=this.uploader,t=await (0,i.getThemeFileList)(this.themeId),l=t.files.reduce((e,t)=>(t.fileName.endsWith(".preview")||(e[t.fileName]=t.fileContentChecksum||""),e),Object.create(null)),a=this.getFilterFileChecksums(e),s=this.getFilterFileChecksums(l);return{local:a,remote:s}}async syncRemoteUpdate(){let{local:e,remote:t}=await this.getFileChecksums();if(this.editorSync){y.default.log("[Remote Watch] Get remote and local diffs...");let l=await (0,r.default)(t,e);y.default.log("[Remote Watch] Run remote diffs..."),await this.updateStrategy(l,!0)}}async syncUpdate(){y.default.log("Get local and remote files checksum...");let{local:e,remote:t}=await this.getFileChecksums();if(this.editorSync){y.default.log("Get remote and local diffs...");let l=await (0,r.default)(t,e);await this.updateStrategy(l)}else{y.default.log("Get local and remote diffs...");let l=await (0,r.default)(e,t);l.length&&(y.default.log(`Run local diffs ${JSON.stringify(l)}...`),await this.runAllLocalDiff(l))}}async updateStrategy(e,t){let{local:l,remote:i}=await k.prepareUpdateDiffs(e,t);this.log("local diffs: %O",l),this.log("remote diffs: %O",i),l.length&&(y.default.log(`Run local diffs ${JSON.stringify(l)}...`),await this.runAllLocalDiff(l,!0)),i.length&&(y.default.log(`Run remote diffs ${JSON.stringify(i)}...`),await this.runAllRemoteDiff(i))}static async prepareUpdateDiffs(e,t){let l={local:[],remote:[]},i=e.length,a=e=>"create"===e?"delete":"delete"===e?"create":"update",s=(e,t)=>{let i=t.filter(e=>{let t=e.key;return(t.startsWith("config/")||t.startsWith("templates/"))&&t.endsWith(".json")});"remote"===e?l.remote=l.remote.concat(i):l.local=l.local.concat(i.map(e=>({...e,type:a(e.type)})))};if(!i)return l;if(t)return s("remote",e),l;y.default.log("Update conflicts files...");let[{key:r},...o]=e,u=await k.promptUpdateStrategy(r);if(s(u,[e[0]]),1===i)return l;let d=await (0,f.askForApplyToAll)(o.length);for await(let e of(console.log(),o))if(d)y.default.log("Apply to all files to solve conflict files..."),s(u,o);else{let t=await k.promptUpdateStrategy(e.key);y.default.log(`Apply ${e.key} strategy to solve conflict files...`),console.log(),s(t,[e])}return l}static async promptUpdateStrategy(e){let t=(0,n.getMessage)("theme.serve.syncer.update_strategy.title_content",{file_name:e});console.log(t);let l=await (0,f.askForUpdateStrategy)();return l}async processRemoteDiffFile(t,l,i){var a;let{fullPath:s}=l;if("create"===t||"update"===t){y.default.log(`Get file (${l.fileName}) information: ${l.fileName}`);let t=await this.getFileInfo(s);y.default.log("Writing file content"),e.default.ensureFileSync(s),e.default.writeFileSync(s,t)}else"delete"===t&&(y.default.log(`Delete file (${l.fileName})`),e.default.unlinkSync(s));null===(a=this.updateQueue)||void 0===a||a.push({key:l.fileName,checksums:[i],type:t})}runAllLocalDiff(e,t){return new Promise((l,i)=>{let a=!1,s=new m.ErrorStash,r=async e=>{if(a){e();return}y.default.log("Set theme upload completed"),await h.default.setUploadCompleted(this.themeId,o.EThemeStatus.Development),a=!0,e()};this.queue.on("all-done",async()=>{y.default.log("All task queue is all done!"),s.printAll(),await r(()=>l())}),this.queue.on("error",async e=>{y.default.logError(e),e instanceof m.ValidatorError?(y.default.log("Occurred validation error"),s.concat(e.errors)):(s.printAll(),await r(()=>{i(e)}))}),this.queue.all(e.map(({type:e,key:l})=>async()=>{let i=new p.default(l,this.cwd);if(await this.processLocalDiffFile(e,i),!t){let t=this.editorSync&&"update"===e?"get":e,l=new g.default(t,i).asSyncMessage();console.log(l)}}))})}runAllRemoteDiff(e){return new Promise((t,l)=>{this.queue.on("all-done",()=>t()),this.queue.on("error",e=>l(e)),this.queue.all(e.map(({type:e,key:t,checksums:l})=>async()=>{let i=new p.default(t,this.cwd);if(await this.processRemoteDiffFile(e,i,l[0]),"polling"===this.updateMode){let t=this.editorSync&&"update"===e?"get":e,l=new g.default(t,i).asSyncMessage();console.log(l)}}))})}async processLocalDiffFile(e,t){"create"===e?(y.default.log(`Create file: ${t.fileName}`),await this.createFile(t)):"update"===e?(y.default.log(`Update file: ${t.fileName}`),await this.updateFile(t)):"delete"===e&&(y.default.log(`Delete file: ${t.fileName}`),await this.deleteFile(t))}async getFileInfo(e){let t=(0,a.parseFileName)(e,this.cwd),l=await (0,i.getThemeFileDetail)({themeId:this.themeId,fileName:t});return null==l?void 0:l.fileContent}async deleteFile(e){y.default.log(`Delete file: ${e.fileName}`),await (0,i.deleteFile)(this.themeId,{fileName:e.fileName,cliFirstCreateFile:!0}),this.uploader.checksums.has(e)&&(y.default.log(`Delete file (${e.fileName}) checksum`),this.uploader.checksums.delete(e))}async updateFile(l){let{fileName:r}=l,o=r.startsWith("assets/");if((0,a.checkTemplateFileName)(r),o&&!s.TEXT_TYPE_EXTNAMES.includes(l.extName)){let a=new t.default;a.append("file",e.default.createReadStream(l.fullPath)),a.append("fileName",r),a.append("cliFirstCreateFile","true"),y.default.log(`Upload asset file: ${r}`);let s=await (0,i.uploadFile)(this.themeId,a,{headers:a.getHeaders()});y.default.log(`Update file (${r}) checksum: ${s.fileContentChecksum}`),this.uploader.checksums.set(r,null==s?void 0:s.fileContentChecksum)}else{if(!(0,a.checkLayoutFile)(r,l.fileContent))throw new m.AbortError(s.ERRORS.LAYOUT_FILE_NOT_MATCH_TEMPLATE);y.default.log(`Update file: ${r}`);let e=await (0,i.updateFile)(this.themeId,{fileName:r,fileContent:l.fileContent,cliFirstCreateFile:!0});y.default.log(`Update file (${r}) checksum: ${e.fileContentChecksum}`),this.uploader.checksums.set(r,null==e?void 0:e.fileContentChecksum)}}async createFile(l){let{fileName:r}=l,o=r.startsWith("assets/");if(!(0,a.checkLayoutFile)(r,l.fileContent))throw new m.AbortError(s.ERRORS.LAYOUT_FILE_NOT_MATCH_TEMPLATE);if((0,a.checkTemplateFileName)(r),o
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>k});const e=F(require("fs-extra")),t=F(require("form-data")),l=F(require("../../helpers/config")),i=require("./api"),a=require("./utils"),s=require("./const"),r=F(require("../../utils/get-objects-diff")),o=require("./types"),u=F(require("../../utils/tiny-queue")),d=F(require("./index")),n=require("../../utils/messages"),f=require("./inquirer"),c=F(require("../../utils/debug")),h=F(require("./uploader")),m=require("../../utils/error"),p=F(require("./file")),g=F(require("./operation")),y=F(require("../../utils/winston"));function w(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function F(e){return e&&e.__esModule?e:{default:e}}class k extends c.default{setUpdateQueue(e){this.updateQueue=e}setUpdateMode(e){this.updateMode=e}async syncTheme(){y.default.log("Ensure development theme..."),await this.ensureDevelopmentTheme(),this.printSyncMessage(),y.default.log(`Check theme (${this.themeId}) is uncompleted dev theme...`);let e=await d.default.isUncompletedDevTheme(this.themeId);y.default.log(`The theme ${this.themeId}) is uncompleted dev theme: ${e}`),e?(y.default.log("Upload theme files..."),await this.uploadThemeFiles()):(y.default.log("Sync theme files..."),await this.syncUpdate())}printSyncMessage(){console.log(`✨ Syncing theme #${this.themeId} on ${l.default.currentStore}`)}getFilterFileChecksums(e){let t=Object.keys(e).reduce((t,l)=>{let i=this.ignoreFilter.match(l),a=this.includeFilter.match(l);return!i&&a&&(t[l]=e[l]),t},{});return t}async getFileChecksums(){let{localeFileChecksums:e}=this.uploader,t=await (0,i.getThemeFileList)(this.themeId),l=t.files.reduce((e,t)=>(t.fileName.endsWith(".preview")||(e[t.fileName]=t.fileContentChecksum||""),e),Object.create(null)),a=this.getFilterFileChecksums(e),s=this.getFilterFileChecksums(l);return{local:a,remote:s}}async syncRemoteUpdate(){let{local:e,remote:t}=await this.getFileChecksums();if(this.editorSync){y.default.log("[Remote Watch] Get remote and local diffs...");let l=await (0,r.default)(t,e);y.default.log("[Remote Watch] Run remote diffs..."),await this.updateStrategy(l,!0)}}async syncUpdate(){y.default.log("Get local and remote files checksum...");let{local:e,remote:t}=await this.getFileChecksums();if(this.editorSync){y.default.log("Get remote and local diffs...");let l=await (0,r.default)(t,e);await this.updateStrategy(l)}else{y.default.log("Get local and remote diffs...");let l=await (0,r.default)(e,t);l.length&&(y.default.log(`Run local diffs ${JSON.stringify(l)}...`),await this.runAllLocalDiff(l))}}async updateStrategy(e,t){let{local:l,remote:i}=await k.prepareUpdateDiffs(e,t);this.log("local diffs: %O",l),this.log("remote diffs: %O",i),l.length&&(y.default.log(`Run local diffs ${JSON.stringify(l)}...`),await this.runAllLocalDiff(l,!0)),i.length&&(y.default.log(`Run remote diffs ${JSON.stringify(i)}...`),await this.runAllRemoteDiff(i))}static async prepareUpdateDiffs(e,t){let l={local:[],remote:[]},i=e.length,a=e=>"create"===e?"delete":"delete"===e?"create":"update",s=(e,t)=>{let i=t.filter(e=>{let t=e.key;return(t.startsWith("config/")||t.startsWith("templates/"))&&t.endsWith(".json")});"remote"===e?l.remote=l.remote.concat(i):l.local=l.local.concat(i.map(e=>({...e,type:a(e.type)})))};if(!i)return l;if(t)return s("remote",e),l;y.default.log("Update conflicts files...");let[{key:r},...o]=e,u=await k.promptUpdateStrategy(r);if(s(u,[e[0]]),1===i)return l;let d=await (0,f.askForApplyToAll)(o.length);for await(let e of(console.log(),o))if(d)y.default.log("Apply to all files to solve conflict files..."),s(u,o);else{let t=await k.promptUpdateStrategy(e.key);y.default.log(`Apply ${e.key} strategy to solve conflict files...`),console.log(),s(t,[e])}return l}static async promptUpdateStrategy(e){let t=(0,n.getMessage)("theme.serve.syncer.update_strategy.title_content",{file_name:e});console.log(t);let l=await (0,f.askForUpdateStrategy)();return l}async processRemoteDiffFile(t,l,i){var a;let{fullPath:s}=l;if("create"===t||"update"===t){y.default.log(`Get file (${l.fileName}) information: ${l.fileName}`);let t=await this.getFileInfo(s);y.default.log("Writing file content"),e.default.ensureFileSync(s),e.default.writeFileSync(s,t)}else"delete"===t&&(y.default.log(`Delete file (${l.fileName})`),e.default.unlinkSync(s));null===(a=this.updateQueue)||void 0===a||a.push({key:l.fileName,checksums:[i],type:t})}runAllLocalDiff(e,t){return new Promise((l,i)=>{let a=!1,s=new m.ErrorStash,r=async e=>{if(a){e();return}y.default.log("Set theme upload completed"),await h.default.setUploadCompleted(this.themeId,o.EThemeStatus.Development),a=!0,e()};this.queue.on("all-done",async()=>{y.default.log("All task queue is all done!"),s.printAll(),await r(()=>l())}),this.queue.on("error",async e=>{y.default.logError(e),e instanceof m.ValidatorError?(y.default.log("Occurred validation error"),s.concat(e.errors)):(s.printAll(),await r(()=>{i(e)}))}),this.queue.all(e.map(({type:e,key:l})=>async()=>{let i=new p.default(l,this.cwd);if(await this.processLocalDiffFile(e,i),!t){let t=this.editorSync&&"update"===e?"get":e,l=new g.default(t,i).asSyncMessage();console.log(l)}}))})}runAllRemoteDiff(e){return new Promise((t,l)=>{this.queue.on("all-done",()=>t()),this.queue.on("error",e=>l(e)),this.queue.all(e.map(({type:e,key:t,checksums:l})=>async()=>{let i=new p.default(t,this.cwd);if(await this.processRemoteDiffFile(e,i,l[0]),"polling"===this.updateMode){let t=this.editorSync&&"update"===e?"get":e,l=new g.default(t,i).asSyncMessage();console.log(l)}}))})}async processLocalDiffFile(e,t){"create"===e?(y.default.log(`Create file: ${t.fileName}`),await this.createFile(t)):"update"===e?(y.default.log(`Update file: ${t.fileName}`),await this.updateFile(t)):"delete"===e&&(y.default.log(`Delete file: ${t.fileName}`),await this.deleteFile(t))}async getFileInfo(e){let t=(0,a.parseFileName)(e,this.cwd),l=await (0,i.getThemeFileDetail)({themeId:this.themeId,fileName:t});return null==l?void 0:l.fileContent}async deleteFile(e){y.default.log(`Delete file: ${e.fileName}`),await (0,i.deleteFile)(this.themeId,{fileName:e.fileName,cliFirstCreateFile:!0}),this.uploader.checksums.has(e)&&(y.default.log(`Delete file (${e.fileName}) checksum`),this.uploader.checksums.delete(e))}async updateFile(l){let{fileName:r}=l,o=r.startsWith("assets/");if((0,a.checkTemplateFileName)(r),o&&!s.TEXT_TYPE_EXTNAMES.includes(l.extName)){let a=new t.default;a.append("file",e.default.createReadStream(l.fullPath)),a.append("fileName",r),a.append("cliFirstCreateFile","true"),y.default.log(`Upload asset file: ${r}`);let s=await (0,i.uploadFile)(this.themeId,a,{headers:a.getHeaders()});y.default.log(`Update file (${r}) checksum: ${s.fileContentChecksum}`),this.uploader.checksums.set(r,null==s?void 0:s.fileContentChecksum)}else{if(!(0,a.checkLayoutFile)(r,l.fileContent))throw new m.AbortError(s.ERRORS.LAYOUT_FILE_NOT_MATCH_TEMPLATE);y.default.log(`Update file: ${r}`);let e=await (0,i.updateFile)(this.themeId,{fileName:r,fileContent:l.fileContent,cliFirstCreateFile:!0});y.default.log(`Update file (${r}) checksum: ${e.fileContentChecksum}`),this.uploader.checksums.set(r,null==e?void 0:e.fileContentChecksum)}}async createFile(l){let{fileName:r}=l,o=r.startsWith("assets/");if(!(0,a.checkLayoutFile)(r,l.fileContent))throw new m.AbortError(s.ERRORS.LAYOUT_FILE_NOT_MATCH_TEMPLATE);if((0,a.checkTemplateFileName)(r),o){let a=new t.default;a.append("file",e.default.createReadStream(l.fullPath)),a.append("fileName",r),a.append("cliFirstCreateFile","true"),y.default.log(`Upload asset file: ${r}`);let s=await (0,i.uploadFile)(this.themeId,a,{headers:a.getHeaders()});y.default.log(`Update file (${r}) checksum: ${s.fileContentChecksum}`),this.uploader.checksums.set(r,s.fileContentChecksum)}else{y.default.log(`Create file: ${r}`);let e=await (0,i.createFile)(this.themeId,{fileName:r,fileContent:l.fileContent,cliFirstCreateFile:!0});y.default.log(`Update file (${r}) checksum: ${e.fileContentChecksum}`),this.uploader.checksums.set(r,e.fileContentChecksum)}}async ensureDevelopmentTheme(){let{id:e,name:t}=await d.default.findOrCreate(this.themeId);if(e)this.themeId=e,l.default.developmentThemeId=e,l.default.developmentThemeName=t;else throw new m.AbortError(s.ERRORS.THEME_ID_NOT_EXIST)}async uploadThemeFiles(){await this.uploader.upload(this.themeId,o.EThemeStatus.Development)}constructor(e,t,i,a=process.cwd()){super("theme:serve:update"),w(this,"cwd",void 0),w(this,"themeId",void 0),w(this,"queue",void 0),w(this,"editorSync",void 0),w(this,"updateQueue",void 0),w(this,"updateMode","initialize"),w(this,"includeFilter",void 0),w(this,"ignoreFilter",void 0),w(this,"uploader",void 0),this.cwd=a,this.themeId=l.default.developmentThemeId,this.queue=new u.default({concurrency:4}),this.editorSync=e,this.updateQueue=null,this.includeFilter=t.include,this.ignoreFilter=t.ignore,this.uploader=i}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>p});const e=f(require("progress")),t=f(require("fast-glob")),i=f(require("fs-extra")),l=f(require("form-data")),s=require("./api"),a=require("../../utils/error"),r=f(require("../../utils/colors")),n=f(require("./file")),u=f(require("./checksum")),c=require("./types"),o=f(require("../../utils/tiny-queue")),h=require("./utils"),d=f(require("../../utils/winston"));function m(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function f(e){return e&&e.__esModule?e:{default:e}}class p{themeFiles(){let e=t.default.sync(["config/**/*","layout/**/*","locales/**/*","sections/**/*","snippets/**/*","templates/**/*","assets/**/*"],{cwd:this.cwd,onlyFiles:!0,unique:!0});return e.map(e=>new n.default(e,this.cwd))}staticAssetFiles(){let e=t.default.sync(["assets/**/*"],{cwd:this.cwd,onlyFiles:!0,unique:!0});return e.map(e=>new n.default(e,this.cwd))}diffThemeFiles(){return this.themeFiles().filter(e=>!this.checksums.has(e))}get localeFileChecksums(){return this.themeFiles().reduce((e,t)=>(e[t.fileName]=t.checksum,e),{})}upload(t,i=c.EThemeStatus.Development,l={progressFormat:r.default.cyan("[:bar] :percent")}){let s=new a.ErrorStash;return new Promise(async(n,u)=>{d.default.log("Fetching theme checksums..."),await this.fetchChecksums(t),await this.deleteFiles(t);let c=this.themeFiles(),o=!1,m=(()=>{if(l.silent)return;let t=l.progressFormat||r.default.cyan("[:bar] :percent");e.default.prototype.setTotal=function(e){this.total=e};let i=new e.default(t,{complete:"=",incomplete:" ",total:0,width:50,clear:!0,...l.progressBarOptions});return i})(),f=!1,F=async e=>{if(f||!o){e();return}d.default.log(`Set theme (${t}) upload completed...`),await p.setUploadCompleted(t,i),f=!0,e()};this.queue.on("all-done",async()=>{d.default.log("All task queue is all done!"),s.printAll(),await F(()=>n())}),this.queue.on("error",async e=>{if(d.default.logError(e),e instanceof a.ValidatorError)s.concat(e.errors);else{console.log(),null==m||m.terminate(),s.printAll();let t=e instanceof a.AbortError?e:new a.AbortError(e.message);await F(()=>{u(t),(0,h.handleError)(t)})}}),this.queue.on("success",()=>{o=!0,l.silent||null==m||m.tick()});let w=c.filter(e=>this.uploadable(e)).filter(e=>e.isConfigSchemaFile).map(e=>async()=>{await p.createFile(t,e)}),g=c.filter(e=>this.uploadable(e)).filter(e=>".html"===e.extName).map(e=>async()=>{await p.createFile(t,e)}),y=c.filter(e=>this.uploadable(e)).filter(e=>".json"===e.extName&&!e.isConfigFile).map(e=>async()=>{await p.createFile(t,e)}),q=c.filter(e=>this.uploadable(e)).filter(e=>e.isConfigFile&&!e.isConfigSchemaFile).map(e=>async()=>{await p.createFile(t,e)}),C=this.staticAssetFiles().filter(e=>this.uploadable(e)).map(e=>async()=>{await p.createFile(t,e)}),k=[...w,...g,...y,...q,...C];this.queue.addAll(k),0===k.length&&n(),null==m||m.setTotal(this.queue.size)})}uploadable(e){return!this.ignoreOperation(e.fileName)&&!!e.isExist&&this.checksums.fileHasChanged(e)}static async createFile(e,t){let a=t.fileName.startsWith("assets/");if((0,h.checkTemplateFileName)(t.fileName),a
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>p});const e=f(require("progress")),t=f(require("fast-glob")),i=f(require("fs-extra")),l=f(require("form-data")),s=require("./api"),a=require("../../utils/error"),r=f(require("../../utils/colors")),n=f(require("./file")),u=f(require("./checksum")),c=require("./types"),o=f(require("../../utils/tiny-queue")),h=require("./utils"),d=f(require("../../utils/winston"));function m(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function f(e){return e&&e.__esModule?e:{default:e}}class p{themeFiles(){let e=t.default.sync(["config/**/*","layout/**/*","locales/**/*","sections/**/*","snippets/**/*","templates/**/*","assets/**/*"],{cwd:this.cwd,onlyFiles:!0,unique:!0});return e.map(e=>new n.default(e,this.cwd))}staticAssetFiles(){let e=t.default.sync(["assets/**/*"],{cwd:this.cwd,onlyFiles:!0,unique:!0});return e.map(e=>new n.default(e,this.cwd))}diffThemeFiles(){return this.themeFiles().filter(e=>!this.checksums.has(e))}get localeFileChecksums(){return this.themeFiles().reduce((e,t)=>(e[t.fileName]=t.checksum,e),{})}upload(t,i=c.EThemeStatus.Development,l={progressFormat:r.default.cyan("[:bar] :percent")}){let s=new a.ErrorStash;return new Promise(async(n,u)=>{d.default.log("Fetching theme checksums..."),await this.fetchChecksums(t),await this.deleteFiles(t);let c=this.themeFiles(),o=!1,m=(()=>{if(l.silent)return;let t=l.progressFormat||r.default.cyan("[:bar] :percent");e.default.prototype.setTotal=function(e){this.total=e};let i=new e.default(t,{complete:"=",incomplete:" ",total:0,width:50,clear:!0,...l.progressBarOptions});return i})(),f=!1,F=async e=>{if(f||!o){e();return}d.default.log(`Set theme (${t}) upload completed...`),await p.setUploadCompleted(t,i),f=!0,e()};this.queue.on("all-done",async()=>{d.default.log("All task queue is all done!"),s.printAll(),await F(()=>n())}),this.queue.on("error",async e=>{if(d.default.logError(e),e instanceof a.ValidatorError)s.concat(e.errors);else{console.log(),null==m||m.terminate(),s.printAll();let t=e instanceof a.AbortError?e:new a.AbortError(e.message);await F(()=>{u(t),(0,h.handleError)(t)})}}),this.queue.on("success",()=>{o=!0,l.silent||null==m||m.tick()});let w=c.filter(e=>this.uploadable(e)).filter(e=>e.isConfigSchemaFile).map(e=>async()=>{await p.createFile(t,e)}),g=c.filter(e=>this.uploadable(e)).filter(e=>".html"===e.extName).map(e=>async()=>{await p.createFile(t,e)}),y=c.filter(e=>this.uploadable(e)).filter(e=>".json"===e.extName&&!e.isConfigFile).map(e=>async()=>{await p.createFile(t,e)}),q=c.filter(e=>this.uploadable(e)).filter(e=>e.isConfigFile&&!e.isConfigSchemaFile).map(e=>async()=>{await p.createFile(t,e)}),C=this.staticAssetFiles().filter(e=>this.uploadable(e)).map(e=>async()=>{await p.createFile(t,e)}),k=[...w,...g,...y,...q,...C];this.queue.addAll(k),0===k.length&&n(),null==m||m.setTotal(this.queue.size)})}uploadable(e){return!this.ignoreOperation(e.fileName)&&!!e.isExist&&this.checksums.fileHasChanged(e)}static async createFile(e,t){let a=t.fileName.startsWith("assets/");if((0,h.checkTemplateFileName)(t.fileName),a){let a=new l.default;a.append("file",i.default.createReadStream(t.fullPath)),a.append("fileName",t.fileName),a.append("cliFirstCreateFile","true"),await (0,s.uploadFile)(e,a,{headers:a.getHeaders()})}else await (0,s.createFile)(e,{fileName:t.fileName,fileContent:t.fileContent,cliFirstCreateFile:!0})}async fetchChecksums(e){try{let t=await (0,s.getThemeFileList)(e);t.files.forEach(e=>{e.fileContentChecksum&&this.checksums.set(e.fileName,e.fileContentChecksum)})}catch(e){}}async deleteFiles(e){if(!this.isDeleteFile)return;d.default.log("Deleting remote theme files...");let t=this.checksums.keys(),i=this.themeFiles().map(e=>e.fileName),l=t.map(e=>new n.default(e,this.cwd)).filter(e=>!i.includes(e.fileName)).filter(e=>!this.ignoreOperation(e.fileName));l.length>0&&await this.enqueueDeletes(l,e)}async enqueueDeletes(e,t){return new Promise((i,l)=>{this.queue.on("all-done",i),this.queue.on("error",l),this.queue.addAll(e.map(e=>async()=>{await this.del(e,t)}))})}ignoreOperation(e){return this.ignoreFilter.match(e)||!this.includeFilter.match(e)}async del(e,t){await (0,s.deleteFile)(t,{fileName:e.fileName,cliFirstCreateFile:!0}),this.checksums.has(e)&&this.checksums.delete(e)}static async createNewTheme(e){let t=await (0,s.createNewThemeOrCompleteUpload)({themeName:e});if(t.themeId)return t.themeId}static async setUploadCompleted(e,t){let i=await (0,s.createNewThemeOrCompleteUpload)({themeId:e,status:t,completed:!0});if(i.themeId)return i.themeId}constructor(e,t,i){m(this,"cwd",void 0),m(this,"queue",void 0),m(this,"checksums",void 0),m(this,"includeFilter",void 0),m(this,"ignoreFilter",void 0),m(this,"isDeleteFile",void 0),this.cwd=i,this.queue=new o.default({maxRetry:3,concurrency:4}),this.checksums=new u.default,this.includeFilter=e.include,this.ignoreFilter=e.ignore,this.isDeleteFile=t}}
|