picgo
Version:
A tool for picture uploading
1 lines • 365 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),n=require("events"),r=require("os"),i=require("commander"),s=require("inquirer"),a=require("image-size"),o=require("url"),l=require("chalk"),c=require("minimatch"),u=require("globby"),d=require("ejs"),p=require("download-git-repo"),E=require("rimraf"),g=require("dayjs"),_=require("util"),I=require("crypto"),f=require("mime-types"),C=require("qiniu"),h=require("md5"),m=require("resolve"),P=require("lodash"),N=require("child_process"),U=require("is-wsl"),D=require("axios"),L=require("form-data"),S=require("https"),A=require("tunnel"),T=require("@picgo/store"),O=require("cross-spawn"),B=require("js-yaml"),y=require("@picgo/i18n");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var R=b(e),x=b(t),G=b(r),w=b(s),M=b(l),$=b(c),v=b(u),H=b(d),F=b(p),q=b(E),k=b(g),K=b(_),Y=b(I),j=b(f),Q=b(C),W=b(h),z=b(m),V=b(U),J=b(D),X=b(L),Z=b(S),ee=b(A),te=b(O),ne=b(B);const re={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing plugins").option("-r, --registry <registry>","Choose a registry for installing plugins").action(((t,n)=>{const{proxy:r,registry:i}=n,s={npmProxy:r,npmRegistry:i};e.pluginHandler.install(t,s).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing plugins").option("-r, --registry <registry>","Choose a registry for installing plugins").action(((t,n)=>{const{proxy:r,registry:i}=n,s={npmProxy:r,npmRegistry:i};e.pluginHandler.update(t,s).catch((t=>{e.log.error(t)}))}))}},ie={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}},se=e=>e.startsWith("http://")||e.startsWith("https://"),ae=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},oe=e=>(ae(e)||(e=encodeURI(e)),e),le=e=>{try{const{width:t=0,height:n=0,type:r}=a.imageSize(e);return{real:!0,width:t,height:n,extname:r?`.${r}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},ce=async e=>{try{return{extname:x.default.extname(e),fileName:x.default.basename(e),buffer:await R.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},ue=async(e,t)=>{e=oe(e);let n,r=!1,i="";const s=new Promise(((s,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>{const t=e.headers["content-type"];return(null==t?void 0:t.includes("image"))&&(r=!0,i=`.${t.split("image/")[1]}`),e.data}));if(clearTimeout(n),r){const t=new o.URL(e).pathname,n=decodeURIComponent(x.default.basename(t));s({buffer:a,fileName:n,extname:i,success:!0})}else s({success:!1,reason:`${e} is not image`})}catch(t){clearTimeout(n),s({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{n=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),1e4)}));return Promise.race([s,a])},de=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":pe(e)?"simple":"unknown",pe=e=>{if(x.default.isAbsolute(e))return!1;const t=x.default.join(process.cwd(),e);return!R.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Ee=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,ge=(e,t=console)=>{switch(de(e)){case"normal":case"scope":return e;case"simple":return Ee(e);default:{let n=e;return x.default.isAbsolute(e)&&R.default.existsSync(e)?Ie(n):(n=x.default.join(process.cwd(),e),R.default.existsSync(n)?Ie(n):(t.warn(`Can't find plugin ${e}`),""))}}},_e=(e,t=console)=>{var n;switch(de(e)){case"normal":return fe(e);case"scope":return fe(e,!0);case"simple":return fe(Ee(e));default:{if(!R.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const r=x.default.posix.join(e,"package.json");if(R.default.existsSync(r)){const e=R.default.readJSONSync(r)||{};return(null===(n=e.name)||void 0===n?void 0:n.includes("picgo-plugin-"))?e.name:(t.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return t.warn(`Can't find plugin: ${e}`),""}}},Ie=e=>e.split(x.default.sep).join("/"),fe=(e,t=!1)=>{if(e.includes("@")){let n=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(n=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const r=e.match(n);return r?r[2]:(console.warn("can not remove plugin version"),e)}return e},Ce=[],he=e=>Ce.some((t=>e.startsWith(t))),me=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function Pe(e){try{return JSON.parse(e)}catch(t){return e}}const Ne=(e=0)=>isNaN(Number(e))?0:Number(e),Ue=()=>"development"===process.env.NODE_ENV;var De=Object.freeze({__proto__:null,isUrl:se,isUrlEncode:ae,handleUrlEncode:oe,getImageSize:le,getFSFile:ce,getURLFile:ue,getPluginNameType:de,isSimpleName:pe,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Ee,getProcessPluginName:ge,getNormalPluginName:_e,handleUnixStylePath:Ie,removePluginVersion:fe,configBlackList:Ce,isConfigKeyInBlackList:he,isInputConfigValid:me,safeParse:Pe,forceNumber:Ne,isDev:Ue,isProd:()=>"production"===process.env.NODE_ENV});const Le={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const n=t.map((e=>se(e)?e:x.default.resolve(e))).filter((t=>{const n=R.default.existsSync(t)||se(t);return n||e.log.warn(`${t} does not exist.`),n}));await e.upload(n)})().catch((t=>{e.log.error(t)}))}))}},Se=async(e,t,n,r)=>{const i=await e.cmd.inquirer.prompt(t),s="uploader"===n?`picBed.${r}`:"transformer"===n?`transformer.${r}`:r;e.saveConfig({[s]:i}),"uploader"===n?e.saveConfig({"picBed.current":r,"picBed.uploader":r}):"transformer"===n&&e.saveConfig({"picBed.transformer":r})},Ae={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules").action(((t,n)=>{(async()=>{var r,i;try{switch(t){case"uploader":case"transformer":if(n){const r=e.helper[t].get(n);if(!r)return e.log.error(`No ${t} named ${n}`);r.config&&await Se(e,r.config(e),t,n)}else{const n=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],r=await e.cmd.inquirer.prompt(n),i=e.helper[t].get(r[t]);(null==i?void 0:i.config)&&await Se(e,i.config(e),t,r[t])}break;case"plugin":if(n){if(n.includes("picgo-plugin-")||(n=`picgo-plugin-${n}`),!Object.keys(e.getConfig("picgoPlugins")).includes(n))return e.log.error(`No plugin named ${n}`);(null===(r=e.pluginLoader.getPlugin(n))||void 0===r?void 0:r.config)&&await Se(e,e.pluginLoader.getPlugin(n).config(e),"plugin",n)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],n=await e.cmd.inquirer.prompt(t);(null===(i=e.pluginLoader.getPlugin(n.plugin))||void 0===i?void 0:i.config)&&await Se(e,e.pluginLoader.getPlugin(n.plugin).config(e),"plugin",n.plugin)}break;default:return e.log.warn(`No module named ${t}`),e.log.warn("Available modules are uploader|transformer|plugin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Te={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((n=>{(async()=>{try{let r=[];const i={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(n){if(!i[n])return e.log.warn(`No module named ${n}`),e.log.warn("Available modules are uploader|transformer|plugins");r.push(i[n])}else r=Object.keys(i).map((e=>i[e]));const s=await t.inquirer.prompt(r);if(s.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).map((e=>{s.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":s.uploader||e.getConfig("picBed.current"),"picBed.uploader":s.uploader||e.getConfig("picBed.current"),"picBed.transformer":s.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Oe={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},Be=async(e,t)=>{try{const n=be(t.tmp),r=x.default.join(t.tmp,"template");let i={};n.prompts&&n.prompts.length>0&&(i=await e.cmd.inquirer.prompt(n.prompts));let s=await v.default(["**/*"],{cwd:r,dot:!0});if(s=s.filter((t=>{let r="";return Object.keys(n.filters).forEach((e=>{$.default(t,e,{dot:!0})&&(r=t)})),!r||ye(e,n.filters[r],i)})),0===s.length)return e.log.warn("Template files not found!");const a=Re(s,r,i);xe(t.dest,a),"function"==typeof n.complete&&n.complete({answers:i,options:t,files:s,ctx:e}),n.completeMessage&&e.log.success(n.completeMessage),e.log.success("Done!")}catch(t){return e.log.error(t)}},ye=(e,t,n)=>{const r=new Function("data","with (data) { return "+t+"}");try{return r(n)}catch(n){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},be=e=>{const t=x.default.join(e,"index.js");if(R.default.existsSync(t)){return require(t)}return{}},Re=(e,t,n)=>{const r={};return e.forEach((e=>{const i=R.default.readFileSync(x.default.join(t,e),"utf8"),s=H.default.render(i,n);(Buffer.isBuffer(s)||/[^\s]/.test(s))&&(r[e]=s)})),r},xe=(e,t)=>{Object.keys(t).forEach((n=>{const r=x.default.join(e,n);R.default.ensureDirSync(x.default.dirname(r)),R.default.writeFileSync(r,t[n])}))},Ge=(e,t)=>{t.offline?R.default.existsSync(t.template)?Be(e,t).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${t.template} not found`):(t.template=t.hasSlash?t.template:"PicGo/picgo-template-"+t.template,we(e,t))},we=(e,t)=>{R.default.existsSync(t.tmp)&&q.default.sync(t.tmp),e.log.info("Template files are downloading..."),F.default(t.template,t.tmp,{clone:t.clone},(n=>{if(n)return e.log.error(n);e.log.success("Template files are downloaded!"),Be(e,t).catch((t=>{e.log.error(t)}))}))},Me={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,n,i)=>{(async()=>{try{const s=t.includes("/"),a=!n||"."===n,o=x.default.resolve(n||"."),l=i.clone||!1,c=i.offline||!1,u=x.default.join(r.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));i.offline&&(t=u);const d={template:t,project:n,hasSlash:s,inPlace:a,dest:o,clone:l,tmp:u,offline:c};a||R.default.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:a?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&Ge(e,d)})):Ge(e,d)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(M.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(M.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},$e={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change picgo language").action((async(t="")=>{const n=e.i18n.getLanguageList();if(!t){const t=[{type:"list",name:"i18n",choices:n,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}],r=await e.cmd.inquirer.prompt(t);return e.i18n.setLanguage(r.i18n),void e.log.success(`Language set to ${r.i18n}`)}if(!n.includes(t))return e.log.warn("No such language");e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)}))}};class ve{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var n;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),ve.currentPlugin&&(this.pluginIdMap.has(ve.currentPlugin)?null===(n=this.pluginIdMap.get(ve.currentPlugin))||void 0===n||n.push(e):this.pluginIdMap.set(ve.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const He=(e=null)=>{ve.currentPlugin=e};class Fe{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new i.Command,this.inquirer=w.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.5.9","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",re),e.cmd.register("config",ie),e.cmd.register("setting",Ae),e.cmd.register("upload",Le),e.cmd.register("use",Te),e.cmd.register("proxy",Oe),e.cmd.register("init",Me),e.cmd.register("i18n",$e)}register(e,t){var n;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const r=ve.currentPlugin;null!==r&&(this.pluginIdMap.has(r)?null===(n=this.pluginIdMap.get(r))||void 0===n||n.push(e):this.pluginIdMap.set(r,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var qe,ke,Ke;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(qe||(qe={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(ke||(ke={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(Ke||(Ke={}));class Ye{constructor(e){this.level={[qe.success]:"green",[qe.info]:"blue",[qe.warn]:"yellow",[qe.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const n=M.default[this.level[e]](`[PicGo ${e.toUpperCase()}]:`);console.log(n,...t),this.logPath=this.ctx.getConfig("settings.logPath")||x.default.join(this.ctx.baseDir,"./picgo.log"),setTimeout((()=>{try{const n=this.checkLogFileIsLarge(this.logPath);if(n.isLarge){const e=`Log file is too large (> ${n.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(M.default.yellow("[PicGo WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicGo Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(R.default.existsSync(e)){const t=R.default.statSync(e).size,n=1024*Ne(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>n,logFileSize:t,logFileSizeLimit:n}}return{isLarge:!1}}recreateLogFile(e){R.default.existsSync(e)&&(R.default.unlinkSync(e),R.default.createFileSync(e))}handleWriteLog(e,t,...n){try{let r=`${k.default().format("YYYY-MM-DD HH:mm:ss")} [PicGo ${t.toUpperCase()}] `;n.forEach((e=>{e instanceof Error&&"error"===t?r+=`\n------Error Stack Begin------\n${K.default.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),r+=`${e} `)})),r+="\n",R.default.appendFileSync(e,r)}catch(e){console.error("[PicGo Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){return this.handleLog(qe.success,...e)}info(...e){return this.handleLog(qe.info,...e)}error(...e){return this.handleLog(qe.error,...e)}warn(...e){return this.handleLog(qe.warn,...e)}debug(...e){Ue()&&this.handleLog(qe.info,...e)}}class je extends n.EventEmitter{constructor(e){super(),this.ctx=e}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");return t.input=e,t.output=[],await this.beforeTransform(t),await this.doTransform(t),await this.beforeUpload(t),await this.doUpload(t),await this.afterUpload(t),t}catch(e){if(t.log.warn(ke.FAILED),t.emit(ke.UPLOAD_PROGRESS,-1),t.emit(ke.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(ke.UPLOAD_PROGRESS,0),e.emit(ke.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(ke.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let n=t,r=e.helper.transformer.get(t);return r||(r=e.helper.transformer.get("path"),n="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${n}]`),await(null==r?void 0:r.handle(e)),e}async beforeUpload(e){return e.emit(ke.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(ke.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",n=e.helper.uploader.get(t),r=t;n||(t="smms",r="smms",n=e.helper.uploader.get("smms"),e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`)),e.log.info(`Uploading... Current uploader is [${r}]`),await(null==n?void 0:n.handle(e));for(const n of e.output)n.type=t;return e}async afterUpload(e){e.emit(ke.AFTER_UPLOAD,e),e.emit(ke.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const n=e.output.length,r=!0===e.getConfig("settings.encodeOutputURL");for(let i=0;i<n;i++)void 0!==e.output[i].imgUrl&&(t+=r?oe(e.output[i].imgUrl):e.output[i].imgUrl,i!==n-1&&(t+="\n")),delete e.output[i].base64Image,delete e.output[i].buffer;return e.emit(ke.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const n=e.getList(),r=e.getIdList(),i=e.getName();return await Promise.all(n.map((async(e,n)=>{try{t.log.info(`${i}: ${r[n]} running`),await e.handle(t)}catch(e){throw t.log.error(`${i}: ${r[n]} error`),e}}))),t}}const Qe=(e,t,n,r="")=>({method:"POST",url:`https://${r||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicGo",Authorization:n},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),We=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const n=e.output;for(const r of n)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));const i=Qe(r.fileName,n,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(i),n=JSON.parse(t);if("success"===n.code)delete r.base64Image,delete r.buffer,r.imgUrl=n.data.url;else{if("image_repeated"!==n.code||"string"!=typeof n.images)throw e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:n.message}),new Error(n.message);delete r.base64Image,delete r.buffer,r.imgUrl=n.images}}catch(t){throw e.log.error(t),t}}return e},ze=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"password",get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const Ve=(e,t)=>{const n=e.secretId,r=e.secretKey,i=e.appId,s=e.bucket;let a,o="";if(e.version&&"v4"!==e.version){const n=Math.floor((new Date).getTime()/1e3);o=`${n};${n+86400}`;const i=Y.default.createHmac("sha1",r).update(o).digest("hex"),s=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,l=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${s}\n`,c=`sha1\n${o}\n${Y.default.createHash("sha1").update(l).digest("hex")}\n`;a=Y.default.createHmac("sha1",i).update(c).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${i}&b=${s}&k=${n}&e=${t+3600}&t=${t}&r=${e}&f=`,l=Y.default.createHmac("sha1",r).update(o).digest(),c=Buffer.concat([l,Buffer.from(o)]);a=Buffer.from(c).toString("base64")}return{signature:a,appId:i,bucket:s,signTime:o}},Je=(e,t,n,r,i)=>{const s=e.area,a=e.path;if(e.version&&"v4"!==e.version){const s=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${s}/${encodeURI(a)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${s}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${n.signTime}&q-key-time=${n.signTime}&q-header-list=host&q-url-param-list=&q-signature=${n.signature}`,contentType:j.default.lookup(t),"User-Agent":`PicGo;${i};null;null`},body:r,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${s}.file.myqcloud.com/files/v2/${n.appId}/${n.bucket}/${encodeURI(a)}${t}`,headers:{Host:`${s}.file.myqcloud.com`,Authorization:n.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${i};null;null`},formData:{op:"upload",filecontent:r},resolveWithFullResponse:!0}},Xe=async e=>{var t,n,r;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const s=e.output,a=i.customUrl,o=i.path,l=!i.version||"v4"===i.version;for(const c of s)if(c.fileName&&c.buffer){const s=Ve(i,c.fileName);if(!s)return!1;let u=c.buffer;!u&&c.base64Image&&(u=Buffer.from(c.base64Image,"base64"));const d=Je(i,c.fileName,s,u,e.GUI_VERSION||e.VERSION),p=await e.request(d).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let E;if(E=l&&"string"==typeof p?JSON.parse(p):p,400===E.statusCode)throw(null===(t=null==E?void 0:E.body)||void 0===t?void 0:t.err)?E.body.err:new Error((null===(n=null==E?void 0:E.body)||void 0===n?void 0:n.msg)||(null===(r=null==E?void 0:E.body)||void 0===r?void 0:r.message));const g=i.options||"",_=i.slim||"";if(l&&"SUCCESS"===E.message)delete c.base64Image,delete c.buffer,c.imgUrl=a?`${a}/${o}${c.fileName}`:`${E.data.source_url}${g}`;else{if(l||!E||200!==E.statusCode)throw new Error(p.body.msg);if(delete c.base64Image,delete c.buffer,a)c.imgUrl=`${a}/${encodeURI(o)}${encodeURIComponent(c.fileName)}${g}`;else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;c.imgUrl=`https://${i.bucket}.${e}/${encodeURI(o)}${encodeURIComponent(c.fileName)}${g}`}}_&&(c.imgUrl+=g?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const n=JSON.parse(t.error);e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:n.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Ze=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};const et=(e,t,n)=>{const r=t.path||"",{token:i,repo:s}=t;return{method:"PUT",url:`https://api.github.com/repos/${s}/contents/${encodeURI(r)}${encodeURIComponent(e)}`,headers:{Authorization:`token ${i}`,"User-Agent":"PicGo","Content-Type":j.default.lookup(e)},body:n,json:!0}},tt=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const n=e.output;for(const r of n)if(r.fileName&&r.buffer){const n=r.base64Image||Buffer.from(r.buffer).toString("base64"),i={message:"Upload by PicGo",branch:t.branch,content:n,path:t.path+encodeURI(r.fileName)},s=et(r.fileName,t,i);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete r.base64Image,delete r.buffer,t.customUrl?r.imgUrl=`${t.customUrl}/${encodeURI(t.path)}${encodeURIComponent(r.fileName)}`:r.imgUrl=n.content.download_url}catch(e){if(422!==e.statusCode)throw e;delete r.base64Image,delete r.buffer,t.customUrl?r.imgUrl=`${t.customUrl}/${encodeURI(t.path)}${encodeURIComponent(r.fileName)}`:r.imgUrl=`https://raw.githubusercontent.com/${t.repo}/${t.branch}/${encodeURI(t.path)}${encodeURIComponent(r.fileName)}`}}return e}catch(t){throw e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},nt=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"password",get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function rt(e,t,n,r){const i=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),s=e.path||"";return{method:"POST",url:`http://upload${i}.qiniup.com/putb64/-1/key/${Buffer.from(s+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${n}`,"Content-Type":j.default.lookup(t)||"application/octet-stream"},body:r}}function it(e){const t=e.accessKey,n=e.secretKey,r=new Q.default.auth.digest.Mac(t,n),i={scope:e.bucket};return new Q.default.rs.PutPolicy(i).uploadToken(r)}const st=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const n=e.output;for(const r of n)if(r.fileName&&r.buffer){const n=r.base64Image||Buffer.from(r.buffer).toString("base64"),i=rt(t,r.fileName,it(t),n),s=await e.request(i),a=JSON.parse(s);if(!(null==a?void 0:a.key))throw e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:a.msg}),e.log.error("qiniu error",a),new Error("Upload failed");{delete r.base64Image,delete r.buffer;const e=t.url,n=t.options;r.imgUrl=`${e}/${a.key}${n}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const n=t.response.body;e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:n.error})}throw t}},at=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const ot=(e,t,n)=>{const r={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:`Client-ID ${e.clientId}`,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicGo"},formData:{image:n,type:"base64",name:t}};return e.proxy&&(r.proxy=e.proxy),r},lt=async e=>{var t;const n=e.getConfig("picBed.imgur");if(!n)throw new Error("Can't find imgur config");try{const t=e.output;for(const r of t)if(r.fileName&&r.buffer){const t=r.base64Image||Buffer.from(r.buffer).toString("base64"),i=ot(n,r.fileName,t),s=await e.request(i),a="string"==typeof s?JSON.parse(s):s;if(!a.success)throw new Error("Server error, please try again");delete r.base64Image,delete r.buffer,r.imgUrl=a.data.link}return e}catch(n){throw e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==n?void 0:n.response)||void 0===t?void 0:t.data)||n}},ct=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},default:t.clientId||"",required:!0},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const ut=(e,t)=>{const n=(new Date).toUTCString(),r=j.default.lookup(t);if(!r)throw Error(`No mime type found for file ${t}`);const i=`PUT\n\n${r}\n${n}\n/${e.bucket}/${e.path}${t}`,s=Y.default.createHmac("sha1",e.accessKeySecret).update(i).digest("base64");return`OSS ${e.accessKeyId}:${s}`},dt=(e,t,n,r)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURI(e.path)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:n,Date:(new Date).toUTCString(),"Content-Type":j.default.lookup(t)},body:r,resolveWithFullResponse:!0}),pt=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");try{const n=e.output,r=t.customUrl,i=t.path;for(const s of n)if(s.fileName&&s.buffer){const n=ut(t,s.fileName);let a=s.buffer;!a&&s.base64Image&&(a=Buffer.from(s.base64Image,"base64"));const o=dt(t,s.fileName,n,a);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete s.base64Image,delete s.buffer;const e=t.options||"";s.imgUrl=r?`${r}/${encodeURI(i)}${encodeURIComponent(s.fileName)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${encodeURI(i)}${encodeURIComponent(s.fileName)}${e}`}}return e}catch(t){throw e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Et=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"password",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const gt=(e,t)=>{const n=e.path||"",r=e.operator,i=e.password,s=W.default(i),a=(new Date).toUTCString(),o=`PUT&${`/${e.bucket}/${encodeURI(n)}${encodeURIComponent(t)}`}&${a}`;return`UPYUN ${r}:${Y.default.createHmac("sha1",s).update(o).digest("base64")}`},_t=(e,t,n,r)=>{const i=e.bucket,s=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${i}/${encodeURI(s)}${encodeURIComponent(t)}`,headers:{Authorization:n,Date:(new Date).toUTCString(),"Content-Type":j.default.lookup(t)||"application/octet-stream"},body:r,resolveWithFullResponse:!0}},It=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const n=e.output,r=t.path||"";for(const i of n)if(i.fileName&&i.buffer){let n=i.buffer;!n&&i.base64Image&&(n=Buffer.from(i.base64Image,"base64"));const s=gt(t,i.fileName),a=_t(t,i.fileName,s,n);if(200!==(await e.request(a)).statusCode)throw new Error("Upload failed");delete i.base64Image,delete i.buffer,i.imgUrl=`${t.url}/${encodeURI(r)}${encodeURIComponent(i.fileName)}${t.options}`}return e}catch(t){if("Upload failed"===t.message)e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const n=Pe(t.error);e.emit(ke.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof n?n.code:n}),text:"http://docs.upyun.com/api/errno/"})}throw t}},ft=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"password",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1}]};const Ct=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:pt,config:Et})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:Xe,config:Ze})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:We,config:ze})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:tt,config:nt})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:st,config:at})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:lt,config:ct})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:It,config:ft})}(e)}}),ht=(e,t,n)=>{const r=le(t);return r.real||("string"==typeof n?e.log.warn(`can't get ${n}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),r};var mt={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(n,r)=>{let i;if(i=Buffer.isBuffer(n)?{success:!0,buffer:n,fileName:"",extname:""}:se(n)?await ue(n,e):await ce(n),i.success&&i.buffer){const s=ht(e,i.buffer,n),a=i.extname||s.extname||".png";t[r]={buffer:i.buffer,fileName:i.fileName||`${k.default().format("YYYYMMDDHHmmssSSS")}${a}}`,width:s.width,height:s.height,extname:a}}else e.log.error(i.reason)}))),e.output=t.filter((e=>e)),e}};var Pt={handle:async e=>(e.output.push(...e.input),e)};class Nt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=x.default.join(this.ctx.baseDir,"package.json");if(!R.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};R.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return z.default.sync(t,{basedir:e.baseDir})}catch(n){return x.default.join(e.baseDir,"node_modules",t)}}load(){const e=x.default.join(this.ctx.baseDir,"package.json"),t=x.default.join(this.ctx.baseDir,"node_modules/");if(!R.default.existsSync(t))return!1;const n=R.default.readJSONSync(e),r=Object.keys(n.dependencies||{}),i=Object.keys(n.devDependencies||{}),s=r.concat(i).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return R.default.existsSync(t)}));for(const e of s)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),He(e);const n=t(this.ctx);this.pluginMap.set(e,n),n.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),He(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(ke.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),He(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=x.default.join(this.ctx.baseDir,"node_modules/"),n=require(t+e)(this.ctx);return this.pluginMap.set(e,n),n}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const Ut={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\nproperty fileTypes : {{«class PNGf», ".png"}}\n\non run argv\n\tif argv is {} then\n\t\treturn ""\n\tend if\n\n\tif ((clipboard info) as string) contains "«class furl»" then\n\t\treturn POSIX path of (the clipboard as «class furl»)\n\telse\n\t\tset imagePath to (item 1 of argv)\n\t\tset theType to getType()\n\n\t\tif theType is not missing value then\n\t\t\ttry\n\t\t\t\tset myFile to (open for access imagePath with write permission)\n\t\t\t\tset eof myFile to 0\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\n\t\t\t\tclose access myFile\n\t\t\t\treturn (POSIX path of imagePath)\n\t\t\ton error\n\t\t\t\ttry\n\t\t\t\t\tclose access myFile\n\t\t\t\tend try\n\t\t\t\treturn "no image"\n\t\t\tend try\n\t\telse\n\t\t\treturn "no image"\n\t\tend if\n\tend if\nend run\n\non getType()\n\trepeat with aType in fileTypes\n\t\trepeat with theInfo in (clipboard info)\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\n\t\tend repeat\n\tend repeat\n\treturn missing value\nend getType\n',win32:'\nparam($imagePath)\n\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\n\nAdd-Type -Assembly PresentationCore\n$img = [Windows.Clipboard]::GetImage()\n\nif ($img -eq $null) {\n "no image"\n Exit 1\n}\n\nif (-not $imagePath) {\n "no image"\n Exit 1\n}\n\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\n$encoder.Save($stream) | out-null\n$stream.Dispose() | out-null\n\n$imagePath\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\nparam($imagePath)\n\n# https://github.com/PowerShell/PowerShell/issues/7233\n# fix the output encoding bug\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\n\nAdd-Type -Assembly PresentationCore\nfunction main {\n $img = [Windows.Clipboard]::GetImage()\n\n if ($img -eq $null) {\n "no image"\n Exit 1\n }\n\n if (-not $imagePath) {\n "no image"\n Exit 1\n }\n\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\n $encoder.Save($stream) | out-null\n $stream.Dispose() | out-null\n\n $imagePath\n # fix windows 10 native cmd crash bug when "picgo upload"\n # https://github.com/PicGo/PicGo-Core/issues/32\n Exit 1\n}\n\ntry {\n # For WIN10\n $file = Get-Clipboard -Format FileDropList\n if ($file -ne $null) {\n Convert-Path $file\n Exit 1\n }\n} catch {\n # For WIN7 WIN8 WIN10\n main\n}\n\nmain',linux:'#!/bin/sh\nif [ "$XDG_SESSION_TYPE" = "x11" ]; then\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\n command -v xclip >/dev/null 2>&1 || { echo >&1 "no xclip"; exit 1; }\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\n filePath=`xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-`\n if [ ! -n "$filePath" ] ;then\n if\n xclip -selection clipboard -target image/png -o >/dev/null 2>&1\n then\n xclip -selection clipboard -target image/png -o >$1 2>/dev/null\n echo $1\n else\n echo "no image"\n fi\n else\n echo $filePath\n fi\nelif [ "$XDG_SESSION_TYPE" = "wayland" ]; then\n command -v wl-paste >/dev/null 2>&1 || { echo >&1 "no wl-clipboard"; exit 1; }\n isImage=`wl-paste --list-types | grep image`\n if [ -n "$isImage" ]; then\n wl-paste --type image/png > $1 2>/dev/null\n echo $1\n else\n echo "no image"\n exit 1\n fi\nfi\n',wsl:'#!/bin/sh\n# grab the paths\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\n\n# run the powershell script\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\n\n# note that there is a return symbol in powershell result\nnoImage=$(echo "no image\\r")\n\n# check whether image exists\nif [ "$res" = "$noImage" ] ;then\n echo "no image"\nelse\n echo $(wslpath -u -a "${res}")\nfi\n'},Dt={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const Lt=async e=>{!function(e){const t=x.default.join(e.baseDir,"picgo-clipboard-images");R.default.existsSync(t)||R.default.mkdirSync(t)}(e);const t=x.default.join(e.baseDir,"picgo-clipboard-images",`${k.default().format("YYYYMMDDHHmmssSSS")}.png`);return await new Promise(((n,r)=>{const i=(()=>{const e=process.platform;if(V.default)return"wsl";if("win32"===e)return"10"===G.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),s=x.default.join(e.baseDir,Dt[i]);let a;R.default.existsSync(s)||R.default.writeFileSync(s,Ut[i],"utf8"),a="darwin"===i?N.spawn("osascript",[s,t]):"win32"===i||"win10"===i?N.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",s,t]):N.spawn("sh",[s,t]),a.stdout.on("data",(s=>{if("linux"===i&&"no xclip or wl-clipboard"===s.toStr