@shoplineos/cli 0.0.0 → 1.0.0-rc.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/bin/index.js +3 -0
- package/dist/commands/auth/index.js +1 -0
- package/dist/commands/auth/login.js +1 -0
- package/dist/commands/auth/logout.js +1 -0
- package/dist/commands/auth/whoami.js +1 -0
- package/dist/commands/extension/build.js +1 -0
- package/dist/commands/extension/common-options.js +1 -0
- package/dist/commands/extension/connect.js +1 -0
- package/dist/commands/extension/create.js +2 -0
- package/dist/commands/extension/index.js +1 -0
- package/dist/commands/extension/push.js +1 -0
- package/dist/commands/extension/serve.js +1 -0
- package/dist/commands/extension/tunnel.js +1 -0
- package/dist/commands/index.js +1 -0
- package/dist/commands/report.js +1 -0
- package/dist/commands/theme/check.js +1 -0
- package/dist/commands/theme/console.js +1 -0
- package/dist/commands/theme/index.js +1 -0
- package/dist/commands/theme/init.js +2 -0
- package/dist/commands/theme/list.js +1 -0
- package/dist/commands/theme/package.js +1 -0
- package/dist/commands/theme/pull.js +1 -0
- package/dist/commands/theme/push.js +1 -0
- package/dist/commands/theme/serve.js +1 -0
- package/dist/commands/theme/theme-common-options.js +1 -0
- package/dist/eventlistener.d.js +1 -0
- package/dist/helpers/config.js +1 -0
- package/dist/helpers/open-admin-url.js +1 -0
- package/dist/helpers/report.js +1 -0
- package/dist/helpers/sentry.js +1 -0
- package/dist/helpers/sum.js +1 -0
- package/dist/helpers/verify-login.js +1 -0
- package/dist/services/dev-server/index.js +9 -0
- package/dist/services/dev-server/socket.js +1 -0
- package/dist/services/dev-server/sse.js +6 -0
- package/dist/services/dev-server/web/socket-client.js +1 -0
- package/dist/services/dev-server-3/index.js +1 -0
- package/dist/services/dev-server-3/server.js +9 -0
- package/dist/services/dev-server-3/sse.js +6 -0
- package/dist/services/dev-server-3/web/socket-client.js +1 -0
- package/dist/services/extension/api.js +4 -0
- package/dist/services/extension/check-extension-version.js +1 -0
- package/dist/services/extension/clone-repo.js +1 -0
- package/dist/services/extension/connect/context.js +1 -0
- package/dist/services/extension/connect/index.js +1 -0
- package/dist/services/extension/connect/validate.js +1 -0
- package/dist/services/extension/const.js +1 -0
- package/dist/services/extension/context.js +1 -0
- package/dist/services/extension/create/index.js +1 -0
- package/dist/services/extension/create.js +1 -0
- package/dist/services/extension/ensure-project-type.js +1 -0
- package/dist/services/extension/env.js +1 -0
- package/dist/services/extension/extension.js +1 -0
- package/dist/services/extension/functions/generate.js +1 -0
- package/dist/services/extension/functions/info.js +1 -0
- package/dist/services/extension/functions/push.js +8 -0
- package/dist/services/extension/functions/schemas.js +1 -0
- package/dist/services/extension/generate.js +1 -0
- package/dist/services/extension/index.js +1 -0
- package/dist/services/extension/inquirer.js +1 -0
- package/dist/services/extension/loader.js +1 -0
- package/dist/services/extension/openapi.js +1 -0
- package/dist/services/extension/push/build.js +1 -0
- package/dist/services/extension/push/checkout-ui.js +1 -0
- package/dist/services/extension/push/index.js +1 -0
- package/dist/services/extension/push/show.js +1 -0
- package/dist/services/extension/push/theme.js +1 -0
- package/dist/services/extension/push/zip.js +1 -0
- package/dist/services/extension/push.js +1 -0
- package/dist/services/extension/register.js +1 -0
- package/dist/services/extension/resolve-env.js +1 -0
- package/dist/services/extension/schemas.js +1 -0
- package/dist/services/extension/serve/bundler.js +1 -0
- package/dist/services/extension/serve/extension.js +1 -0
- package/dist/services/extension/serve/localization.js +1 -0
- package/dist/services/extension/serve/models.js +1 -0
- package/dist/services/extension/serve/payload.js +1 -0
- package/dist/services/extension/serve/server/middlewares.js +1 -0
- package/dist/services/extension/serve/server.js +1 -0
- package/dist/services/extension/serve/websocket/handlers.js +5 -0
- package/dist/services/extension/serve/websocket/models.js +1 -0
- package/dist/services/extension/serve/websocket.js +1 -0
- package/dist/services/extension/serve.js +1 -0
- package/dist/services/extension/tunnel/cloudflared.js +1 -0
- package/dist/services/extension/tunnel/install-cloudflared.js +1 -0
- package/dist/services/extension/tunnel.js +3 -0
- package/dist/services/extension/types.js +1 -0
- package/dist/services/extension/utils.js +1 -0
- package/dist/services/extension/validate.js +3 -0
- package/dist/services/extension/write-env-file.js +1 -0
- package/dist/services/extension/zip.js +1 -0
- package/dist/services/extension/zip3.js +1 -0
- package/dist/services/identity-auth/api.js +1 -0
- package/dist/services/identity-auth/client/index.html +34 -0
- package/dist/services/identity-auth/client/style.css +58 -0
- package/dist/services/identity-auth/const.js +1 -0
- package/dist/services/identity-auth/create-server.js +1 -0
- package/dist/services/identity-auth/index.js +1 -0
- package/dist/services/identity-auth/store-enter.js +1 -0
- package/dist/services/report/index.js +1 -0
- package/dist/services/theme/3.0/api.js +1 -0
- package/dist/services/theme/3.0/file.js +1 -0
- package/dist/services/theme/3.0/package.js +1 -0
- package/dist/services/theme/3.0/pull.js +1 -0
- package/dist/services/theme/3.0/push.js +1 -0
- package/dist/services/theme/3.0/remote-watcher.js +1 -0
- package/dist/services/theme/3.0/theme.js +7 -0
- package/dist/services/theme/api.js +1 -0
- package/dist/services/theme/check/check.js +7 -0
- package/dist/services/theme/check/config.js +1 -0
- package/dist/services/theme/check/exception.js +1 -0
- package/dist/services/theme/check/index.js +1 -0
- package/dist/services/theme/check/types.js +1 -0
- package/dist/services/theme/checksum.js +1 -0
- package/dist/services/theme/choose-theme-list.js +1 -0
- package/dist/services/theme/console/api.js +1 -0
- package/dist/services/theme/console/console.js +8 -0
- package/dist/services/theme/console/index.js +1 -0
- package/dist/services/theme/const.js +1 -0
- package/dist/services/theme/draft.js +1 -0
- package/dist/services/theme/file.js +1 -0
- package/dist/services/theme/git.js +1 -0
- package/dist/services/theme/index.js +7 -0
- package/dist/services/theme/inquirer.js +1 -0
- package/dist/services/theme/no-second-check.js +1 -0
- package/dist/services/theme/operation.js +1 -0
- package/dist/services/theme/package.js +1 -0
- package/dist/services/theme/pull.js +1 -0
- package/dist/services/theme/push.js +1 -0
- package/dist/services/theme/remote-watcher.js +1 -0
- package/dist/services/theme/types.d.js +1 -0
- package/dist/services/theme/types.js +1 -0
- package/dist/services/theme/update-queue.js +1 -0
- package/dist/services/theme/update.js +1 -0
- package/dist/services/theme/uploader.js +1 -0
- package/dist/services/theme/utils.js +1 -0
- package/dist/type.d.js +1 -0
- package/dist/types/env.d.js +1 -0
- package/dist/types/type.d.js +1 -0
- package/dist/utils/abort.js +1 -0
- package/dist/utils/check-theme-type-version.js +1 -0
- package/dist/utils/check-update.js +6 -0
- package/dist/utils/colors.js +1 -0
- package/dist/utils/const.js +1 -0
- package/dist/utils/content-tokens.js +3 -0
- package/dist/utils/debug.js +1 -0
- package/dist/utils/decorators.js +1 -0
- package/dist/utils/environments.js +1 -0
- package/dist/utils/error.js +1 -0
- package/dist/utils/exit-hook.js +1 -0
- package/dist/utils/find-up-node-module.js +1 -0
- package/dist/utils/format-protocol.js +1 -0
- package/dist/utils/fs.js +1 -0
- package/dist/utils/get-objects-diff.js +1 -0
- package/dist/utils/get-real-referer.js +1 -0
- package/dist/utils/get-store-env.js +1 -0
- package/dist/utils/get-url-handle.js +1 -0
- package/dist/utils/git.js +1 -0
- package/dist/utils/has-command.js +1 -0
- package/dist/utils/hbs.js +1 -0
- package/dist/utils/http.js +1 -0
- package/dist/utils/ignore-filter.js +1 -0
- package/dist/utils/import-esm.js +1 -0
- package/dist/utils/include-filter.js +1 -0
- package/dist/utils/load-local-preset.js +1 -0
- package/dist/utils/local.js +1 -0
- package/dist/utils/logger.js +1 -0
- package/dist/utils/messages.js +13 -0
- package/dist/utils/misc.js +1 -0
- package/dist/utils/node-package-manager.js +1 -0
- package/dist/utils/ora-manager.js +1 -0
- package/dist/utils/os.js +1 -0
- package/dist/utils/output.js +1 -0
- package/dist/utils/parse-options.js +1 -0
- package/dist/utils/path-matcher.js +1 -0
- package/dist/utils/path.js +1 -0
- package/dist/utils/print-preview.js +1 -0
- package/dist/utils/program.js +1 -0
- package/dist/utils/replace-dot.js +1 -0
- package/dist/utils/replace-top-level-com.js +1 -0
- package/dist/utils/retry.js +1 -0
- package/dist/utils/schema.js +1 -0
- package/dist/utils/string.js +1 -0
- package/dist/utils/system.js +1 -0
- package/dist/utils/tcp.js +1 -0
- package/dist/utils/tiny-queue.js +1 -0
- package/dist/utils/toml.js +1 -0
- package/dist/utils/tree-kill.js +1 -0
- package/dist/utils/ui/Tasks.js +1 -0
- package/dist/utils/ui/alert.js +1 -0
- package/dist/utils/ui/components/Alert.js +1 -0
- package/dist/utils/ui/components/Banner.js +1 -0
- package/dist/utils/ui/components/Command.js +1 -0
- package/dist/utils/ui/components/ConcurrentOutput.js +1 -0
- package/dist/utils/ui/components/FatalError.js +1 -0
- package/dist/utils/ui/components/FilePath.js +1 -0
- package/dist/utils/ui/components/Link.js +1 -0
- package/dist/utils/ui/components/List.js +1 -0
- package/dist/utils/ui/components/Prompts/InfoTable.js +1 -0
- package/dist/utils/ui/components/SelectInput.js +1 -0
- package/dist/utils/ui/components/SelectPrompt.js +1 -0
- package/dist/utils/ui/components/Subdued.js +1 -0
- package/dist/utils/ui/components/TextAnimation.js +1 -0
- package/dist/utils/ui/components/TextInput.js +1 -0
- package/dist/utils/ui/components/TextPrompt.js +1 -0
- package/dist/utils/ui/components/TokenizedText.js +1 -0
- package/dist/utils/ui/components/UserInput.js +1 -0
- package/dist/utils/ui/contexts/LinksContext.js +1 -0
- package/dist/utils/ui/hooks/use-async-and-unmount.js +1 -0
- package/dist/utils/ui/hooks/use-layout.js +1 -0
- package/dist/utils/ui/render.js +1 -0
- package/dist/utils/ui/ui.js +1 -0
- package/dist/utils/ui/utilities.js +1 -0
- package/dist/utils/ui.js +1 -0
- package/dist/utils/winston/index.js +1 -0
- package/dist/utils/winston/log-file.js +2 -0
- package/dist/utils/write-file-tree.js +1 -0
- package/package.json +125 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"setupBundlerAndFileWatcher",{enumerable:!0,get:()=>s});const e=function(e){return e&&e.__esModule?e:{default:e}}(require("chokidar")),t=require("../../../utils/abort"),r=require("../../../utils/path"),o=require("../../../utils/output"),i=require("../../../utils/node-package-manager"),a=require("../../../utils/system"),n=require("../../../utils/ui/ui");async function s(i){let a=new t.AbortController,{extension:s}=i.devOptions,c=e.default.watch((0,r.joinPath)(s.directory,"locales","**.json")).on("change",e=>{(0,o.outputDebug)(`Locale file at path ${e} changed`),i.payloadStore.updateExtension(s,i.devOptions).then(()=>{(0,o.outputDebug)(`Notified extension ${s.devUUID} about the locale change.`)}).catch(()=>{})});return a.signal.addEventListener("abort",()=>{(0,o.outputDebug)(`Closing locale file watching for extension with ID ${s.devUUID}`),c.close().then(()=>{(0,o.outputDebug)(`Locale file watching closed for extension with ${s.devUUID}`)}).catch(e=>{(0,o.outputDebug)(`Locale file watching failed to close for extension with ${s.devUUID}: ${e.message}`)})}),await (0,n.renderConcurrent)({processes:[{prefix:"Serve UI Extension",action:async(e,t,r)=>{await u(i,{stdout:e,stderr:t,signal:r})}}],showTimestamps:!1,abortController:a}),{close:()=>{a.abort()}}}async function u(e,t){let r;let{extension:n,shop:s,port:u,url:c}=e.devOptions,l=await (0,i.getPackageManager)(n.directory),d=[`--store=${s}`,`--publicUrl=${c}`,`--resourceUrl=${e.devOptions.checkoutCartUrl}`,`--reloadNoticeUrl=${e.devOptions.reloadNoticeUrl}`,`--previewPath=${e.devOptions.previewPath}`];u&&d.push(`--port=${u}`),(0,o.outputDebug)(`Running ${(0,o.formatPackageManagerCommand)(l,"serve",`--store=${s}`,u?`--port=${u}`:"",`--publicUrl=${c}`,`--resourceUrl=${e.devOptions.checkoutCartUrl}`)}`),(r="npm"===l?["run","serve","--"]:["serve"]).push(...d),await (0,a.exec)(l,r,{cwd:n.directory,signal:t.signal,stdout:t.stdout,stderr:t.stderr})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"devUiCustomizer",{enumerable:!0,get:()=>i});const e=require("../../../utils/output"),t=require("../context"),n=require("./bundler"),o=require("./payload"),r=require("./server"),s=require("./websocket"),u=function(e){return e&&e.__esModule?e:{default:e}}(require("../../../utils/winston"));async function i(i){let l={...i,checkoutCartUrl:await (0,t.getCartPathFromExtension)(i.storeId,i.appKey,i.shop)},a={...l,websocketURL:function(e){let t=new URL("/extensions",e);return t.protocol="wss:",t.toString()}(i.url)},c=await (0,o.getExtensionsPayloadStoreRawPayload)(i.extension,a),d=new o.ExtensionsPayloadStore(c,a);(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:l,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 b=await (0,n.setupBundlerAndFileWatcher)({devOptions:l,payloadStore:d});i.signal.addEventListener("abort",()=>{b.close(),g.close(),p.close()})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var a in t)Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}(exports,{getLocalizationFilePaths:()=>i,getLocalization:()=>u,validateDefaultLanguage:()=>c,findDefaultLocale:()=>f});const e=l(require("fast-glob")),t=l(require("fs")),a=require("../../../utils/path"),r=require("../../../utils/output"),o=require("../../../utils/fs"),n=require("../../../utils/error");function l(e){return e&&e.__esModule?e:{default:e}}async function i(t){let r=(0,a.joinPath)(t.directory,"locales");return(0,e.default)([(0,a.joinPath)(r,"*.json")])}async function u(e){let t=await i(e);if(!t.length)return{localization:void 0,status:""};let a=f(t);c(a,t);let o={defaultLocale:"en",translations:{},lastUpdated:0},n="success";try{await Promise.all(t.map(async t=>{let[a,...r]=t.split("/").pop().split(".");if(a)return"default"===r[0]&&(o.defaultLocale=a),s(a,t,o,e)})),o.lastUpdated=Date.now(),(0,r.outputInfo)(`Parsed locales for extension ${e.configuration.name} at ${e.directory}`)}catch(e){n="error"}return{localization:o,status:n}}async function s(e,t,a,l){let i;try{i=await (0,o.readFile)(t),a.translations[e]=JSON.parse(i)}catch(o){let a=`Error parsing ${e} locale for ${l.configuration.name} at ${t}: ${o.message}`;throw(0,r.outputWarn)(a),new n.ExtendableError(a)}}function c(e,a,r="checkout_ui"){if(0===e.length)throw new n.AbortError(`Missing default language in ${r} configuration`,"Make sure to have a {locale}.default.json file in your locales directory");if(e.length>1)throw new n.AbortError(`Error loading ${r}`,'There must be one (and only one) locale identified as the default locale: e.g. "en.default.json"');for(let e of a){let{size:a}=t.default.statSync(e);if(0===a)throw new n.AbortError(`Error loading ${r}`,`Locale file ${e} can't be empty`)}}function f(e){let t=e.filter(e=>(0,a.basename)(e).endsWith(".default.json"));return t.map(e=>(0,a.basename)(e).split(".")[0])}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}(exports,{ExtensionsPayloadStoreEvent:()=>e,getExtensionsPayloadStoreRawPayload:()=>d,getUiCustomizerPayload:()=>c,ExtensionsPayloadStore:()=>p,getExtensionPoints:()=>y,getUiCustomizer:()=>P,getUiConfiguration:()=>f,reloadNoticePath:()=>x,getReloadNoticeUrl:()=>U,getPreviewPath:()=>g});const t=function(e){return e&&e.__esModule?e:{default:e}}(require("events")),i=require("../../../utils/fs"),n=require("./localization"),o=require("../schemas"),a=require("../../../utils/output"),r=require("../loader"),s=require("../../../utils/path"),u=require("../const");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}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 o,a,r,s;let{localization:u}=await (0,n.getLocalization)(e),l={assets:{main:{name:"main",url:`${t.url}/assets/main.js`,lastUpdated:null!==(r=await (0,i.fileLastUpdatedTimestamp)(e.outputBundlePath))&&void 0!==r?r:0}},capabilities:{blockProgress:(null===(o=e.configuration.capabilities)||void 0===o?void 0:o.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 i=this.rawPayload.extensions,n=i.findIndex(t=>t.uuid===e.devUUID);if(-1===n){(0,a.outputDebug)((0,a.outputContent)`Could not updateExtension() for extension with uuid: ${e.devUUID}`);return}i[n]=await c(e,{...t}),this.rawPayload.extensions=i,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}}async function f(e){let t=await (0,r.parseConfigurationFile)(o.BaseUiCustomizerSchema,(0,s.joinPath)(e.cwd,u.CHECKOUT_UI_CONFIG_FILE));return{name:e.name,type:"checkout_ui_customizer",extensionPoints:t.extensionPoints,capabilities:t.capabilities}}const x="/reloadNotice";function U(e){return`${e}${x}`}function g(e){return`/extensions/${e}`}
|
|
@@ -0,0 +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,{getLogMiddleware:()=>o,noCacheMiddleware:()=>r,getExtensionsPayloadMiddleware:()=>d,redirectToExtensionMiddleware:()=>u,redirectToCheckoutPageMiddleware:()=>c,fileServerMiddleware:()=>l,getExtensionAssetMiddleware:()=>p,getExtensionDevAssetMiddleware:()=>x,handleExtensionHotReloadMiddleware:()=>h});const e=require("h3"),t=require("node-fetch-native"),n=require("../../../../utils/output"),s=require("../../../../utils/path"),a=require("../../../../utils/fs"),i=require("../../context");function o(){return async(e,t,s)=>{(0,n.outputDebug)(`UI extensions server received a ${e.method} request to URL ${e.url}`),s()}}function r(e,t,n){t.setHeader("Cache-Control","no-cache"),n()}async function d({payloadStore:t},n){return(0,e.setResponseHeaders)(n,{"content-type":"application/json"}),t.getRawPayload()}async function u({devOptions:t},n){await (0,e.sendRedirect)(n,`/extensions/${t.extension.devUUID}`,307)}async function c({devOptions:t},n){let s=(0,i.getCheckoutPageUrlFromExtension)(t);await (0,e.sendRedirect)(n,s,307)}async function l(t,n){let{filePath:i}=n;await (0,a.isDirectory)(i)&&(i+=i.endsWith("/")?"index.html":"/index.html");let o=await (0,a.fileExists)(i);if(!o)return(0,e.sendError)(t,(0,e.createError)({statusCode:404,statusMessage:`Not Found: ${i}`}));let r=await (0,a.readFile)(i),d=(0,s.extname)(i);return(0,e.setResponseHeaders)(t,{"content-type":{".ico":"image/x-icon",".html":"text/html",".js":"text/javascript",".json":"application/json",".css":"text/css",".png":"image/png",".jpg":"image/jpeg",".wav":"audio/wav",".mp3":"audio/mpeg",".svg":"image/svg+xml",".pdf":"application/pdf",".doc":"application/msword"}[d]||"text/plain"}),(0,e.setResponseStatus)(t,200),r}function p({devOptions:t},n){let{extension:a}=t,{assetPath:i,extensionId:o}=n.context.params,r=a.outputBundlePath.replace("main.js",""),d=a.devUUID===o;return d?l(n,{filePath:(0,s.joinPath)(r,i)}):(0,e.sendError)(n,(0,e.createError)({statusCode:404,statusMessage:`Extension with id ${o} not found`}))}function x({devOptions:n},s){let{port:a}=n,{assetPath:i}=s.context.params,o=`http://0.0.0.0:${a}/assets/${i}`;return(0,e.proxyRequest)(s,o,{fetch:t.fetch})}function h({devOptions:t,payloadStore:s},a){let{status:i}=(0,e.getQuery)(a);return"succeed"===i?(s.updateExtension(t.extension,t),(0,n.outputDebug)(`The Javascript HotReload server of the UI extension with ID ${t.extension.devUUID} has changed.`)):"failed"===i&&(0,n.outputDebug)(`The Javascript HotReload server of the UI extension with ID ${t.extension.devUUID} has an error.`),(0,e.setResponseStatus)(a,200),""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"setupHTTPServer",{enumerable:!0,get:()=>s});const e=require("http"),t=require("h3"),r=require("@nozomuikuta/h3-cors"),n=require("./payload"),o=require("./server/middlewares");function s(s){let d=(0,t.createApp)(),a=(0,t.createRouter)();d.use((0,t.fromNodeMiddleware)((0,o.getLogMiddleware)())),d.use((0,r.defineCorsEventHandler)({methods:["GET","OPTIONS"],allowHeaders:["Accept","Content-Type","Content-Length","Accept-Encoding","X-CSRF-Token","Authorization","ngrok-skip-browser-warning"]})),d.use((0,t.fromNodeMiddleware)(o.noCacheMiddleware)),a.get(n.reloadNoticePath,(0,t.eventHandler)(e=>(0,o.handleExtensionHotReloadMiddleware)(s,e))),a.get("/extensions/:extensionId/assets/**:assetPath",(0,t.eventHandler)(e=>(0,o.getExtensionAssetMiddleware)(s,e))),a.get("/assets/**:assetPath",(0,t.eventHandler)(e=>(0,o.getExtensionDevAssetMiddleware)(s,e))),a.get("/extensions/:extensionId",(0,t.eventHandler)(e=>(0,o.redirectToCheckoutPageMiddleware)(s,e))),a.get("/extensions",(0,t.eventHandler)(e=>(0,o.getExtensionsPayloadMiddleware)(s,e))),a.get("/extensions/",(0,t.eventHandler)(e=>(0,o.getExtensionsPayloadMiddleware)(s,e))),a.get("/",(0,t.eventHandler)(e=>(0,o.redirectToExtensionMiddleware)(s,e))),d.use(a);let i=(0,e.createServer)((0,t.toNodeListener)(d));return i.listen(s.devOptions.webProxyPort),i}
|
|
@@ -0,0 +1,5 @@
|
|
|
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,{websocketUpgradeHandler:()=>n,getConnectionDoneHandler:()=>o,getPayloadUpdateHandler:()=>u});const e=require("./models"),t=require("../../../../utils/output");function n(e,n){return(u,a,d)=>{"/extensions"===u.url&&((0,t.outputDebug)("Upgrading HTTP request to a websocket connection"),e.handleUpgrade(u,a,d,o(e,n)))}}function o(e,n){return e=>{(0,t.outputDebug)("Websocket connection successfully established");let o={event:"connected",data:n.payloadStore.getConnectedPayload(),version:"3"};(0,t.outputDebug)((0,t.outputContent)`Sending connected payload: ${t.outputToken.json(o)}`),e.send(JSON.stringify(o))}}function u(n,o){return u=>{let a={event:e.EventType.Update,version:"3",data:{...o.payloadStore.getRawPayloadFilteredByExtensionIds(u)}};(0,t.outputDebug)((0,t.outputContent)`Sending websocket update event to the websocket clients:
|
|
2
|
+
${t.outputToken.json(a)}
|
|
3
|
+
`),function(e,n){(0,t.outputDebug)((0,t.outputContent)`Sending websocket with event type ${n.event} and data:
|
|
4
|
+
${t.outputToken.json(n.data)}
|
|
5
|
+
`);let o=JSON.stringify(n);e.clients.forEach(e=>e.send(o))}(n,a)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"EventType",{enumerable:!0,get:()=>e}),(e||(e={})).Update="update";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"setupWebsocketConnection",{enumerable:!0,get:()=>n});const e=require("ws"),t=require("./websocket/handlers"),r=require("./payload");function n(n){let o=new e.WebSocketServer({noServer:!0,clientTracking:!0}),a=setInterval(()=>{o.clients.forEach(e=>{let t=e.readyState<2;t&&e.ping()})},1e4);return n.httpServer.on("upgrade",(0,t.websocketUpgradeHandler)(o,n)),n.payloadStore.on(r.ExtensionsPayloadStoreEvent.Update,(0,t.getPayloadUpdateHandler)(o,n)),{close:()=>{o.close(),clearInterval(a)}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"serve",{enumerable:!0,get:()=>f});const e=require("../../utils/error"),t=require("./types"),r=require("./utils"),o=require("./env"),n=require("./context"),i=require("../../utils/tcp"),l=require("./serve/extension"),u=require("./serve/payload"),a=require("../../utils/path"),s=require("../../utils/abort"),p=require("../../utils/output"),c=require("./functions/info"),d=function(e){return e&&e.__esModule?e:{default:e}}(require("../../utils/winston")),v=require("./tunnel/cloudflared");async function f(f){var E;let g=await (0,o.getEnv)();d.default.log(`Current store environment: ${g}`);let h=null!==(E=null==f?void 0:f.cwd)&&void 0!==E?E:process.cwd(),P=await (0,r.getExtensionType)(h);if(d.default.log(`Current selected extension type: ${P}`),P===t.EExtensionTypes.themeAppExtension)throw new e.AbortError("Shopline extension serve is not support for theme app extension.");if(await (0,c.isFunctionType)(P))throw new e.AbortError("Shopline extension serve is not support for Functions extension.");f.reset&&(d.default.log("Clearing environment variables..."),(0,o.clearEnvFile)(g,h)),d.default.log("Ensure current environment...");let{envObject:b,appName:T,partnerName:m,storeId:x}=await (0,n.ensureCurrentEnvs)(g,h);d.default.log("Write environment variables..."),(0,o.writeEnvFile)(g,b,h),d.default.log("Show environment information..."),(0,n.showEnvInfos)(m,T,b.EXTENSION_TITLE,b.SHOP),f.port&&(d.default.log("Checking port..."),await w(f.port)),d.default.log("Get Available TCP Port...");let y=await (0,i.getAvailableTCPPort)();d.default.log(`Web Proxy Port: ${y}`),d.default.log("Start cloudflared tunnel...");let q=await (0,v.startTunnel)(y);d.default.log(`Tunnel URL: ${q}`),(0,p.outputSuccess)((0,p.outputContent)`cloudflared tunnel running at ${p.outputToken.link(q,q)}.`);let _=new s.AbortController;await (0,l.devUiCustomizer)({extension:await (0,u.getUiCustomizer)({name:b.EXTENSION_TITLE,cwd:h,externalType:"checkout_ui",outputBundlePath:(0,a.joinPath)(h,"build/main.js"),uuid:b.EXTENSION_UUID,type:"checkout_ui_customizer"}),reloadNoticeUrl:(0,u.getReloadNoticeUrl)(q),appKey:b.SHOPLINE_APP_KEY,shop:b.SHOP,storeId:x,port:f.port,webProxyPort:y,signal:_.signal,url:q,previewPath:(0,u.getPreviewPath)(b.EXTENSION_UUID)})}async function w(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.`)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(t,e){for(var r in e)Object.defineProperty(t,r,{enumerable:!0,get:e[r]})}(exports,{startTunnel:()=>c,pollTunnelURL:()=>d});const t=require("stream"),e=require("../../../utils/abort"),r=function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var r=i(e);if(r&&r.has(t))return r.get(t);var n={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if("default"!==o&&Object.prototype.hasOwnProperty.call(t,o)){var s=u?Object.getOwnPropertyDescriptor(t,o):null;s&&(s.get||s.set)?Object.defineProperty(n,o,s):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}(require("./install-cloudflared")),n=require("../../../utils/local"),u=require("../../../utils/system"),o=require("../../../utils/error"),s=require("../../../utils/output"),a=function(t){return t&&t.__esModule?t:{default:t}}(require("../../../utils/winston"));function l(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(i=function(t){return t?r:e})(t)}async function c(t){try{let e=new g(t);await e.startTunnel();let r=await d(e);return r}catch(t){if(t instanceof o.AbortError)throw t;throw new o.AbortError(`unknown error: ${t.message}`)}}async function d(t){return new Promise((e,r)=>{let n=0,u=async()=>{let u=t.getTunnelStatus();if(a.default.log(`Tunnel status: ${u.status}`),(0,s.outputDebug)(`Polling tunnel status for cloudflare (attempt ${n}): ${u.status}`),"error"===u.status)return r(new o.AbortError(u.message,u.tryMessage));"connected"===u.status?e(u.url):(n+=1,a.default.log(`Tunnel not connected yet, retrying ${n} times...`),l())},l=()=>{setTimeout(u,500)};u()})}const f=(0,n.isUnitTest)()?.2:40;class g{async startTunnel(){try{await (0,r.default)(),this.tunnel()}catch(t){this.currentStatus={status:"error",message:t.message,tryMessage:p()}}}getTunnelStatus(){return this.currentStatus}stopTunnel(){var t;null===(t=this.abortController)||void 0===t||t.abort()}tunnel(l=0){var i;let c;this.abortController=new e.AbortController;let d=!1;if(l>=5){a.default.log("Max tunnel retries reached: 5, stopping tunnel..."),d=!0,this.currentStatus={status:"error",message:"Could not start Cloudflare tunnel: max retries reached.",tryMessage:p()};return}let g=["tunnel","--url",`http://localhost:${this.port}`,"--no-autoupdate"],h=[],m=!1;this.currentStatus={status:"starting"},setTimeout(()=>{if(!d){var t;a.default.log(`Tunnel timeout reached: ${f}, aborting tunnel...`),d=!0;let e=[...new Set(h)].slice(-5).join("\n");""===e?this.currentStatus={status:"error",message:"Could not start Cloudflare tunnel: unknown error.",tryMessage:p()}:this.currentStatus={status:"error",message:e,tryMessage:p()},null===(t=this.abortController)||void 0===t||t.abort()}},1e3*f);let y=this,b=new t.Writable({write(t,e,r){if((0,s.outputDebug)(t.toString()),a.default.log(`cloudflared tunnel output: ${t.toString()}`),d)return;c||(c=function(t){var e;let r=RegExp("(https:\\/\\/[^\\s]+\\.trycloudflare.com)"),n=null!==(e=t.toString().match(r))&&void 0!==e?e:void 0;return n&&n[1]}(t)),function(t){var e;let r=null!==(e=t.toString().match(/(INF Registered tunnel connection|INF Connection)/))&&void 0!==e?e:void 0;return r&&r[0]}(t)&&(m=!0),m&&(c?(d=!0,y.currentStatus={status:"connected",url:c}):y.currentStatus={status:"error",message:"Could not start Cloudflare tunnel: URL not found."});let n=function(t){let e=[/failed to request quick Tunnel/,/failed to unmarshal quick Tunnel/,/failed to parse quick Tunnel ID/,/failed to provision routing/,/ERR Couldn't start tunnel/,/ERR Failed to serve quic connection/,/ERR Failed to create new quic connection error/].some(e=>e.test(t.toString()));if(e)return`Could not start Cloudflare tunnel: ${t.toString().replace(/^[0-9TZ:-]+ (ERR )?/g,"").replace(/connIndex.*/g,"")}`}(t);n&&h.push(n),r()}});a.default.log(`Starting cloudflared tunnel with args: ${g.join(" ")}`),(0,u.exec)((0,r.getBinPathTarget)(),g,{stdout:b,stderr:b,signal:null===(i=this.abortController)||void 0===i?void 0:i.signal,externalErrorHandler:async t=>{if(a.default.log(`Cloudflare tunnel error: ${t.message}`),t.message.includes("Unknown system error -86")){this.currentStatus={status:"error",message:"Could not start Cloudflare tunnel: Missing Rosetta 2.",tryMessage:"Install it by running 'softwareupdate --install-rosetta' and try again"};return}if(d)throw new o.BugError(`Could not start Cloudflare tunnel: process crashed after stablishing a connection: ${t.message}`,p());(0,s.outputDebug)(`Cloudflare tunnel crashed: ${t.message}, restarting...`),(0,n.isUnitTest)()||await (0,u.sleep)(1),this.tunnel(l+1)}})}constructor(t){l(this,"port",void 0),l(this,"currentStatus",{status:"not-started"}),l(this,"abortController",void 0),this.port=t}}function p(){return["What to try:",{list:{items:[["Run the command again"]]}}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,l){for(var t in l)Object.defineProperty(e,t,{enumerable:!0,get:l[t]})}(exports,{CURRENT_CLOUDFLARE_VERSION:()=>u,getBinPathTarget:()=>f,default:()=>p,versionIsGreaterThan:()=>m});const e=require("child_process"),l=require("stream"),t=d(require("util")),r=require("../../../utils/fs"),a=require("../../../utils/output"),i=require("../../../utils/path"),n=require("../../../utils/http"),o=d(require("../../../utils/winston"));function d(e){return e&&e.__esModule?e:{default:e}}const u="2024.2.1",s=`https://github.com/cloudflare/cloudflared/releases/download/${u}/`,c={linux:{arm64:"cloudflared-linux-arm64",arm:"cloudflared-linux-arm",x64:"cloudflared-linux-amd64",ia32:"cloudflared-linux-386"},darwin:{arm64:"cloudflared-darwin-amd64.tgz",x64:"cloudflared-darwin-amd64.tgz"},win32:{x64:"cloudflared-windows-amd64.exe",ia32:"cloudflared-windows-386.exe",arm64:"cloudflared-windows-amd64.exe"}};function f(e=process.platform){return(0,i.joinPath)(__dirname,"..","bin","win32"===e?"cloudflared.exe":"cloudflared")}async function p(l=process.platform,t=process.arch){let i=function(e=process.platform,l=process.arch){let t=Object.keys(c);if(!t.includes(e))throw Error(`Unsupported system platform: ${e}`);let r=c[e][l];if(void 0===r)throw Error(`Unsupported system arch: ${l}`);return s+r}(l,t);o.default.log(`Get will be download cloudflared URL: ${i}`);let n=f(l);o.default.log(`Will be install cloudflared to: ${n}`);try{if((0,r.fileExistsSync)(n)){o.default.log("cloudflared already installed, skipping");let l=(0,e.execFileSync)(n,["--version"],{encoding:"utf8"}).split(" "),t=l.length>2?l[2]:"0.0.0",r=m(u,t);if(!r){(0,a.outputDebug)("cloudflared already installed, skipping");return}}}catch(e){(0,a.outputDebug)("version check failed, reinstalling")}if(o.default.log(`cloudflared not installed, installing with platform: ${l}...`),"linux"===l)await w(i,n);else if("darwin"===l)await y(i,n);else if("win32"===l)await g(i,n);else throw Error(`Unsupported system platform: ${l}`);o.default.log(`cloudflared installed to: ${n}`)}function m(e,l){let[t,r,a]=e.split(".").map(Number),[i,n,o]=l.split(".").map(Number);return t!==i?(null!=t?t:0)>(null!=i?i:0):r!==n?(null!=r?r:0)>(null!=n?n:0):(null!=a?a:0)>(null!=o?o:0)}async function w(e,l){await h(e,l),await (0,r.chmod)(l,"755")}async function y(l,t){await h(l,`${t}.tgz`);let a=(0,i.basename)(`${t}.tgz`);(0,e.execSync)(`tar -xzf ${a}`,{cwd:(0,i.dirname)(t)}),(0,r.unlinkFileSync)(`${t}.tgz`),await (0,r.renameFile)(`${(0,i.dirname)(t)}/cloudflared`,t)}async function g(e,l){await h(e,l)}async function h(e,a){(0,r.fileExistsSync)((0,i.dirname)(a))||(0,r.mkdirSync)((0,i.dirname)(a));let o=t.default.promisify(l.pipeline),d=await (0,n.fetch)(e,{redirect:"follow"});if(!d.ok||!d.body)throw Error(`Couldn't download file ${e} (${d.status} ${d.statusText})`);let u=(0,r.createFileWriteStream)(a);return await o(d.body,u),a}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(t,e){for(var n in e)Object.defineProperty(t,n,{enumerable:!0,get:e[n]})}(exports,{startNgrok:()=>l,start:()=>i,tokenPrompt:()=>s});const t=a(require("ngrok")),e=require("../../utils/output"),n=a(require("../../helpers/config")),o=require("../../utils/ui/ui"),r=require("../../utils/os"),u=require("../../utils/error");function a(t){return t&&t.__esModule?t:{default:t}}async function l(t){try{let e=await i({port:t});return e}catch(o){var n;let t=(n=o.message,/err_ngrok_108/.test(n)?"tunnel-already-running":/err_ngrok_105|err_ngrok_106|err_ngrok_107/.test(n)?"wrong-credentials":"unknown");throw new u.AbortError(`The ngrok tunnel could not be started.
|
|
2
|
+
|
|
3
|
+
${o.message}`,function(t){if("tunnel-already-running"===t){let{platform:t}=(0,r.platformAndArch)(),n="Kill all the ngrok processes with ";return"windows"===t?n.concat((0,e.outputContent)`${e.outputToken.genericShellCommand("taskkill /f /im ngrok.exe")}`.value):n.concat((0,e.outputContent)`${e.outputToken.genericShellCommand("killall ngrok")}`.value)}if("wrong-credentials"===t)return(0,e.outputContent)`Update your ngrok token with ${e.outputToken.genericShellCommand("shopline extension tunnel auth <token>")}`.value}(t))}}async function i(o){var r;let u=null!==(r=n.default.ngrokToken)&&void 0!==r?r:await s();(0,e.outputDebug)((0,e.outputContent)`You input the token: ${e.outputToken.cyan(u)}`),await c(u);let a=await t.default.connect({proto:"http",addr:o.port});return{url:a,token:u}}async function s(t=!0){let n="https://dashboard.ngrok.com/get-started/your-authtoken",r=e.outputToken.link(n,n);return(0,e.outputInfo)((0,e.outputContent)`${t?"\nTo make your local code accessible to your dev store, you need to use a Shopline-trusted tunneling service called ngrok. ":""}To sign up and get an auth token: ${r}\n`),(0,o.renderTextPrompt)({password:!0,message:"Enter you ngrok token.",validate:t=>{if(0===t.length)return"Token can't be empty"}})}async function c(e){let n=null!=e?e:await s(!1);await t.default.authtoken(n)}
|
|
@@ -0,0 +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"}(n||(n={}));
|
|
@@ -0,0 +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,{extractSchema:()=>T,removeFile:()=>y,getEnvPath:()=>N,formatTime:()=>v,getExtensionLink:()=>I,getDeveloperPlatformLink:()=>O,getStoreUrl:()=>_,getShopHandle:()=>$,validateSchemaError:()=>S,isMatchedInterpolation:()=>x,getNonMatchedOptionInterpolation:()=>g,buildPartnerChoice:()=>P,buildAppChoice:()=>w,buildExtensionTypeChoice:()=>F,buildStoreChoice:()=>b,getExtensionType:()=>q,generateDevUUID:()=>C,getExtShowType:()=>U,getExtType:()=>A,getExtensionName:()=>D});const e=require("path"),t=h(require("fs-extra")),n=require("uuid"),i=require("light-date"),r=h(require("js-yaml")),o=require("./const"),s=require("./types"),a=require("./api"),u=h(require("../../utils/colors")),l=require("../../utils/path"),c=require("../../utils/fs"),p=require("../../utils/toml"),m=require("./schemas"),E=require("../../utils/error"),f=require("./functions/schemas"),d=require("./functions/info");function h(e){return e&&e.__esModule?e:{default:e}}function T(e){let t=e.match(/{{\s*#schema\s*}}([\s\S]*?){{\s*\/schema\s*}}/);return t?t[1]:""}function y(e){t.default.existsSync(e)&&t.default.removeSync(e)}function N(t,n=process.cwd()){return t?(0,e.join)(n,`.env.${t}`):(0,e.join)(n,".env")}function v(e=Date.now(),t="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}"){let n=new Date(e);return(0,i.format)(n,t)}function I(e){let t=o.DEFAULT_EXTENSION_ENDPOINT;return e.env&&(t=o.EXTENSION_ENDPOINTS[e.env]),`${t}/${o.EXTENSION_LINK_PATH}/${e.appKey}/${e.extensionUuid}`}function O(e){return e?o.EXTENSION_ENDPOINTS[e]:o.DEFAULT_EXTENSION_ENDPOINT}function _(e,t){return"dev"===t?`${e}.myshoplinedev.com`:"test"===t?`${e}.myshoplinestg.com`:"pre"===t?`${e}.preview.myshopline.com`:`${e}.myshopline.com`}function $(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 n=e.match(/^([^.]+)\.myshopline\.com$/);return null==n?void 0:n[1]}function S(e){return(t,n)=>{if(n)throw Error(`[${e}] Invalid tag 'schema': ${n}: ${t}`);if(t)throw Error(`[${e}] Invalid schema: ${t}`);throw Error(`[${e}] Invalid schema`)}}function x(e){return/^{{\s*apps\.metafields\.\w+(\.\w+)+?(?:\.value)\s*}}$/.test(e)}function g(e){let t=e.map((e,t)=>{if(Object.prototype.hasOwnProperty.call(e,"options")&&"string"==typeof e.options){let n=o.OPTION_TYPES.includes(e.type);if(x(e.options)&&n)return{pass:!0,reason:"",field:""};if(x(e.options))return{pass:!1,reason:`must be one of ${o.OPTION_TYPES.join(", ")}`,field:`settings[${t}].type`};if(n)return{pass:!1,reason:o.ERRORS.INVALID_INTERPOLATION,field:`settings[${t}].options`}}return{pass:!0,reason:"",field:""}});return t.filter(e=>!e.pass)}function P(e){return e.map(e=>({label:e.partnerName,value:e.id}))}function w(e,t){return e.map(e=>({label:`${e.appName} ${u.default.magenta(`by ${t}`)}`,value:e}))}function F(e){let t=o.EXTENSION_TYPES;return e.length>0?t.concat(e.map(e=>({label:`${e.templateName} - Function`,value:e.templateName}))):t}function b(e){return e.map(e=>({label:e.storeName,value:e}))}async function q(e){let n=(0,l.joinPath)(e,o.EXTENSION_CONFIG_FILE),i=(0,l.joinPath)(e,o.CHECKOUT_UI_CONFIG_FILE),a=(0,l.joinPath)(e,o.FUNCTION_CONFIG_FILE);if(await (0,c.fileExists)(n)){let e=r.default.load(t.default.readFileSync(n,"utf8"));if("extension"===e.project_type)return s.EExtensionTypes.themeAppExtension}if(await (0,c.fileExists)(i)){let e=await (0,c.readFile)(i),t=(0,p.decodeToml)(e),{type:n}=await m.TypeSchema.parse(t);if("checkout_ui_customizer"===n)return s.EExtensionTypes.checkoutUiCustomizer}if(await (0,c.fileExists)(a)){let e=await (0,c.readFile)(a),t=(0,p.decodeToml)(e),{type:n}=await f.FunctionTypeSchema.parse(t);if(await (0,d.isFunctionType)(n))return n}throw new E.AbortError("The directory you are in is not a valid extension project.")}function C(){return`dev-${(0,n.v4)()}`}function U(e){let t=o.EXTENSION_TYPES.find(t=>t.value===e);return null==t?void 0:t.label}function A(e){return e===s.EExtensionTypes.checkoutUiCustomizer?a.ERegisterType.CHECKOUT_UI:e===s.EExtensionTypes.themeAppExtension?a.ERegisterType.THEME_APP_BLOCK:void 0}function D(e,t){return e||(t===s.EExtensionTypes.checkoutUiCustomizer?"checkout-ui-customizer":t===s.EExtensionTypes.themeAppExtension?"theme-app-extension":t||o.DEFAULT_EXTENSION_NAME)}
|
|
@@ -0,0 +1,3 @@
|
|
|
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,{default:()=>a,validateBlockSchema3:()=>n});const e=require("./const"),t=require("./utils");function r(){class e extends Map{set2(e,t){super.set(e,t)}get2(e){return super.get(e)}validate(e){for(let[t,r]of super.entries()){let a=Object.prototype.hasOwnProperty.call(e,t);r(null==e?void 0:e[t],a)}}}return new e}function a(a,n){let i=null,{relativeFile:l}=n,s=t=>t.every(t=>e.ALL_TEMPLATES.includes(t)),o=r(),f=(0,t.validateSchemaError)(l);o.set2("name",e=>{e||f("must be required","name")}),o.set2("target",t=>{t||f("must be required","target"),e.TARGETS.includes(t)||f(`must be one of ${e.TARGETS.join(", ")}`,"target")}),o.set2("stylesheet",e=>{if(Array.isArray(e)&&e.length>0){let t=e.map(e=>"string"==typeof e?e.trim():e).filter(Boolean);0===t.length&&f("Leave blank or fill in at least one")}}),o.set2("javascript",e=>{if(Array.isArray(e)&&e.length>0){let t=e.map(e=>"string"==typeof e?e.trim():e).filter(Boolean);0===t.length&&f("Leave blank or fill in at least one")}}),o.set2("templates",t=>{Array.isArray(t)&&t.length>0&&!s(t)&&f(`must be one of:
|
|
2
|
+
${e.ALL_TEMPLATES.join("\n")}`,"templates")}),o.set2("tag",t=>{t&&!e.TAGS.includes(t)&&f(`must be one of ${e.TAGS.join(", ")}`,"tag")}),o.set2("available_if",(r,a)=>{a&&("string"!=typeof r||!(0,t.isMatchedInterpolation)(r))&&f(e.ERRORS.INVALID_INTERPOLATION,"available_if")}),o.set2("settings",e=>{if(e&&Array.isArray(e)){let r=(0,t.getNonMatchedOptionInterpolation)(e);r.forEach(e=>{f(e.reason,e.field)})}});try{i=JSON.parse(a)}catch(e){f()}return i||f(),o.validate(i),!0}function n(a,n){let i=null,{relativeFile:l}=n,s=t=>t.every(t=>e.ALL_TEMPLATES_3.includes(t)),o=r(),f=(0,t.validateSchemaError)(l);o.set2("name",e=>{e||f("must be required","name")}),o.set2("target",t=>{t||f("must be required","target"),e.TARGETS.includes(t)||f(`must be one of ${e.TARGETS.join(", ")}`,"target")}),o.set2("stylesheet",e=>{if(Array.isArray(e)&&e.length>0){let t=e.map(e=>"string"==typeof e?e.trim():e).filter(Boolean);0===t.length&&f("Leave blank or fill in at least one")}}),o.set2("javascript",e=>{if(Array.isArray(e)&&e.length>0){let t=e.map(e=>"string"==typeof e?e.trim():e).filter(Boolean);0===t.length&&f("Leave blank or fill in at least one")}}),o.set2("templates",t=>{Array.isArray(t)&&t.length>0&&!s(t)&&f(`must be one of:
|
|
3
|
+
${e.ALL_TEMPLATES.join("\n")}`,"templates")}),o.set2("tag",t=>{t&&!e.TAGS.includes(t)&&f(`must be one of ${e.TAGS.join(", ")}`,"tag")}),o.set2("available_if",(r,a)=>{a&&("string"!=typeof r||!(0,t.isMatchedInterpolation)(r))&&f(e.ERRORS.INVALID_INTERPOLATION,"available_if")}),o.set2("settings",e=>{if(e&&Array.isArray(e)){let r=(0,t.getNonMatchedOptionInterpolation)(e);r.forEach(e=>{f(e.reason,e.field)})}});try{i=JSON.parse(a)}catch(e){f()}return i||f(),o.validate(i),!0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>r});const e=function(e){return e&&e.__esModule?e:{default:e}}(require("fs-extra")),t=require("./utils");function r(r,n,u=process.cwd()){let i=Reflect.ownKeys(n).map(e=>"undefined"===n[e]?"":`${e}=${n[e]}`).join("\n"),o=(0,t.getEnvPath)(r,u);e.default.writeFileSync(o,i)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,r){for(var o in r)Object.defineProperty(e,o,{enumerable:!0,get:r[o]})}(exports,{zip:()=>t,removeZip:()=>c});const e=o(require("fs")),r=o(require("archiver"));function o(e){return e&&e.__esModule?e:{default:e}}const s=`${process.cwd()}/dist.zip`;function t(o=s){return new Promise((s,t)=>{let c=(0,r.default)("zip",{zlib:{level:9}}),i=e.default.createWriteStream(o);i.on("close",()=>{}),i.on("finish",()=>{s({output:o,size:c.pointer()})}),c.on("error",()=>{t(Error("Failed to compress!"))}),c.pipe(i),c.glob("assets/**/*",{cwd:process.cwd()}).glob("blocks/**/*.html",{cwd:process.cwd()}).glob("snippets/**/*.html",{cwd:process.cwd()}).glob("locales/**/*.json",{cwd:process.cwd()}).finalize()})}function c(r=s){e.default.unlinkSync(r)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,o){for(var r in o)Object.defineProperty(e,r,{enumerable:!0,get:o[r]})}(exports,{zip:()=>s,removeZip:()=>t});const e=c(require("fs")),o=c(require("archiver")),r=require("./const");function c(e){return e&&e.__esModule?e:{default:e}}const i=`${process.cwd()}/dist.zip`;function s(c=i){return new Promise((i,s)=>{let t=(0,o.default)("zip",{zlib:{level:9}}),n=e.default.createWriteStream(c);n.on("close",()=>{}),n.on("finish",()=>{i({output:c,size:t.pointer()})}),t.on("error",()=>{s(Error("Failed to compress!"))}),t.pipe(n),t.glob("public/**/*",{cwd:process.cwd()}).glob("blocks/**/*",{cwd:process.cwd()}).glob("components/**/*",{cwd:process.cwd()}).glob("i18n/**/*.json",{cwd:process.cwd()}).glob("compatibility/**/*",{cwd:process.cwd()}).glob(r.EXTENSION_CONFIG_FILE,{cwd:process.cwd()}).finalize()})}function t(o=i){e.default.unlinkSync(o)}
|
|
@@ -0,0 +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,{enterStore:()=>c,fetchUdbCookie:()=>p,verifyLogin:()=>m,default:()=>g});const e=n(require("axios")),t=require("../../helpers/sentry"),r=n(require("../../helpers/config")),o=require("./const"),s=n(require("../../utils/debug")),i=require("../../helpers/open-admin-url"),a=n(require("../../utils/winston")),u=require("../../utils/const");function n(e){return e&&e.__esModule?e:{default:e}}const d="/udb/lgn/login/check.do";let l=e.default.create({timeout:5e3,withCredentials:!0});const c=(e,t)=>l.get(`/admin/api/merchant/stores/${e}/token`,t),p=(t,r)=>{let s=(0,o.getAppId)(r);return e.default.create({timeout:1e4}).get(`${(0,i.replaceAdminHandle)(r)}/udb/lgn/cas/callback.do?ticket=${t}&appid=${s}&subappid=${o.SUB_APP_ID}`)},m=e=>{let t=(0,o.getAppId)(e),s=`${d}?appid=${t}&subappid=${o.SUB_APP_ID}`,{loginInfo:i}=r.default,a="";return i&&(a=Object.keys(i).map(e=>`${e}=${i[e]}`).join(";")),l.get(s,{headers:{cookie:a}})},f=r=>{let o=new URL(r);o.pathname="/",(l=e.default.create({baseURL:o.href,timeout:5e3,withCredentials:!0,headers:{"User-Agent":u.CLI_USER_AGENT}})).interceptors.request.use(e=>(s.default.printRequest(e),a.default.logHttp({type:"request",method:e.method,url:e.baseURL+e.url,params:e.params}),e),e=>Promise.reject(e)),l.interceptors.response.use(e=>{var o,i,u,n;if(s.default.printResponse(e.config,e),(0,t.reportHttpRes)(e),a.default.logHttp({type:"response",method:e.config.method,url:e.config.baseURL+e.config.url,params:e.config.params,body:e.data,status:e.status,traceId:(null==e?void 0:null===(o=e.data)||void 0===o?void 0:o.traceId)||(null==e?void 0:null===(i=e.data)||void 0===i?void 0:i.trace_id)||(null==e?void 0:null===(u=e.headers)||void 0===u?void 0:u["x-request-id"])||""}),null===(n=e.config.url)||void 0===n?void 0:n.includes(d))return e;if(302===e.status)return Promise.reject(Error("Your store domain does not exist, please check your store domain!"));if(!e.data.success){if("SMS0804"===e.data.code)return Promise.reject(Error(`No permission to access this store domain: ${r}`));let o=Error(e.data.msg?`Request Error:: code: ${e.data.code}; msg: ${e.data.msg}`:"Request Error:: Please retry again!");return(0,t.reportBug)(o),Promise.reject(o)}return e},e=>(e.response&&(0,t.reportHttpRes)(e.response),(0,t.reportBug)(e),Promise.reject(e)))},g=f;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Shopline CLI</title>
|
|
8
|
+
<style><%- css %></style>
|
|
9
|
+
<link rel="icon" href="https://cdn.myshopline.com/sl/admin/202209081538/favicon.png" type="image/x-icon">
|
|
10
|
+
</head>
|
|
11
|
+
|
|
12
|
+
<% if (successful) { %>
|
|
13
|
+
<body class="body-success">
|
|
14
|
+
<div class="app-success">
|
|
15
|
+
<div class="container">
|
|
16
|
+
<h1><%= message %></h1>
|
|
17
|
+
<p>You can close this tab and return to your terminal.</p>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</body>
|
|
21
|
+
<% } else { %>
|
|
22
|
+
<body class="body-error">
|
|
23
|
+
<div class="app-error">
|
|
24
|
+
<div class="container">
|
|
25
|
+
<h1>Something went wrong!</h1>
|
|
26
|
+
<p><%= message %></p>
|
|
27
|
+
<br>
|
|
28
|
+
<br>
|
|
29
|
+
<p>Return to your terminal and try running the previous command again.</p>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</body>
|
|
33
|
+
<% } %>
|
|
34
|
+
</html>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
html {
|
|
2
|
+
font-family: -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
|
|
3
|
+
text-size-adjust: 100%;
|
|
4
|
+
text-rendering: optimizeLegibility;
|
|
5
|
+
-webkit-font-smoothing: antialiased;
|
|
6
|
+
-moz-osx-font-smoothing: grayscale;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
body {
|
|
10
|
+
font-size: 26px;
|
|
11
|
+
line-height: normal;
|
|
12
|
+
margin: 0;
|
|
13
|
+
padding: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
button, input, optgroup, select, textarea {
|
|
17
|
+
font-family: inherit;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
h1 {
|
|
21
|
+
font-weight: 600;
|
|
22
|
+
font-size: 1em;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
p {
|
|
26
|
+
font-weight: 400;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.body-success {
|
|
30
|
+
color: #F6F6F7;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.body-error {
|
|
34
|
+
color: #202223;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.app-success {
|
|
38
|
+
width: 100vw;
|
|
39
|
+
height: 100vh;
|
|
40
|
+
background-color: #06375d;
|
|
41
|
+
display: flex;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.app-error {
|
|
45
|
+
width: 100vw;
|
|
46
|
+
height: 100vh;
|
|
47
|
+
background-color: #F6F6F7;
|
|
48
|
+
display: flex;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.container {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
width: 100%;
|
|
56
|
+
height: 100%;
|
|
57
|
+
padding-left: 7.5em;
|
|
58
|
+
}
|
|
@@ -0,0 +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,{APP_ID_MAP:()=>t,SUB_APP_ID:()=>r,getAppId:()=>o});const e=function(e){return e&&e.__esModule?e:{default:e}}(require("../../utils/get-store-env")),t={stg:"1163336839",prod:"1165600903"},r="1";function o(r){let o=(0,e.default)(r);return"prod"===o||"pre"===o?t.prod:t.stg}
|
|
@@ -0,0 +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,{IdentityAuthServerPort:()=>n,default:()=>o});const e=l(require("koa")),t=l(require("koa-ejs")),r=l(require("path")),s=l(require("fs")),a=l(require("killable")),i=require("./api");function l(e){return e&&e.__esModule?e:{default:e}}const n=3456,u=l=>new Promise((u,o)=>{let d=new e.default;(0,t.default)(d,{root:r.default.join(__dirname,"client"),layout:!1,cache:!1});let c=d.listen(n);(0,a.default)(c),d.use(async e=>{let t=e.request.query,a={css:s.default.readFileSync(r.default.join(__dirname,"client/style.css"))};if(t.ticket)try{let r=await (0,i.fetchUdbCookie)(t.ticket,l),{rescode:s,data:n}=r.data;if("0"===s){let t=n.ck;Object.keys(t).length>0?(e.status=200,a.successful=200===e.status,a.message="You've successfuly logged into the Shopline CLI!",await e.render("index",a),u(t)):(e.status=403,a.successful=200===e.status,a.message="Anti-forgery state token does not match the initial request.",await e.render("index",a),o(Error("No message returned after logging in to the server. Please retry again!")))}else"-4"===s?o(Error("Illegal parameters, please retry again!")):"1028"===s&&o(Error("The ticket is invalid, please retry again!"))}catch(e){o(e)}else e.status=403,a.successful=200===e.status,a.message="Login failed due to missing required parameters for the URL.",await e.render("index",a),o(Error("No message returned after logging in to the server. Please retry again!"));setImmediate(()=>{var e;null==c||null===(e=c.kill)||void 0===e||e.call(c)})})}),o=u;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,r){for(var t in r)Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}(exports,{authority:()=>o,default:()=>f});const e=require("lodash"),r=l(require("../../helpers/config")),t=l(require("../../helpers/open-admin-url")),a=l(require("../../utils/get-url-handle")),u=l(require("./api")),i=l(require("./create-server")),n=l(require("./store-enter"));function l(e){return e&&e.__esModule?e:{default:e}}const o=async t=>{(0,u.default)(t);let l=await (0,i.default)(t),o=await (0,n.default)((0,a.default)(t),l),f=r.default.getLoginInfo(t),s={...(0,e.omit)(f,"a_mach"),...l,...o};return r.default.saveLoginInfo(s,t),s},f=async e=>{await (0,t.default)(e);let r=await o(e);return r};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>t});const e=require("./api"),t=async(t,a)=>{let{data:{data:{contextToken:r,storeId:d}}}=await (0,e.enterStore)(t,{headers:{Cookie:`a_osudb_uid=${a.a_osudb_uid};a_osudb_oar=${a.a_osudb_oar}`},timeout:1e4,maxRedirects:0,validateStatus:e=>e>=200&&(e<300||[302].includes(e))});return{a_ste:r,store_id:d}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var u in t)Object.defineProperty(e,u,{enumerable:!0,get:t[u]})}(exports,{ElogDay:()=>e,default:()=>n});const t=require("../../utils/path"),u=function(e){return e&&e.__esModule?e:{default:e}}(require("../../utils/winston")),o=require("../../utils/output");async function n(e){let n=(0,t.cwd)(),r=await u.default.getLogFileByPath(n,Number(e.day));r&&(0,o.outputSuccess)((0,o.outputContent)`Your log file is located at: ${o.outputToken.path(r)}, you can provide the file or ${o.outputToken.magenta(u.default.getTraceId())} to SHOPLINE`)}!function(e){e.three="3",e.five="5",e.seven="7",e.ten="10",e.fifteen="15"}(e||(e={}));
|
|
@@ -0,0 +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,{createNewTheme:()=>d,getThemes:()=>u,getThemeInfo:()=>f,uploadTheme:()=>p,getThemeFileList:()=>c,deleteFiles:()=>m,updateFile:()=>g,createFile:()=>h,downloadTheme:()=>v,getThemeFileDetail:()=>T});const e=i(require("axios")),t=i(require("form-data")),r=i(require("../../../helpers/config")),s=require("../../../utils/const"),a=require("../../../utils/error");function i(e){return e&&e.__esModule?e:{default:e}}const{loginInfo:o,currentStore:n}=r.default,l=e.default.create({baseURL:`${n}/api/website/admin/theme/cli`,maxContentLength:1/0,maxBodyLength:1/0});l.interceptors.request.use(e=>{if(o){let t=Object.keys(o).map(e=>`${e}=${o[e]}`).join(";"),a=r.default.dfpToken||"";Object.assign(e.headers,{cookie:t,"dfp-token":a,"User-Agent":s.CLI_USER_AGENT})}return(null==e?void 0:e.data)instanceof t.default&&Object.assign(e.headers,null==e?void 0:e.data.getHeaders()),e}),l.interceptors.response.use(e=>{var t,r;if("stream"===e.config.responseType)return e;let s=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success;if(!s)throw new a.AbortError(JSON.stringify(e.data,null,2));return null==e?void 0:null===(r=e.data)||void 0===r?void 0:r.data},e=>{let t=new a.AbortError(JSON.stringify(e.response.data,null,2));return Promise.reject(t)});const d=e=>l.post("/theme/upload",e),u=async()=>l.get("/themes"),f=e=>l.get(`/theme/${e}`),p=e=>l.post("/files/upload",e),c=e=>l.get("/files",{params:{themeId:e}}),m=(e,t)=>l.delete("/files",{data:{themeId:e,fileNames:t}}),g=e=>l.put("/file",e),h=e=>l.post("/file",e),v=e=>l.get(`/theme/${e}/download`,{responseType:"stream"}),T=(e,t)=>l.get("/files",{params:{themeId:e,fileNames:t.join(",")}});
|
|
@@ -0,0 +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"theme.schema.json"===this.fileName}get isConfigFile(){return["theme.schema.json","theme.config.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.isImageType?(0,s.readFileSync)(this.localeFullFilePath,{}):(0,s.readFileSync)(this.localeFullFilePath)}get localeFullFilePath(){let e=(0,i.joinPath)(this.cwd,this.filePath);return e}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}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>p});const e=c(require("pathe")),t=c(require("fs-extra")),i=c(require("fast-glob")),r=c(require("adm-zip")),a=require("../../../utils/fs"),l=c(require("../../../utils/debug")),n=require("../../../utils/path"),u=c(require("../../../utils/colors")),o=require("../utils"),s=c(require("../../../utils/winston")),d=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=h(t);if(i&&i.has(e))return i.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var n=a?Object.getOwnPropertyDescriptor(e,l):null;n&&(n.get||n.set)?Object.defineProperty(r,l,n):r[l]=e[l]}return r.default=e,i&&i.set(e,r),r}(require("../../../utils/logger"));function f(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function c(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(h=function(e){return e?i:t})(e)}class p extends l.default{pack(l){let n=new r.default,f=i.default.sync(l||o.themeDirectoryGlobList3,{cwd:this.cwd});return s.default.log("Pack theme..."),f.forEach(t=>{let i=e.default.dirname(t),r=e.default.join(this.cwd,t);if(this.includeFilter&&this.ignoreFilter){let e=this.ignoreFilter.match(t),a=this.includeFilter.match(t);!e&&a&&(d.info(`adding ${u.default.magenta(t)}`,!0),this.log(`adding ${u.default.magenta(t)}`),n.addLocalFile(r,i))}else d.info(`adding ${u.default.magenta(t)}`,!0),this.log(`adding ${u.default.magenta(t)}`),n.addLocalFile(r,i)}),(0,a.pathExists)(this.targetZipFilePath)&&t.default.unlinkSync(this.targetZipFilePath),s.default.log(`Write zip file to ${this.targetZipFilePath}...`),n.writeZip(this.targetZipFilePath,e=>{if(e)throw e}),s.default.log(`Write zip file to ${this.targetZipFilePath} success`),this.targetZipFilePath}get targetZipFilePath(){let t=(0,o.getThemeInfo3)(this.cwd),i=`${t.theme_name}-${t.theme_version}.zip`;return e.default.join(this.cwd,i)}constructor({cwd:e,includeFilter:t,ignoreFilter:i}){super("theme:package"),f(this,"cwd",(0,n.cwd)()),f(this,"includeFilter",void 0),f(this,"ignoreFilter",void 0),e&&(this.cwd=e),this.includeFilter=t,this.ignoreFilter=i}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"PullService3",{enumerable:!0,get:()=>q});const e=T(require("fs-extra")),t=T(require("pathe")),i=T(require("progress")),r=T(require("adm-zip")),l=require("../../../utils/path"),o=T(require("../../../utils/debug")),s=T(require("../../../utils/include-filter")),n=T(require("../../../utils/ignore-filter")),a=T(require("../../../utils/winston")),u=require("../../../utils/error"),d=require("../utils"),h=require("../inquirer"),c=require("../../../utils/ora-manager"),m=T(require("../../../utils/logger")),f=T(require("./theme")),p=require("../const"),w=require("./api"),g=T(require("../../../helpers/config")),v=require("../../../utils/check-theme-type-version"),y=require("../pull");function E(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function T(e){return e&&e.__esModule?e:{default:e}}class q extends o.default{async pull(){a.default.log("Prepare pull theme...");let{id:e,themeTypeVersion:t}=await this.prepareTheme();if(a.default.log(`Current pull theme id: ${e}`),a.default.log(`Current pull theme type version: ${t}`),!(0,v.isRemoteThemeTypeVersion3)(t)){await new y.PullService({...this.options,theme:e},this.cwd).pull();return}if(this.themeId=e,e){await this.beforePull(),a.default.log(`Downloading theme (${e})...`);let{fileName:t}=await this.processDownloadTheme(e);a.default.log(`Unzipping theme (${t})...`),this.unzipTheme(t),a.default.log(`Theme (${e}) pulled successfully`),m.default.success("Theme pulled successfully")}else throw new u.AbortError(p.ERRORS.THEME_ID_NOT_EXIST)}unzipTheme(i){let l=t.default.join(this.cwd,i);if(e.default.existsSync(l)){try{let e=new r.default(l),t=e.getEntries();t.forEach(t=>{let i=t.entryName,r=this.ignoreFilter.match(i),l=this.includeFilter.match(i);!r&&l&&e.extractEntryTo(i,this.cwd,!0,!0)})}catch(e){throw new u.AbortError(e.message,p.ERRORS.UNZIP_THEME_FAILED)}e.default.removeSync(l)}}async processDownloadTheme(e){let t=(0,c.createOra)("Fetching the theme package file...");try{t.start();let{fileName:i}=await this.downloadTheme(e,t);return await Promise.resolve({fileName:i,themeId:e})}catch(e){return t.isSpinning&&t.fail().clear(),Promise.reject(e.message||e)}}downloadTheme(e,t){return new Promise(async(i,r)=>{let l=await (0,w.downloadTheme)(e);if(t.succeed().clear(),200===l.status){let t=l.headers,o=t["theme-status"],s=t["theme-develop-type"];if(void 0===o||void 0===s){r(new u.AbortError(p.ERRORS.THEME_ID_NOT_EXIST));return}this.onDownloadProgress(l,e).then(e=>i(e)).catch(r)}else r(new u.AbortError(p.ERRORS.DOWNLOAD_THEME_FAILED))})}onDownloadProgress(r,l){return new Promise((o,s)=>{var n,a;let u;let h=r.headers["theme-status"],m=r.headers["theme-develop-type"],f=r.headers["content-length"]||0,w=r.headers["content-disposition"],v=null!==(a=null===(n=/fileName=([^;]+)/.exec(w))||void 0===n?void 0:n[1])&&void 0!==a?a:p.DEFAULT_ZIP_NAME;v=decodeURIComponent(v);let y=t.default.basename(v,".zip"),E=e.default.createWriteStream(t.default.join(this.cwd,v)),T=(0,d.getKeyMessage)(`Pulling theme files from ${decodeURIComponent(y)} (#${l}) on ${g.default.currentStore}`);f?(u=new i.default((0,d.getKeyMessage)("[:bar] :rate/bps :percent :etas"),{complete:"=",incomplete:" ",total:+f,width:50}),console.log(T)):u=(0,c.createOra)({text:T,spinner:"bouncingBar"}),r.data.pipe(E),r.data.on("data",e=>{f?u.tick(e.length):u.start()}),r.data.on("error",e=>{f||u.fail(),s(e)}),r.data.on("end",()=>{f||u.succeed(),E.on("finish",()=>{let i=e.default.statSync(t.default.join(this.cwd,v)).size;this.log("fileSize: %O",i),0===i?(f||u.fail("Downloaded file is empty"),s(Error("Downloaded file is empty"))):o({themeStatus:h,themeType:m,fileName:v})})})})}get isEmptyDir(){return(0,d.isEmptyDir)(!0,this.cwd)}async beforePull(){if(this.isEmptyDir||this.nodelete)return Promise.resolve();let t=await (0,h.askForPull)();return"clear"===t&&(a.default.log("Clear local theme files..."),e.default.emptyDirSync(this.cwd)),Promise.resolve()}async prepareTheme(){if(this.themeId){let{id:e,themeTypeVersion:t}=await f.default.getThemeInfo(this.themeId);return{id:e,themeTypeVersion:t}}if(this.live){let{id:e,themeTypeVersion:t}=await f.default.getLiveThemeInfo();if(!e)throw new u.AbortError('Theme "live" doesn\'t exist');return{id:e,themeTypeVersion:t}}if(this.development){let{id:e,themeTypeVersion:t=""}=await f.default.getDevelopmentThemeInfo();if(!e)throw new u.AbortError('Theme "development" doesn\'t exist');return{id:e,themeTypeVersion:t}}let{id:e,themeTypeVersion:t}=await f.default.chooseThemeList("pull");return{id:e,themeTypeVersion:t}}constructor(e,t=(0,l.cwd)()){var i,r,o,a;super("theme:pull"),E(this,"cwd",void 0),E(this,"themeId",void 0),E(this,"live",void 0),E(this,"development",void 0),E(this,"nodelete",void 0),E(this,"includeFilter",void 0),E(this,"ignoreFilter",void 0),E(this,"options",void 0),this.options=e,this.cwd=t,this.themeId=e.theme||"",this.live=null!==(i=e.live)&&void 0!==i&&i,this.development=null!==(r=e.development)&&void 0!==r&&r,this.nodelete=e.nodelete;let u=null!==(o=e.only)&&void 0!==o?o:[],d=null!==(a=e.ignore)&&void 0!==a?a:[];this.log("includes: %O",u),this.log("ignores: %O",d),this.includeFilter=new s.default(u,this.cwd),this.ignoreFilter=new n.default(d,this.cwd)}}
|
|
@@ -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,{default:()=>w,prompt:()=>v});const e=f(require("inquirer")),t=f(require("ora")),i=f(require("../../../utils/debug")),r=require("../../../utils/path"),l=f(require("../../../utils/print-preview")),u=require("../../../utils/output"),s=require("../types"),n=f(require("./theme")),o=require("../../../utils/ui/ui"),d=f(require("../../../utils/ignore-filter")),a=f(require("../../../utils/include-filter")),h=f(require("../../../utils/winston")),m=require("../../../utils/error"),c=require("../../../utils/check-theme-type-version");function p(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}}const v=e.default.createPromptModule();class w extends i.default{async push(){h.default.log("Prepare push theme...");let e=await this.prepareTheme();if(!e)return;let i=(0,t.default)("Uploading your theme...").start(),r=e.id;if(e.status!==s.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(),h.default.log(`Push theme (${r}) successfully`),(0,u.outputSuccess)("Your theme was pushed successfully"),(0,l.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 m.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:s.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"),l=t===s.EThemeStatus.Published,u=(0,c.getThemeTypeVersion)(this.cwd,!0);if(u!==r)throw new m.AbortError(`The theme type version is not matched, local: ${u}, selected: ${r}`);if(l){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,l,u,s,n;super("theme:push"),p(this,"cwd",void 0),p(this,"themeId",void 0),p(this,"live",void 0),p(this,"allowAlive",void 0),p(this,"development",void 0),p(this,"unpublished",void 0),p(this,"includeFilter",void 0),p(this,"ignoreFilter",void 0),p(this,"nodelete",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!==(l=e.development)&&void 0!==l&&l,this.unpublished=e.unpublished,this.nodelete=null!==(u=e.nodelete)&&void 0!==u&&u;let o=null!==(s=e.only)&&void 0!==s?s:[],h=null!==(n=e.ignore)&&void 0!==n?n:[];this.log("includes: %O",o),this.log("ignores: %O",h),this.includeFilter=new a.default(o,this.cwd),this.ignoreFilter=new d.default(h,this.cwd)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>p});const e=d(require("fs-extra")),t=require("../../../helpers/sentry"),l=require("../../../utils/error"),a=d(require("../../../utils/winston")),i=d(require("../../../utils/get-objects-diff")),r=require("../inquirer"),s=require("../../../utils/messages"),o=d(require("./file")),n=require("./api"),f=d(require("../operation")),c=d(require("../../../utils/debug"));function u(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function d(e){return e&&e.__esModule?e:{default:e}}class p extends c.default{async syncRemoteUpdate(){let{local:e,remote:t}=await this.themeService.getFileChecksums();a.default.log("[Remote Watch] Get remote and local diffs...");let l=await (0,i.default)(t,e);this.log("remote diffs: %O",l),a.default.log("[Remote Watch] Run remote diffs..."),await this.updateStrategy(l,!0)}async updateStrategy(e,t){let{local:l,remote:i}=await p.prepareUpdateDiffs(e,t);this.log("local diffs: %O",l),this.log("remote diffs: %O",i),l.length&&a.default.log(`Run local diffs ${JSON.stringify(l)}...`),i.length&&(a.default.log(`Run remote diffs ${JSON.stringify(i)}...`),i.forEach(async({type:e,key:t})=>{let l=new o.default(t,this.themeService.cwd);await this.processRemoteDiffFile(e,l);let a=new f.default("update"===e?"get":e,l).asSyncMessage();console.log(a)}))}removeUpdateToLocalFiles(e){let t=this.updateToLocalFiles.findIndex(t=>t.fileName===e);-1!==t&&this.updateToLocalFiles.splice(t,1)}shouldUpdateToLocal(e){return this.updateToLocalFiles.find(t=>t.fileName===e)}appendUpdateToLocalFiles(e){this.updateToLocalFiles.find(t=>t.fileName===e.fileName)||this.updateToLocalFiles.push(e)}async processRemoteDiffFile(t,l){let{fullPath:i}=l;if("create"===t||"update"===t){a.default.log(`Get file (${l.fileName}) information: ${l.fileName}`);let t=await this.getFileInfo(l.fileName);a.default.log("Writing file content"),e.default.ensureFileSync(i),this.appendUpdateToLocalFiles(l),e.default.writeFileSync(i,t)}else"delete"===t&&(a.default.log(`Delete file (${l.fileName})`),this.appendUpdateToLocalFiles(l),e.default.unlinkSync(i))}async getFileInfo(e){let t=await (0,n.getThemeFileDetail)(this.themeService.themeId,[e]);return t[0].content}static async prepareUpdateDiffs(e,t){let l={local:[],remote:[]},i=e.length,s=e=>"create"===e?"delete":"delete"===e?"create":"update",o=(e,t)=>{let a=t.filter(e=>{let t=e.key;return(t.startsWith("theme.config")||t.startsWith("templates/"))&&t.endsWith(".json")});"remote"===e?l.remote=l.remote.concat(a):l.local=l.local.concat(a.map(e=>({...e,type:s(e.type)})))};if(!i)return l;if(t)return o("remote",e),l;a.default.log("Update conflicts files...");let[{key:n},...f]=e,c=await p.promptUpdateStrategy(n);if(o(c,[e[0]]),1===i)return l;let u=await (0,r.askForApplyToAll)(f.length);for await(let e of(console.log(),f))if(u)a.default.log("Apply to all files to solve conflict files..."),o(c,f);else{let t=await this.promptUpdateStrategy(e.key);a.default.log(`Apply ${e.key} strategy to solve conflict files...`),console.log(),o(t,[e])}return l}static async promptUpdateStrategy(e){let t=(0,s.getMessage)("theme.serve.syncer.update_strategy.title_content",{file_name:e});console.log(t);let l=await (0,r.askForUpdateStrategy)();return l}start(){this.timer=setInterval(async()=>{try{await this.syncRemoteUpdate()}catch(a){this.stop(),(0,t.reportBug)(a);let e=new l.AbortError(a.message);throw e.stack=a.stack,e}},3e3)}stop(){this.timer&&clearInterval(this.timer)}constructor(e){super("theme:serve:update"),u(this,"themeService",void 0),u(this,"timer",void 0),u(this,"updateToLocalFiles",void 0),this.themeService=e,this.timer=null,this.updateToLocalFiles=[]}}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var a in t)Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}(exports,{default:()=>E,startThemeService:()=>N,themePresenter:()=>_});const e=I(require("fast-glob")),t=I(require("form-data")),a=I(require("fs")),i=I(require("inquirer")),r=I(require("chokidar")),s=I(require("ora")),l=require("lodash"),n=I(require("../../../utils/debug")),u=I(require("../../../helpers/config")),h=require("../../../utils/messages"),d=require("../../../helpers/sentry"),o=require("../../../utils/path"),c=I(require("../../../utils/winston")),m=require("./api"),p=require("../types"),f=require("../utils"),g=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var a=k(t);if(a&&a.has(e))return a.get(e);var i={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var l=r?Object.getOwnPropertyDescriptor(e,s):null;l&&(l.get||l.set)?Object.defineProperty(i,s,l):i[s]=e[s]}return i.default=e,a&&a.set(e,i),i}(require("../../../utils/logger")),v=I(require("../../../utils/get-objects-diff")),y=I(require("./file")),T=I(require("./package")),w=require("../../../utils/error"),F=require("../const"),D=I(require("../../../utils/colors")),b=I(require("./remote-watcher"));function S(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function I(e){return e&&e.__esModule?e:{default:e}}function k(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,a=new WeakMap;return(k=function(e){return e?a:t})(e)}const q=i.default.createPromptModule();class E extends n.default{async watchRemote(){this.editorSync&&(this.remoteWatcher=new b.default(this),this.remoteWatcher.start())}watch(){this.watchRemote();let e=r.default.watch((0,f.getThemeDirectory3)(this.cwd),{ignored:/(^|[/\\])\../,ignoreInitial:!0});e.on("ready",()=>{e.on("add",(...e)=>{let t=e[0];c.default.log(`Add theme file: ${t}`),this.shouldWatchFile(t)&&this.onAdd(t)}),e.on("change",(...e)=>{let t=e[0];c.default.log(`Change theme file: ${t}`),this.shouldWatchFile(t)&&this.onChange(t)}),e.on("unlink",(...e)=>{let t=e[0];c.default.log(`Unlink theme file: ${t}`),this.shouldWatchFile(t)&&this.onUnlink(t)})})}shouldWatchFile(e){var t;let a=(0,f.parseFileName)(e,this.cwd);if(null===(t=this.remoteWatcher)||void 0===t?void 0:t.shouldUpdateToLocal(a)){this.remoteWatcher.removeUpdateToLocalFiles(a);return}let i=this.ignoreFilter.match(a),r=this.includeFilter.match(a);return!i&&r}async onAdd(e){var i;let r=(0,f.parseFileName)(e,this.cwd),l=new t.default;l.append("file",a.default.createReadStream(e)),l.append("themeId",this.themeId),l.append("fileName",r);let n=(0,s.default)((0,h.getMessage)("theme.serve.syncer.create_strategy.success",{file_name:r})).start();await (0,m.createFile)(l),null===(i=this.sse)||void 0===i||i.broadcast(this.getSseData(e,"add")),n.succeed()}async onChange(e){var i;let r=(0,f.parseFileName)(e,this.cwd),l=new t.default;l.append("file",a.default.createReadStream(e)),l.append("themeId",this.themeId),l.append("fileName",r);let n=(0,s.default)((0,h.getMessage)("theme.serve.syncer.update_strategy.success",{file_name:r})).start();await (0,m.updateFile)(l),null===(i=this.sse)||void 0===i||i.broadcast(this.getSseData(e)),n.succeed()}async onUnlink(e){var t;let a=(0,f.parseFileName)(e,this.cwd),i=(0,s.default)((0,h.getMessage)("theme.serve.syncer.delete_strategy.success",{file_name:a})).start();await (0,m.deleteFiles)(this.themeId,[a]),null===(t=this.sse)||void 0===t||t.broadcast(this.getSseData(e,"unlink")),i.succeed()}getSseData(e,t){return"full-page"===this.mode||t&&["add","unlink"].includes(t)?{data:{reload_page:!0}}:{data:{modified:[(0,f.getRelativePath)(e,this.cwd)]}}}async syncTheme({nodelete:e}={nodelete:!1}){let t=(0,s.default)(`✨ Syncing theme #${this.themeId} on ${u.default.currentStore}`).start(),{name:a,status:i}=await this.findOrCreateTheme(),{local:r,remote:l}=await this.getFileChecksums(),n=await (0,v.default)(r,l);if(n.length){let t=[],r=[];if(n.forEach(e=>{switch(e.type){case"create":case"update":t.push(e);break;case"delete":r.push(e)}}),!e&&r.length){let e=r.map(e=>e.key);await (0,m.deleteFiles)(this.themeId,e)}if(t.length){let e=t.map(e=>e.key),r=this.getThemeZipFormData({fileList:e,name:a,status:i});await (0,m.uploadTheme)(r)}}t.succeed()}getThemeZipFormData({fileList:e,status:i,name:r}){let s=new T.default({cwd:this.cwd}).pack(e),l=new t.default;return l.append("file",a.default.createReadStream(s)),l.append("themeId",this.themeId||""),l.append("status",i),l.append("name",r),l}async getFileChecksums(){let{localeFileChecksums:e}=this,t=await (0,m.getThemeFileList)(this.themeId),a=t.reduce((e,t)=>(e[t.name]=t.checksum||"",e),Object.create(null)),i=this.getFilterFileChecksums(e),r=this.getFilterFileChecksums(a);return{local:i,remote:r}}getFilterFileChecksums(e){let t=Object.keys(e).reduce((t,a)=>{let i=this.ignoreFilter.match(a),r=this.includeFilter.match(a);return!i&&r&&(t[a]=e[a]),t},{});return t}get localeFileChecksums(){return this.themeFiles().reduce((e,t)=>(e[t.fileName]=t.checksum,e),{})}themeFiles(){let t=e.default.sync(f.themeDirectoryGlobList3,{cwd:this.cwd,onlyFiles:!0,unique:!0});return t.map(e=>new y.default(e,this.cwd))}static async getThemeInfo(e){let{id:t,name:a,status:i,themeTypeVersion:r}=await (0,m.getThemeInfo)(e);return{id:t,name:a,status:i,themeTypeVersion:r}}async findOrCreateTheme(){try{let{id:e,name:t,status:a}=await E.getThemeInfo(this.themeId);return{id:e,name:t,status:a}}catch(i){let{id:e,name:t,status:a}=await this.createNewDevelopmentTheme();return{id:e,name:t,status:a}}}async createNewTheme({name:e,status:t}){let a=this.getThemeZipFormData({status:t,name:e}),{themeId:i}=await (0,m.createNewTheme)(a);return{id:i,name:e,status:t}}async createNewDevelopmentTheme(){let e=(0,f.generateDevThemeName)(),t=this.getThemeZipFormData({name:e,status:p.EThemeStatus.Development}),{themeId:a}=await (0,m.createNewTheme)(t);return this.themeId=a,u.default.developmentThemeId=a,u.default.developmentThemeName=e,{id:a,name:e,status:p.EThemeStatus.Development}}static async getValidDevelopmentInfo(){let e=u.default.developmentThemeId;return await E.isValidDevTheme(e)?{id:e,name:"",status:p.EThemeStatus.Development}:{id:"",name:(0,f.generateDevThemeName)(),status:p.EThemeStatus.Development}}static async isValidDevTheme(e){try{let t=await (0,m.getThemeInfo)(e);if((null==t?void 0:t.status)===p.EThemeStatus.Development)return{id:t.id,name:t.name,status:t.status,themeTypeVersion:t.themeTypeVersion};return null}catch(e){return null}}static async chooseThemeList(e){let t=E.addDevelopmentTheme(await (0,m.getThemes)()),a=t.map(e=>({name:_(e,"short"),value:e.id})).filter(e=>e.value),{themeId:i}=await q([{type:"list",name:"themeId",message:{pull:"Select a theme to pull from",push:"Select theme to push to"}[e],pageSize:a.length,default:a[0].value,loop:!1,choices:a}]),{status:r,name:s,themeTypeVersion:l}=t.find(e=>e.id===i);return{id:i,name:s,status:r,themeTypeVersion:l}}static addDevelopmentTheme(e){let t=u.default.developmentThemeId,a=u.default.developmentThemeName;return t?e.concat({name:a,status:p.EThemeStatus.Development,id:t,themeTypeVersion:""}):e}static async package(e,t=(0,o.cwd)()){try{let e=new T.default({cwd:t});await e.pack()}catch(e){(0,f.handleError)(e)}}static async list(){try{c.default.log("Checking login..."),u.default.isLogin(),console.log((0,h.getMessage)("theme.list.title",{store:u.default.currentStore})),c.default.log("Printing theme list...");let e=await (0,m.getThemes)();e.forEach(e=>{console.log(_(e))}),c.default.log("Print theme list succeed!")}catch(e){(0,f.handleError)(e)}}static async getLiveThemeInfo(){let e=await (0,m.getThemes)(),{id:t,name:a,status:i,themeTypeVersion:r}=e.find(e=>e.status===p.EThemeStatus.Published);return{id:t,name:a,status:i,themeTypeVersion:r}}static async getDevelopmentThemeInfo(){let e=u.default.developmentThemeId,t=u.default.developmentThemeName,a=await E.isValidDevTheme(e);return a?{id:e,name:t,status:a.status,themeTypeVersion:a.themeTypeVersion}:{id:"",name:"",status:"",themeTypeVersion:""}}static checkThemeStandardStructure(e){if(0===e.length)throw new w.AbortError(F.ERRORS.NOT_STANDARD_DIRECTORY);let t=(0,l.difference)(f.standardThemeDirectories3,e);t.length>0&&Error(`
|
|
2
|
+
The presence of ${D.default.bold(null==t?void 0:t[0])} in the directory structure isn't supported.
|
|
3
|
+
|
|
4
|
+
Move any files to a parent folder, then delete unsupported subdirectories.
|
|
5
|
+
|
|
6
|
+
• Required directory structure: https://developer.myshopline.com/docs/introduce/bGgYARTh
|
|
7
|
+
`)}constructor({themeId:e,mode:t,cwd:a,sse:i,includeFilter:r,ignoreFilter:s,editorSync:l}){super("theme:theme"),S(this,"cwd",""),S(this,"themeId",""),S(this,"sse",void 0),S(this,"includeFilter",void 0),S(this,"ignoreFilter",void 0),S(this,"editorSync",void 0),S(this,"remoteWatcher",void 0),S(this,"mode",void 0),this.themeId=e||"",this.sse=i,this.cwd=a,this.mode=t||"hot-reload",this.includeFilter=r,this.ignoreFilter=s,this.editorSync=l,this.remoteWatcher=null}}async function N({mode:e,cwd:t,sse:a,includeFilter:i,ignoreFilter:r,editorSync:s}){try{let l=u.default.developmentThemeId,n=new E({themeId:l,mode:e,cwd:t,sse:a,includeFilter:i,ignoreFilter:r,editorSync:s}).watch();return{themeId:l,themeInstance:n}}catch(e){var l,n;return g.error((null==e?void 0:null===(l=e.response)||void 0===l?void 0:null===(n=l.data)||void 0===n?void 0:n.msg)||(null==e?void 0:e.stack)),(0,d.reportAndExit)(e)}}const O={[p.EThemeStatus.Published]:"green",[p.EThemeStatus.Unpublished]:"yellow",[p.EThemeStatus.Development]:"magenta"},P={[p.EThemeStatus.Published]:"live",[p.EThemeStatus.Unpublished]:"unpublished",[p.EThemeStatus.Development]:"development"};function _(e,t="long"){let a=O[e.status],i=[`${D.default[a](`[${P[e.status]}]`)}`];if(e.id===u.default.developmentThemeId&&i.push(D.default.cyan("[yours]")),e.themeTypeVersion&&i.push(D.default.bold.italic.cyan(e.themeTypeVersion)),"long"===t){let t=(0,h.getMessage)("theme.list.long",{id:e.id,name:e.name,tags:i.join(" ")});return t}let r=(0,h.getMessage)("theme.list.short",{name:e.name,tags:i.join(" ")});return r}
|
|
@@ -0,0 +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,{updateFile:()=>h,createFile:()=>R,uploadFile:()=>T,deleteFile:()=>_,uploadThemePackageFile:()=>O,getThemeFileDetail:()=>v,getThemeListWithPagination:()=>I,downloadThemePackage:()=>S,getThemeFileList:()=>$,uploadPrivateThemePackage:()=>b,getPublishedThemeInstance:()=>q,getThemeInfo:()=>w,changeThemeStatus:()=>y,createNewThemeOrCompleteUpload:()=>L});const e=p(require("axios")),t=require("querystring"),r=p(require("form-data")),s=p(require("../../helpers/config")),o=require("./const"),i=p(require("../../utils/debug")),a=p(require("./no-second-check")),n=require("../../helpers/sentry"),l=require("../../utils/error"),u=require("../../utils/const"),d=p(require("../../utils/winston"));function p(e){return e&&e.__esModule?e:{default:e}}const{loginInfo:c,currentStore:E}=s.default;function f(t){return p=>{let E=e.default.create({baseURL:t,maxContentLength:1/0,maxBodyLength:1/0});return E.interceptors.request.use(e=>{if(i.default.printRequest(e),c){let t=Object.keys(c).map(e=>`${e}=${c[e]}`).join(";"),r=s.default.dfpToken||"";Object.assign(e.headers,{cookie:t,"dfp-token":r,"User-Agent":u.CLI_USER_AGENT})}return(null==e?void 0:e.data)instanceof r.default&&Object.assign(e.headers,null==e?void 0:e.data.getHeaders()),d.default.logHttp({type:"request",method:e.method,url:e.baseURL+e.url,params:e.params}),e},e=>Promise.reject(e)),E.interceptors.response.use(async e=>{var t,r,s,u,c;let E=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success,f=null==e?void 0:null===(r=e.data)||void 0===r?void 0:r.code,{config:g}=e;if(i.default.printResponse(g,e),(0,n.reportHttpRes)(e),d.default.logHttp({type:"response",method:e.config.method,url:e.config.baseURL+e.config.url,params:e.config.params,body:e.data,status:e.status,traceId:(null==e?void 0:null===(s=e.data)||void 0===s?void 0:s.trace_id)||(null==e?void 0:null===(u=e.headers)||void 0===u?void 0:u["x-request-id"])||""}),o.ERROR_CODES.THEME_COUNT_LIMIT.includes(f))throw Error(o.ERRORS.THEME_COUNT_LIMIT);if(o.ERROR_CODES.DEVELOPMENT_THEME_NOT_EXIST.includes(f))throw Error(o.ERRORS.THEME_IS_INVALID);if(o.ERROR_CODES.FEATURE_KEY_NOT_EXIST.includes(f))throw Error(o.ERRORS.FEATURE_KEY_NOT_EXIST);if(o.ERROR_CODES.NO_SECOND_CHECK.includes(f))await a.default.run();else if(o.ERROR_CODES.INVALID_FILE.includes(f))throw new l.ValidatorError({code:f,errors:e.data.data.errors,message:e.data.msg});if("boolean"==typeof E&&!1===E){let t=e.data.msg||e.data.message||"",r=Error(t);throw o.ERROR_CODES.FILE_NOT_EXIT.includes(f)||(0,n.reportBug)(r),new l.AbortError(t)}return(null==p?void 0:p.withResponseHeader)?e:null==e?void 0:null===(c=e.data)||void 0===c?void 0:c.data},e=>{let t=(()=>{if(null==e?void 0:e.response){let{status:t,statusText:r,data:s}=e.response;return(null==s?void 0:s.msg)||(null==s?void 0:s.message)||(s.error||"string"==typeof s?s:`${t}: ${r}`)}return e.message})();e.response&&(0,n.reportHttpRes)(e.response);let r=new l.AbortError(t);return i.default.printErrorResponse(e.config,e.response),(0,n.reportBug)(e),Promise.reject(r)}),E}}const g=f(`${E}/admin/api/merchant-bff`)(),m=f(`${E}${o.ENDPOINTS.THEME}`),h=(e,{fileContent:t,fileName:r,cliFirstCreateFile:s})=>g.put(`/file/theme/${e}`,{fileContent:t,fileName:r,cliFirstCreateFile:s}),R=(e,{fileName:t,fileContent:r,duplicateFlag:s=!1,cliFirstCreateFile:o,sourceFileName:i})=>g.post(`/file/theme/${e}`,{fileName:t,fileContent:r,duplicateFlag:s,sourceFileName:i,cliFirstCreateFile:o}),T=(e,t,r)=>g.post(`/file/theme/${e}/upload`,t,r),_=(e,{fileName:t})=>g.delete(`/file/theme/${e}`,{data:{fileName:t}}),O=(...e)=>g.post("/theme/upload",...e),v=({themeId:e,fileName:r})=>g.get(`/file/theme/${e}/detail?${(0,t.stringify)({fileName:r})}`),I=e=>{let r=e?`/instance/list/page?${(0,t.stringify)(e)}`:"/instance/list/page";return m().get(r)},S=e=>m({withResponseHeader:!0}).get(`/instance/download/${e}`,{responseType:"stream"}),$=e=>g.get(`/file/theme/${e}/list`),b=(e,t)=>g.post("/theme/upload",e,t),q=()=>m().get("/instance/current"),w=e=>m().get(`/instance/${e}`),y=e=>m().post("/instance/status",e);function L(e){return m().post("/upload/single-file",e)}
|
|
@@ -0,0 +1,7 @@
|
|
|
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,{initConfig:()=>d,outputActiveConfig:()=>v,outputActiveChecks:()=>g,sortOffenses:()=>p,renderOffensesText:()=>h,formatOffenses:()=>m,formatSummary:()=>$,handleExit:()=>j,formatErrors:()=>E,isExtendedWriteStream:()=>_,formatOffensesJson:()=>O,getConfigRoot:()=>q});const e=c(require("yaml")),t=require("path"),r=require("../../../utils/fs"),n=require("../../../utils/output"),i=require("../../../utils/path"),o=require("./config"),l=require("./types"),s=require("./exception"),u=require("../../../utils/ui/render"),a=require("../../../utils/error"),f=c(require("../../../utils/winston"));function c(e){return e&&e.__esModule?e:{default:e}}async function d(t,l){let s=".theme-check.yml",u=(0,i.joinPath)(t,s);if(await (0,r.fileExists)(u)){(0,n.outputInfo)(`${s} already exists at ${t}`);return}let a=(0,o.getMergedConfig)(l),f=e.default.stringify(a);await (0,r.writeFile)(u,`${f}`),(0,n.outputSuccess)(`Created ${s} at ${t}`)}async function v(t,r){let i=(0,o.getMergedConfig)(r),l={...i,global:{...i.global,root:q(t,i.global.root)}};(0,n.outputInfo)(e.default.stringify(l))}async function g(t){let r=(0,o.getMergedConfig)(t),{global:i,checks:s}=r,u=[...new Set(i.ignore)],a=Object.keys(s),f=a.reduce((e,t)=>{let{severity:r,enabled:n,...i}=s[t];if(!n)return e;let o=r||l.EFailLevel.error;return e[t]={severity:o,ignored_patterns:`[${u.join(", ")}]`,...i},e},{});(0,n.outputInfo)(e.default.stringify(f))}const y=(e,t)=>e.severity===t.severity?0:"error"===e.severity?-1:1;function p(e){let t=e.reduce((e,{file:t,errors:r})=>(e[t]||(e[t]=[]),e[t].push(...r),e),{});return Object.keys(t).reduce((e,r)=>(e[r]=t[r].sort(y),e),{})}function h(e,t){let r=Object.keys(e).sort();r.forEach(r=>{(0,u.renderInfo)({headline:r,body:m(e[r],t)})})}function m(e,t){let n=e.map((n,o)=>{let{file:l,position:s,severity:u,check:a,message:f}=n,c="";if(s){let e=(0,i.joinPath)(t,l);(null==s?void 0:s.start.line)&&(null==s?void 0:s.end.line)&&(c=function(e,t,n){let i=(0,r.readFileSync)(e).toString(),o=i.split("\n"),l=o.slice(t-1,n),s=1===l.length,u=(e,r)=>{let n=s?e.trim():e;return`${t+r} ${n}`};return l.length>6?[...l.slice(0,3).map((e,r)=>`${t+r} ${e}`)," ...",...l.slice(-3).map((e,r)=>{let n=t+l.length-3;return`${n+r} ${e}`})].join("\n"):l.map(u).join("\n")}(e,null==s?void 0:s.start.line,null==s?void 0:s.end.line))}let d=`${o===e.length-1?"":"\n\n"}`;return[function(e){switch(e){case"error":return{error:"\n[error]:"};case"suggestion":return{warn:"\n[suggestion]:"};case"style":return{info:"\n[style]:"}}}(u),{bold:`${a}`},{subdued:`
|
|
2
|
+
${f}`},c?`
|
|
3
|
+
|
|
4
|
+
${c}`:"",d]});return n.flat()}function b(e){return e.reduce((e,t)=>{let r=!Object.prototype.hasOwnProperty.call(e,t.severity);return r&&(e[t.severity]=0),e[t.severity]+=1,e},{})}function $(e,t,r){let n=[`${r.length} files inspected`];if(0===e.length)n.push("with no offenses found.");else{n.push(`with ${e.length} total offenses.`);let t=b(e);t[l.EFailLevel.error]&&n.push(`
|
|
5
|
+
${t[l.EFailLevel.error]} errors.`),t[l.EFailLevel.suggestion]&&n.push(`
|
|
6
|
+
${t[l.EFailLevel.suggestion]} suggestion.`),t[l.EFailLevel.style]&&n.push(`
|
|
7
|
+
${t[l.EFailLevel.style]} style issues.`)}return n}function w(e){switch(e){case"error":return s.SeverityNumber.error;case"suggestion":return s.SeverityNumber.suggestion;case"style":return s.SeverityNumber.style;default:return}}function j(e,t){t||process.exit(0);let r=w(t),n=void 0!==r&&e.some(e=>w(e.severity)<=r);f.default.close(()=>{process.exit(n?1:0)})}function E(e){return e.map(e=>e.errors).flat()}function _(e){return"_handle"in e&&"object"==typeof e._handle&&null!==e._handle&&"function"==typeof e._handle.setBlocking}function O(e){return Object.entries(e).map(([e,t])=>{var r,n,i,o;let l=t.map(e=>{var t,l,s,u,a,f,c,d;return{check:e.check,severity:e.severity,start_row:null!==(r=null===(t=e.position)||void 0===t?void 0:null===(l=t.start)||void 0===l?void 0:l.line)&&void 0!==r?r:0,start_column:null!==(n=null===(s=e.position)||void 0===s?void 0:null===(u=s.start)||void 0===u?void 0:u.column)&&void 0!==n?n:0,end_row:null!==(i=null===(a=e.position)||void 0===a?void 0:null===(f=a.end)||void 0===f?void 0:f.line)&&void 0!==i?i:0,end_column:null!==(o=null===(c=e.position)||void 0===c?void 0:null===(d=c.end)||void 0===d?void 0:d.column)&&void 0!==o?o:0,message:e.message}}),s=b(t);return{path:e,offenses:l,errorCount:s.error||0,warningCount:s.suggestion||0,infoCount:s.style||0}})}function q(e,r){if(void 0===r)return e;if((0,t.isAbsolute)(r))throw new a.AbortError('the "root" property can only be relative');return(0,i.resolvePath)(e,r)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,r){for(var t in r)Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}(exports,{resolveConfig:()=>u,getDefaultConfig:()=>o,getMergedConfig:()=>a});const e=function(e){return e&&e.__esModule?e:{default:e}}(require("yaml")),r=require("@shoplinedev/theme-check"),t=require("../../../utils/fs"),i=require("../../../utils/path"),n=require("./types");function l(e){return Array.isArray(e)&&e.length>0?{global:{include_categories:e.map(e=>n.ECheckCategory[e])}}:null}async function u(r,n,u){if(!u)return l(n);let o=(0,i.joinPath)(r,u);if(await (0,t.fileExists)(o)){let r=e.default.parse(await (0,t.readFile)(o)),i=l(n);return i?{...r,global:{...r.global,include_categories:i.global.include_categories}}:r}return l(n)}function o(){return(0,r.generateConfig)()}function a(e){return(0,r.listEnabledConfig)(e||{})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,r){for(var t in r)Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}(exports,{SeverityNumber:()=>e,CliCheckError:()=>r.CliCheckError,Errors:()=>r.Errors,Exception:()=>r.Exception,Severity:()=>r.Severity});const r=require("@shoplinedev/theme-check");!function(e){e[e.error=0]="error",e[e.suggestion=1]="suggestion",e[e.style=2]="style"}(e||(e={}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>l});const e=require("@shoplinedev/theme-check"),t=require("../../../utils/ui/render"),r=require("./check"),i=require("./config"),o=require("./types"),n=require("../../../utils/output"),u=function(e){return e&&e.__esModule?e:{default:e}}(require("../../../utils/winston"));async function l(l){var a;let{config:c,path:f,init:s,print:d,list:h,output:g,failLevel:m,category:k}=l;u.default.log("Resolve theme config...");let p=await (0,i.resolveConfig)(f,k,c);if(s){u.default.log("Init theme config in current directory..."),await (0,r.initConfig)(f,p),u.default.log("Init .theme-check.yml in current directory done.");return}if(d){u.default.log("Print active config..."),await (0,r.outputActiveConfig)(f,p),u.default.log("Print active config done.");return}if(h){u.default.log("List enabled checks..."),await (0,r.outputActiveChecks)(p),u.default.log("List enabled checks done.");return}let y=(0,r.getConfigRoot)(f,null==p?void 0:null===(a=p.global)||void 0===a?void 0:a.root);u.default.log("Check theme...");let{errors:v,checkFiles:C}=await (0,e.cliCheckTheme)({themePath:y,config:p}),O=(0,r.formatErrors)(v),b=(0,r.sortOffenses)(v),q=Object.values(C).flat();if(g===o.ECheckOutput.text){u.default.log("Render theme check summary..."),(0,r.renderOffensesText)(b,y);let e=O.length?t.renderInfo:t.renderSuccess;e({headline:"Theme Check Summary.",body:(0,r.formatSummary)(O,b,q)})}if(g===o.ECheckOutput.json){u.default.log("Render theme check summary in JSON format...");let{stdout:e}=process;(0,r.isExtendedWriteStream)(e)&&e._handle.setBlocking(!0),(0,n.outputInfo)(JSON.stringify((0,r.formatOffensesJson)(b)))}return(0,r.handleExit)(O,m)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e,t,o;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var o in t)Object.defineProperty(e,o,{enumerable:!0,get:t[o]})}(exports,{EFailLevel:()=>e,ECheckCategory:()=>t,ECheckOutput:()=>o,Config:()=>n.Config,Category:()=>n.Category,CheckConfig:()=>n.CheckConfig,GlobalConfig:()=>n.GlobalConfig});const n=require("@shoplinedev/theme-check");!function(e){e.error="error",e.suggestion="suggestion",e.style="style"}(e||(e={})),function(e){e.json="json",e.handlebars="handlebars",e.translation="translation",e.html="html"}(t||(t={})),function(e){e.text="text",e.json="json"}(o||(o={}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>e});class e{has(e){return!!this.get(e)}fileHasChanged(t){return this.checksumByKey.get(e.toKey(t))!==t.checksum}keys(){return Array.from(this.checksumByKey.keys())}delete(t){"string"==typeof t?this.checksumByKey.delete(t):this.checksumByKey.delete(e.toKey(t))}get(t){return this.checksumByKey.get(e.toKey(t))}set(e,t){this.checksumByKey.set(e,t||"")}static toKey(e){return e.fileName}constructor(){!function(e,t,s){t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s}(this,"checksumByKey",new Map)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var s in t)Object.defineProperty(e,s,{enumerable:!0,get:t[s]})}(exports,{prompt:()=>m,getAllThemeList:()=>p,getSortedThemeList:()=>c,default:()=>g,themePresenter:()=>T});const e=o(require("inquirer")),t=require("lodash"),s=o(require("../../helpers/config")),u=require("./api"),i=require("./const"),n=require("./types"),a=require("../../utils/messages"),l=o(require("../../utils/colors")),r=require("../../utils/error");function o(e){return e&&e.__esModule?e:{default:e}}const m=e.default.createPromptModule(),d={[n.EThemeStatus.Published]:"green",[n.EThemeStatus.Unpublished]:"yellow",[n.EThemeStatus.Development]:"magenta"},h={[n.EThemeStatus.Published]:"live",[n.EThemeStatus.Unpublished]:"unpublished",[n.EThemeStatus.Development]:"development"};async function p(){let e=await (0,u.getThemeListWithPagination)({pageNum:1,pageSize:i.DEFAULT_PAGE_SIZE,includePublish:!0}),t=(null==e?void 0:e.list)||[];return t}async function c(e){let s=await p(),u=[n.EThemeStatus.Published,n.EThemeStatus.Unpublished,n.EThemeStatus.Development],i=(0,t.sortBy)(s,e=>(0,t.indexOf)(u,e.status));return"function"==typeof e?i.map(e):i}async function f(){var e;let t={originThemes:[],choices:[],publishedThemeId:""},u=await c();return u=function(e){let t=s.default.developmentThemeId,u=s.default.developmentThemeName;return t?e.concat({name:u,status:n.EThemeStatus.Development,id:t}):e}(u),t.choices=u.map(e=>({name:T(e,"short"),value:e.id})),t.publishedThemeId=null===(e=u.find(e=>e.status===n.EThemeStatus.Published))||void 0===e?void 0:e.id,t.originThemes=u,t}async function g(e){var t;let{choices:s,publishedThemeId:u,originThemes:n}=await f();if(!s.length)throw new r.AbortError((0,a.getMessage)("theme.errors.no_themes"));let{themeId:l}=await m([{type:"list",name:"themeId",message:"pull"===e?"Select a theme to pull from":"Select theme to push to",pageSize:i.DEFAULT_PAGE_SIZE,default:u,loop:!1,choices:s}]),o=null===(t=n.find(e=>e.id===l))||void 0===t?void 0:t.status;return{themeId:l,isPublished:!!(l&&u&&u===l),status:o}}function T(e,t="long"){let u=d[e.status],i=[`${l.default[u](`[${h[e.status]}]`)}`];if(e.id===s.default.developmentThemeId&&i.push(l.default.cyan("[yours]")),"long"===t){let t=(0,a.getMessage)("theme.list.long",{id:e.id,name:e.name,tags:i.join(" ")});return t}let n=(0,a.getMessage)("theme.list.short",{name:e.name,tags:i.join(" ")});return n}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"renderSnippet",{enumerable:!0,get:()=>p});const e=i(require("axios")),t=i(require("form-data")),r=require("../../../helpers/sentry"),u=i(require("../../../utils/debug")),n=i(require("../../../helpers/config")),o=require("../../../utils/output"),s=require("../../../utils/const"),a=i(require("../../../utils/winston"));function i(e){return e&&e.__esModule?e:{default:e}}const{currentStore:l}=n.default,d=(()=>{let n=e.default.create({baseURL:l,maxContentLength:1/0,maxBodyLength:1/0,maxRedirects:0});return n.interceptors.request.use(e=>((0,o.outputDebug)((0,o.outputContent)`Request config: ${o.outputToken.json(e)}`),u.default.printRequest(e),Object.assign(e.headers,{cookie:"l_spwd=1","User-Agent":s.CLI_USER_AGENT}),(null==e?void 0:e.data)instanceof t.default&&Object.assign(e.headers,null==e?void 0:e.data.getHeaders()),a.default.logHttp({type:"request",method:e.method,url:e.baseURL+e.url,params:e.params}),e),e=>Promise.reject(e)),n.interceptors.response.use(async e=>{var t,r,n,o;return(u.default.printResponse(e.config,e),a.default.logHttp({type:"response",method:e.config.method,url:e.config.baseURL+e.config.url,params:e.config.params,body:e.data,status:e.status,traceId:(null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.trace_id)||(null==e?void 0:null===(r=e.headers)||void 0===r?void 0:r["x-request-id"])||(null==e?void 0:null===(n=e.headers)||void 0===n?void 0:n["x-response-id"])||""}),200===e.status&&e.data&&e.data["announcement-bar"].html)?null!==(o=e.data["announcement-bar"].html)&&void 0!==o?o:"":"null"},e=>{var t;let u=null===(t=e.response)||void 0===t?void 0:t.status;if((0,r.reportBug)(e),u>=300&&u<400)throw Error("Page not found. Please provide a valid --url value.");return"null"}),n})();function p(e,t){return d.post(e,t)}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>p});const e=d(require("repl")),t=require("htmlparser2"),r=require("domutils"),s=d(require("color-json")),l=d(require("../../../helpers/config")),n=require("../../../utils/output"),i=d(require("../../../utils/colors")),o=require("../../../utils/path"),a=require("./api"),u=d(require("../../../utils/winston"));function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function d(e){return e&&e.__esModule?e:{default:e}}class p{async start(){p.printReplMessage(),this.startReplServer()}static printReplMessage(){console.log(`
|
|
2
|
+
Welcome to Shopline Handlebars console
|
|
3
|
+
(press Ctrl + C twice to exit)
|
|
4
|
+
`)}async evaluator(e,t,r,s){if(u.default.log(`Evaluating: ${e}`),(0,n.outputDebug)(`Evaluating: ${e}`),/\{\{\{?|\}\}\}?/.test(e)){p.delimiterWarning(),s(null);return}try{await this.renderSnippet(e),s(null)}catch(e){console.log(i.default.red(e.message)),s(e,null),u.default.logError(e,()=>{process.exit(1)})}}static delimiterWarning(){console.log(i.default.yellow(`
|
|
5
|
+
Handlebars Console doesn't support Handlebars delimiters such as '{{ ... }}' or '{{{ ... }}}'.
|
|
6
|
+
|
|
7
|
+
Please use 'collections.first' instead of '{{ collections.first }}'.
|
|
8
|
+
`))}startReplServer(){u.default.log("Starting node repl server...");let t=e.default.start({eval:this.evaluator.bind(this)});t.on("exit",()=>{process.exit()})}collectAssignmentExpressiones(e){return(/^assign\s+(["']).+\1\s+(["']).+\2/.test(e)&&(console.log(i.default.gray(`> ${e}`)),this.assignments.add(`{{${e}}}`)),this.assignments.size>0)?Array.from(this.assignments).join("\n"):""}async renderSnippet(e){(0,n.outputDebug)(`Request url: ${this.requestUrl}`),e=e.replace(/\r|\n|\t/g,"");let t=this.collectAssignmentExpressiones(e);u.default.log(`Render snippet: ${t}{{{json ${e}}}}`);let r=await (0,a.renderSnippet)(this.requestUrl,{"announcement-bar":null,replace_templates:{"sections/announcement-bar.html":`<div id='${p.RENDER_SNIPPET_ID}'>${t}{{{json ${e}}}}</div>`}});if(r&&r.includes(p.RENDER_SNIPPET_ID)){let e=p.getRenderResult(r);"object"==typeof e?console.log((0,s.default)(e)):"string"==typeof String(e)?console.log(i.default.cyan(e)):console.log(i.default.red("Except for Object and String, other types cannot be printed."))}else console.log(i.default.red(`Unknow object '${e}'`)),console.log(i.default.cyan("string"==typeof r?r:"null"))}get requestUrl(){let e=new URL(l.default.currentStore);return e.pathname=this.url,`${e.pathname}`}static getRenderResult(e){let s=(0,t.parseDocument)(e),l=(0,r.getElementById)(p.RENDER_SNIPPET_ID,s.children),n=(0,r.textContent)(l);try{return JSON.parse(n)}catch(e){return("string"==typeof n?n.trim():n)||"null"}}constructor(e,t){c(this,"url",void 0),c(this,"cwd",void 0),c(this,"assignments",new Set),this.url=e.url&&e.url.startsWith("/")?e.url:"/",this.cwd=null!=t?t:(0,o.cwd)()}}c(p,"RENDER_SNIPPET_ID","shopline-cli-repl-result");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"consoleAction",{enumerable:!0,get:()=>s});const e=require("../../../utils/parse-options"),t=o(require("../../../helpers/config")),r=require("../utils"),i=o(require("./console")),n=o(require("../../../utils/winston"));function o(e){return e&&e.__esModule?e:{default:e}}async function s(o,s){try{let r=await (0,e.parseOptions)(o,s),u=r.path;n.default.log("Checking login..."),t.default.isLogin();let l=new i.default(r,u);await l.start()}catch(e){(0,r.handleError)(e)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,E){for(var t in E)Object.defineProperty(e,t,{enumerable:!0,get:E[t]})}(exports,{ENDPOINTS:()=>e,ERRORS:()=>E,DEFAULT_ZIP_NAME:()=>t,DEFAULT_PAGE_SIZE:()=>_,LIVE_RELOAD_MODE:()=>T,DEFAULT_LIVE_RELOAD_MODE:()=>a,DEV_SERVE_PORT:()=>o,ERROR_CODES:()=>i,TEXT_TYPE_EXTNAMES:()=>r,IGNORE_LAYOUT_FILES:()=>n});const e={CODE_EDITOR:"/admin/api/site/code-editor",THEME:"/admin/api/site/theme"},E={NOT_EMPTY_DIR:"The directory is not empty, please clear the directory before operating",THEME_ID_NOT_EXIST:"Theme id does not exist",THEME_COUNT_LIMIT:"The number of themes has reached the limit",DOWNLOAD_THEME_FAILED:"Failed to download the theme",UPLOAD_THEME_FAILED:"Failed to upload the theme",LAYOUT_FILE_NOT_MATCH_TEMPLATE:"Layout file does not match the template",THEME_IS_PUBLISHED:"The current theme {themeName} (#{id}) is published",THEME_IS_INVALID:"The current development theme is not exist",NOT_STANDARD_DIRECTORY:"Current directory is not a theme, Please run this command in a theme directory",TEMPLATE_FILE_NAME_NOT_PASS:"The template name contains invalid characters, please modify it.",FEATURE_KEY_NOT_EXIST:"You haven’t the permission to upload the theme package, please contact your account manager for help",UNZIP_THEME_FAILED:"Unpacking failed due to corruption in the theme code package. Please check and try again."},t="theme.zip",_=50,T=["hot-reload","full-page","off"],a="hot-reload",o=8282,i={THEME_COUNT_LIMIT:["SLE0201"],DEVELOPMENT_THEME_NOT_EXIST:["SLE0101"],NO_SECOND_CHECK:["CUS0402","10049"],FEATURE_KEY_NOT_EXIST:["CUS0412","10048"],NOT_LOGIN:["1000"],INVALID_FILE:["1001"],FILE_NOT_EXIT:["10042","10001"]},r=[".js",".css",".hbs"],n=["password"];
|
|
@@ -0,0 +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,{isDraftFile:()=>c,getDraftFiles:()=>o,handleDraft:()=>f});const e=n(require("jiti")),t=n(require("fast-glob")),r=require("./api"),a=require("./utils"),i=require("../../utils/path");function n(e){return e&&e.__esModule?e:{default:e}}const u=(0,e.default)(__filename),{default:l}=u("multimatch"),s=["**/templates/*.json","**/config/settings_data.json"];function c(e){let t=l(e,s);return t.length>0}function o(e=process.cwd(),r={absolute:!0}){let a=t.default.sync(s,{cwd:e,...r});return a}function f(e,t,n=(0,i.cwd)()){if(!c(t)||!e)return;let u=`${(0,a.parseFileName)(t,n)}.preview`,{fileContent:l}=(0,a.parseFile)(t,n);return{fileName:u,create:async()=>{await (0,r.createFile)(e,{fileName:u,fileContent:l})},update:async()=>{await (0,r.updateFile)(e,{fileName:u,fileContent:l})},delete:async()=>{await (0,r.deleteFile)(e,{fileName:u})}}}
|
|
@@ -0,0 +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.isImageType?(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}}
|
|
@@ -0,0 +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,{cloneExampleTheme:()=>u,reInitGitRepo:()=>l});const e=n(require("simple-git")),t=n(require("ora")),r=n(require("path")),i=n(require("fs-extra")),s=require("../../utils/messages"),o=require("../../utils/error");function n(e){return e&&e.__esModule?e:{default:e}}const a=e=>i.default.existsSync(e),u=async r=>{if(a(r))return Promise.reject(new o.AbortError((0,s.getMessage)("theme.errors.directory_exists",{folder_name:r})));let i=(0,e.default)(),n="https://github.com/shoplineos/Bottle.git",u=(0,t.default)({text:`Cloning ${n} into ${r}`}).start();try{return await i.clone(n,r,{"--branch":"main","--progress":null}),u.succeed(),await Promise.resolve()}catch(e){return u.fail(),Promise.reject(e)}},l=async t=>{i.default.removeSync(r.default.join(t,".git"));let s=(0,e.default)(t);await s.init()};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var a in t)Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}(exports,{startThemeService:()=>N,default:()=>O});const e=$(require("path")),t=$(require("fs-extra")),a=$(require("chokidar")),i=require("lodash"),s=$(require("form-data")),r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var a=I(t);if(a&&a.has(e))return a.get(e);var i={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if("default"!==r&&Object.prototype.hasOwnProperty.call(e,r)){var l=s?Object.getOwnPropertyDescriptor(e,r):null;l&&(l.get||l.set)?Object.defineProperty(i,r,l):i[r]=e[r]}return i.default=e,a&&a.set(e,i),i}(require("../../utils/logger")),l=$(require("../../helpers/config")),u=$(require("../../utils/write-file-tree")),n=$(require("../../utils/load-local-preset")),o=require("../../utils/git"),d=require("./git"),h=require("./api"),c=require("./utils"),m=$(require("./package")),f=$(require("../../utils/tiny-queue")),p=require("./types"),g=require("./const"),w=require("../../utils/messages"),y=require("./choose-theme-list"),T=$(require("../../utils/debug")),v=require("../../helpers/sentry"),k=require("../../utils/ora-manager"),b=$(require("../../utils/colors")),F=require("../../utils/path"),D=$(require("./uploader")),q=require("../../utils/error"),S=require("../../utils/output"),E=$(require("../../utils/winston"));function C(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function $(e){return e&&e.__esModule?e:{default:e}}function I(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,a=new WeakMap;return(I=function(e){return e?a:t})(e)}class _ extends T.default{static async package(e,t=(0,F.cwd)()){try{let a=new m.default(t);await a.pack(e)}catch(e){(0,c.handleError)(e)}}static async getDevelopmentId(){let e=l.default.developmentThemeId;return await _.isValidDevTheme(e)?e:""}static async getValidDevelopmentInfo(){let e=l.default.developmentThemeId;return await _.isValidDevTheme(e)?{id:e,name:"",status:p.EThemeStatus.Development}:{id:"",name:(0,c.generateDevThemeName)(),status:p.EThemeStatus.Development}}static async isValidDevTheme(e){try{let t=await (0,h.getThemeInfo)(e);return(null==t?void 0:t.status)===p.EThemeStatus.Development}catch(e){return!1}}static async isUncompletedDevTheme(e){try{let t=await (0,h.getThemeInfo)(e);return(null==t?void 0:t.status)===p.EThemeStatus.Uncompleted}catch(e){return!1}}static async getThemeInfo(e){let t=await (0,h.getThemeInfo)(e);return t}static async getLiveThemeId(){var e;let t=await (0,y.getAllThemeList)();return null===(e=t.find(e=>e.status===p.EThemeStatus.Published))||void 0===e?void 0:e.id}static async checkThemeStandardStructure(e){if(0===e.length)throw new q.AbortError(g.ERRORS.NOT_STANDARD_DIRECTORY);let t=(0,i.difference)(c.standardThemeDirectories,e);t.length>0&&Error(`
|
|
2
|
+
The presence of ${b.default.bold(null==t?void 0:t[0])} in the directory structure isn't supported.
|
|
3
|
+
|
|
4
|
+
Move any files to a parent folder, then delete unsupported subdirectories.
|
|
5
|
+
|
|
6
|
+
• Required directory structure: https://developer.myshopline.com/docs/introduce/bGgYARTh
|
|
7
|
+
`)}static async findOrCreate(e){if(e){(0,S.outputDebug)(`Get theme info: ${e}`);try{let t=await (0,h.getThemeInfo)(e);if((0,S.outputDebug)((0,S.outputContent)`Theme info: ${S.outputToken.json(t)}`),t.id)return{id:t.id,name:t.name,status:t.status}}catch(t){let e=await _.createNewTheme();return e}}(0,S.outputDebug)(`The theme ${e} doesn't exist. creating a new one...`);let t=await _.createNewTheme();return(0,S.outputDebug)((0,S.outputContent)`The new theme info: ${S.outputToken.json(t)}`),t}static async createNewTheme(){(0,S.outputDebug)("Create a new development theme...");let e=(0,c.generateDevThemeName)(),t=await D.default.createNewTheme(e);return(0,S.outputDebug)((0,S.outputContent)`A new development theme info: ${S.outputToken.json({id:t,name:e})}`),{id:t,name:e}}static async deleteDevelopment(e){e&&await (0,h.changeThemeStatus)({themeId:e,status:p.EThemeStatus.Delete})}static async changeToPublishTheme(e){await (0,h.changeThemeStatus)({themeId:e,status:p.EThemeStatus.Published})}static async changeToUnpublishTheme(e){await (0,h.changeThemeStatus)({themeId:e,status:p.EThemeStatus.Unpublished})}static async init(t,a){let i=e.default.join(a,t),s=e.default.basename(t);try{E.default.log("ensure git..."),await (0,o.ensureGitOrAbort)(a),E.default.log("clone example theme..."),await (0,d.cloneExampleTheme)(i);let t="theme.schema.json",l=await (0,n.default)(e.default.join(i,t));l&&(l.name=s,l.theme_name=s),E.default.log(`create theme ${s}...`),await (0,u.default)(i,{[t]:JSON.stringify(l,null,2)}),E.default.log("reinit git in your project..."),await (0,d.reInitGitRepo)(i),r.success(`🎉 Successfully created theme ${b.default.yellow(s)}.`),E.default.log("initialize success in your project...")}catch(e){(0,c.handleError)(e)}}static async list(){try{E.default.log("Checking login..."),l.default.isLogin(),console.log((0,w.getMessage)("theme.list.title",{store:l.default.currentStore}));let e=await (0,y.getSortedThemeList)(e=>(0,y.themePresenter)(e));E.default.log("Printing sorted theme list..."),e.forEach(e=>{console.log(e)}),E.default.log("Print theme list succeed!")}catch(e){(0,c.handleError)(e)}}watch(){let e=a.default.watch((0,c.getThemeDirectory)(this.cwd),{ignored:/(^|[/\\])\../,interval:1e3,usePolling:!0,ignoreInitial:!0});e.on("ready",()=>{E.default.log("Watching theme files..."),this.queue.on("error",e=>{e instanceof q.ValidatorError?(e.errors.forEach(e=>{r.error(`${e.filename}: ${e.message.join("\n")}`)}),(0,k.clearAllOra)()):r.error(e.message||e)}),e.on("add",(...e)=>{let t=e[0];E.default.log(`Add theme file: ${t}`),this.shouldWatchFile(t)&&(this.shouldUpdate(t)?this.queue.push(this.onAdd.bind(this,t)):this.sse.broadcast(this.getSseData(t,"add")))}),e.on("change",(...e)=>{let t=e[0];E.default.log(`Change theme file: ${t}`),this.shouldWatchFile(t)&&(this.shouldUpdate(t)?this.queue.push(this.onChange.bind(this,t)):this.sse.broadcast(this.getSseData(t)))}),e.on("unlink",(...e)=>{let t=e[0];E.default.log(`Unlink theme file: ${t}`),this.shouldWatchFile(t)&&(this.shouldUpdate(t)?this.queue.push(this.onUnlink.bind(this,...e)):this.sse.broadcast(this.getSseData(t,"unlink")))})})}shouldWatchFile(e){let t=(0,c.parseFileName)(e,this.cwd),a=this.ignoreFilter.match(t),i=this.includeFilter.match(t);return!a&&i}shouldUpdate(e){let t=(0,c.parseFileName)(e,this.cwd),a=this.updateQueue.find(t);return!a||(this.updateQueue.delete(t),!1)}async onAdd(e){await this.createFile(e),this.sse.broadcast(this.getSseData(e,"add"))}async onChange(e){await this.updateFile(e),this.sse.broadcast(this.getSseData(e))}async onUnlink(e){await this.deleteFile(e),this.sse.broadcast(this.getSseData(e,"unlink"))}async deleteFile(e){let t=(0,c.parseFileName)(e,this.cwd),a=(0,k.createOra)((0,w.getMessage)("theme.serve.syncer.delete_strategy.success",{file_name:t})).start();if(!await this.isRemoteExistsFile(e)){r.warn((0,w.getMessage)("theme.serve.syncer.no_remote_file",{file_name:t}));return}E.default.log(`Delete file: ${t}`),await (0,h.deleteFile)(this.themeId,{fileName:t}),E.default.log(`Delete file (${t}) checksum`),this.uploader.checksums.delete(t),a.succeed()}async updateFile(a){let i=(0,c.parseFileName)(a,this.cwd),[r]=i.split("/"),l=e.default.extname(i);(0,c.checkTemplateFileName)(i);let u=(0,k.createOra)((0,w.getMessage)("theme.serve.syncer.update_strategy.success",{file_name:i})).start();if("assets"!==r||g.TEXT_TYPE_EXTNAMES.includes(l)){let{fileContent:e}=(0,c.parseFile)(a,this.cwd);if(!(0,c.checkLayoutFile)(i,e))return;try{await (0,h.getThemeFileDetail)({themeId:this.themeId,fileName:i})}catch(e){await this.createFile(a);return}E.default.log(`Update file: ${i}`);let t=await (0,h.updateFile)(this.themeId,{fileName:i,fileContent:e});E.default.log(`Update file (${i}) checksum: ${t.fileContentChecksum}`),this.uploader.checksums.set(i,t.fileContentChecksum)}else{let e=new s.default;e.append("file",t.default.createReadStream(a)),e.append("fileName",i);let r=e.getHeaders();E.default.log(`Upload asset file: ${i}`);let l=await (0,h.uploadFile)(this.themeId,e,{headers:r});E.default.log(`Update file (${i}) checksum: ${l.fileContentChecksum}`),this.uploader.checksums.set(i,l.fileContentChecksum)}u.succeed()}async createFile(a){let i=(0,c.parseFileName)(a,this.cwd),[r]=i.split("/"),l=e.default.extname(i),u=(0,k.createOra)((0,w.getMessage)("theme.serve.syncer.create_strategy.success",{file_name:i})).start();if("assets"!==r||g.TEXT_TYPE_EXTNAMES.includes(l)){let{fileContent:e}=(0,c.parseFile)(a,this.cwd);if(!(0,c.checkLayoutFile)(i,e))return;(0,c.checkTemplateFileName)(i),E.default.log(`Create file: ${i}`);let t=await (0,h.createFile)(this.themeId,{fileName:i,fileContent:e});E.default.log(`Update file (${i}) checksum: ${t.fileContentChecksum}`),this.uploader.checksums.set(i,t.fileContentChecksum)}else{let e=new s.default;e.append("file",t.default.createReadStream(a)),e.append("fileName",i);let r=e.getHeaders();E.default.log(`Upload asset file: ${i}`);let l=await (0,h.uploadFile)(this.themeId,e,{headers:r});E.default.log(`Update file (${i}) checksum: ${l.fileContentChecksum}`),this.uploader.checksums.set(i,l.fileContentChecksum)}u.succeed()}async isRemoteExistsFile(e){try{let t=(0,c.parseFileName)(e,this.cwd);return await (0,h.getThemeFileDetail)({themeId:this.themeId,fileName:t}),!0}catch(e){return!1}}getSseData(e,t){return"full-page"===this.mode||t&&["add","unlink"].includes(t)?{data:{reload_page:!0}}:{data:{modified:[(0,c.getRelativePath)(e,this.cwd)]}}}constructor({themeId:e,mode:t,editorSync:a,sse:i,updateQueue:s,includeFilter:r,ignoreFilter:l,uploader:u,cwd:n}){super("theme:theme"),C(this,"cwd",""),C(this,"themeId",""),C(this,"queue",void 0),C(this,"mode",void 0),C(this,"sse",void 0),C(this,"editorSync",void 0),C(this,"updateQueue",void 0),C(this,"includeFilter",void 0),C(this,"ignoreFilter",void 0),C(this,"uploader",void 0),this.themeId=e,this.queue=new f.default,this.mode=t,this.sse=i,this.editorSync=a,this.updateQueue=s,this.includeFilter=r,this.ignoreFilter=l,this.uploader=u,this.cwd=n,this.watch()}}async function N(e,t,a,i,s,u,n,o){try{let r=l.default.developmentThemeId,d=new _({themeId:r,mode:e,editorSync:t,sse:a,updateQueue:i,includeFilter:s,ignoreFilter:u,uploader:n,cwd:o});return{themeId:r,themeInstance:d}}catch(e){var d,h;return r.error((null==e?void 0:null===(d=e.response)||void 0===d?void 0:null===(h=d.data)||void 0===h?void 0:h.msg)||(null==e?void 0:e.stack)),(0,v.reportAndExit)(e)}}const O=_;
|
|
@@ -0,0 +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,{askForPull:()=>a,askForUpdateStrategy:()=>s,askForApplyToAll:()=>l});const e=function(e){return e&&e.__esModule?e:{default:e}}(require("inquirer")),t=require("../../utils/messages"),r=e.default.createPromptModule();async function a(){let{overrideStrategy:e}=await r([{type:"list",name:"overrideStrategy",message:"Your current directory is not empty, Please select how to handle the current directory files",default:"override",choices:[{name:"Override files with the same name",value:"override"},{name:"Clear the current directory and pull remote files",value:"clear"}]}]);return e}async function s(){let{updateStrategy:e}=await r([{type:"list",name:"updateStrategy",message:(0,t.getMessage)("theme.serve.syncer.update_strategy.title_question"),default:"remote",choices:[{name:(0,t.getMessage)("theme.serve.syncer.update_strategy.keep_remote"),value:"remote"},{name:(0,t.getMessage)("theme.serve.syncer.update_strategy.keep_local"),value:"local"}]}]);return e}async function l(e){let{applyToAll:a}=await r([{type:"confirm",name:"applyToAll",message:(0,t.getMessage)("theme.serve.syncer.apply_to_all.title",{count:e}),default:!0}]);return a}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>f});const e=c(require("open")),t=c(require("koa")),r=c(require("path")),a=c(require("fs")),s=c(require("koa-ejs")),i=c(require("killable")),l=c(require("inquirer")),n=c(require("../../helpers/config")),o=require("../../utils/messages"),u=require("../../utils/ora-manager");function c(e){return e&&e.__esModule?e:{default:e}}const d=l.default.createPromptModule();class f{static get checkStoreUrl(){let e=encodeURIComponent(`http://127.0.0.1:${f.PORT}`);return`${n.default.currentStore}/admin/checkStore?redirectUrl=${e}`}static get storeOriginUrl(){let e=new URL(f.checkStoreUrl);return e.origin}static async askForCheckStore(){let{immediately:e}=await d([{type:"confirm",name:"immediately",message:(0,o.getMessage)("theme.errors.check_store"),default:!0}]);return e}static async run(){(0,u.clearAllOra)();try{console.log((0,o.getMessage)("theme.errors.checking_store",{check_url:f.checkStoreUrl})),await (0,e.default)(f.checkStoreUrl);let t=await f.startServer();f.saveCurrentStoreCookie(t),f.printResultAndExit()}catch(e){throw Error(e.message||e)}}static printResultAndExit(){console.log((0,o.getMessage)("theme.errors.check_result")),process.exit(1)}static saveCurrentStoreCookie(e){let{loginInfo:t}=n.default,r={...t,a_osudb_verify:e};n.default.saveLoginInfo(r,f.storeOriginUrl)}static async startServer(){return new Promise((e,l)=>{let n=new t.default;(0,s.default)(n,{root:r.default.join(__dirname,"../identity-auth/client"),layout:!1,cache:!1});let o=n.listen(f.PORT);(0,i.default)(o),n.use(async t=>{let s=t.request.query,i=s.a_osudb_verify,n={css:a.default.readFileSync(r.default.join(__dirname,"../identity-auth/client/style.css"))};"string"==typeof i?(t.status=200,n.successful=200===t.status,n.message=`You’ve successfully complete verification. Please try run the previous command if necessary`,await t.render("index",n),e(i)):(t.status=403,n.successful=200===t.status,n.message="Verification failed. Please retry again.",await t.render("index",n),l(Error("Verification failed. Please retry again!"))),setImmediate(()=>{var e;null==o||null===(e=o.kill)||void 0===e||e.call(o)})})})}}!function(e,t,r){t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}(f,"PORT",2345);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>s});const e=require("lodash"),t=function(e){return e&&e.__esModule?e:{default:e}}(require("../../utils/colors"));function r(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class s{toString(){return`${this.method} ${this.file.fileName}`}asErrorMessage(){return this.asMessageWith("error")}asSyncMessage(){return this.asMessageWith("synced")}asFixedMessage(){return this.asMessageWith("fixed")}asMessageWith(r){let s=new Date().toTimeString().slice(0,8),i="error"===r?"ERROR":(0,e.capitalize)(r);return`${t.default.gray(`• ${s}`)} ${i} ${t.default.gray(`\xbb ${this.method} ${this.file.fileName}`)}`}constructor(e,t){r(this,"method",void 0),r(this,"file",void 0),this.method=e,this.file=t}}
|