sumor 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.es.js +31 -31
  2. package/package.json +1 -1
package/index.es.js CHANGED
@@ -1,4 +1,4 @@
1
- import Ko from"chokidar";import{exec as Yo}from"child_process";var pt=t=>{let e={running:!1,next:!1};return async(...r)=>{if(e.running){e.next=!0;return}e.running=!0,await t(...r),await new Promise(o=>{setTimeout(o,500)}),e.running=!1,e.next&&(e.next=!1,await t())}};import we from"path";import Vo from"fs-extra";import v from"fs-extra";import Bo from"node:path";import{fileURLToPath as Ho}from"node:url";var H=Bo.dirname(Ho(import.meta.url));var dt=async(t,e,r)=>{let o=`${H}/template/web`,s=await v.exists(`${e.tmpWeb}/vite.config.js`);if(r||!s){let l=await v.readFile(`${o}/vite.config.js`,"utf-8");l=l.replace("// PORT-PLACEHOLDER",`port: ${t.uiPort},`),await v.writeFile(`${e.tmpWeb}/vite.config.js`,l)}let i=await v.exists(`${e.tmpWeb}/index.html`);(r||!i)&&await v.copy(`${o}/index.html`,`${e.tmpWeb}/index.html`);let n=await v.exists(`${e.tmpWeb}/src`);(r||!n)&&await v.copy(`${o}/src`,`${e.tmpWeb}/src`);let a=`${e.root}/web/Frame.vue`,c=await v.exists(a);(r||c)&&await v.copy(`${o}/AppWithFrame.vue`,`${e.tmpWeb}/src/App.vue`);let m={dark:!!t.config.dark};await v.writeFile(`${e.tmpWeb}/src/env.js`,`export default ${JSON.stringify(m,null,4)}`)};import de from"yaml";import k from"fs-extra";import Ge from"fs-extra";var D=async(t,e)=>{await Ge.ensureFile(t),await Ge.readFile(t,"utf-8")!==e&&await Ge.writeFile(t,e)};var oe=async(t,e)=>{let r=await k.exists(`${t}.json`),o=await k.exists(`${t}.yaml`),s=await k.exists(`${t}.yml`),i={};if(s){let n=await k.readFile(`${t}.yml`,"utf-8");i=de.parse(n)}else if(o){let n=await k.readFile(`${t}.yaml`,"utf-8");i=de.parse(n)}else r?i=await k.readJson(`${t}.json`):e||(await k.ensureFile(`${t}.yml`),await k.writeFile(`${t}.yml`,de.stringify(i)));return!e&&(r||o)&&!s&&(await k.remove(`${t}.json`),await k.remove(`${t}.yaml`),await D(`${t}.yml`,de.stringify(i))),i};import Go from"path";import{glob as Jo}from"glob";var ge=async(t,e)=>{e=e||{};let r=await Jo(t,e);return r=r.map(o=>(o=Go.normalize(o),o=o.replace(/\\/g,"/"),o)),r};var gt=async(t,e)=>{let r=await ge("**/*.vue",{cwd:e.pages}),o=[];for(let i in r){let n=r[i],c=`${e.pages}/${n}`.replace(/\\/g,"/").replace(".vue",""),m=`../../web/pages/${n}`.replace(/\\/g,"/"),l=await oe(c,t.mode==="production"),u=`/${n}`.replace(e.pages,"").replace(".vue","").replace(/\\/g,"/").toLowerCase().replace("/index","");u===""&&(u="/");let p="";if(l.alive&&(p=`,
1
+ import Yo from"chokidar";import{exec as Zo}from"child_process";var dt=t=>{let e={running:!1,next:!1};return async(...r)=>{if(e.running){e.next=!0;return}e.running=!0,await t(...r),await new Promise(o=>{setTimeout(o,500)}),e.running=!1,e.next&&(e.next=!1,await t())}};import he from"path";import Ko from"fs-extra";import v from"fs-extra";import Ho from"node:path";import{fileURLToPath as Go}from"node:url";var H=Ho.dirname(Go(import.meta.url));var gt=async(t,e,r)=>{let o=`${H}/template/web`,s=await v.exists(`${e.tmpWeb}/vite.config.js`);if(r||!s){let l=await v.readFile(`${o}/vite.config.js`,"utf-8");l=l.replace("// PORT-PLACEHOLDER",`port: ${t.uiPort},`),await v.writeFile(`${e.tmpWeb}/vite.config.js`,l)}let i=await v.exists(`${e.tmpWeb}/index.html`);(r||!i)&&await v.copy(`${o}/index.html`,`${e.tmpWeb}/index.html`);let n=await v.exists(`${e.tmpWeb}/src`);(r||!n)&&await v.copy(`${o}/src`,`${e.tmpWeb}/src`);let a=`${e.root}/web/Frame.vue`,c=await v.exists(a);(r||c)&&await v.copy(`${o}/AppWithFrame.vue`,`${e.tmpWeb}/src/App.vue`);let m={dark:!!t.config.dark};await v.writeFile(`${e.tmpWeb}/src/env.js`,`export default ${JSON.stringify(m,null,4)}`)};import ge from"yaml";import k from"fs-extra";import Je from"fs-extra";var D=async(t,e)=>{await Je.ensureFile(t),await Je.readFile(t,"utf-8")!==e&&await Je.writeFile(t,e)};var oe=async(t,e)=>{let r=await k.exists(`${t}.json`),o=await k.exists(`${t}.yaml`),s=await k.exists(`${t}.yml`),i={};if(s){let n=await k.readFile(`${t}.yml`,"utf-8");i=ge.parse(n)}else if(o){let n=await k.readFile(`${t}.yaml`,"utf-8");i=ge.parse(n)}else r?i=await k.readJson(`${t}.json`):e||(await k.ensureFile(`${t}.yml`),await k.writeFile(`${t}.yml`,ge.stringify(i)));return!e&&(r||o)&&!s&&(await k.remove(`${t}.json`),await k.remove(`${t}.yaml`),await D(`${t}.yml`,ge.stringify(i))),i};import Jo from"path";import{glob as Wo}from"glob";var we=async(t,e)=>{e=e||{};let r=await Wo(t,e);return r=r.map(o=>(o=Jo.normalize(o),o=o.replace(/\\/g,"/"),o)),r};var wt=async(t,e)=>{let r=await we("**/*.vue",{cwd:e.pages}),o=[];for(let i in r){let n=r[i],c=`${e.pages}/${n}`.replace(/\\/g,"/").replace(".vue",""),m=`../../web/pages/${n}`.replace(/\\/g,"/"),l=await oe(c,t.mode==="production"),u=`/${n}`.replace(e.pages,"").replace(".vue","").replace(/\\/g,"/").toLowerCase().replace("/index","");u===""&&(u="/");let p="";if(l.alive&&(p=`,
2
2
  meta:{keepAlive:true}`),l.routes)for(let d of l.routes)o.push(` {
3
3
  path: "${d}",
4
4
  component: ()=>import("${m}"),
@@ -10,17 +10,17 @@ import Ko from"chokidar";import{exec as Yo}from"child_process";var pt=t=>{let e=
10
10
  }`)}let s=`export default [
11
11
  ${o.join(`,
12
12
  `)}
13
- ]`;await D(`${e.tmpWeb}/routes.js`,s)};var wt=async t=>{let e=await ge("**/*.js",{cwd:t.stores}),r=[],o=[];for(let i in e){let n=`store${parseInt(i)+1}`;r.push(`import ${n} from "../../web/stores/${e[i]}"`),o.push(`"${e[i].replace(".js","").replace(/\\/g,"/").replace(/\//g,".")}":${n}`)}let s=`${r.join(`;
13
+ ]`;await D(`${e.tmpWeb}/routes.js`,s)};var ht=async t=>{let e=await we("**/*.js",{cwd:t.stores}),r=[],o=[];for(let i in e){let n=`store${parseInt(i)+1}`;r.push(`import ${n} from "../../web/stores/${e[i]}"`),o.push(`"${e[i].replace(".js","").replace(/\\/g,"/").replace(/\//g,".")}":${n}`)}let s=`${r.join(`;
14
14
  `)};
15
15
  const stores = {
16
16
  ${o.join(`,
17
17
  `)}
18
18
  }
19
- export default stores;`;await D(`${t.tmpWeb}/stores.js`,s)};var ht={"font-size-base":"font-size","font-size-lg":"font-size-large","border-radius-base":"border-radius","border-radius-sm":"border-radius-small","primary-color":"color-primary","info-color":"color-info","success-color":"color-success","processing-color":"color-info","error-color":"color-danger","highlight-color":"color-danger","warning-color":"color-warning","link-color":"color-primary","--color-primary":"color-primary","--color-success":"color-success","--color-warning":"color-warning","--color-danger":"color-danger","--color-info":"color-info","--border-radius-base":"border-radius","--border-radius-small":"border-radius-small"};var yt=t=>{let e={"color-blue":"#50a1ff","color-indigo":"#6610f2","color-purple":"#926dde","color-pink":"#e83e8c","color-red":"#ff4954","color-orange":"#ffbe00","color-yellow":"#ffba00","color-green":"#3cd458","color-teal":"#20c997","color-cyan":"#17a2b8","color-white":"#fff","color-gray":"#868e96","color-gray-dark":"#343a40","color-primary":"#50a1ff","color-secondary":"#e9ecf0","color-success":"#3cd458","color-info":"#926dde","color-warning":"#ffba00","color-danger":"#ff4954","color-light":"#f8f9fa","color-dark":"#273343","color-background":"#f8f8f8","font-size":"14px","font-size-small":"12px","font-size-large":"16px","border-radius":"2px"},r={"border-radius-small":"1px"};try{let o=parseInt(t["border-radius"].replace("px",""),10);r["border-radius-small"]=`${parseInt(o/2,10)}px`}catch{}return{...e,...t,...r}};var Wo=(t,e)=>{let r="";for(let s in t)r+=`$${s}:${t[s]};
19
+ export default stores;`;await D(`${t.tmpWeb}/stores.js`,s)};var yt={"font-size-base":"font-size","font-size-lg":"font-size-large","border-radius-base":"border-radius","border-radius-sm":"border-radius-small","primary-color":"color-primary","info-color":"color-info","success-color":"color-success","processing-color":"color-info","error-color":"color-danger","highlight-color":"color-danger","warning-color":"color-warning","link-color":"color-primary","--color-primary":"color-primary","--color-success":"color-success","--color-warning":"color-warning","--color-danger":"color-danger","--color-info":"color-info","--border-radius-base":"border-radius","--border-radius-small":"border-radius-small"};var $t=t=>{let e={"color-blue":"#50a1ff","color-indigo":"#6610f2","color-purple":"#926dde","color-pink":"#e83e8c","color-red":"#ff4954","color-orange":"#ffbe00","color-yellow":"#ffba00","color-green":"#3cd458","color-teal":"#20c997","color-cyan":"#17a2b8","color-white":"#fff","color-gray":"#868e96","color-gray-dark":"#343a40","color-primary":"#50a1ff","color-secondary":"#e9ecf0","color-success":"#3cd458","color-info":"#926dde","color-warning":"#ffba00","color-danger":"#ff4954","color-light":"#f8f9fa","color-dark":"#273343","color-background":"#f8f8f8","font-size":"14px","font-size-small":"12px","font-size-large":"16px","border-radius":"2px"},r={"border-radius-small":"1px"};try{let o=parseInt(t["border-radius"].replace("px",""),10);r["border-radius-small"]=`${parseInt(o/2,10)}px`}catch{}return{...e,...t,...r}};var Vo=(t,e)=>{let r="";for(let s in t)r+=`$${s}:${t[s]};
20
20
  `;for(let s in e)r+=`$${s}:$${e[s]};
21
- `;let o={};for(let s in t)o[s]=t[s];for(let s in e)o[s]=`@${e[s]}`;return{scss:r,less:o}},$t=t=>(t=yt(t),Wo(t,ht));var xt=t=>{let e=$t(t);return{preprocessorOptions:{scss:{additionalData:e.scss},less:{modifyVars:e.less,javascriptEnabled:!0}}}};var _t=async(t,e)=>{let r=t.styleVars,o=xt(r);await D(`${e.tmpWeb}/styleVars.js`,`export default ${JSON.stringify(o,null,4)}`)};var he=async(t,e)=>{let{root:r,config:o}=t,s={root:r,pages:we.join(r,"/web/pages"),stores:we.join(r,"/web/stores"),tmp:we.join(r,"/tmp"),tmpWeb:we.join(r,"/tmp/web")};for(let i in s)s[i]=s[i].replace(/\\/g,"/"),await Vo.ensureDir(s[i]);o.styleVars=o.styleVars||{},await dt(t,s,e),await gt(t,s),await wt(s),await _t(o,s)};var bt=async t=>{let{getLogger:e,root:r,config:o}=t,s=e("DEV"),i=pt(async c=>{await he(t,c),s.info("\u4EE3\u7801\u5DF2\u66F4\u65B0")});await i(!0),Ko.watch(".",{cwd:`${r}/web`,ignored:/(^|[\/\\])(tmp|node_modules|\.git|\.nuxt|\.idea|\.vscode|\.cache|\.sass-cache|\.DS_Store|\.env)/,persistent:!0}).on("all",async(c,m)=>{await i()});let a=Yo("vite --config tmp/web/vite.config.js --host",{cwd:r});a.stdout.on("data",c=>{s.debug(c)}),a.stderr.on("data",c=>{s.error(c)})};var St=t=>{let e={},r={};e.setContext=(i,n)=>{typeof i=="object"?(Object.assign(e,i),Object.assign(r,i)):(e[i]=n,r[i]=n)},e.getContext=()=>({...r});let o=(t.mode||process.env.mode||"production").toLowerCase(),s;switch(o){case"development":s="development";break;case"dev":s="development";break;case"debug":s="development";break;case"production":s="production";break;case"build":s="build";break;case"setup":s="setup";break;case"preview":s="preview";break;default:s="production";break}return e.setContext({mode:s,ssr:t.ssr}),e.root=process.cwd(),e};var Et=async t=>new Promise(e=>{setTimeout(()=>{e()},t*1e3)});import Zo from"uuid";var ye=()=>Zo.v4().replace(/-/g,"");import Xo from"stream";var qo=t=>{let e=t,r;return typeof t=="string"?r=Buffer.from(t):Buffer.isBuffer(t)&&(r=t),r&&(e=new Xo.PassThrough,e.end(r)),e},$e=qo;function vt(t){return new Promise((e,r)=>{let o=[];t.on("error",r),t.on("data",s=>o.push(s)),t.on("end",()=>e(Buffer.concat(o)))})}var xe=async(t,e)=>{if(t){e=e||"stream";let r,o;switch(e){case"string":o=await vt(t),r=o.toString();break;case"buffer":r=await vt(t);break;default:r=t;break}return r}return t};var kt={from:xe,to:$e};var Tt=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyz".split(""),r=e.length,o=+t,s=[];do{let i=o%r;o=(o-i)/r,s.unshift(e[i])}while(o);return s.join("")};var Ot=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".split(""),r=e.length,o=+t,s=[];do{let i=o%r;o=(o-i)/r,s.unshift(e[i])}while(o);return s.join("")};var Nt=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ",r=e.length;t=String(t);let o=t.length,s=0,i=0;for(;s<o;)i+=r**s++*e.indexOf(t.charAt(o-s)||0);return i};var It=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyz",r=e.length;t=String(t);let o=t.length,s=0,i=0;for(;s<o;)i+=r**s++*e.indexOf(t.charAt(o-s)||0);return i};var Ct={from10to36:Tt,from10to62:Ot,from62to10:Nt,from36to10:It};var Rt={delay:Et,uuid:ye,stream:kt,number:Ct};var Dt=async t=>{let e=`${t.root}/sumor`,r=await oe(e,t.mode==="production"),o=`${t.root}/config/config`,s=await oe(o,t.mode==="production");return{...r,...s}};import se from"fs-extra";var Qo=async t=>{if(await se.exists(t)){let e={key:await se.readFile(`${t}/domain.key`,"utf-8"),cert:await se.readFile(`${t}/domain.cer`,"utf-8")};return await se.exists(`${t}/ca.cer`)&&(e.ca=await se.readFile(`${t}/ca.cer`,"utf-8")),e}},At=async t=>{let e=await Qo(`${t.root}/ssl`),r=t.config.protocol||"https";r==="https"&&!e&&(r="http");let o=t.config.domain||"localhost",s=parseInt(t.config.port||(r==="http"?80:443),10),i=r==="http"&&s===80||r==="https"&&s===443?"":`:${s}`,n=t.config.origin||`${r}://${o}${i}`,a=t.mode==="development"||t.mode==="preview"?s+1:s,c=`http://${o}:${a}`;return process.env.SUMOR_ORIGIN=n,{ssl:e,protocol:r,domain:o,port:s,origin:n,uiPort:a,uiOrigin:c}};import os from"fs";var Lt=(t,e,r,o,s,i)=>{let n=new Date(t).toISOString(),a=e.toUpperCase(),c=r.toUpperCase(),m=o?` [${o}]`:"",l="";return i&&(l=` | ${JSON.stringify(i)}`),`# ${n} [${a}] [${c}]${m} - ${s}${l}`};import{Chalk as es}from"chalk";var _e=new es({}),Ft={trace:"#00a3af",debug:"#1183d3",info:"#2ecc71",warn:"#f39c12",error:"#b91f12",fatal:"#ff1300"},ts={trace:"gray",debug:"blue",info:"green",warn:"yellow",error:"red",fatal:"red"},rs=(t,e)=>{let r=new Date(t+e*60*1e3),o=r.getUTCFullYear(),s=`0${r.getUTCMonth()+1}`.slice(-2),i=`0${r.getUTCDate()}`.slice(-2),n=`0${r.getUTCHours()}`.slice(-2),a=`0${r.getUTCMinutes()}`.slice(-2),c=`0${r.getUTCSeconds()}`.slice(-2),m=`00${r.getUTCMilliseconds()}`.slice(-3);return`${o}-${s}-${i} ${n}:${a}:${c}.${m}`},Je=({time:t,offset:e,level:r,scope:o,id:s,message:i})=>{let n=rs(t,e||0),a=s?` ${s}`:"",c=`${n} ${r.toUpperCase()} ${o.toUpperCase()}${a} - `,m;switch(_e.level){case 1:m=_e[ts[r.toLowerCase()]](c);break;case 2:m=_e.hex(Ft[r.toLowerCase()]).visible(c);break;case 3:m=_e.hex(Ft[r.toLowerCase()]).visible(c);break;default:m=c;break}return m+i};var Pt=t=>{let e=/#(.*?)\s-\s/g,r=t.match(e),o=[],s=(n,a)=>{let c=n.trim().replace("# ","").replace(" -","").split(" ");for(let w=0;w<c.length;w+=1)c[w]=c[w].trim().replace("[","").replace("]","");let m=new Date(c[0]).getTime(),l=c[1],u=c[2],p=c[3],d=a.split("|"),h=d.shift().trim(),f;if(d.length>0){let w=d.join("|").trim();f=JSON.parse(w)}let g={time:m,level:l,scope:u};p&&(g.id=p),g.message=h,f&&(g.data=f),o.push(g)},i=t;for(let n=0;n<r.length;n+=1){let a=r[n],c=i.split(a),m=c.shift();i=c.join(a),n>0&&s(r[n-1],m)}return s(r[r.length-1],i),o};var We=(t,e)=>{e=e||{};let r=/\{([a-zA-Z0-9]+)\}/g,o=t.match(r),s=t;for(let i=0;i<o.length;i+=1){let n=o[i],a=n.replace("{","").replace("}","");e[a]?s=s.replace(n,e[a]):s=s.replace(n,"")}return s};var ie=class{constructor(e){e=e||{};let r=e.scope||"MAIN",o=(e.level||"trace").toLowerCase(),s=e.id||"",i=e.saver||function(){},n=["trace","debug","info","warn","error","fatal"],c=((m,l)=>{let u=m.indexOf(l);return u===-1?[]:m.slice(u)})(n,o);for(let m=0;m<n.length;m+=1){let l=n[m];c.indexOf(l)===-1?this[l]=function(){}:this[l]=function(u,p){let d=Date.now();i(`${Lt(d,l,r,s,u,p)}
22
- `);let h=u;e.i18n&&e.i18n[u]&&(h=We(e.i18n[u],p));let f=e.offset!==void 0?e.offset:-new Date().getTimezoneOffset();console.log(Je({time:d,offset:f,level:l,scope:r,id:s,message:h}))}}this.load=m=>{let l=Pt(m),u="";for(let p=0;p<l.length;p+=1){let d=l[p],{message:h,data:f}=d,g=h;e.i18n&&e.i18n[h]&&(g=We(e.i18n[h],f)),u+=`${Je({...d,offset:e.offset||new Date().getTimezoneOffset(),message:g})}
23
- `}return u}}};var jt=async t=>{let e=`${t.root}/tmp/main.log`,r=o=>{os.appendFileSync(e,o)};return(o,s)=>new ie({scope:o,level:t.config.logLevel,id:s,saver:r})};import ss from"fs-extra";import Mt from"knex";var Ve=t=>{t=t||{};let e={};switch(t.type=t.type||"better-sqlite3",t.type){case"sqlite":e.client="better-sqlite3";break;case"sqlite3":e.client="better-sqlite3";break;case"better-sqlite3":e.client="better-sqlite3";break;case"mysql":e.client="mysql2";break;case"mysql2":e.client="mysql2";break;default:throw new Error(`\u4E0D\u652F\u6301\u6570\u636E\u5E93\u7C7B\u578B${t.type}`)}switch(e.client){case"better-sqlite3":e.connection={filename:t.path||`${process.cwd()}/main.sqlite`},e.useNullAsDefault=!0;break;case"mysql2":e.connection={host:t.host,port:t.port||3306,user:t.user,password:t.password,database:t.database,charset:t.charset||"utf8mb4"},e.pool=t.pool||{min:2,max:10};break;default:break}return e};var M=class{constructor(e,r){this.config=e,this._config=Ve(e),this._logger=r||{debug:console.log,trace:console.log}}async ensure(){let e,r,o,s,i;switch(this._config.client){case"better-sqlite3":await ss.ensureFile(this._config.connection.filename);break;case"mysql2":e={...this.config},r=e.database,delete e.database,o=Mt(Ve(e)),s=await o.raw("show databases"),i=!!s[0].filter(n=>n.Database===r)[0],i||(this._logger.trace("\u6570\u636E\u5E93\u4E0D\u5B58\u5728\uFF0C\u6B63\u5728\u521B\u5EFA"),await o.raw(`CREATE DATABASE IF NOT EXISTS ${r} default charset utf8mb4 COLLATE utf8mb4_general_ci`),this._logger.trace("\u6570\u636E\u5E93\u521B\u5EFA\u5B8C\u6210")),await new Promise(n=>{o.destroy(()=>{n()})});break;default:this._logger.trace(`\u6682\u4E0D\u652F\u6301${this._config.client}\u7C7B\u578B\u6570\u636E\u5E93\u521B\u5EFA\uFF0C\u8BF7\u81EA\u884C\u786E\u8BA4\u6570\u636E\u5E93\u5B58\u5728`);break}}async connect(){this.knex||(this.knex=Mt(this._config))}async destroy(){this.knex&&(await new Promise(e=>{this.knex.destroy(()=>{e()})}),delete this.knex)}};var ne=t=>{let e=typeof t;if(t===null)e="null";else if(e==="object"){let r=Object.prototype.toString.call(t);r==="[object Array]"?e="array":r==="[object RegExp]"&&(e="regexp")}return e};var G=(t,e,r)=>{e=e||"-",t=t.toLowerCase();let o=t.split(e);t="";for(let s in o){let i=o[s];t+=i.replace(i[0],i[0].toUpperCase())}return r&&(t=t.replace(t[0],t[0].toLowerCase())),t};var y=(t,e)=>{e=e||"-";let r=function(s){return s>="A"&&s<="Z"},o=[];for(let s=0;s<t.length;s++){let i=t.charAt(s),n=i.toLowerCase();o.length===0?o.push(n):(r(i)&&o.push(""),o[o.length-1]=o[o.length-1]+=n)}return o.join(e)};var J=t=>{let e={};for(let r in t){let o=y(r,"_");e[o]=t[r]}return e};var Ut=t=>{let e={};for(let r in t){let o=G(r,"_",!0);e[o]=t[r]}return e};var zt=(t,e,r,o)=>{o=o||"";let s={},i,n=async function(){i||(i=await t.knex.transaction())};return s.setUser=a=>{o=a,r.trace(`\u5DF2\u4FEE\u6539\u64CD\u4F5C\u7528\u6237\u4E3A${a}`)},s.info=async(a,c)=>{if(!c&&e.info[a])return e.info[a];let m=await i.from(a).columnInfo(),l={};for(let u in m){let p=G(u,"_",!0),d;switch(m[u].type){case"char":d="string";break;case"varchar":d="string";break;case"text":d="string";break;case"mediumtext":d="string";break;case"tinyint":d="number";break;case"smallint":d="number";break;case"int":d="number";break;case"integer":d="number";break;case"bigint":d="number";break;case"float":d="number";break;case"double":d="number";break;case"":d="string";break;default:d="string",console.log(`\u672A\u77E5\u6570\u636E\u7C7B\u578B ${u} ${JSON.stringify(m[u])}`);break}l[p]={type:d,length:parseInt(m[u].maxLength,10)}}return e.info[a]=l,l},s.count=async(a,c,m)=>{await n(),m=m||{},a=y(a,"_");let l=i.from(a);l.count({count:"*"});let u=!1;if(c){c=J(c);for(let d in c)if(ne(c[d])==="object")for(let h in c[d]){let f=h,g=c[d][h];f==="<>"&&g===null?l.whereNotNull(d):l.where(d,f,g)}else c[d]===null?l.whereNull(d):l.where(d,c[d]);u=!0}if(m.term&&m.term!==""&&m.termRange)for(let d in m.termRange){let h=m.termRange[d];parseInt(d)===0?u?l.andWhere(h,"like",`%${m.term}%`):(l.where(h,"like",`%${m.term}%`),u=!0):l.orWhere(h,"like",`%${m.term}%`)}return r.trace(l.toSQL().sql,l.toSQL().bindings),(await l)[0].count},s.single=async(a,c,m)=>{m=m||{},m.top=1;let l=await s.select(a,c,m);return l.length>1,l[0]},s.select=async(a,c,m)=>{r.trace(`\u67E5\u8BE2${a}\uFF0C\u6761\u4EF6${JSON.stringify(c)}\uFF0C\u53C2\u6570${JSON.stringify(m)}`),await n(),m=m||{},a=y(a,"_");let l=await s.info(a),u=i.from(a),p=m.field;p&&(p=p.map(f=>y(f,"_"))),u.select(p);let d=!1;if(c){c=J(c);for(let f in c)if(ne(c[f])==="object")for(let g in c[f]){let w=g,$=c[f][g];w==="<>"&&$===null?u.whereNotNull(f):u.where(f,w,$)}else c[f]===null?u.whereNull(f):u.where(f,c[f]);d=!0}if(m.term&&m.term!==""&&m.termRange)for(let f in m.termRange){let g=m.termRange[f];parseInt(f)===0?d?u.andWhere(g,"like",`%${m.term}%`):(u.where(g,"like",`%${m.term}%`),d=!0):u.orWhere(g,"like",`%${m.term}%`)}if(!m.sort&&l.createdTime&&(m.sort="created_time DESC"),m.sort)if(typeof m.sort=="string"){let f=m.sort.split(",");for(let g in f){let w=f[g].trim();w=w.split(" "),w[0]=y(w[0],"_"),f[g]=w.join(" ")}u.orderByRaw(f.join(","))}else u.orderBy(m.sort);return m.top&&u.limit(m.top),m.skip&&u.offset(m.skip),r.trace(u.toSQL().sql,u.toSQL().bindings),(await u).map(f=>Ut(f))},s.insert=async(a,c)=>{c=c||{},a=y(a,"_"),await n();let m=async()=>{let u=ye();return await s.count(a,{id:u})!==0?await m():u};c.id||(c.id=await m()),c.createdBy=o||"",c.createdTime=Date.now(),c.updatedBy=o||"",c.updatedTime=Date.now(),c=J(c);let l=i.insert(c).into(a);return r.trace(l.toSQL().sql,l.toSQL().bindings),await l,c.id},s.update=async(a,c)=>{c=c||{},a=y(a,"_"),await n();let m=c.id;if(delete c.id,m==null)throw new Error("\u6570\u636EID\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u627E\u5230\u8981\u66F4\u65B0\u7684\u6570\u636E");c.updatedBy=o||"",c.updatedTime=Date.now(),c=J(c);let l=i.update(c).from(a).where({id:m});r.trace(l.toSQL().sql,l.toSQL().bindings),await l},s.modify=async(a,c,m)=>{r.trace(`\u5F3A\u5236\u4FEE\u6539${a}\uFF0C\u6570\u636E${JSON.stringify(m)}\uFF0C\u68C0\u67E5\u5B57\u6BB5${JSON.stringify(c)}`),a=y(a,"_");let l={};for(let d of c)l[y(d,"_")]=m[d];let u=await s.single(a,l,{field:["id"]}),p;return u?(p=u.id,m.id=p,await s.update(a,m)):p=await s.insert(a,m),p},s.ensure=async(a,c,m)=>{r.trace(`\u786E\u4FDD${a}\u5B58\u5728\u6570\u636E${JSON.stringify(m)}\uFF0C\u68C0\u67E5\u5B57\u6BB5${JSON.stringify(c)}`),a=y(a,"_");let l={};for(let d of c)l[y(d,"_")]=m[d];let u=await s.select(a,l,{field:["id"]}),p;return u[0]?p=u[0].id:p=await s.insert(a,m),p},s.delete=async(a,c)=>{a=y(a,"_");let m=i.from(a);return c&&(c=J(c),m.where(c)),r.trace(m.toSQL().sql,m.toSQL().bindings),await m.del()},s.sql=async(a,c)=>(await n(),await i.raw(a,c)),s.commit=async()=>{if(i)try{await i.commit(),i=null}catch(a){r.error(a)}},s.rollback=async()=>{if(i)try{await i.rollback(),i=null}catch(a){r.error(a)}},s};var W=async({config:t,logger:e})=>{e=e||{debug:console.log,trace:console.log};let r=new M(t,e);await r.ensure(),await r.connect();let o={info:{}};return{connect:async(n,a)=>zt(r,o,n,a),destroy:async()=>{await r.destroy()}}};var Bt=async t=>{let e=t.config.database,r=t.getLogger("DATABASE"),o=await W({config:e,logger:r});return async s=>await o.connect(s||r)};import Se from"fs-extra";var is=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.origin=t.origin||{},t.target=t.target||{},t),ns=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.text=t.text||"",t.expression=t.expression||"",t),Ke=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.type=t.type||"any",t.placeholder=t.placeholder||"",t.required=t.required===!0,t.length=t.length||0,t.rule=t.rule||[],t.helper=t.helper||{},t.type==="string"&&(t.trim=t.trim!==!1,t.upperCase=t.upperCase===!0,t.lowerCase=t.lowerCase===!0),t),as=(t,e,r)=>{t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.property=t.property||{};for(let o in t.property){let s=t.property[o].type;s&&e.type[s]?(t.property[o]={...e.type[s],...t.property[o]},t.property[o].type=e.type[s].type):t.property[o]=Ke(t.property[o]),e.type[`${r}.${o}`]=t.property[o]}return t.join=t.join||{},t},cs=(t,e)=>{t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.parameters=t.parameters||{};for(let r in t.parameters){let o=t.parameters[r].type;o&&e.type[o]?(t.parameters[r]={...e.type[o],...t.parameters[r]},t.parameters[r].type=e.type[o].type):t.parameters[r]=Ke(t.parameters[r])}return t},be={text:is,rule:ns,type:Ke,entity:as,program:cs};import Ye from"fs-extra";import ms from"path";import{glob as ls}from"glob";var V=async({condition:t,options:e})=>{e=e||{};let r=await ls(t,e);return r=r.map(o=>(o=ms.normalize(o),o=o.replace(/\\/g,"/"),o)),r};var K=t=>{let e=t.split("/"),o=e.pop().split("."),s=o.pop(),i=o.shift(),n=null;o.length>0&&(n=o.pop());let a=[...e,i].join(".");return{path:a,route:`/api/${a.replace(/\./g,"/")}`,name:i,suffix:s,type:n}};var Ze=async(t,e,r)=>{let o={};if(await Ye.exists(t)){let s=e?`**/**.${e}.json`:"**/**.json",i=await V({condition:s,options:{cwd:t}});for(let n of i){let a=`${t}/${n}`,c=K(n);o[c.path]=await Ye.readJson(a)}if(r&&r!=="json"){let n=e?`**/**.${e}.${r}`:`**/**.${r}`,a=await V({condition:n,options:{cwd:t}});for(let c of a){let m=`${t}/${c}`,l=K(c);o[l.path]=o[l.path]||{},o[l.path][l.suffix]=await Ye.readFile(m,"utf-8")}}}return o};var Ht={sumorApp:{name:"\u8F7B\u5448\u4E91\u5E94\u7528\u6587\u672C",origin:{INTERNAL_ERROR:"\u7A0B\u5E8F\u5185\u90E8\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8054\u7CFB\u7BA1\u7406\u5458",NETWORK_ERROR:"\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8054\u7CFB\u7BA1\u7406\u5458",PERMISSION_DENIED:"\u6CA1\u6709\u8BBF\u95EE\u8BE5\u529F\u80FD\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002\u7F3A\u5C11\u6743\u9650\uFF1A${auth}",LOGIN_EXPIRED:"\u767B\u9646\u6388\u6743\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u9646",PERMISSION_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539permission\uFF0C\u8BF7\u4F7F\u7528setPermission",LOGIN_STATUS_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u767B\u5F55\u72B6\u6001",USER_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539user\uFF0C\u8BF7\u4F7F\u7528setUser",TOKEN_ID_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724CID\uFF0C\u8BF7\u4F7F\u7528setID",TOKEN_TIME_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724C\u65F6\u95F4",TOKEN_DATA_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724C\u6570\u636E",LACK_USER_ID:"\u7F3A\u5C11\u7528\u6237ID",AUTH_ERROR:"\u6388\u6743\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",AUTH_ERROR_COOKIE_MISSING:"cookie\u4E22\u5931",API_NOT_FOUND:"\u63A5\u53E3\u672A\u627E\u5230",INVALID_PARAMETER:"\u65E0\u6548\u6570\u636E:${msg}",RULE_LOGIC_NOT_FUNCTION:"\u89C4\u5219\u903B\u8F91\u4E0D\u662F\u6709\u6548\u51FD\u6570\u65B9\u6CD5",SUFFIX_REQUIRED:"\u8F6C\u6362\u4E3A\u5BF9\u8C61\u7F3A\u5C11\u5FC5\u8981\u7684\u540E\u7F00\u540D",PATH_ARROGATION:"\u8DEF\u5F84\u8D8A\u7EA7",NOT_SUPPORT_ABSOLUTE_PATH:"\u4E0D\u652F\u6301\u7EDD\u5BF9\u8DEF\u5F84",REQUIRED:"\u5FC5\u586B\u9879",LENGTH_OUT_OF_LIMIT:"\u957F\u5EA6\u5FC5\u987B\u5C0F\u4E8E${length}",WECHAT_DISABLED:"\u5FAE\u4FE1\u672A\u542F\u7528\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458"},target:{en:{INTERNAL_ERROR:"Internal program error, please try again later, or contact administrator",NETWORK_ERROR:"Network error. Please try again later or contact the administrator",PERMISSION_DENIED:"You do not have permission ${auth}, please contact administrator",LOGIN_EXPIRED:"Login expired, please login",INVALID_PARAMETER:"Invalid data: ${msg}",RULE_LOGIC_NOT_FUNCTION:"Rule logic isn't valid function",SUFFIX_REQUIRED:"Suffix required for object path",PATH_ARROGATION:"Path arrogation",NOT_SUPPORT_ABSOLUTE_PATH:"Not support absolute path",REQUIRED:"Required",LENGTH_OUT_OF_LIMIT:"The length must be less than ${length}"}}},sumorSMS:{origin:{MOBILE_FORMAT:"\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF",MOBILE_PREFIX_NOT_SUPPORT:"\u8BE5\u56FD\u5BB6\u5730\u533A\u6682\u672A\u5F00\u901A\u670D\u52A1",SMS_SEND_FAILED:"\u6D88\u606F\u53D1\u9001\u5931\u8D25:${msg}"}},sumorStorage:{name:"\u8F7B\u5448\u4E91\u5B58\u50A8\u6587\u672C",origin:{STORAGE_INSTANCE_ERROR:"\u5B58\u50A8\u7CFB\u7EDF\u4EA4\u4E92\u5F02\u5E38:${msg}",STORAGE_FILE_SAVE_FAILED:"\u6587\u4EF6\u5199\u5165\u5931\u8D25",STORAGE_NOT_CONNECTED:"\u672A\u914D\u7F6E\u5B58\u50A8\u670D\u52A1\u5668\u8FDE\u63A5",STORAGE_FILE_READ_FAILED:"\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25",STORAGE_FILE_DELETE_FAILED:"\u6587\u4EF6\u5220\u9664\u5931\u8D25",STORAGE_FILE_INFO_FAILED:"\u6587\u4EF6\u83B7\u53D6\u4FE1\u606F\u5931\u8D25"}},sumorDemo:{origin:{DEMO_TEXT_ZH:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_ZHCN:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u5927\u9646\u7B80\u4F53\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_ZHHK:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u9999\u6E2F\u7E41\u4F53\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_EN:"\u6F14\u793A\u6587\u672C\uFF1A\u82F1\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C"},target:{en:{DEMO_TEXT_EN:"Demo text for english"},zh:{DEMO_TEXT_ZH:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u6587"},"zh-CN":{DEMO_TEXT_ZHCN:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u5927\u9646\u7B80\u4F53\u4E2D\u6587"},"zh-HK":{DEMO_TEXT_ZHHK:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u570B\u9999\u6E2F\u7E41\u9AD4\u4E2D\u6587"}}}};var Gt={"sumorApp.term":{name:"\u67E5\u8BE2\u6761\u4EF6",required:!1},"sumorApp.skip":{name:"\u8DF3\u8FC7\u6761\u6570",type:"number",default:0,required:!1},"sumorApp.top":{name:"\u6761\u6570",type:"number",default:100,required:!1},"sumorApp.sort":{name:"\u6392\u5E8F\u89C4\u5219",type:"string",required:!1}};var Jt=`sq=\u963F\u5C14\u5DF4\u5C3C\u4E9A\u8BED|Shqip
21
+ `;let o={};for(let s in t)o[s]=t[s];for(let s in e)o[s]=`@${e[s]}`;return{scss:r,less:o}},xt=t=>(t=$t(t),Vo(t,yt));var _t=t=>{let e=xt(t);return{preprocessorOptions:{scss:{additionalData:e.scss},less:{modifyVars:e.less,javascriptEnabled:!0}}}};var bt=async(t,e)=>{let r=t.styleVars,o=_t(r);await D(`${e.tmpWeb}/styleVars.js`,`export default ${JSON.stringify(o,null,4)}`)};var ye=async(t,e)=>{let{root:r,config:o}=t,s={root:r,pages:he.join(r,"/web/pages"),stores:he.join(r,"/web/stores"),tmp:he.join(r,"/tmp"),tmpWeb:he.join(r,"/tmp/web")};for(let i in s)s[i]=s[i].replace(/\\/g,"/"),await Ko.ensureDir(s[i]);o.styleVars=o.styleVars||{},await gt(t,s,e),await wt(t,s),await ht(s),await bt(o,s)};var St=async t=>{let{getLogger:e,root:r,config:o}=t,s=e("DEV"),i=dt(async c=>{await ye(t,c),s.info("\u4EE3\u7801\u5DF2\u66F4\u65B0")});await i(!0),Yo.watch(".",{cwd:`${r}/web`,ignored:/(^|[\/\\])(tmp|node_modules|\.git|\.nuxt|\.idea|\.vscode|\.cache|\.sass-cache|\.DS_Store|\.env)/,persistent:!0}).on("all",async(c,m)=>{await i()});let a=Zo("vite --config tmp/web/vite.config.js --host",{cwd:r});a.stdout.on("data",c=>{s.debug(c)}),a.stderr.on("data",c=>{s.error(c)})};var Et=t=>{let e={},r={};e.setContext=(i,n)=>{typeof i=="object"?(Object.assign(e,i),Object.assign(r,i)):(e[i]=n,r[i]=n)},e.getContext=()=>({...r});let o=(t.mode||process.env.mode||"production").toLowerCase(),s;switch(o){case"development":s="development";break;case"dev":s="development";break;case"debug":s="development";break;case"production":s="production";break;case"build":s="build";break;case"setup":s="setup";break;case"preview":s="preview";break;default:s="production";break}return e.setContext({mode:s,ssr:t.ssr}),e.root=process.cwd(),e};var vt=async t=>new Promise(e=>{setTimeout(()=>{e()},t*1e3)});import Xo from"uuid";var $e=()=>Xo.v4().replace(/-/g,"");import qo from"stream";var Qo=t=>{let e=t,r;return typeof t=="string"?r=Buffer.from(t):Buffer.isBuffer(t)&&(r=t),r&&(e=new qo.PassThrough,e.end(r)),e},xe=Qo;function kt(t){return new Promise((e,r)=>{let o=[];t.on("error",r),t.on("data",s=>o.push(s)),t.on("end",()=>e(Buffer.concat(o)))})}var _e=async(t,e)=>{if(t){e=e||"stream";let r,o;switch(e){case"string":o=await kt(t),r=o.toString();break;case"buffer":r=await kt(t);break;default:r=t;break}return r}return t};var Tt={from:_e,to:xe};var Ot=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyz".split(""),r=e.length,o=+t,s=[];do{let i=o%r;o=(o-i)/r,s.unshift(e[i])}while(o);return s.join("")};var Nt=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".split(""),r=e.length,o=+t,s=[];do{let i=o%r;o=(o-i)/r,s.unshift(e[i])}while(o);return s.join("")};var It=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ",r=e.length;t=String(t);let o=t.length,s=0,i=0;for(;s<o;)i+=r**s++*e.indexOf(t.charAt(o-s)||0);return i};var Ct=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyz",r=e.length;t=String(t);let o=t.length,s=0,i=0;for(;s<o;)i+=r**s++*e.indexOf(t.charAt(o-s)||0);return i};var Rt={from10to36:Ot,from10to62:Nt,from62to10:It,from36to10:Ct};var Dt={delay:vt,uuid:$e,stream:Tt,number:Rt};var At=async t=>{let e=`${t.root}/sumor`,r=await oe(e,t.mode==="production"),o=`${t.root}/config/config`,s=await oe(o,t.mode==="production");return{...r,...s}};import se from"fs-extra";var es=async t=>{if(await se.exists(t)){let e={key:await se.readFile(`${t}/domain.key`,"utf-8"),cert:await se.readFile(`${t}/domain.cer`,"utf-8")};return await se.exists(`${t}/ca.cer`)&&(e.ca=await se.readFile(`${t}/ca.cer`,"utf-8")),e}},Lt=async t=>{let e=await es(`${t.root}/ssl`),r=t.config.protocol||"https";r==="https"&&!e&&(r="http");let o=t.config.domain||"localhost",s=parseInt(t.config.port||(r==="http"?80:443),10),i=r==="http"&&s===80||r==="https"&&s===443?"":`:${s}`,n=t.config.origin||`${r}://${o}${i}`,a=t.mode==="development"||t.mode==="preview"?s+1:s,c=`http://${o}:${a}`;return process.env.SUMOR_ORIGIN=n,{ssl:e,protocol:r,domain:o,port:s,origin:n,uiPort:a,uiOrigin:c}};import ss from"fs";var Ft=(t,e,r,o,s,i)=>{let n=new Date(t).toISOString(),a=e.toUpperCase(),c=r.toUpperCase(),m=o?` [${o}]`:"",l="";return i&&(l=` | ${JSON.stringify(i)}`),`# ${n} [${a}] [${c}]${m} - ${s}${l}`};import{Chalk as ts}from"chalk";var be=new ts({}),Pt={trace:"#00a3af",debug:"#1183d3",info:"#2ecc71",warn:"#f39c12",error:"#b91f12",fatal:"#ff1300"},rs={trace:"gray",debug:"blue",info:"green",warn:"yellow",error:"red",fatal:"red"},os=(t,e)=>{let r=new Date(t+e*60*1e3),o=r.getUTCFullYear(),s=`0${r.getUTCMonth()+1}`.slice(-2),i=`0${r.getUTCDate()}`.slice(-2),n=`0${r.getUTCHours()}`.slice(-2),a=`0${r.getUTCMinutes()}`.slice(-2),c=`0${r.getUTCSeconds()}`.slice(-2),m=`00${r.getUTCMilliseconds()}`.slice(-3);return`${o}-${s}-${i} ${n}:${a}:${c}.${m}`},We=({time:t,offset:e,level:r,scope:o,id:s,message:i})=>{let n=os(t,e||0),a=s?` ${s}`:"",c=`${n} ${r.toUpperCase()} ${o.toUpperCase()}${a} - `,m;switch(be.level){case 1:m=be[rs[r.toLowerCase()]](c);break;case 2:m=be.hex(Pt[r.toLowerCase()]).visible(c);break;case 3:m=be.hex(Pt[r.toLowerCase()]).visible(c);break;default:m=c;break}return m+i};var jt=t=>{let e=/#(.*?)\s-\s/g,r=t.match(e),o=[],s=(n,a)=>{let c=n.trim().replace("# ","").replace(" -","").split(" ");for(let w=0;w<c.length;w+=1)c[w]=c[w].trim().replace("[","").replace("]","");let m=new Date(c[0]).getTime(),l=c[1],u=c[2],p=c[3],d=a.split("|"),h=d.shift().trim(),f;if(d.length>0){let w=d.join("|").trim();f=JSON.parse(w)}let g={time:m,level:l,scope:u};p&&(g.id=p),g.message=h,f&&(g.data=f),o.push(g)},i=t;for(let n=0;n<r.length;n+=1){let a=r[n],c=i.split(a),m=c.shift();i=c.join(a),n>0&&s(r[n-1],m)}return s(r[r.length-1],i),o};var Ve=(t,e)=>{e=e||{};let r=/\{([a-zA-Z0-9]+)\}/g,o=t.match(r),s=t;for(let i=0;i<o.length;i+=1){let n=o[i],a=n.replace("{","").replace("}","");e[a]?s=s.replace(n,e[a]):s=s.replace(n,"")}return s};var ie=class{constructor(e){e=e||{};let r=e.scope||"MAIN",o=(e.level||"trace").toLowerCase(),s=e.id||"",i=e.saver||function(){},n=["trace","debug","info","warn","error","fatal"],c=((m,l)=>{let u=m.indexOf(l);return u===-1?[]:m.slice(u)})(n,o);for(let m=0;m<n.length;m+=1){let l=n[m];c.indexOf(l)===-1?this[l]=function(){}:this[l]=function(u,p){let d=Date.now();i(`${Ft(d,l,r,s,u,p)}
22
+ `);let h=u;e.i18n&&e.i18n[u]&&(h=Ve(e.i18n[u],p));let f=e.offset!==void 0?e.offset:-new Date().getTimezoneOffset();console.log(We({time:d,offset:f,level:l,scope:r,id:s,message:h}))}}this.load=m=>{let l=jt(m),u="";for(let p=0;p<l.length;p+=1){let d=l[p],{message:h,data:f}=d,g=h;e.i18n&&e.i18n[h]&&(g=Ve(e.i18n[h],f)),u+=`${We({...d,offset:e.offset||new Date().getTimezoneOffset(),message:g})}
23
+ `}return u}}};var Mt=async t=>{let e=`${t.root}/tmp/main.log`,r=o=>{ss.appendFileSync(e,o)};return(o,s)=>new ie({scope:o,level:t.config.logLevel,id:s,saver:r})};import is from"fs-extra";import Ut from"knex";var Ke=t=>{t=t||{};let e={};switch(t.type=t.type||"better-sqlite3",t.type){case"sqlite":e.client="better-sqlite3";break;case"sqlite3":e.client="better-sqlite3";break;case"better-sqlite3":e.client="better-sqlite3";break;case"mysql":e.client="mysql2";break;case"mysql2":e.client="mysql2";break;default:throw new Error(`\u4E0D\u652F\u6301\u6570\u636E\u5E93\u7C7B\u578B${t.type}`)}switch(e.client){case"better-sqlite3":e.connection={filename:t.path||`${process.cwd()}/main.sqlite`},e.useNullAsDefault=!0;break;case"mysql2":e.connection={host:t.host,port:t.port||3306,user:t.user,password:t.password,database:t.database,charset:t.charset||"utf8mb4"},e.pool=t.pool||{min:2,max:10};break;default:break}return e};var M=class{constructor(e,r){this.config=e,this._config=Ke(e),this._logger=r||{debug:console.log,trace:console.log}}async ensure(){let e,r,o,s,i;switch(this._config.client){case"better-sqlite3":await is.ensureFile(this._config.connection.filename);break;case"mysql2":e={...this.config},r=e.database,delete e.database,o=Ut(Ke(e)),s=await o.raw("show databases"),i=!!s[0].filter(n=>n.Database===r)[0],i||(this._logger.trace("\u6570\u636E\u5E93\u4E0D\u5B58\u5728\uFF0C\u6B63\u5728\u521B\u5EFA"),await o.raw(`CREATE DATABASE IF NOT EXISTS ${r} default charset utf8mb4 COLLATE utf8mb4_general_ci`),this._logger.trace("\u6570\u636E\u5E93\u521B\u5EFA\u5B8C\u6210")),await new Promise(n=>{o.destroy(()=>{n()})});break;default:this._logger.trace(`\u6682\u4E0D\u652F\u6301${this._config.client}\u7C7B\u578B\u6570\u636E\u5E93\u521B\u5EFA\uFF0C\u8BF7\u81EA\u884C\u786E\u8BA4\u6570\u636E\u5E93\u5B58\u5728`);break}}async connect(){this.knex||(this.knex=Ut(this._config))}async destroy(){this.knex&&(await new Promise(e=>{this.knex.destroy(()=>{e()})}),delete this.knex)}};var ne=t=>{let e=typeof t;if(t===null)e="null";else if(e==="object"){let r=Object.prototype.toString.call(t);r==="[object Array]"?e="array":r==="[object RegExp]"&&(e="regexp")}return e};var G=(t,e,r)=>{e=e||"-",t=t.toLowerCase();let o=t.split(e);t="";for(let s in o){let i=o[s];t+=i.replace(i[0],i[0].toUpperCase())}return r&&(t=t.replace(t[0],t[0].toLowerCase())),t};var y=(t,e)=>{e=e||"-";let r=function(s){return s>="A"&&s<="Z"},o=[];for(let s=0;s<t.length;s++){let i=t.charAt(s),n=i.toLowerCase();o.length===0?o.push(n):(r(i)&&o.push(""),o[o.length-1]=o[o.length-1]+=n)}return o.join(e)};var J=t=>{let e={};for(let r in t){let o=y(r,"_");e[o]=t[r]}return e};var zt=t=>{let e={};for(let r in t){let o=G(r,"_",!0);e[o]=t[r]}return e};var ae=0,ns=20;setInterval(()=>{ae>ns&&console.log(`\u6570\u636E\u5E93\u8FDE\u63A5\u8FC7\u591A\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u6709\u672A\u63D0\u4EA4\u7684\u4E8B\u52A1\uFF0C\u5F53\u524D\u8FDE\u63A5\u6570${ae}`)},1e3);var Bt=(t,e,r,o)=>{o=o||"";let s={},i,n=async function(){i||(i=await t.knex.transaction(),ae++)};return s.setUser=a=>{o=a,r.trace(`\u5DF2\u4FEE\u6539\u64CD\u4F5C\u7528\u6237\u4E3A${a}`)},s.info=async(a,c)=>{if(!c&&e.info[a])return e.info[a];let m=await i.from(a).columnInfo(),l={};for(let u in m){let p=G(u,"_",!0),d;switch(m[u].type){case"char":d="string";break;case"varchar":d="string";break;case"text":d="string";break;case"mediumtext":d="string";break;case"tinyint":d="number";break;case"smallint":d="number";break;case"int":d="number";break;case"integer":d="number";break;case"bigint":d="number";break;case"float":d="number";break;case"double":d="number";break;case"":d="string";break;default:d="string",console.log(`\u672A\u77E5\u6570\u636E\u7C7B\u578B ${u} ${JSON.stringify(m[u])}`);break}l[p]={type:d,length:parseInt(m[u].maxLength,10)}}return e.info[a]=l,l},s.count=async(a,c,m)=>{await n(),m=m||{},a=y(a,"_");let l=i.from(a);l.count({count:"*"});let u=!1;if(c){c=J(c);for(let d in c)if(ne(c[d])==="object")for(let h in c[d]){let f=h,g=c[d][h];f==="<>"&&g===null?l.whereNotNull(d):l.where(d,f,g)}else c[d]===null?l.whereNull(d):l.where(d,c[d]);u=!0}if(m.term&&m.term!==""&&m.termRange)for(let d in m.termRange){let h=m.termRange[d];parseInt(d)===0?u?l.andWhere(h,"like",`%${m.term}%`):(l.where(h,"like",`%${m.term}%`),u=!0):l.orWhere(h,"like",`%${m.term}%`)}return r.trace(l.toSQL().sql,l.toSQL().bindings),(await l)[0].count},s.single=async(a,c,m)=>{m=m||{},m.top=1;let l=await s.select(a,c,m);return l.length>1,l[0]},s.select=async(a,c,m)=>{r.trace(`\u67E5\u8BE2${a}\uFF0C\u6761\u4EF6${JSON.stringify(c)}\uFF0C\u53C2\u6570${JSON.stringify(m)}`),await n(),m=m||{},a=y(a,"_");let l=await s.info(a),u=i.from(a),p=m.field;p&&(p=p.map(f=>y(f,"_"))),u.select(p);let d=!1;if(c){c=J(c);for(let f in c)if(ne(c[f])==="object")for(let g in c[f]){let w=g,$=c[f][g];w==="<>"&&$===null?u.whereNotNull(f):u.where(f,w,$)}else c[f]===null?u.whereNull(f):u.where(f,c[f]);d=!0}if(m.term&&m.term!==""&&m.termRange)for(let f in m.termRange){let g=m.termRange[f];parseInt(f)===0?d?u.andWhere(g,"like",`%${m.term}%`):(u.where(g,"like",`%${m.term}%`),d=!0):u.orWhere(g,"like",`%${m.term}%`)}if(!m.sort&&l.createdTime&&(m.sort="created_time DESC"),m.sort)if(typeof m.sort=="string"){let f=m.sort.split(",");for(let g in f){let w=f[g].trim();w=w.split(" "),w[0]=y(w[0],"_"),f[g]=w.join(" ")}u.orderByRaw(f.join(","))}else u.orderBy(m.sort);return m.top&&u.limit(m.top),m.skip&&u.offset(m.skip),r.trace(u.toSQL().sql,u.toSQL().bindings),(await u).map(f=>zt(f))},s.insert=async(a,c)=>{c=c||{},a=y(a,"_"),await n();let m=async()=>{let u=$e();return await s.count(a,{id:u})!==0?await m():u};c.id||(c.id=await m()),c.createdBy=o||"",c.createdTime=Date.now(),c.updatedBy=o||"",c.updatedTime=Date.now(),c=J(c);let l=i.insert(c).into(a);return r.trace(l.toSQL().sql,l.toSQL().bindings),await l,c.id},s.update=async(a,c)=>{c=c||{},a=y(a,"_"),await n();let m=c.id;if(delete c.id,m==null)throw new Error("\u6570\u636EID\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u627E\u5230\u8981\u66F4\u65B0\u7684\u6570\u636E");c.updatedBy=o||"",c.updatedTime=Date.now(),c=J(c);let l=i.update(c).from(a).where({id:m});r.trace(l.toSQL().sql,l.toSQL().bindings),await l},s.modify=async(a,c,m)=>{r.trace(`\u5F3A\u5236\u4FEE\u6539${a}\uFF0C\u6570\u636E${JSON.stringify(m)}\uFF0C\u68C0\u67E5\u5B57\u6BB5${JSON.stringify(c)}`),a=y(a,"_");let l={};for(let d of c)l[y(d,"_")]=m[d];let u=await s.single(a,l,{field:["id"]}),p;return u?(p=u.id,m.id=p,await s.update(a,m)):p=await s.insert(a,m),p},s.ensure=async(a,c,m)=>{r.trace(`\u786E\u4FDD${a}\u5B58\u5728\u6570\u636E${JSON.stringify(m)}\uFF0C\u68C0\u67E5\u5B57\u6BB5${JSON.stringify(c)}`),a=y(a,"_");let l={};for(let d of c)l[y(d,"_")]=m[d];let u=await s.select(a,l,{field:["id"]}),p;return u[0]?p=u[0].id:p=await s.insert(a,m),p},s.delete=async(a,c)=>{a=y(a,"_");let m=i.from(a);return c&&(c=J(c),m.where(c)),r.trace(m.toSQL().sql,m.toSQL().bindings),await m.del()},s.sql=async(a,c)=>(await n(),await i.raw(a,c)),s.commit=async()=>{if(i)try{await i.commit(),i=null,ae--}catch(a){r.error(a)}},s.release=s.commit,s.rollback=async()=>{if(i)try{await i.rollback(),ae--,i=null}catch(a){r.error(a)}},s};var W=async({config:t,logger:e})=>{e=e||{debug:console.log,trace:console.log};let r=new M(t,e);await r.ensure(),await r.connect();let o={info:{}};return{connect:async(n,a)=>Bt(r,o,n,a),destroy:async()=>{await r.destroy()}}};var Ht=async t=>{let e=t.config.database,r=t.getLogger("DATABASE"),o=await W({config:e,logger:r});return async s=>await o.connect(s||r)};import Ee from"fs-extra";var as=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.origin=t.origin||{},t.target=t.target||{},t),cs=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.text=t.text||"",t.expression=t.expression||"",t),Ye=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.type=t.type||"any",t.placeholder=t.placeholder||"",t.required=t.required===!0,t.length=t.length||0,t.rule=t.rule||[],t.helper=t.helper||{},t.type==="string"&&(t.trim=t.trim!==!1,t.upperCase=t.upperCase===!0,t.lowerCase=t.lowerCase===!0),t),ms=(t,e,r)=>{t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.property=t.property||{};for(let o in t.property){let s=t.property[o].type;s&&e.type[s]?(t.property[o]={...e.type[s],...t.property[o]},t.property[o].type=e.type[s].type):t.property[o]=Ye(t.property[o]),e.type[`${r}.${o}`]=t.property[o]}return t.join=t.join||{},t},ls=(t,e)=>{t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.parameters=t.parameters||{};for(let r in t.parameters){let o=t.parameters[r].type;o&&e.type[o]?(t.parameters[r]={...e.type[o],...t.parameters[r]},t.parameters[r].type=e.type[o].type):t.parameters[r]=Ye(t.parameters[r])}return t},Se={text:as,rule:cs,type:Ye,entity:ms,program:ls};import Ze from"fs-extra";import us from"path";import{glob as fs}from"glob";var V=async({condition:t,options:e})=>{e=e||{};let r=await fs(t,e);return r=r.map(o=>(o=us.normalize(o),o=o.replace(/\\/g,"/"),o)),r};var K=t=>{let e=t.split("/"),o=e.pop().split("."),s=o.pop(),i=o.shift(),n=null;o.length>0&&(n=o.pop());let a=[...e,i].join(".");return{path:a,route:`/api/${a.replace(/\./g,"/")}`,name:i,suffix:s,type:n}};var Xe=async(t,e,r)=>{let o={};if(await Ze.exists(t)){let s=e?`**/**.${e}.json`:"**/**.json",i=await V({condition:s,options:{cwd:t}});for(let n of i){let a=`${t}/${n}`,c=K(n);o[c.path]=await Ze.readJson(a)}if(r&&r!=="json"){let n=e?`**/**.${e}.${r}`:`**/**.${r}`,a=await V({condition:n,options:{cwd:t}});for(let c of a){let m=`${t}/${c}`,l=K(c);o[l.path]=o[l.path]||{},o[l.path][l.suffix]=await Ze.readFile(m,"utf-8")}}}return o};var Gt={sumorApp:{name:"\u8F7B\u5448\u4E91\u5E94\u7528\u6587\u672C",origin:{INTERNAL_ERROR:"\u7A0B\u5E8F\u5185\u90E8\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8054\u7CFB\u7BA1\u7406\u5458",NETWORK_ERROR:"\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8054\u7CFB\u7BA1\u7406\u5458",PERMISSION_DENIED:"\u6CA1\u6709\u8BBF\u95EE\u8BE5\u529F\u80FD\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002\u7F3A\u5C11\u6743\u9650\uFF1A${auth}",LOGIN_EXPIRED:"\u767B\u9646\u6388\u6743\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u9646",PERMISSION_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539permission\uFF0C\u8BF7\u4F7F\u7528setPermission",LOGIN_STATUS_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u767B\u5F55\u72B6\u6001",USER_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539user\uFF0C\u8BF7\u4F7F\u7528setUser",TOKEN_ID_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724CID\uFF0C\u8BF7\u4F7F\u7528setID",TOKEN_TIME_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724C\u65F6\u95F4",TOKEN_DATA_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724C\u6570\u636E",LACK_USER_ID:"\u7F3A\u5C11\u7528\u6237ID",AUTH_ERROR:"\u6388\u6743\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",AUTH_ERROR_COOKIE_MISSING:"cookie\u4E22\u5931",API_NOT_FOUND:"\u63A5\u53E3\u672A\u627E\u5230",INVALID_PARAMETER:"\u65E0\u6548\u6570\u636E:${msg}",RULE_LOGIC_NOT_FUNCTION:"\u89C4\u5219\u903B\u8F91\u4E0D\u662F\u6709\u6548\u51FD\u6570\u65B9\u6CD5",SUFFIX_REQUIRED:"\u8F6C\u6362\u4E3A\u5BF9\u8C61\u7F3A\u5C11\u5FC5\u8981\u7684\u540E\u7F00\u540D",PATH_ARROGATION:"\u8DEF\u5F84\u8D8A\u7EA7",NOT_SUPPORT_ABSOLUTE_PATH:"\u4E0D\u652F\u6301\u7EDD\u5BF9\u8DEF\u5F84",REQUIRED:"\u5FC5\u586B\u9879",LENGTH_OUT_OF_LIMIT:"\u957F\u5EA6\u5FC5\u987B\u5C0F\u4E8E${length}",WECHAT_DISABLED:"\u5FAE\u4FE1\u672A\u542F\u7528\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458"},target:{en:{INTERNAL_ERROR:"Internal program error, please try again later, or contact administrator",NETWORK_ERROR:"Network error. Please try again later or contact the administrator",PERMISSION_DENIED:"You do not have permission ${auth}, please contact administrator",LOGIN_EXPIRED:"Login expired, please login",INVALID_PARAMETER:"Invalid data: ${msg}",RULE_LOGIC_NOT_FUNCTION:"Rule logic isn't valid function",SUFFIX_REQUIRED:"Suffix required for object path",PATH_ARROGATION:"Path arrogation",NOT_SUPPORT_ABSOLUTE_PATH:"Not support absolute path",REQUIRED:"Required",LENGTH_OUT_OF_LIMIT:"The length must be less than ${length}"}}},sumorSMS:{origin:{MOBILE_FORMAT:"\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF",MOBILE_PREFIX_NOT_SUPPORT:"\u8BE5\u56FD\u5BB6\u5730\u533A\u6682\u672A\u5F00\u901A\u670D\u52A1",SMS_SEND_FAILED:"\u6D88\u606F\u53D1\u9001\u5931\u8D25:${msg}"}},sumorStorage:{name:"\u8F7B\u5448\u4E91\u5B58\u50A8\u6587\u672C",origin:{STORAGE_INSTANCE_ERROR:"\u5B58\u50A8\u7CFB\u7EDF\u4EA4\u4E92\u5F02\u5E38:${msg}",STORAGE_FILE_SAVE_FAILED:"\u6587\u4EF6\u5199\u5165\u5931\u8D25",STORAGE_NOT_CONNECTED:"\u672A\u914D\u7F6E\u5B58\u50A8\u670D\u52A1\u5668\u8FDE\u63A5",STORAGE_FILE_READ_FAILED:"\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25",STORAGE_FILE_DELETE_FAILED:"\u6587\u4EF6\u5220\u9664\u5931\u8D25",STORAGE_FILE_INFO_FAILED:"\u6587\u4EF6\u83B7\u53D6\u4FE1\u606F\u5931\u8D25"}},sumorDemo:{origin:{DEMO_TEXT_ZH:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_ZHCN:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u5927\u9646\u7B80\u4F53\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_ZHHK:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u9999\u6E2F\u7E41\u4F53\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_EN:"\u6F14\u793A\u6587\u672C\uFF1A\u82F1\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C"},target:{en:{DEMO_TEXT_EN:"Demo text for english"},zh:{DEMO_TEXT_ZH:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u6587"},"zh-CN":{DEMO_TEXT_ZHCN:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u5927\u9646\u7B80\u4F53\u4E2D\u6587"},"zh-HK":{DEMO_TEXT_ZHHK:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u570B\u9999\u6E2F\u7E41\u9AD4\u4E2D\u6587"}}}};var Jt={"sumorApp.term":{name:"\u67E5\u8BE2\u6761\u4EF6",required:!1},"sumorApp.skip":{name:"\u8DF3\u8FC7\u6761\u6570",type:"number",default:0,required:!1},"sumorApp.top":{name:"\u6761\u6570",type:"number",default:100,required:!1},"sumorApp.sort":{name:"\u6392\u5E8F\u89C4\u5219",type:"string",required:!1}};var Wt=`sq=\u963F\u5C14\u5DF4\u5C3C\u4E9A\u8BED|Shqip
24
24
  sq-AL=\u963F\u5C14\u5DF4\u5C3C\u4E9A\u8BED(\u963F\u5C14\u5DF4\u5C3C\u4E9A)|Shqiptar (Shqip\xEBri)
25
25
  gsw=\u963F\u5C14\u8428\u65AF\u8BED
26
26
  gsw-FR=\u963F\u5C14\u8428\u65AF\u8BED(\u6CD5\u56FD)
@@ -364,7 +364,7 @@ zh-HK=\u4E2D\u6587(\u7E41\u4F53\uFF0C\u9999\u6E2F\u7279\u522B\u884C\u653F\u533A)
364
364
  zh-CN=\u4E2D\u6587(\u7B80\u4F53)
365
365
  zh-SG=\u4E2D\u6587(\u7B80\u4F53\uFF0C\u65B0\u52A0\u5761)
366
366
  zu=\u7956\u9C81\u8BED
367
- zu-ZA=\u7956\u9C81\u8BED(\u5357\u975E)`;var Wt={"sumor.language":Jt};var Vt=async(t,e,r)=>{let{data:o,config:s,response:i,tools:n,wechat:a}=t;if(s.wechat){i.respond=!0;let c=o.id,m={appId:s.wechat.key,timeStamp:Math.round(Date.now()/1e3),nonceStr:n.uuid(),package:`prepay_id=${c}`,signType:"RSA"};m.paySign=a.pay.sign([m.appId,m.timeStamp,m.nonceStr,m.package]),r.end(`
367
+ zu-ZA=\u7956\u9C81\u8BED(\u5357\u975E)`;var Vt={"sumor.language":Wt};var Kt=async(t,e,r)=>{let{data:o,config:s,response:i,tools:n,wechat:a}=t;if(s.wechat){i.respond=!0;let c=o.id,m={appId:s.wechat.key,timeStamp:Math.round(Date.now()/1e3),nonceStr:n.uuid(),package:`prepay_id=${c}`,signType:"RSA"};m.paySign=a.pay.sign([m.appId,m.timeStamp,m.nonceStr,m.package]),r.end(`
368
368
  <html>
369
369
  <head>
370
370
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@@ -412,7 +412,7 @@ if (typeof WeixinJSBridge == "undefined") {
412
412
  }
413
413
  </script>
414
414
  </body>
415
- </html>`)}};var Kt=t=>{let e={monitor:{name:"\u670D\u52A1\u5065\u5EB7\u72B6\u6001\u76D1\u63A7",program:async(o,s,i)=>s.sumor.monitor},text:{name:"\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u6587\u672C\u6570\u636E",program:async(o,s,i)=>s.sumor.text()},token:{name:"\u5F53\u524D\u6388\u6743\u767B\u5F55\u4EE4\u724C",program:(o,s,i,n)=>{let a=s.sumor.token;if(a.id){let c=a.data?a.data.nickname:"";return{id:a.id,user:a.user,nickname:c,time:a.time,permission:a.permission}}return{}}},logout:{name:"\u9000\u51FA\u767B\u5F55",program:async(o,s,i,n)=>{let a=s.sumor.token;a.user&&await a.destroy()}},range:{name:"\u6570\u636E\u8F93\u5165\u8303\u56F4\u5217\u8868",parameters:{name:{name:"\u6570\u636E\u540D\u79F0",desc:"\u5E2E\u52A9\u6570\u636E\u7684\u540D\u79F0",required:!0,type:"string"}},program:async(o,s,i)=>{let n=s.sumor.data.name;return s.sumor.range(n)}},meta:{name:"\u63A5\u53E3\u4FE1\u606F",program:async(o,s,i)=>{let n={};for(let a in o.exposeApis){let c=o.exposeApis[a];n[a]={name:c.name,desc:c.desc,parameters:c.parameters}}return{name:o.name,instance:o.instance,api:n,text:s.sumor.text()}}}},r={};for(let o in e)r[`sumor.${o}`]=e[o];return r["wx.pay"]={name:"\u5FAE\u4FE1\u652F\u4ED8",program:Vt},r};import{pathToFileURL as Yt}from"url";var Zt=async t=>{let e=Kt(t),r={};for(let c in e)r[c]={name:e[c].name,parameters:e[c].parameters};let o=["text","rule","type","entity","view","api","event"],s={range:Wt,text:Ht,type:Gt,api:r};for(let c of o){let m=c;s[c]=s[c]||{},(c==="api"||c==="event")&&(m="program");let l=await Ze(`${t.root}/${c}`,m);if(c==="api"){let u={};for(let p in l)u[`api.${p}`]=l[p];l=u}if(s[c]=Object.assign(s[c],l),be[m])for(let u in s[c])s[c][u]=be[m](s[c][u],s,u)}await Se.ensureDir(`${process.cwd()}/tmp`),await Se.writeFile(`${process.cwd()}/tmp/meta.json`,JSON.stringify(s,null,4));for(let c in e)s.api[c]=e[c];let i=await Ze(`${t.root}/view`,"view","sql");for(let c in i)s.view[c]=s.api[c]||be.program({}),s.view[c]=Object.assign(s.view[c],i[c]);let n=`${t.root}/api`;if(await Se.exists(n)){let c=await V({condition:"**/**.js",options:{cwd:n}});for(let m of c){let u=`api.${K(m).path}`,p=`${n}/${m}`;s.api[u]=s.api[u]||{},s.api[u].program=(await import(Yt(p))).default}}let a=`${t.root}/event`;if(await Se.exists(a)){let c=await V({condition:"**/**.js",options:{cwd:a}});for(let m of c){let u=K(m).path,p=`${a}/${m}`;s.event[u]=s.event[u]||{},s.event[u].program=async d=>{d.logger.trace(`\u6B63\u5728\u6267\u884C\u4E8B\u4EF6${u}`);let h={...d},f;d.db||(f=await d.connectDB(),h=Object.assign(h,{db:f}));let g=(await import(Yt(p))).default;if(g)try{await g(h||d),f&&await f.commit(),d.logger.debug(`\u4E8B\u4EF6${u}\u5B8C\u6210`)}catch(w){f&&await f.rollback(),d.logger.error(`\u4E8B\u4EF6${u}\u6267\u884C\u5931\u8D25\uFF0C${w.message}`),d.logger.trace(w)}else d.logger.error(`\u4E8B\u4EF6${u}\u6267\u884C\u5931\u8D25\uFF0C\u8BE5\u7A0B\u5E8F\u4E0D\u5B58\u5728`)}}}t.setContext({meta:s})};var Xt=async t=>{let e=St(t),r=await Dt(e);e.setContext({tools:Rt,config:r});let o=r.name||"\u8F7B\u5448\u4E91\u5E94\u7528",s=(r.logLevel||"info").toLowerCase(),i=r.language||"zh-CN",n=await At(e),a={};e.setContext({name:o,logLevel:s,language:i,...n,exposeApis:a});let c=await jt(e),m=c("APP");if(e.setContext({getLogger:c,logger:m}),e.config.database){let l=await Bt(e);e.setContext({connectDB:l})}return await Zt(e),e};import Ps from"express";import qt from"fs-extra";var Qt=async t=>{let e=`${t.sumor.root}/instance.json`,r={};if(await qt.exists(e))try{r=await qt.readJson(e)}catch{}t.sumor.instance=JSON.parse(JSON.stringify(r)),t.use((o,s,i)=>{if(o.sumor.instance=JSON.parse(JSON.stringify(r)),o.sumor.instance){let{server:n,port:a,upTime:c}=o.sumor.instance;s.set("sumor-instance",`${n}_${a}_${c}`)}i()})};var er=t=>{t.use((e,r,o)=>{let i=(e.get("accept-language")||t.sumor.language).split(","),n=i[0],a=[];for(let c in i)a.push(i[c].split(";")[0]);e.sumor.language=n,e.sumor.languages=a,o()})};var us=(t,e)=>{t=t||"",e=e||{};let r=t.match(new RegExp(/\${.*?}/,"g"));if(r)for(let o of r){let s=o.substr(2,o.length-3),i=e[s]||"";t=t.replace(o,i)}return t},tr=(t,e)=>(r,o,s)=>{o=o||{},s=s||e;let i,n;if(s!==""){let u=s.split("-");i=u[0],n=u[1]}if(!r){let u={};for(let p in t){let d=t[p][""]||{},h={},f={};i&&(h=t[p][i]||{}),n&&(f=t[p][s]||{});let g={...d,...h,...f};for(let w in g)u[`${p}.${w}`]=g[w]}return u}let a=r.split("."),c=a.pop(),m=a.join("."),l;return t[m]&&(n&&(l=(t[m][s]||{})[c]),!l&&i&&(l=(t[m][i]||{})[c]),l||(l=(t[m][""]||{})[c])),us(l,o)},rr=async t=>{let e={};for(let r in t.sumor.meta.text){e[r]=e[r]||{},e[r][""]=t.sumor.meta.text[r].origin||{};for(let o in t.sumor.meta.text[r].target)e[r][o]=t.sumor.meta.text[r].target[o]||{}}t.sumor.text=tr(e,t.sumor.language),t.use((r,o,s)=>{r.sumor.text=tr(e,r.sumor.language),s()})};var or=async t=>{t.sumor.range=e=>e?t.sumor.meta.range[e]:t.sumor.meta.range,t.use((e,r,o)=>{e.sumor.range=t.sumor.range,o()})};var sr=t=>{t.use((e,r,o)=>{e.sumor.timezone=e.get("sumor-timezone"),o()})};var fs=0,Ee=t=>{t.use((e,r,o)=>{let s=++fs;e.sumor.ip=e.headers["x-forwarded-for"]||"0.0.0.0",e.sumor.getLogger=a=>t.sumor.getLogger(a,s),e.sumor.logger=e.sumor.getLogger("PROGRAM");let i=e.sumor.getLogger("HTTP"),n=e.headers["user-agent"]||"unknown agent";i.info(`${e.method} ${e.originalUrl} IP/${e.sumor.ip} ${n}`),o()})};import ae from"os";var ar=60,ir=24*60,ps=(Math.floor(Date.now()/1e3)-ae.uptime())*1e3,ds=Date.now(),cr=t=>Math.round(t),gs=()=>cr((ae.totalmem()-ae.freemem())/ae.totalmem()*100),ws=()=>({time:Date.now(),idle:ae.cpus().map(t=>t.times.idle)}),hs=(t,e)=>{let r=e.time-t.time,o=0;for(let s in e.idle){let n=(e.idle[s]-t.idle[s])/r;n>1&&(n=1),n=100-n*100,o+=n}return cr(o/e.idle.length)},A={serverUpTime:ps,serviceUpTime:ds,interval:ar,memory:[],cpu:[]},Xe,nr=async()=>{A.updateTime=Date.now();let t=ws();if(Xe){let e=hs(Xe,t);A.cpu.unshift(e),A.cpu=A.cpu.slice(0,ir)}Xe=t,A.memory.unshift(gs()),A.memory=A.memory.slice(0,ir)},mr=async t=>{nr(),setInterval(()=>{nr()},ar*1e3),t.use((e,r,o)=>{e.sumor.monitor=JSON.parse(JSON.stringify(A)),o()})};import qe from"body-parser";import ys from"multer";import $s from"fs-extra";var lr=async t=>{let e=`${t.sumor.root}/tmp/uploads`;await $s.ensureDir(e);let r=ys({dest:"tmp/uploads/"});t.uploader=o=>{let s;if(o){let i=[];for(let n in o)o[n].type==="file"&&i.push({name:n});i.length>0&&(s=r.fields(i))}return s},t.use(qe.urlencoded({extended:!1})),t.use(qe.json()),t.use(qe.text()),t.use((o,s,i)=>{o.sumor.data={...o.params,...o.query,...o.body},i()})};import xs from"cookie-parser";var ur=t=>{t.use(xs()),t.use((e,r,o)=>{e.sumor.cookie=JSON.parse(JSON.stringify(e.cookies)),e.sumor.saveCookie=()=>{for(let s in e.cookies)e.sumor.cookie[s]||r.clearCookie(s);for(let s in e.sumor.cookie)e.sumor.cookie[s]!==e.cookies[s]&&r.cookie(s,e.sumor.cookie[s],{maxAge:365*24*3600*1e3,httpOnly:!0})},o()})};var fr=t=>{let e=t.length,r=t.type,o;switch(r){case"string":e>1e3?o="text":o="string";break;case"number":e>18?o="string":t.scale!==null&&t.scale!==void 0?o="double":e>9?o="bigInteger":e>4?o="integer":e>2?o="smallint":o="tinyint";break;default:break}return o};var ve=(t,e,r,o)=>{let s;switch(r.type=r.type||"string",r.type){case"string":r.length=r.length||255;break;case"number":r.length=r.length||10;break;default:break}if(r.increment)s=t.increments(e);else{let i=fr(r),n;switch(i){case"tinyint":s=t.tinyint(e),n="number";break;case"smallint":s=t.smallint(e),n="number";break;case"integer":s=t.integer(e),n="number";break;case"bigInteger":s=t.bigInteger(e),n="number";break;case"string":s=t.string(e,r.length),n="string";break;case"text":s=t.text(e,r.length),n="string";break;case"double":s=t.double(e,r.length,r.scale),n="number";break;default:break}if(r.default!==null){let a;n==="number"?(r.default===void 0&&(r.default=0),a=parseInt(r.default,10)):(r.default===void 0&&(r.default=""),a=r.default.toString()),s.defaultTo(a)}r.notNull&&s.notNullable()}r.key&&s.primary(),o&&s.alter()};var pr=async(t,e,r)=>{r=r||{};let o={},s=await t.schema.hasTable(e).transacting(t);if(!r.rename&&!r.deleted){let i=!1;for(let a in r.property)r.property[a].key&&(i=!0);i||(o.id={type:"string",length:32});for(let a in r.property)(a==="id"&&!i||["createdBy","createdTime","updatedBy","updatedTime"].indexOf(a)<0)&&(o[a]=r.property[a]);let n={type:"number",length:13};if(r.join)for(let a in r.join)o[`${y(a,"_")}_id`]={type:"string",length:32};o.createdBy={name:"\u521B\u5EFA\u8005",type:"string",length:32},o.createdTime={name:"\u521B\u5EFA\u65F6\u95F4",...n},o.updatedBy={name:"\u66F4\u65B0\u8005",type:"string",length:32},o.updatedTime={name:"\u66F4\u65B0\u65F6\u95F4",...n}}if(!s)!r.rename&&!r.deleted&&await t.schema.createTable(e,i=>{for(let n in o){let a=y(n,"_"),c=o[n];!c.rename&&!c.deleted&&ve(i,a,c)}}).transacting(t);else if(r.rename){let i=y(r.rename,"_");await t.schema.renameTable(e,i)}else if(r.deleted)await t.schema.dropTable(e);else{let i=await t(e).columnInfo();await t.schema.alterTable(e,n=>{for(let a in o){let c=y(a,"_"),m=o[a];if(i[c]&&m.rename){let l=y(m.rename,"_");n.renameColumn(c,l)}}}).transacting(t),i=await t(e).columnInfo(),await t.schema.alterTable(e,n=>{for(let a in o){let c=y(a,"_"),m=o[a];m.rename||(i[c]?m.deleted?n.dropColumn(c):ve(n,c,m,!0):!m.rename&&!m.deleted&&ve(n,c,m))}})}};var dr=(t,e)=>{let r=[];for(let s in t)r.push({name:s,index:t[s]});r=r.sort((s,i)=>s.index>i.index?1:-1),e&&(r=r.reverse());let o=[];for(let s in r)o.push(r[s].name);return o};var gr=t=>{let e={};for(let r in t)e[r]=t[r].sql;return e};var wr=t=>{let e={};for(let o in t){e[o]=[];for(let s in t){let i=t[s].toLowerCase();i=i.replace(/`/g,""),i=i.replace(/\n/g," "),i=i.replace(/ {2}/g," "),i=i.replace(/ {2}/g," "),i=i.replace(/ {2}/g," "),(i.indexOf(` from ${o} `)>=0||i.indexOf(` join ${o} `)>=0)&&e[o].push(s)}}let r={};for(let o in t){r[o]=[];for(let s in e)e[s].indexOf(o)>=0&&r[o].push(s)}return r};var hr=t=>{let e={},r=o=>{if(t[o].length===0)return 1;let s=1;for(let i in t[o])s+=r(t[o][i]);return s};for(let o in t)e[o]=r(o);return e};var yr=(t,e)=>{e=!!e;let r={};for(let c in t){let m=y(c,"_");r[m]=t[c]}let o=gr(r),s=wr(o),i=hr(s),n=dr(i,e),a={};for(let c in n){let m=G(n[c],"_");a[m]=r[n[c]]}return a};var $r=async({config:t,logger:e,entity:r,view:o})=>{e=e||{debug:console.log,trace:console.log};let s=new M(t,e);await s.ensure(),await s.connect();let i=await s.knex.transaction();try{for(let a in r){let c=y(a,"_");e.debug(`\u6B63\u5728\u5B89\u88C5\u5B9E\u4F53${a}\u4E3A${c}`),await pr(i,c,r[a]),e.debug(`\u6B63\u5728\u5B89\u88C5\u5B9E\u4F53${a}\u5B8C\u6210`)}for(let a in o){let c=y(a,"_");await i.schema.dropViewIfExists(c)}let n=yr(o);for(let a in n){let c=y(a,"_");e.debug(`\u6B63\u5728\u5B89\u88C5\u89C6\u56FE${a}\u4E3A${c}`),await i.schema.createViewOrReplace(c,m=>{m.as(n[a].sql)}),e.debug(`\u6B63\u5728\u5B89\u88C5\u89C6\u56FE${a}\u5B8C\u6210`)}await i.commit()}catch{await i.rollback()}await s.destroy()};var ke={install:$r,operator:W};var Te=async(t,e)=>{let r=t.type||"sqlite",o;if(r==="redis"){let s={};o=i=>({get:async(n,a)=>(s[n]||{})[a],set:async(n,a,c)=>{s[n]=s[n]||{},s[n][a]=c}})}else{await ke.install({config:t,logger:e,entity:{cache:{property:{namespace:{type:"string",length:100,notNull:!0},key:{type:"string",length:500,notNull:!0},value:{type:"string",length:1e4,notNull:!0}}}}});let s=await W({config:t,logger:e});o=i=>({get:async(n,a)=>{let c=await s.connect(i),m=await c.single("cache",{namespace:n,key:a});if(await c.commit(),m)return i.trace(`\u8BFB\u53D6\u7F13\u5B58${n} ${a}\u3002\u6570\u636E\u4E3A${m.value}`),m.value;i.trace(`\u8BFB\u53D6\u7F13\u5B58${n} ${a}\u3002\u6570\u636E\u4E3A\u7A7A`)},set:async(n,a,c)=>{let m=await s.connect(i);try{c?await m.modify("cache",["namespace","key"],{namespace:n,key:a,value:c}):await m.delete("cache",{namespace:n,key:a}),await m.commit(),i.trace(`\u5199\u5165\u7F13\u5B58${n} ${a}\u6210\u529F\u3002\u6570\u636E\u4E3A${c}`)}catch(l){await m.rollback(),i.trace(`\u5199\u5165\u7F13\u5B58${n} ${a}\u5931\u8D25\u3002\u6570\u636E\u4E3A${c}`),i.error(l)}}})}return o};var xr=async t=>{let e=t.sumor.config.cache||{},r=t.sumor.getLogger("CACHE"),o=await Te(e,r);t.sumor.cache=o(r),t.use(async(s,i,n)=>{let a=s.sumor.getLogger("CACHE");s.sumor.cache=o(a),n()})};var Qe=class{constructor(e){this.req=e,this._id=e.sumor.cookie.t,this._user=null,this._permission={},this._data={},this._time=0}async update({user:e,data:r,permission:o}){e&&(this._user=e,this.req.sumor.db&&this.req.sumor.db.setUser(e)),o&&(this._permission=o),r&&(this._data=r)}get id(){return this._id||""}set id(e){throw new Error("sumorApp.TOKEN_ID_EDIT_FORBIDDEN_DIRECTLY")}get time(){return this._time||""}set time(e){throw new Error("sumorApp.TOKEN_TIME_EDIT_FORBIDDEN_DIRECTLY")}get data(){return this._data||{}}set data(e){throw new Error("sumorApp.TOKEN_DATA_EDIT_FORBIDDEN_DIRECTLY")}get user(){return this._user||""}set user(e){throw new Error("sumorApp.USER_EDIT_FORBIDDEN_DIRECTLY")}get permission(){return this._permission}set permission(e){throw new Error("sumorApp.PERMISSION_EDIT_FORBIDDEN_DIRECTLY")}async setId(e){this._id=e,await this.save()}async setData(e,r){this._data[e]=r,await this.save()}async setPermission(e,r){if(e){let o={};if(typeof e=="string")o[e]=r||[];else if(ne(e)==="array")for(let s of e)o[s]=[];else o=e;for(let s in o)this._permission[s]=this._permission[s]||[],this._permission[s]=this._permission[s].concat(o[s]);await this.save()}}has(e,r){let o=!1;return this._permission[e]&&(r?this._permission[e].indexOf(r)>=0&&(o=!0):o=!0),o}check(e,r){if(this.user){if(e){let o,s=[],i=(a,c)=>{c?s.push(`${a}-${c}`):s.push(`${a}`)};if(typeof e=="string")o=this.has(e,r),o||i(e,r);else for(let a in e){let c=e[a];typeof c=="string"?(o=this.has(c,""),o||i(c,"")):(o=this.has(c.key,c.value),o||i(c.key,c.value))}let n=s.length>0;if(s.length>0){let a=new Error("sumorApp.PERMISSION_DENIED");throw a.data={auth:s.join(",")},a}return n}}else throw new Error("sumorApp.LOGIN_EXPIRED")}async destroy(){this._id=null,await this.save()}async save(){this.req.sumor.cookie.t=this._id}},_r=async t=>{t.use(async(e,r,o)=>{e.sumor.token=new Qe(e),t.sumor.meta.event.token&&(e.sumor.token.load=async()=>{await t.sumor.meta.event.token.program(e.sumor,e,r)},await e.sumor.token.load()),e.sumor.token.user&&e.sumor.db&&e.sumor.db.setUser(e.sumor.token.user),o()})};var br=async t=>{t.use(async(e,r,o)=>{let s=e.sumor.getLogger("DATABASE");e.sumor.db=await e.sumor.connectDB(s),o()})};var _s=({title:t,code:e,desc:r,data:o})=>{let s=JSON.stringify(o,null,4);return`<html>
415
+ </html>`)}};var Yt=t=>{let e={monitor:{name:"\u670D\u52A1\u5065\u5EB7\u72B6\u6001\u76D1\u63A7",program:async(o,s,i)=>s.sumor.monitor},text:{name:"\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u6587\u672C\u6570\u636E",program:async(o,s,i)=>s.sumor.text()},token:{name:"\u5F53\u524D\u6388\u6743\u767B\u5F55\u4EE4\u724C",program:(o,s,i,n)=>{let a=s.sumor.token;if(a.id){let c=a.data?a.data.nickname:"";return{id:a.id,user:a.user,nickname:c,time:a.time,permission:a.permission}}return{}}},logout:{name:"\u9000\u51FA\u767B\u5F55",program:async(o,s,i,n)=>{let a=s.sumor.token;a.user&&await a.destroy()}},range:{name:"\u6570\u636E\u8F93\u5165\u8303\u56F4\u5217\u8868",parameters:{name:{name:"\u6570\u636E\u540D\u79F0",desc:"\u5E2E\u52A9\u6570\u636E\u7684\u540D\u79F0",required:!0,type:"string"}},program:async(o,s,i)=>{let n=s.sumor.data.name;return s.sumor.range(n)}},meta:{name:"\u63A5\u53E3\u4FE1\u606F",program:async(o,s,i)=>{let n={};for(let a in o.exposeApis){let c=o.exposeApis[a];n[a]={name:c.name,desc:c.desc,parameters:c.parameters}}return{name:o.name,instance:o.instance,api:n,text:s.sumor.text()}}}},r={};for(let o in e)r[`sumor.${o}`]=e[o];return r["wx.pay"]={name:"\u5FAE\u4FE1\u652F\u4ED8",program:Kt},r};import{pathToFileURL as Zt}from"url";var Xt=async t=>{let e=Yt(t),r={};for(let c in e)r[c]={name:e[c].name,parameters:e[c].parameters};let o=["text","rule","type","entity","view","api","event"],s={range:Vt,text:Gt,type:Jt,api:r};for(let c of o){let m=c;s[c]=s[c]||{},(c==="api"||c==="event")&&(m="program");let l=await Xe(`${t.root}/${c}`,m);if(c==="api"){let u={};for(let p in l)u[`api.${p}`]=l[p];l=u}if(s[c]=Object.assign(s[c],l),Se[m])for(let u in s[c])s[c][u]=Se[m](s[c][u],s,u)}await Ee.ensureDir(`${process.cwd()}/tmp`),await Ee.writeFile(`${process.cwd()}/tmp/meta.json`,JSON.stringify(s,null,4));for(let c in e)s.api[c]=e[c];let i=await Xe(`${t.root}/view`,"view","sql");for(let c in i)s.view[c]=s.api[c]||Se.program({}),s.view[c]=Object.assign(s.view[c],i[c]);let n=`${t.root}/api`;if(await Ee.exists(n)){let c=await V({condition:"**/**.js",options:{cwd:n}});for(let m of c){let u=`api.${K(m).path}`,p=`${n}/${m}`;s.api[u]=s.api[u]||{},s.api[u].program=(await import(Zt(p))).default}}let a=`${t.root}/event`;if(await Ee.exists(a)){let c=await V({condition:"**/**.js",options:{cwd:a}});for(let m of c){let u=K(m).path,p=`${a}/${m}`;s.event[u]=s.event[u]||{},s.event[u].program=async d=>{d.logger.trace(`\u6B63\u5728\u6267\u884C\u4E8B\u4EF6${u}`);let h={...d},f;d.db||(f=await d.connectDB(),h=Object.assign(h,{db:f}));let g=(await import(Zt(p))).default;if(g)try{await g(h||d),f&&await f.commit(),d.logger.debug(`\u4E8B\u4EF6${u}\u5B8C\u6210`)}catch(w){f&&await f.rollback(),d.logger.error(`\u4E8B\u4EF6${u}\u6267\u884C\u5931\u8D25\uFF0C${w.message}`),d.logger.trace(w)}else d.logger.error(`\u4E8B\u4EF6${u}\u6267\u884C\u5931\u8D25\uFF0C\u8BE5\u7A0B\u5E8F\u4E0D\u5B58\u5728`)}}}t.setContext({meta:s})};var qt=async t=>{let e=Et(t),r=await At(e);e.setContext({tools:Dt,config:r});let o=r.name||"\u8F7B\u5448\u4E91\u5E94\u7528",s=(r.logLevel||"info").toLowerCase(),i=r.language||"zh-CN",n=await Lt(e),a={};e.setContext({name:o,logLevel:s,language:i,...n,exposeApis:a});let c=await Mt(e),m=c("APP");if(e.setContext({getLogger:c,logger:m}),e.config.database){let l=await Ht(e);e.setContext({connectDB:l})}return await Xt(e),e};import Ms from"express";import Qt from"fs-extra";var er=async t=>{let e=`${t.sumor.root}/instance.json`,r={};if(await Qt.exists(e))try{r=await Qt.readJson(e)}catch{}t.sumor.instance=JSON.parse(JSON.stringify(r)),t.use((o,s,i)=>{if(o.sumor.instance=JSON.parse(JSON.stringify(r)),o.sumor.instance){let{server:n,port:a,upTime:c}=o.sumor.instance;s.set("sumor-instance",`${n}_${a}_${c}`)}i()})};var tr=t=>{t.use((e,r,o)=>{let i=(e.get("accept-language")||t.sumor.language).split(","),n=i[0],a=[];for(let c in i)a.push(i[c].split(";")[0]);e.sumor.language=n,e.sumor.languages=a,o()})};var ps=(t,e)=>{t=t||"",e=e||{};let r=t.match(new RegExp(/\${.*?}/,"g"));if(r)for(let o of r){let s=o.substr(2,o.length-3),i=e[s]||"";t=t.replace(o,i)}return t},rr=(t,e)=>(r,o,s)=>{o=o||{},s=s||e;let i,n;if(s!==""){let u=s.split("-");i=u[0],n=u[1]}if(!r){let u={};for(let p in t){let d=t[p][""]||{},h={},f={};i&&(h=t[p][i]||{}),n&&(f=t[p][s]||{});let g={...d,...h,...f};for(let w in g)u[`${p}.${w}`]=g[w]}return u}let a=r.split("."),c=a.pop(),m=a.join("."),l;return t[m]&&(n&&(l=(t[m][s]||{})[c]),!l&&i&&(l=(t[m][i]||{})[c]),l||(l=(t[m][""]||{})[c])),ps(l,o)},or=async t=>{let e={};for(let r in t.sumor.meta.text){e[r]=e[r]||{},e[r][""]=t.sumor.meta.text[r].origin||{};for(let o in t.sumor.meta.text[r].target)e[r][o]=t.sumor.meta.text[r].target[o]||{}}t.sumor.text=rr(e,t.sumor.language),t.use((r,o,s)=>{r.sumor.text=rr(e,r.sumor.language),s()})};var sr=async t=>{t.sumor.range=e=>e?t.sumor.meta.range[e]:t.sumor.meta.range,t.use((e,r,o)=>{e.sumor.range=t.sumor.range,o()})};var ir=t=>{t.use((e,r,o)=>{e.sumor.timezone=e.get("sumor-timezone"),o()})};var ds=0,ve=t=>{t.use((e,r,o)=>{let s=++ds;e.sumor.ip=e.headers["x-forwarded-for"]||"0.0.0.0",e.sumor.getLogger=a=>t.sumor.getLogger(a,s),e.sumor.logger=e.sumor.getLogger("PROGRAM");let i=e.sumor.getLogger("HTTP"),n=e.headers["user-agent"]||"unknown agent";i.info(`${e.method} ${e.originalUrl} IP/${e.sumor.ip} ${n}`),o()})};import ce from"os";var cr=60,nr=24*60,gs=(Math.floor(Date.now()/1e3)-ce.uptime())*1e3,ws=Date.now(),mr=t=>Math.round(t),hs=()=>mr((ce.totalmem()-ce.freemem())/ce.totalmem()*100),ys=()=>({time:Date.now(),idle:ce.cpus().map(t=>t.times.idle)}),$s=(t,e)=>{let r=e.time-t.time,o=0;for(let s in e.idle){let n=(e.idle[s]-t.idle[s])/r;n>1&&(n=1),n=100-n*100,o+=n}return mr(o/e.idle.length)},A={serverUpTime:gs,serviceUpTime:ws,interval:cr,memory:[],cpu:[]},qe,ar=async()=>{A.updateTime=Date.now();let t=ys();if(qe){let e=$s(qe,t);A.cpu.unshift(e),A.cpu=A.cpu.slice(0,nr)}qe=t,A.memory.unshift(hs()),A.memory=A.memory.slice(0,nr)},lr=async t=>{ar(),setInterval(()=>{ar()},cr*1e3),t.use((e,r,o)=>{e.sumor.monitor=JSON.parse(JSON.stringify(A)),o()})};import Qe from"body-parser";import xs from"multer";import _s from"fs-extra";var ur=async t=>{let e=`${t.sumor.root}/tmp/uploads`;await _s.ensureDir(e);let r=xs({dest:"tmp/uploads/"});t.uploader=o=>{let s;if(o){let i=[];for(let n in o)o[n].type==="file"&&i.push({name:n});i.length>0&&(s=r.fields(i))}return s},t.use(Qe.urlencoded({extended:!1})),t.use(Qe.json()),t.use(Qe.text()),t.use((o,s,i)=>{o.sumor.data={...o.params,...o.query,...o.body},i()})};import bs from"cookie-parser";var fr=t=>{t.use(bs()),t.use((e,r,o)=>{e.sumor.cookie=JSON.parse(JSON.stringify(e.cookies)),e.sumor.saveCookie=()=>{for(let s in e.cookies)e.sumor.cookie[s]||r.clearCookie(s);for(let s in e.sumor.cookie)e.sumor.cookie[s]!==e.cookies[s]&&r.cookie(s,e.sumor.cookie[s],{maxAge:365*24*3600*1e3,httpOnly:!0})},o()})};var pr=t=>{let e=t.length,r=t.type,o;switch(r){case"string":e>1e3?o="text":o="string";break;case"number":e>18?o="string":t.scale!==null&&t.scale!==void 0?o="double":e>9?o="bigInteger":e>4?o="integer":e>2?o="smallint":o="tinyint";break;default:break}return o};var ke=(t,e,r,o)=>{let s;switch(r.type=r.type||"string",r.type){case"string":r.length=r.length||255;break;case"number":r.length=r.length||10;break;default:break}if(r.increment)s=t.increments(e);else{let i=pr(r),n;switch(i){case"tinyint":s=t.tinyint(e),n="number";break;case"smallint":s=t.smallint(e),n="number";break;case"integer":s=t.integer(e),n="number";break;case"bigInteger":s=t.bigInteger(e),n="number";break;case"string":s=t.string(e,r.length),n="string";break;case"text":s=t.text(e,r.length),n="string";break;case"double":s=t.double(e,r.length,r.scale),n="number";break;default:break}if(r.default!==null){let a;n==="number"?(r.default===void 0&&(r.default=0),a=parseInt(r.default,10)):(r.default===void 0&&(r.default=""),a=r.default.toString()),s.defaultTo(a)}r.notNull&&s.notNullable()}r.key&&s.primary(),o&&s.alter()};var dr=async(t,e,r)=>{r=r||{};let o={},s=await t.schema.hasTable(e).transacting(t);if(!r.rename&&!r.deleted){let i=!1;for(let a in r.property)r.property[a].key&&(i=!0);i||(o.id={type:"string",length:32});for(let a in r.property)(a==="id"&&!i||["createdBy","createdTime","updatedBy","updatedTime"].indexOf(a)<0)&&(o[a]=r.property[a]);let n={type:"number",length:13};if(r.join)for(let a in r.join)o[`${y(a,"_")}_id`]={type:"string",length:32};o.createdBy={name:"\u521B\u5EFA\u8005",type:"string",length:32},o.createdTime={name:"\u521B\u5EFA\u65F6\u95F4",...n},o.updatedBy={name:"\u66F4\u65B0\u8005",type:"string",length:32},o.updatedTime={name:"\u66F4\u65B0\u65F6\u95F4",...n}}if(!s)!r.rename&&!r.deleted&&await t.schema.createTable(e,i=>{for(let n in o){let a=y(n,"_"),c=o[n];!c.rename&&!c.deleted&&ke(i,a,c)}}).transacting(t);else if(r.rename){let i=y(r.rename,"_");await t.schema.renameTable(e,i)}else if(r.deleted)await t.schema.dropTable(e);else{let i=await t(e).columnInfo();await t.schema.alterTable(e,n=>{for(let a in o){let c=y(a,"_"),m=o[a];if(i[c]&&m.rename){let l=y(m.rename,"_");n.renameColumn(c,l)}}}).transacting(t),i=await t(e).columnInfo(),await t.schema.alterTable(e,n=>{for(let a in o){let c=y(a,"_"),m=o[a];m.rename||(i[c]?m.deleted?n.dropColumn(c):ke(n,c,m,!0):!m.rename&&!m.deleted&&ke(n,c,m))}})}};var gr=(t,e)=>{let r=[];for(let s in t)r.push({name:s,index:t[s]});r=r.sort((s,i)=>s.index>i.index?1:-1),e&&(r=r.reverse());let o=[];for(let s in r)o.push(r[s].name);return o};var wr=t=>{let e={};for(let r in t)e[r]=t[r].sql;return e};var hr=t=>{let e={};for(let o in t){e[o]=[];for(let s in t){let i=t[s].toLowerCase();i=i.replace(/`/g,""),i=i.replace(/\n/g," "),i=i.replace(/ {2}/g," "),i=i.replace(/ {2}/g," "),i=i.replace(/ {2}/g," "),(i.indexOf(` from ${o} `)>=0||i.indexOf(` join ${o} `)>=0)&&e[o].push(s)}}let r={};for(let o in t){r[o]=[];for(let s in e)e[s].indexOf(o)>=0&&r[o].push(s)}return r};var yr=t=>{let e={},r=o=>{if(t[o].length===0)return 1;let s=1;for(let i in t[o])s+=r(t[o][i]);return s};for(let o in t)e[o]=r(o);return e};var $r=(t,e)=>{e=!!e;let r={};for(let c in t){let m=y(c,"_");r[m]=t[c]}let o=wr(r),s=hr(o),i=yr(s),n=gr(i,e),a={};for(let c in n){let m=G(n[c],"_");a[m]=r[n[c]]}return a};var xr=async({config:t,logger:e,entity:r,view:o})=>{e=e||{debug:console.log,trace:console.log};let s=new M(t,e);await s.ensure(),await s.connect();let i=await s.knex.transaction();try{for(let a in r){let c=y(a,"_");e.debug(`\u6B63\u5728\u5B89\u88C5\u5B9E\u4F53${a}\u4E3A${c}`),await dr(i,c,r[a]),e.debug(`\u6B63\u5728\u5B89\u88C5\u5B9E\u4F53${a}\u5B8C\u6210`)}for(let a in o){let c=y(a,"_");await i.schema.dropViewIfExists(c)}let n=$r(o);for(let a in n){let c=y(a,"_");e.debug(`\u6B63\u5728\u5B89\u88C5\u89C6\u56FE${a}\u4E3A${c}`),await i.schema.createViewOrReplace(c,m=>{m.as(n[a].sql)}),e.debug(`\u6B63\u5728\u5B89\u88C5\u89C6\u56FE${a}\u5B8C\u6210`)}await i.commit()}catch{await i.rollback()}await s.destroy()};var Te={install:xr,operator:W};var Oe=async(t,e)=>{let r=t.type||"sqlite",o;if(r==="redis"){let s={};o=i=>({get:async(n,a)=>(s[n]||{})[a],set:async(n,a,c)=>{s[n]=s[n]||{},s[n][a]=c}})}else{await Te.install({config:t,logger:e,entity:{cache:{property:{namespace:{type:"string",length:100,notNull:!0},key:{type:"string",length:500,notNull:!0},value:{type:"string",length:1e4,notNull:!0}}}}});let s=await W({config:t,logger:e});o=i=>({get:async(n,a)=>{let c=await s.connect(i),m=await c.single("cache",{namespace:n,key:a});if(await c.commit(),m)return i.trace(`\u8BFB\u53D6\u7F13\u5B58${n} ${a}\u3002\u6570\u636E\u4E3A${m.value}`),m.value;i.trace(`\u8BFB\u53D6\u7F13\u5B58${n} ${a}\u3002\u6570\u636E\u4E3A\u7A7A`)},set:async(n,a,c)=>{let m=await s.connect(i);try{c?await m.modify("cache",["namespace","key"],{namespace:n,key:a,value:c}):await m.delete("cache",{namespace:n,key:a}),await m.commit(),i.trace(`\u5199\u5165\u7F13\u5B58${n} ${a}\u6210\u529F\u3002\u6570\u636E\u4E3A${c}`)}catch(l){await m.rollback(),i.trace(`\u5199\u5165\u7F13\u5B58${n} ${a}\u5931\u8D25\u3002\u6570\u636E\u4E3A${c}`),i.error(l)}}})}return o};var _r=async t=>{let e=t.sumor.config.cache||{},r=t.sumor.getLogger("CACHE"),o=await Oe(e,r);t.sumor.cache=o(r),t.use(async(s,i,n)=>{let a=s.sumor.getLogger("CACHE");s.sumor.cache=o(a),n()})};var et=class{constructor(e){this.req=e,this._id=e.sumor.cookie.t,this._user=null,this._permission={},this._data={},this._time=0}async update({user:e,data:r,permission:o}){e&&(this._user=e,this.req.sumor.db&&this.req.sumor.db.setUser(e)),o&&(this._permission=o),r&&(this._data=r)}get id(){return this._id||""}set id(e){throw new Error("sumorApp.TOKEN_ID_EDIT_FORBIDDEN_DIRECTLY")}get time(){return this._time||""}set time(e){throw new Error("sumorApp.TOKEN_TIME_EDIT_FORBIDDEN_DIRECTLY")}get data(){return this._data||{}}set data(e){throw new Error("sumorApp.TOKEN_DATA_EDIT_FORBIDDEN_DIRECTLY")}get user(){return this._user||""}set user(e){throw new Error("sumorApp.USER_EDIT_FORBIDDEN_DIRECTLY")}get permission(){return this._permission}set permission(e){throw new Error("sumorApp.PERMISSION_EDIT_FORBIDDEN_DIRECTLY")}async setId(e){this._id=e,await this.save()}async setData(e,r){this._data[e]=r,await this.save()}async setPermission(e,r){if(e){let o={};if(typeof e=="string")o[e]=r||[];else if(ne(e)==="array")for(let s of e)o[s]=[];else o=e;for(let s in o)this._permission[s]=this._permission[s]||[],this._permission[s]=this._permission[s].concat(o[s]);await this.save()}}has(e,r){let o=!1;return this._permission[e]&&(r?this._permission[e].indexOf(r)>=0&&(o=!0):o=!0),o}check(e,r){if(this.user){if(e){let o,s=[],i=(a,c)=>{c?s.push(`${a}-${c}`):s.push(`${a}`)};if(typeof e=="string")o=this.has(e,r),o||i(e,r);else for(let a in e){let c=e[a];typeof c=="string"?(o=this.has(c,""),o||i(c,"")):(o=this.has(c.key,c.value),o||i(c.key,c.value))}let n=s.length>0;if(s.length>0){let a=new Error("sumorApp.PERMISSION_DENIED");throw a.data={auth:s.join(",")},a}return n}}else throw new Error("sumorApp.LOGIN_EXPIRED")}async destroy(){this._id=null,await this.save()}async save(){this.req.sumor.cookie.t=this._id}},br=async t=>{t.use(async(e,r,o)=>{e.sumor.token=new et(e),t.sumor.meta.event.token&&(e.sumor.token.load=async()=>{await t.sumor.meta.event.token.program(e.sumor,e,r)},await e.sumor.token.load()),e.sumor.token.user&&e.sumor.db&&e.sumor.db.setUser(e.sumor.token.user),o()})};var Sr=async t=>{t.use(async(e,r,o)=>{let s=e.sumor.getLogger("DATABASE");e.sumor.db=await e.sumor.connectDB(s),o()})};var Ss=({title:t,code:e,desc:r,data:o})=>{let s=JSON.stringify(o,null,4);return`<html>
416
416
  <head>
417
417
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
418
418
  <style type="text/css">
@@ -481,11 +481,11 @@ function show(){
481
481
  }
482
482
  </script>
483
483
  </body>
484
- </html>`},et=class{constructor(e,r){this.req=e,this.res=r,this.respond=!1,this._changed=!1,this._hasError=!1,this._code="OK",this._message="",this._data=null}set code(e){let r=this.req.sumor.text(e,this._data);e&&r?(this._code=e,this._message=r):(this._code="sumorApp.NETWORK_ERROR",this._message=this.req.sumor.text(this._code))}get code(){return this._code}set message(e){this._message=e}get message(){return this._message}set data(e){this._data=e,this._changed=!0}get data(){return this._data}set changed(e){this._changed=e}get changed(){return this._changed}error(e){this.code=e,this._hasError=!0}end(){if(this._data!==void 0)try{this.res.send(this._data)}catch(e){if(e.code!=="ERR_HTTP_HEADERS_SENT")throw e}}send(){let e={code:this._code,message:this._message,data:this._data};if(this._hasError)try{this.res.status(500),this.req.accepts(["html","json"])==="html"?this.res.send(_s({title:"\u670D\u52A1\u5F02\u5E38\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",...e})):this.res.send(e)}catch(r){if(r.code!=="ERR_HTTP_HEADERS_SENT")throw r}else try{this.res.set("Content-Type","application/json;charset=utf-8"),this.res.send(e)}catch(r){if(r.code!=="ERR_HTTP_HEADERS_SENT")throw r}}},Sr=async t=>{t.use((e,r,o)=>{e.sumor.response=new et(e,r),o()})};import bs from"ali-oss";var tt={resize:{mode:"m",width:"w",height:"h",longer:"l",shorter:"s"},quality:{related:"q",absolute:"Q"},circle:{radius:"r"},blur:{radius:"r",size:"s"}},Ss=t=>{let e={};if(t.image){let r=[];for(let o in tt){let s=t.image[o];if(s){let i=[];i.push(o);for(let n in tt[o])s[n]&&i.push(`${tt[o][n]}_${s[n]}`);r.push(i.join(","))}}t.image.format&&r.push(`format,${t.image.format}`),t.image.orient&&r.push("auto-orient,1"),r.length>0&&(e.process=`image/${r.join("/")}`)}return e},rt=class{constructor(e){this.aliyunOSS=new bs(e)}async put(e,r){let o=await this.aliyunOSS.putStream(e,r);if(o.res.status>299){let s=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw s.data={msg:o.res},s}}async info(e,r){r=r||{};let o={},s,i;try{if(s=await this.aliyunOSS.get(e,{process:"image/info"}),r.color)try{let c=await this.aliyunOSS.get(e,{process:"image/average-hue"});if(c.content){let m=JSON.parse(c.content.toString());o.color=m.RGB.replace("0x","#")}}catch{}}catch(c){if(c.code!=="NoSuchKey")i=c.message;else return null}if(!i&&s&&s.res.status>299&&(i=s.res),i){let c=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw c.data={msg:i},c}let n=JSON.parse(s.content.toString()),a=c=>{if(n[c])return n[c].value};return o.format=a("Format"),o.size=a("FileSize"),o.height=a("ImageHeight"),o.height&&(o.height=parseInt(o.height,10)),o.width=a("ImageWidth"),o.width&&(o.width=parseInt(o.width,10)),o.make=a("LensMake"),o.model=a("LensModel"),o}async get(e,r){let o,s,i;try{s=await this.aliyunOSS.getStream(e,Ss(r))}catch(n){n.code!=="NoSuchKey"&&(i=n.message)}if(!i&&s&&s.res.status>299&&(i=s.res),i){let n=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw n.data={msg:i},n}return s&&(o=s.stream),o}async delete(e){let r=await this.aliyunOSS.delete(e);if(r.res.status>299){let o=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw o.data={msg:r.res},o}}async exists(e){let r=!0;try{await this.aliyunOSS.get(e)}catch(o){if(o.code==="NoSuchKey")r=!1;else throw new Error("sumorStorage.STORAGE_INSTANCE_ERROR")}return r}},Er=rt;import Y from"fs-extra";import vr from"path";var ot=class{constructor(e){this.config=e,this.root=vr.resolve(process.cwd(),this.config.path)}_getTargetPath(e){return vr.join(this.root,e)}async put(e,r){let o=this._getTargetPath(e);Y.ensureFileSync(o),await new Promise(s=>{let i=Y.createWriteStream(o,{encoding:"utf8",start:0});r.pipe(i),r.on("end",()=>{s()})})}async get(e){let r=this._getTargetPath(e);if(await Y.exists(r))return Y.createReadStream(r)}async delete(e){let r=this._getTargetPath(e);await Y.remove(r)}async exists(e){let r=this._getTargetPath(e);return await Y.exists(r)}},kr=ot;import Es from"crypto";var Tr=t=>{let e={},r=Es.createHash("md5"),o=0;return t.on("data",s=>{o+=s.length}),t.on("data",r.update.bind(r)),t.on("end",()=>{e.length=o,e.hash=r.digest("hex")}),e};var Z=class{constructor(e,r){if(this._logger=r,e)switch(e.type){case"aliyunOSS":this._instance=new Er(e);break;case"file":this._instance=new kr(e);break;default:break}}async put(e,r){if(r=$e(r),this._instance)try{let o=Tr(r),s=await this._instance.put(e,r);return o.response=s,o}catch{throw new Error("sumorStorage.STORAGE_FILE_SAVE_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async get(e,r){if(r=r||{},this._instance)try{let o=await this._instance.get(e,r);return await xe(o,r.type)}catch{throw new Error("sumorStorage.STORAGE_FILE_READ_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async delete(e){if(this._instance)try{return await this._instance.delete(e)}catch{throw new Error("sumorStorage.STORAGE_FILE_DELETE_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async info(e,r){if(this._instance)try{return await this._instance.info(e,r)}catch{throw new Error("sumorStorage.STORAGE_FILE_INFO_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async exists(e){if(this._instance)try{return await this._instance.exists(e)}catch{throw new Error("sumorStorage.STORAGE_FILE_INFO_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}};var Or=async t=>{let e=t.sumor.getLogger("STORAGE");t.sumor.storage=new Z(t.sumor.config.storage,e),t.use((r,o,s)=>{let i=r.sumor.getLogger("STORAGE");r.sumor.storage=new Z(t.sumor.config.storage,i),s()})};import vs from"@alicloud/sms-sdk";var st,X=class{constructor(e,r){this._config=e,this._logger=r||{error:console.log,debug:console.log,trace:console.log}}async send(e,r,o,s){let{signName:i,accessKeyId:n,secretAccessKey:a}=this._config;if(this._config&&!this._config.disable){switch(st||(st=new vs({accessKeyId:n,secretAccessKey:a})),r){case 86:if(!o.match(/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/))throw new Error("sumorSMS.MOBILE_FORMAT");break;default:throw await new Promise(c=>{setTimeout(()=>{c()},1e3)}),new Error("sumorSMS.MOBILE_PREFIX_NOT_SUPPORT")}try{await new Promise((c,m)=>{st.sendSMS({PhoneNumbers:o,SignName:i,TemplateCode:e,TemplateParam:JSON.stringify(s)}).then(l=>{let{Code:u}=l;u==="OK"?c():m(u)},l=>{l.data?m(l.data.Code):m(l)})})}catch(c){let m=new Error("sumorSMS.SMS_SEND_FAILED");throw m.data={msg:c},m}}else this._logger.error(`\u6D88\u606F\u53D1\u9001\u529F\u80FD\u4E0D\u53EF\u7528\u3002\u9700\u8981\u53D1\u9001\u6D88\u606F${e}\u7ED9${r} ${o}\uFF0C\u53C2\u6570${JSON.stringify(s)}`)}};var Nr=async t=>{if(t.sumor.config.sms){let e=t.sumor.getLogger("SMS");t.sumor.sms=new X(t.sumor.config.sms,e)}t.use((e,r,o)=>{if(t.sumor.config.sms){let s=e.sumor.getLogger("SMS");e.sumor.sms=new X(t.sumor.config.sms,s)}o()})};import it from"axios";import Os from"axios";import ks from"crypto";import Ts from"fs";var Oe=(t,e)=>{let r=`${process.cwd()}/${e.pay.privateKey}`,o=Ts.readFileSync(r,"utf8"),s=`${t.join(`
484
+ </html>`},tt=class{constructor(e,r){this.req=e,this.res=r,this.respond=!1,this._changed=!1,this._hasError=!1,this._code="OK",this._message="",this._data=null}set code(e){let r=this.req.sumor.text(e,this._data);e&&r?(this._code=e,this._message=r):(this._code="sumorApp.NETWORK_ERROR",this._message=this.req.sumor.text(this._code))}get code(){return this._code}set message(e){this._message=e}get message(){return this._message}set data(e){this._data=e,this._changed=!0}get data(){return this._data}set changed(e){this._changed=e}get changed(){return this._changed}error(e){this.code=e,this._hasError=!0}end(){if(this._data!==void 0)try{this.res.send(this._data)}catch(e){if(e.code!=="ERR_HTTP_HEADERS_SENT")throw e}}send(){let e={code:this._code,message:this._message,data:this._data};if(this._hasError)try{this.res.status(500),this.req.accepts(["html","json"])==="html"?this.res.send(Ss({title:"\u670D\u52A1\u5F02\u5E38\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",...e})):this.res.send(e)}catch(r){if(r.code!=="ERR_HTTP_HEADERS_SENT")throw r}else try{this.res.set("Content-Type","application/json;charset=utf-8"),this.res.send(e)}catch(r){if(r.code!=="ERR_HTTP_HEADERS_SENT")throw r}}},Er=async t=>{t.use((e,r,o)=>{e.sumor.response=new tt(e,r),o()})};import Es from"ali-oss";var rt={resize:{mode:"m",width:"w",height:"h",longer:"l",shorter:"s"},quality:{related:"q",absolute:"Q"},circle:{radius:"r"},blur:{radius:"r",size:"s"}},vs=t=>{let e={};if(t.image){let r=[];for(let o in rt){let s=t.image[o];if(s){let i=[];i.push(o);for(let n in rt[o])s[n]&&i.push(`${rt[o][n]}_${s[n]}`);r.push(i.join(","))}}t.image.format&&r.push(`format,${t.image.format}`),t.image.orient&&r.push("auto-orient,1"),r.length>0&&(e.process=`image/${r.join("/")}`)}return e},ot=class{constructor(e){this.aliyunOSS=new Es(e)}async put(e,r){let o=await this.aliyunOSS.putStream(e,r);if(o.res.status>299){let s=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw s.data={msg:o.res},s}}async info(e,r){r=r||{};let o={},s,i;try{if(s=await this.aliyunOSS.get(e,{process:"image/info"}),r.color)try{let c=await this.aliyunOSS.get(e,{process:"image/average-hue"});if(c.content){let m=JSON.parse(c.content.toString());o.color=m.RGB.replace("0x","#")}}catch{}}catch(c){if(c.code!=="NoSuchKey")i=c.message;else return null}if(!i&&s&&s.res.status>299&&(i=s.res),i){let c=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw c.data={msg:i},c}let n=JSON.parse(s.content.toString()),a=c=>{if(n[c])return n[c].value};return o.format=a("Format"),o.size=a("FileSize"),o.height=a("ImageHeight"),o.height&&(o.height=parseInt(o.height,10)),o.width=a("ImageWidth"),o.width&&(o.width=parseInt(o.width,10)),o.make=a("LensMake"),o.model=a("LensModel"),o}async get(e,r){let o,s,i;try{s=await this.aliyunOSS.getStream(e,vs(r))}catch(n){n.code!=="NoSuchKey"&&(i=n.message)}if(!i&&s&&s.res.status>299&&(i=s.res),i){let n=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw n.data={msg:i},n}return s&&(o=s.stream),o}async delete(e){let r=await this.aliyunOSS.delete(e);if(r.res.status>299){let o=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw o.data={msg:r.res},o}}async exists(e){let r=!0;try{await this.aliyunOSS.get(e)}catch(o){if(o.code==="NoSuchKey")r=!1;else throw new Error("sumorStorage.STORAGE_INSTANCE_ERROR")}return r}},vr=ot;import Y from"fs-extra";import kr from"path";var st=class{constructor(e){this.config=e,this.root=kr.resolve(process.cwd(),this.config.path)}_getTargetPath(e){return kr.join(this.root,e)}async put(e,r){let o=this._getTargetPath(e);Y.ensureFileSync(o),await new Promise(s=>{let i=Y.createWriteStream(o,{encoding:"utf8",start:0});r.pipe(i),r.on("end",()=>{s()})})}async get(e){let r=this._getTargetPath(e);if(await Y.exists(r))return Y.createReadStream(r)}async delete(e){let r=this._getTargetPath(e);await Y.remove(r)}async exists(e){let r=this._getTargetPath(e);return await Y.exists(r)}},Tr=st;import ks from"crypto";var Or=t=>{let e={},r=ks.createHash("md5"),o=0;return t.on("data",s=>{o+=s.length}),t.on("data",r.update.bind(r)),t.on("end",()=>{e.length=o,e.hash=r.digest("hex")}),e};var Z=class{constructor(e,r){if(this._logger=r,e)switch(e.type){case"aliyunOSS":this._instance=new vr(e);break;case"file":this._instance=new Tr(e);break;default:break}}async put(e,r){if(r=xe(r),this._instance)try{let o=Or(r),s=await this._instance.put(e,r);return o.response=s,o}catch{throw new Error("sumorStorage.STORAGE_FILE_SAVE_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async get(e,r){if(r=r||{},this._instance)try{let o=await this._instance.get(e,r);return await _e(o,r.type)}catch{throw new Error("sumorStorage.STORAGE_FILE_READ_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async delete(e){if(this._instance)try{return await this._instance.delete(e)}catch{throw new Error("sumorStorage.STORAGE_FILE_DELETE_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async info(e,r){if(this._instance)try{return await this._instance.info(e,r)}catch{throw new Error("sumorStorage.STORAGE_FILE_INFO_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async exists(e){if(this._instance)try{return await this._instance.exists(e)}catch{throw new Error("sumorStorage.STORAGE_FILE_INFO_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}};var Nr=async t=>{let e=t.sumor.getLogger("STORAGE");t.sumor.storage=new Z(t.sumor.config.storage,e),t.use((r,o,s)=>{let i=r.sumor.getLogger("STORAGE");r.sumor.storage=new Z(t.sumor.config.storage,i),s()})};import Ts from"@alicloud/sms-sdk";var it,X=class{constructor(e,r){this._config=e,this._logger=r||{error:console.log,debug:console.log,trace:console.log}}async send(e,r,o,s){let{signName:i,accessKeyId:n,secretAccessKey:a}=this._config;if(this._config&&!this._config.disable){switch(it||(it=new Ts({accessKeyId:n,secretAccessKey:a})),r){case 86:if(!o.match(/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/))throw new Error("sumorSMS.MOBILE_FORMAT");break;default:throw await new Promise(c=>{setTimeout(()=>{c()},1e3)}),new Error("sumorSMS.MOBILE_PREFIX_NOT_SUPPORT")}try{await new Promise((c,m)=>{it.sendSMS({PhoneNumbers:o,SignName:i,TemplateCode:e,TemplateParam:JSON.stringify(s)}).then(l=>{let{Code:u}=l;u==="OK"?c():m(u)},l=>{l.data?m(l.data.Code):m(l)})})}catch(c){let m=new Error("sumorSMS.SMS_SEND_FAILED");throw m.data={msg:c},m}}else this._logger.error(`\u6D88\u606F\u53D1\u9001\u529F\u80FD\u4E0D\u53EF\u7528\u3002\u9700\u8981\u53D1\u9001\u6D88\u606F${e}\u7ED9${r} ${o}\uFF0C\u53C2\u6570${JSON.stringify(s)}`)}};var Ir=async t=>{if(t.sumor.config.sms){let e=t.sumor.getLogger("SMS");t.sumor.sms=new X(t.sumor.config.sms,e)}t.use((e,r,o)=>{if(t.sumor.config.sms){let s=e.sumor.getLogger("SMS");e.sumor.sms=new X(t.sumor.config.sms,s)}o()})};import nt from"axios";import Is from"axios";import Os from"crypto";import Ns from"fs";var Ne=(t,e)=>{let r=`${process.cwd()}/${e.pay.privateKey}`,o=Ns.readFileSync(r,"utf8"),s=`${t.join(`
485
485
  `)}
486
- `;return ks.createSign("RSA-SHA256").update(s).sign(o,"base64")};var q=async(t,e)=>{let r="https://api.mch.weixin.qq.com",o=Math.floor(Date.now()/1e3),s=Math.random().toString(36).substr(2,15),i=Oe([t.method.toUpperCase(),t.url,o,s,t.body],e),n={"Content-Type":"application/json",Accept:"application/json",Authorization:`WECHATPAY2-SHA256-RSA2048 mchid="${e.pay.mchId}",nonce_str="${s}",signature="${i}",timestamp="${o}",serial_no="${e.pay.serialNo}"`};try{return(await Os({method:t.method.toUpperCase(),url:r+t.url,data:t.body,headers:n})).data}catch(a){throw a.response}};var Ir=async(t,e)=>{t.desc=t.desc||"\u865A\u62DF\u5546\u54C1";let r={method:"POST",url:"/v3/pay/transactions/jsapi",body:JSON.stringify({appid:e.key,mchid:e.pay.mchId,description:t.desc,out_trade_no:t.id,notify_url:e.pay.notifyUrl,amount:{total:Math.round(t.amount*100),currency:"CNY"},payer:{openid:t.openId}})};return(await q(r,e)).prepay_id};async function Cr(t,e){return await q({method:"POST",url:`/v3/pay/transactions/out-trade-no/${t}/close`,body:JSON.stringify({mchid:e.pay.mchId,out_trade_no:t})},e)}async function Rr(t,e){let r;try{r=await q({method:"GET",url:`/v3/pay/transactions/out-trade-no/${t}?mchid=${e.pay.mchId}`},e)}catch(o){if(o.status===404)r={trade_state:"NOTPAY"};else throw o}return r}var ce={order:Ir,close:Cr,check:Rr,sign:Oe};var Dr=30*60*1e3,Q=class{constructor(e,r,o){this._config=e,this._cache=r,this._name=e.name||"",this._logger=o,this._updatingToken=!1,e.pay&&(this.pay={order(s){return ce.order(s,e)},close(s){return ce.close(s,e)},check(s){return ce.check(s,e)},sign(s){return ce.sign(s,e)}})}async call(e,r){let o;try{r?o=await it.post(e,r):o=await it.get(e)}catch(i){let n=new Error("WECHAT_API_FAILED");throw n.data={msg:`\u5FAE\u4FE1\u670D\u52A1\u5668\u8FDE\u63A5\u5931\u8D25\uFF1A${i.message}`},n}if(!o.data.errcode)return o.data;this._logger.error();let s=new Error("WECHAT_ERROR");throw s.data={msg:o.data.errmsg},s}async init(e){this._app=e,this._logger.info(`\u5FAE\u4FE1\u6821\u9A8C\u6587\u4EF6\u5DF2\u542F\u52A8 /MP_verify_${this._config.verifyCode}.txt`),e.get(`/MP_verify_${this._config.verifyCode}.txt`,(r,o)=>{o.send(this._config.verifyCode)}),await this.getToken(),setInterval(()=>{this._logger.trace("\u5F00\u59CB\u68C0\u67E5\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u662F\u5426\u8FC7\u671F"),this.getToken(),this._logger.trace("\u68C0\u67E5\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u5DF2\u5B8C\u6210")},60*1e3)}async getToken(){let e=async()=>{let o=await this._cache.get("wechatAccessToken",this._name);return o&&(o=JSON.parse(o)),o=o||{},o.time=o.time||0,o},r=await e();return Date.now()-r.time>Dr&&(await this._refreshToken(),r=await e()),(!r||!r.token||Date.now()-r.time>Dr)&&this._logger.error("\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u66F4\u65B0\u5931\u8D25"),r.token}async reloadUsers(){let e="",r,o=0,s=[],i=async()=>{let a=await this.list(e);r||(r=a.total),o+=a.count,s=s.concat(a.data.openid),o<r&&(e=a.next_openid,await i())};await i();let n=[];for(let a of s)n.push(await this.detail(a));return n}async list(e){e=e||"";let o=`https://api.weixin.qq.com/cgi-bin/user/get?access_token=${await this.getToken()}&next_openid=${e}`;return await this.call(o)}async detail(e){let o=`https://api.weixin.qq.com/cgi-bin/user/info?access_token=${await this.getToken()}&openid=${e}`;return await this.call(o)}async sendTemplateMessage(e,r,o,s){let i=await this.getToken(),n={};for(let c in s)n[c]={value:s[c]};let a=`https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${i}`;try{await this.call(a,{touser:e,template_id:r,url:o,data:n}),this._logger.debug(`\u6A21\u7248\u6D88\u606F\u5DF2\u53D1\u9001\u7ED9${e}\uFF0C\u6A21\u7248${r}\uFF0C\u6570\u636E${JSON.stringify(s)}`)}catch(c){this._logger.error(`\u7ED9${e}\u7684\u6A21\u7248\u6D88\u606F\u53D1\u9001\u5931\u8D25\uFF0C\u6A21\u7248${r}\uFF0C\u6570\u636E${JSON.stringify(s)}`),this._logger.error(c)}}async updateMenu(e){let r=await this.getToken();await this.call(`https://api.weixin.qq.com/cgi-bin/menu/create?access_token=${r}`,e)}async _refreshToken(){if(!this._updatingToken){this._updatingToken=!0,this._logger.info("\u6B63\u5728\u66F4\u65B0\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1");let e=`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${this._config.key}&secret=${this._config.secret}`,r=await it.get(e);if(r.status===200){let o={};r.data.access_token?(o.token=r.data.access_token,o.time=Date.now(),this._logger.trace(`\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1: ${o.token}`),this._logger.info("\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u5DF2\u66F4\u65B0"),await this._cache.set("wechatAccessToken",this._name,JSON.stringify(o))):this._logger.error(r.data)}else this._logger.error(r.data);this._updatingToken=!1}}};var Ar=async t=>{if(t.sumor.config.wechat){let e=t.sumor.getLogger("WECHAT");e.debug("\u5FAE\u4FE1\u670D\u52A1\u5668\u6B63\u5728\u542F\u52A8");let r;t.sumor.config.wechat.cache?r=(await Te(t.sumor.config.wechat.cache,e))(e):r=t.sumor.cache,e.trace(`\u5FAE\u4FE1\u670D\u52A1\u5668\u914D\u7F6E\u4FE1\u606F ${JSON.stringify(t.sumor.config.wechat)}`),t.sumor.wechat=new Q(t.sumor.config.wechat,r,e),await t.sumor.wechat.init(t),e.debug("\u5FAE\u4FE1\u670D\u52A1\u5668\u5DF2\u542F\u52A8"),t.use((o,s,i)=>{let n=o.sumor.getLogger("WECHAT");o.sumor.wechat=new Q(t.sumor.config.wechat,n),i()})}};var Lr=async t=>{await Qt(t),await Sr(t),await er(t),await rr(t),await or(t),await sr(t),await Ee(t),await mr(t),await lr(t),await ur(t),await xr(t),await br(t),await _r(t),await Or(t),await Nr(t),await Ar(t)};var Fr=(t,e,r)=>{let o=`/${t.replace(/\./g,"/")}`,s=`${e.sumor.root}/tmp/uploads`,i=e.uploader(e.sumor.meta.api[t].parameters);return i?e.all(o,i,(n,a,c)=>{let m={};if(n.files)for(let l in n.files){let u=[];for(let p in n.files[l])u.push({name:n.files[l][p].originalname,size:n.files[l][p].size,mime:n.files[l][p].mimetype,encoding:n.files[l][p].encoding,path:`${s}/${n.files[l][p].filename}`});m[l]=u}Object.assign(n.sumor.data,m),c()},r):e.all(o,(n,a,c)=>{c()},r),!!i};var Pr=(t,e)=>{for(let r in e.parameters){let o=e.parameters[r];switch(o.default!==void 0&&(o.type==="string"?(t[r]===null||t[r]===void 0||t[r]==="")&&(t[r]=o.default):(t[r]===null||t[r]===void 0)&&(t[r]=o.default)),o.type){case"string":t[r]!==null&&t[r]!==void 0&&typeof t[r]!="string"&&(t[r]=t[r].toString());break;case"number":typeof t[r]!="number"&&t[r]!==null&&t[r]!==void 0&&(typeof t[r]=="string"?(t[r]=parseFloat(t[r]),isNaN(t[r])&&(t[r]=null)):delete t[r]);break;default:break}if(t[r]&&(o.trim&&(t[r]=t[r].trim()),o.upperCase&&(t[r]=t[r].toUpperCase()),o.lowerCase&&(t[r]=t[r].toLowerCase())),o.required===!0&&(t[r]===void 0||t[r]===null||t[r]===""))throw new Error("sumorApp.REQUIRED");if(o.length&&t[r]&&t[r].length>o.length){let s=new Error("sumorApp.LENGTH_OUT_OF_LIMIT");throw s.data={length:o.length},s}for(let s of o.rule)if(!new RegExp(s.expression).test(t[r]))throw new Error(s.text)}return t};var jr=async t=>{let e=Object.keys(t.sumor.meta.api);e.sort((r,o)=>r>o?1:-1);for(let r of e){let o=`/${r.replace(/\./g,"/")}`,i=Fr(r,t,async function(n,a,c){n.sumor.meta=t.sumor.meta,n.sumor.cors=!0,n.sumor.response.changed=!0,t.sumor.meta.event.context&&await t.sumor.meta.event.context.program(n.sumor,n,a);try{let m=t.sumor.meta.api[r];n.sumor.data=Pr(n.sumor.data,m);let l=await m.program(n.sumor,n,a);n.sumor.response.data=l||n.sumor.response.data,await n.sumor.db.commit()}catch(m){try{await n.sumor.db.rollback()}catch{}n.sumor.response.error(m.message);let l="";m instanceof Error&&(l=t.sumor.text(m.message)),n.sumor.logger.debug(`\u5916\u90E8\u8BF7\u6C42\u51FA\u9519\uFF1A${m.message} ${l}`),n.sumor.logger.trace(m)}c()});t.sumor.exposeApis[o]={name:t.sumor.meta.api[r].name||"",desc:t.sumor.meta.api[r].desc||"",parameters:t.sumor.meta.api[r].parameters||{}},t.sumor.logger.info(`\u63A5\u53E3\u5DF2\u5C31\u7EEA\uFF1A${o}${i?" (\u5141\u8BB8\u6587\u4EF6\u4E0A\u4F20)":""}`)}t.sumor.logger.info("\u6240\u6709\u63A5\u53E3\u5DF2\u5C31\u7EEA")};import{createProxyMiddleware as Ls}from"http-proxy-middleware";var Mr=t=>{t.use((e,r,o)=>{e.sumor.cors&&(r.header("Access-Control-Allow-Origin","*"),r.header("Access-Control-Allow-Headers","X-Requested-With"),r.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS")),o()})};import Ns from"fs-extra";var Ur=t=>{t.use(async(e,r,o)=>{if(e.files){let s=`${t.sumor.root}/tmp/uploads`;for(let i in e.files)for(let n in e.files[i]){let a=`${s}/${e.files[i][n].filename}`;await Ns.remove(a)}}o()})};var zr=t=>{t.use((e,r,o)=>{e.sumor.saveCookie(),e.sumor.response.respond?e.sumor.response.end():e.sumor.response.changed?e.sumor.response.send():o()})};import nt from"fs-extra";import Br from"node:path";import Is from"serve-static";import Cs from"fs";import{pathToFileURL as Rs}from"url";var Hr=async t=>{let e="/",r=Br.resolve(process.cwd(),"./output/web");if(await nt.exists(r)){let o=await nt.readFile(`${r}/client/index.html`,"utf-8"),s=JSON.parse(await nt.readFile(`${r}/client/ssr-manifest.json`,"utf-8"));t.use(e,Is(`${r}/client`,{index:!1}));let i;try{let n=Br.resolve(r,"./server/entry-server.js");Cs.existsSync(n)&&(i=await import(Rs(n)),i=i.render)}catch(n){Ee.error("ssrServerEntry load failed",n.stack)}t.use("*",async(n,a)=>{try{let c=n.originalUrl.replace(e,"/"),m=n.sumor.ssrContext,[l,u]=await i(c,s,m),p=`<title>${m.pageInfo.title}</title>
486
+ `;return Os.createSign("RSA-SHA256").update(s).sign(o,"base64")};var q=async(t,e)=>{let r="https://api.mch.weixin.qq.com",o=Math.floor(Date.now()/1e3),s=Math.random().toString(36).substr(2,15),i=Ne([t.method.toUpperCase(),t.url,o,s,t.body],e),n={"Content-Type":"application/json",Accept:"application/json",Authorization:`WECHATPAY2-SHA256-RSA2048 mchid="${e.pay.mchId}",nonce_str="${s}",signature="${i}",timestamp="${o}",serial_no="${e.pay.serialNo}"`};try{return(await Is({method:t.method.toUpperCase(),url:r+t.url,data:t.body,headers:n})).data}catch(a){throw a.response}};var Cr=async(t,e)=>{t.desc=t.desc||"\u865A\u62DF\u5546\u54C1";let r={method:"POST",url:"/v3/pay/transactions/jsapi",body:JSON.stringify({appid:e.key,mchid:e.pay.mchId,description:t.desc,out_trade_no:t.id,notify_url:e.pay.notifyUrl,amount:{total:Math.round(t.amount*100),currency:"CNY"},payer:{openid:t.openId}})};return(await q(r,e)).prepay_id};async function Rr(t,e){return await q({method:"POST",url:`/v3/pay/transactions/out-trade-no/${t}/close`,body:JSON.stringify({mchid:e.pay.mchId,out_trade_no:t})},e)}async function Dr(t,e){let r;try{r=await q({method:"GET",url:`/v3/pay/transactions/out-trade-no/${t}?mchid=${e.pay.mchId}`},e)}catch(o){if(o.status===404)r={trade_state:"NOTPAY"};else throw o}return r}var me={order:Cr,close:Rr,check:Dr,sign:Ne};var Ar=30*60*1e3,Q=class{constructor(e,r,o){this._config=e,this._cache=r,this._name=e.name||"",this._logger=o,this._updatingToken=!1,e.pay&&(this.pay={order(s){return me.order(s,e)},close(s){return me.close(s,e)},check(s){return me.check(s,e)},sign(s){return me.sign(s,e)}})}async call(e,r){let o;try{r?o=await nt.post(e,r):o=await nt.get(e)}catch(i){let n=new Error("WECHAT_API_FAILED");throw n.data={msg:`\u5FAE\u4FE1\u670D\u52A1\u5668\u8FDE\u63A5\u5931\u8D25\uFF1A${i.message}`},n}if(!o.data.errcode)return o.data;this._logger.error();let s=new Error("WECHAT_ERROR");throw s.data={msg:o.data.errmsg},s}async init(e){this._app=e,this._logger.info(`\u5FAE\u4FE1\u6821\u9A8C\u6587\u4EF6\u5DF2\u542F\u52A8 /MP_verify_${this._config.verifyCode}.txt`),e.get(`/MP_verify_${this._config.verifyCode}.txt`,(r,o)=>{o.send(this._config.verifyCode)}),await this.getToken(),setInterval(()=>{this._logger.trace("\u5F00\u59CB\u68C0\u67E5\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u662F\u5426\u8FC7\u671F"),this.getToken(),this._logger.trace("\u68C0\u67E5\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u5DF2\u5B8C\u6210")},60*1e3)}async getToken(){let e=async()=>{let o=await this._cache.get("wechatAccessToken",this._name);return o&&(o=JSON.parse(o)),o=o||{},o.time=o.time||0,o},r=await e();return Date.now()-r.time>Ar&&(await this._refreshToken(),r=await e()),(!r||!r.token||Date.now()-r.time>Ar)&&this._logger.error("\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u66F4\u65B0\u5931\u8D25"),r.token}async reloadUsers(){let e="",r,o=0,s=[],i=async()=>{let a=await this.list(e);r||(r=a.total),o+=a.count,s=s.concat(a.data.openid),o<r&&(e=a.next_openid,await i())};await i();let n=[];for(let a of s)n.push(await this.detail(a));return n}async list(e){e=e||"";let o=`https://api.weixin.qq.com/cgi-bin/user/get?access_token=${await this.getToken()}&next_openid=${e}`;return await this.call(o)}async detail(e){let o=`https://api.weixin.qq.com/cgi-bin/user/info?access_token=${await this.getToken()}&openid=${e}`;return await this.call(o)}async sendTemplateMessage(e,r,o,s){let i=await this.getToken(),n={};for(let c in s)n[c]={value:s[c]};let a=`https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${i}`;try{await this.call(a,{touser:e,template_id:r,url:o,data:n}),this._logger.debug(`\u6A21\u7248\u6D88\u606F\u5DF2\u53D1\u9001\u7ED9${e}\uFF0C\u6A21\u7248${r}\uFF0C\u6570\u636E${JSON.stringify(s)}`)}catch(c){this._logger.error(`\u7ED9${e}\u7684\u6A21\u7248\u6D88\u606F\u53D1\u9001\u5931\u8D25\uFF0C\u6A21\u7248${r}\uFF0C\u6570\u636E${JSON.stringify(s)}`),this._logger.error(c)}}async updateMenu(e){let r=await this.getToken();await this.call(`https://api.weixin.qq.com/cgi-bin/menu/create?access_token=${r}`,e)}async _refreshToken(){if(!this._updatingToken){this._updatingToken=!0,this._logger.info("\u6B63\u5728\u66F4\u65B0\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1");let e=`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${this._config.key}&secret=${this._config.secret}`,r=await nt.get(e);if(r.status===200){let o={};r.data.access_token?(o.token=r.data.access_token,o.time=Date.now(),this._logger.trace(`\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1: ${o.token}`),this._logger.info("\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u5DF2\u66F4\u65B0"),await this._cache.set("wechatAccessToken",this._name,JSON.stringify(o))):this._logger.error(r.data)}else this._logger.error(r.data);this._updatingToken=!1}}};var Lr=async t=>{if(t.sumor.config.wechat){let e=t.sumor.getLogger("WECHAT");e.debug("\u5FAE\u4FE1\u670D\u52A1\u5668\u6B63\u5728\u542F\u52A8");let r;t.sumor.config.wechat.cache?r=(await Oe(t.sumor.config.wechat.cache,e))(e):r=t.sumor.cache,e.trace(`\u5FAE\u4FE1\u670D\u52A1\u5668\u914D\u7F6E\u4FE1\u606F ${JSON.stringify(t.sumor.config.wechat)}`),t.sumor.wechat=new Q(t.sumor.config.wechat,r,e),await t.sumor.wechat.init(t),e.debug("\u5FAE\u4FE1\u670D\u52A1\u5668\u5DF2\u542F\u52A8"),t.use((o,s,i)=>{let n=o.sumor.getLogger("WECHAT");o.sumor.wechat=new Q(t.sumor.config.wechat,n),i()})}};var Fr=async t=>{await er(t),await Er(t),await tr(t),await or(t),await sr(t),await ir(t),await ve(t),await lr(t),await ur(t),await fr(t),await _r(t),await Sr(t),await br(t),await Nr(t),await Ir(t),await Lr(t)};var Pr=(t,e,r)=>{let o=`/${t.replace(/\./g,"/")}`,s=`${e.sumor.root}/tmp/uploads`,i=e.uploader(e.sumor.meta.api[t].parameters);return i?e.all(o,i,(n,a,c)=>{let m={};if(n.files)for(let l in n.files){let u=[];for(let p in n.files[l])u.push({name:n.files[l][p].originalname,size:n.files[l][p].size,mime:n.files[l][p].mimetype,encoding:n.files[l][p].encoding,path:`${s}/${n.files[l][p].filename}`});m[l]=u}Object.assign(n.sumor.data,m),c()},r):e.all(o,(n,a,c)=>{c()},r),!!i};var jr=(t,e)=>{for(let r in e.parameters){let o=e.parameters[r];switch(o.default!==void 0&&(o.type==="string"?(t[r]===null||t[r]===void 0||t[r]==="")&&(t[r]=o.default):(t[r]===null||t[r]===void 0)&&(t[r]=o.default)),o.type){case"string":t[r]!==null&&t[r]!==void 0&&typeof t[r]!="string"&&(t[r]=t[r].toString());break;case"number":typeof t[r]!="number"&&t[r]!==null&&t[r]!==void 0&&(typeof t[r]=="string"?(t[r]=parseFloat(t[r]),isNaN(t[r])&&(t[r]=null)):delete t[r]);break;default:break}if(t[r]&&(o.trim&&(t[r]=t[r].trim()),o.upperCase&&(t[r]=t[r].toUpperCase()),o.lowerCase&&(t[r]=t[r].toLowerCase())),o.required===!0&&(t[r]===void 0||t[r]===null||t[r]===""))throw new Error("sumorApp.REQUIRED");if(o.length&&t[r]&&t[r].length>o.length){let s=new Error("sumorApp.LENGTH_OUT_OF_LIMIT");throw s.data={length:o.length},s}for(let s of o.rule)if(!new RegExp(s.expression).test(t[r]))throw new Error(s.text)}return t};var Mr=async t=>{let e=Object.keys(t.sumor.meta.api);e.sort((r,o)=>r>o?1:-1);for(let r of e){let o=`/${r.replace(/\./g,"/")}`,i=Pr(r,t,async function(n,a,c){n.sumor.meta=t.sumor.meta,n.sumor.cors=!0,n.sumor.response.changed=!0,t.sumor.meta.event.context&&await t.sumor.meta.event.context.program(n.sumor,n,a);try{let m=t.sumor.meta.api[r];n.sumor.data=jr(n.sumor.data,m);let l=await m.program(n.sumor,n,a);n.sumor.response.data=l||n.sumor.response.data,await n.sumor.db.commit()}catch(m){try{await n.sumor.db.rollback()}catch{}n.sumor.response.error(m.message);let l="";m instanceof Error&&(l=t.sumor.text(m.message)),n.sumor.logger.debug(`\u5916\u90E8\u8BF7\u6C42\u51FA\u9519\uFF1A${m.message} ${l}`),n.sumor.logger.trace(m)}c()});t.sumor.exposeApis[o]={name:t.sumor.meta.api[r].name||"",desc:t.sumor.meta.api[r].desc||"",parameters:t.sumor.meta.api[r].parameters||{}},t.sumor.logger.info(`\u63A5\u53E3\u5DF2\u5C31\u7EEA\uFF1A${o}${i?" (\u5141\u8BB8\u6587\u4EF6\u4E0A\u4F20)":""}`)}t.sumor.logger.info("\u6240\u6709\u63A5\u53E3\u5DF2\u5C31\u7EEA")};import{createProxyMiddleware as Ps}from"http-proxy-middleware";var Ur=t=>{t.use((e,r,o)=>{e.sumor.cors&&(r.header("Access-Control-Allow-Origin","*"),r.header("Access-Control-Allow-Headers","X-Requested-With"),r.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS")),o()})};import Cs from"fs-extra";var zr=t=>{t.use(async(e,r,o)=>{if(e.files){let s=`${t.sumor.root}/tmp/uploads`;for(let i in e.files)for(let n in e.files[i]){let a=`${s}/${e.files[i][n].filename}`;await Cs.remove(a)}}o()})};var Br=t=>{t.use((e,r,o)=>{e.sumor.saveCookie(),e.sumor.response.respond?e.sumor.response.end():e.sumor.response.changed?e.sumor.response.send():o()})};import at from"fs-extra";import Hr from"node:path";import Rs from"serve-static";import Ds from"fs";import{pathToFileURL as As}from"url";var Gr=async t=>{let e="/",r=Hr.resolve(process.cwd(),"./output/web");if(await at.exists(r)){let o=await at.readFile(`${r}/client/index.html`,"utf-8"),s=JSON.parse(await at.readFile(`${r}/client/ssr-manifest.json`,"utf-8"));t.use(e,Rs(`${r}/client`,{index:!1}));let i;try{let n=Hr.resolve(r,"./server/entry-server.js");Ds.existsSync(n)&&(i=await import(As(n)),i=i.render)}catch(n){ve.error("ssrServerEntry load failed",n.stack)}t.use("*",async(n,a)=>{try{let c=n.originalUrl.replace(e,"/"),m=n.sumor.ssrContext,[l,u]=await i(c,s,m),p=`<title>${m.pageInfo.title}</title>
487
487
  <meta name="description" content="${m.pageInfo.description}" />
488
- <meta name="keywords" content="${m.pageInfo.keywords}" />`,d=o.replace("<!--app-page-info-->",p).replace("<!--preload-links-->",u).replace("<!--app-html-->",l);a.status(200).set({"Content-Type":"text/html"}).end(d)}catch(c){console.log(c.stack),a.status(500).end(c.stack)}})}};import Ds from"compression";import As from"zlib";import Gr from"serve-static";import Jr from"fs-extra";var Wr=async t=>{let e=`${t.sumor.root}/static`,r=`${H}/template/public`;t.use(Ds({filter(){return!0},flush:As.Z_SYNC_FLUSH})),await Jr.exists(r)&&t.use(Gr(r)),await Jr.exists(e)&&t.use(Gr(e))};var Vr=async t=>{await Mr(t),await Ur(t),await zr(t),await Wr(t),t.sumor.mode==="development"&&t.use("*",Ls({target:t.sumor.uiOrigin,changeOrigin:!0,ws:!0,logProvider:function(r){let o=s=>{};return{log:o,debug:o,info:o,warn:o,error:o}}})),(t.sumor.mode==="production"||t.sumor.mode==="preview")&&await Hr(t)};import Kr from"http";import Fs from"https";import"spdy";var Ne=t=>{let e=[];return t.on("connection",o=>{e.push(o),o.once("close",()=>{e.splice(e.indexOf(o),1)})}),async()=>await new Promise(o=>{e.forEach(s=>{s.destroy()}),t.close(()=>{o()})})};var Yr=async t=>{let e=t.sumor.port;if(t.sumor.protocol==="https"){let r;if(e===443){let i=Kr.createServer((n,a)=>{let c=`https://${n.headers.host}${n.url}`;a.writeHead(301,{Location:c}),a.end()});r=await new Promise(n=>{i.listen(80,()=>{n(Ne(i))})}),t.sumor.logger.info("http\u670D\u52A1\u5DF2\u542F\u52A8\uFF0C\u8BBF\u95EE\u5C06\u8DF3\u8F6C\u81F3https")}let o;o=Fs.createServer({...t.sumor.ssl},t),o.on("error",i=>{t.sumor.logger.error(i)});let s=await new Promise(i=>{o.listen(e,()=>{i(Ne(o))})});t.sumor.close=async()=>{t.sumor.logger.info("\u6B63\u5728\u7EC8\u6B62\u7F51\u9875\u670D\u52A1"),r&&await r(),await s(),t.sumor.logger.info("\u7F51\u9875\u670D\u52A1\u5DF2\u505C\u6B62\u8FD0\u884C")}}else{let r=Kr.createServer(t),o=await new Promise(s=>{r.listen(e,()=>{s(Ne(r))})});t.sumor.close=async()=>{t.sumor.logger.info("\u6B63\u5728\u7EC8\u6B62\u7F51\u9875\u670D\u52A1"),await o(),t.sumor.logger.info("\u7F51\u9875\u670D\u52A1\u5DF2\u505C\u6B62\u8FD0\u884C")}}};var Zr=async t=>{let e=Ps();e.disable("x-powered-by"),e.sumor=t,e.sumor.app=e,e.use((r,o,s)=>{r.sumor=t.getContext(),r.sumor.ssrContext={pageInfo:{title:"",description:"",keywords:""}},r.sumor.cors=!1,s()}),await Lr(e),e.use((r,o,s)=>{r.sumor.logger.trace(`\u4F1A\u8BDD\u4EA4\u4E92\u5BF9\u8C61: ${Object.keys(r.sumor).join(", ")}`),s()}),e.sumor.logger.debug("\u524D\u7F6E\u4E2D\u95F4\u4EF6\u52A0\u8F7D\u5B8C\u6210"),e.sumor.meta.event.setup&&await e.sumor.meta.event.setup.program(e.sumor),e.sumor.meta.event.prepare&&await e.sumor.meta.event.prepare.program(e.sumor),await jr(e),e.sumor.logger.debug("\u5904\u7406\u7A0B\u5E8F\u52A0\u8F7D\u5B8C\u6210"),e.sumor.meta.event.serve&&await e.sumor.meta.event.serve.program(e.sumor),await Vr(e),e.sumor.logger.debug("\u540E\u7F6E\u4E2D\u95F4\u4EF6\u52A0\u8F7D\u5B8C\u6210"),await Yr(e),e.sumor.meta.event.served&&await e.sumor.meta.event.served.program(e.sumor),e.sumor.logger.info(`\u5E94\u7528\u5DF2\u8FD0\u884C\u5728 ${e.sumor.origin}`),e.sumor.mode==="production"&&process.on("uncaughtException",r=>{e.sumor.logger.error("\u672A\u6355\u6349\u9519\u8BEF"),e.sumor.logger.error(r)})};import"fs-extra";import{execSync as Xr}from"child_process";var qr=async t=>{await he(t,!0);let e="vite build --ssrManifest --outDir ../../output/web/client --config tmp/web/vite.config.js --emptyOutDir",r="vite build --ssr src/entry-server.js --outDir ../../output/web/server --config tmp/web/vite.config.js --emptyOutDir";await Xr(e,{stdio:"inherit"}),await Xr(r,{stdio:"inherit"})};var Qr=async t=>{let e=t.config.database,r=t.getLogger("DATABASE");await ke.install({config:e,logger:r,entity:t.meta.entity,view:t.meta.view})};var T=async t=>{t=t||{};let e=await Xt(t);e.logger.info(`\u65E5\u5FD7\u8BB0\u5F55\u7EA7\u522B\uFF1A${e.logLevel.toUpperCase()}`),e.logger.info(`\u8FD0\u884C\u6A21\u5F0F\uFF1A${e.mode.toUpperCase()}`),e.logger.trace(`\u5168\u5C40\u4EA4\u4E92\u5BF9\u8C61: ${Object.keys(e).join(", ")}`),e.logger.trace(`\u914D\u7F6E\u4FE1\u606F: ${JSON.stringify(e.config,null,4)}`),e.mode==="development"&&(e.logger.info("\u5F00\u59CB\u51C6\u5907\u5F00\u53D1\u73AF\u5883"),await bt(e),e.logger.info("\u5F00\u53D1\u73AF\u5883\u51C6\u5907\u5B8C\u6210")),(e.mode==="build"||e.mode==="preview")&&(e.logger.info("\u5F00\u59CB\u751F\u6210\u751F\u4EA7\u4EE3\u7801"),await qr(e),e.logger.info("\u751F\u4EA7\u4EE3\u7801\u751F\u6210\u5B8C\u6BD5")),e.mode==="setup"&&(e.logger.info("\u5F00\u59CB\u90E8\u7F72\u6570\u636E\u5E93"),await Qr(e),e.logger.info("\u90E8\u7F72\u6570\u636E\u5E93\u5B8C\u6210")),(e.mode==="development"||e.mode==="preview"||e.mode==="production")&&(e.logger.info("\u5F00\u59CB\u542F\u52A8\u5BF9\u5916\u670D\u52A1"),await Zr(e),e.logger.info("\u5BF9\u5916\u670D\u52A1\u542F\u52A8\u5B8C\u6210"))};var Ie=async()=>{await T("development")};import U from"fs-extra";import io from"node:path";var eo=(t,e)=>{let r={name:t.name,type:"module",bin:t.bin,main:"./index.umd.cjs",module:"./index.es.js",exports:{".":{import:"./index.es.js",require:"./index.umd.cjs"}},dependencies:t.dependencies};return e&&(r.main="./index.es.js",delete r.exports["."].require),r};import js from"fs-extra";import{build as Ms,defineConfig as Us}from"vite";import zs from"@vitejs/plugin-vue";import to from"node:path";var at=t=>t&&(t=t.replace(/\//g,"-"),t=t.replace(/@/g,""),t=t.replace(/(\w)/,e=>e.toUpperCase()),t.replace(/-(\w)/g,(e,r)=>r?r.toUpperCase():""));var ro=async t=>{let e={},r=Object.keys(t.pkg.dependencies||{});for(let i=0;i<r.length;i+=1)e[r[i]]=at(r[i]);let o=at(t.pkg.name)||"MyLib",s={mode:t.mode,root:process.cwd(),base:"/",plugins:[],build:{emptyOutDir:!1,sourcemap:t.mode==="development"?"inline":!1,outDir:t.output,lib:{entry:t.entry,name:o},rollupOptions:{external:r,output:{globals:e}}}};s.build.lib.fileName=i=>`index.${i}.js`,s.plugins.push(zs()),await Ms(Us(s)),await js.move(to.join(t.output,"./index.umd.js"),to.join(t.output,"./index.umd.cjs"))};import*as oo from"esbuild";var so=async t=>{let e=Object.keys(t.pkg.dependencies||{});await oo.build({format:"esm",entryPoints:[t.entry],minify:t.mode==="production",keepNames:t.mode==="development",bundle:!0,platform:"node",outfile:`${t.output}/index.es.js`,external:e,sourcemap:t.mode==="development"?"inline":!1})};var ct=async t=>{let e=t.root||process.cwd(),r=t.entry||io.resolve(e,"./src/index.js"),o=t.mode||"production",s=t.output||io.resolve(e,"./output",`./${o}`),i=!!t.node;await U.remove(s),await U.ensureDir(s),await U.exists(`${e}/static`)&&await U.copy(`${e}/static`,s);let n=await U.readJson(`${e}/package.json`);i?await so({mode:o,entry:r,output:s,pkg:n}):await ro({mode:o,entry:r,output:s,pkg:n});let a=await eo(n,i);return await U.ensureFile(`${s}/package.json`),await U.writeFile(`${s}/package.json`,JSON.stringify(a,null,4)),{name:n.name}};var Ce=async t=>{let e=!!t.debug,r=t.type||"app",o=e?"development":"production";switch(r){case"vue":await ct({mode:o});break;case"node":await ct({mode:o,node:!0});break;default:await T({mode:"build"});break}};var Re=async()=>{await T("setup")};var De=async()=>{await T("preview")};var Ae=async()=>{await T("production")};import{Command as ni}from"commander";import ai from"fs-extra";var no=(t,e)=>{console.log(`
488
+ <meta name="keywords" content="${m.pageInfo.keywords}" />`,d=o.replace("<!--app-page-info-->",p).replace("<!--preload-links-->",u).replace("<!--app-html-->",l);a.status(200).set({"Content-Type":"text/html"}).end(d)}catch(c){console.log(c.stack),a.status(500).end(c.stack)}})}};import Ls from"compression";import Fs from"zlib";import Jr from"serve-static";import Wr from"fs-extra";var Vr=async t=>{let e=`${t.sumor.root}/static`,r=`${H}/template/public`;t.use(Ls({filter(){return!0},flush:Fs.Z_SYNC_FLUSH})),await Wr.exists(r)&&t.use(Jr(r)),await Wr.exists(e)&&t.use(Jr(e))};var Kr=async t=>{await Ur(t),await zr(t),await Br(t),await Vr(t),t.sumor.mode==="development"&&t.use("*",Ps({target:t.sumor.uiOrigin,changeOrigin:!0,ws:!0,logProvider:function(r){let o=s=>{};return{log:o,debug:o,info:o,warn:o,error:o}}})),(t.sumor.mode==="production"||t.sumor.mode==="preview")&&await Gr(t)};import Yr from"http";import js from"https";import"spdy";var Ie=t=>{let e=[];return t.on("connection",o=>{e.push(o),o.once("close",()=>{e.splice(e.indexOf(o),1)})}),async()=>await new Promise(o=>{e.forEach(s=>{s.destroy()}),t.close(()=>{o()})})};var Zr=async t=>{let e=t.sumor.port;if(t.sumor.protocol==="https"){let r;if(e===443){let i=Yr.createServer((n,a)=>{let c=`https://${n.headers.host}${n.url}`;a.writeHead(301,{Location:c}),a.end()});r=await new Promise(n=>{i.listen(80,()=>{n(Ie(i))})}),t.sumor.logger.info("http\u670D\u52A1\u5DF2\u542F\u52A8\uFF0C\u8BBF\u95EE\u5C06\u8DF3\u8F6C\u81F3https")}let o;o=js.createServer({...t.sumor.ssl},t),o.on("error",i=>{t.sumor.logger.error(i)});let s=await new Promise(i=>{o.listen(e,()=>{i(Ie(o))})});t.sumor.close=async()=>{t.sumor.logger.info("\u6B63\u5728\u7EC8\u6B62\u7F51\u9875\u670D\u52A1"),r&&await r(),await s(),t.sumor.logger.info("\u7F51\u9875\u670D\u52A1\u5DF2\u505C\u6B62\u8FD0\u884C")}}else{let r=Yr.createServer(t),o=await new Promise(s=>{r.listen(e,()=>{s(Ie(r))})});t.sumor.close=async()=>{t.sumor.logger.info("\u6B63\u5728\u7EC8\u6B62\u7F51\u9875\u670D\u52A1"),await o(),t.sumor.logger.info("\u7F51\u9875\u670D\u52A1\u5DF2\u505C\u6B62\u8FD0\u884C")}}};var Xr=async t=>{let e=Ms();e.disable("x-powered-by"),e.sumor=t,e.sumor.app=e,e.use((r,o,s)=>{r.sumor=t.getContext(),r.sumor.ssrContext={pageInfo:{title:"",description:"",keywords:""}},r.sumor.cors=!1,s()}),await Fr(e),e.use((r,o,s)=>{r.sumor.logger.trace(`\u4F1A\u8BDD\u4EA4\u4E92\u5BF9\u8C61: ${Object.keys(r.sumor).join(", ")}`),s()}),e.sumor.logger.debug("\u524D\u7F6E\u4E2D\u95F4\u4EF6\u52A0\u8F7D\u5B8C\u6210"),e.sumor.meta.event.setup&&await e.sumor.meta.event.setup.program(e.sumor),e.sumor.meta.event.prepare&&await e.sumor.meta.event.prepare.program(e.sumor),await Mr(e),e.sumor.logger.debug("\u5904\u7406\u7A0B\u5E8F\u52A0\u8F7D\u5B8C\u6210"),e.sumor.meta.event.serve&&await e.sumor.meta.event.serve.program(e.sumor),await Kr(e),e.sumor.logger.debug("\u540E\u7F6E\u4E2D\u95F4\u4EF6\u52A0\u8F7D\u5B8C\u6210"),await Zr(e),e.sumor.meta.event.served&&await e.sumor.meta.event.served.program(e.sumor),e.sumor.logger.info(`\u5E94\u7528\u5DF2\u8FD0\u884C\u5728 ${e.sumor.origin}`),e.sumor.mode==="production"&&process.on("uncaughtException",r=>{e.sumor.logger.error("\u672A\u6355\u6349\u9519\u8BEF"),e.sumor.logger.error(r)})};import"fs-extra";import{execSync as qr}from"child_process";var Qr=async t=>{await ye(t,!0);let e="vite build --ssrManifest --outDir ../../output/web/client --config tmp/web/vite.config.js --emptyOutDir",r="vite build --ssr src/entry-server.js --outDir ../../output/web/server --config tmp/web/vite.config.js --emptyOutDir";await qr(e,{stdio:"inherit"}),await qr(r,{stdio:"inherit"})};var eo=async t=>{let e=t.config.database,r=t.getLogger("DATABASE");await Te.install({config:e,logger:r,entity:t.meta.entity,view:t.meta.view})};var T=async t=>{t=t||{};let e=await qt(t);e.logger.info(`\u65E5\u5FD7\u8BB0\u5F55\u7EA7\u522B\uFF1A${e.logLevel.toUpperCase()}`),e.logger.info(`\u8FD0\u884C\u6A21\u5F0F\uFF1A${e.mode.toUpperCase()}`),e.logger.trace(`\u5168\u5C40\u4EA4\u4E92\u5BF9\u8C61: ${Object.keys(e).join(", ")}`),e.logger.trace(`\u914D\u7F6E\u4FE1\u606F: ${JSON.stringify(e.config,null,4)}`),e.mode==="development"&&(e.logger.info("\u5F00\u59CB\u51C6\u5907\u5F00\u53D1\u73AF\u5883"),await St(e),e.logger.info("\u5F00\u53D1\u73AF\u5883\u51C6\u5907\u5B8C\u6210")),(e.mode==="build"||e.mode==="preview")&&(e.logger.info("\u5F00\u59CB\u751F\u6210\u751F\u4EA7\u4EE3\u7801"),await Qr(e),e.logger.info("\u751F\u4EA7\u4EE3\u7801\u751F\u6210\u5B8C\u6BD5")),e.mode==="setup"&&(e.logger.info("\u5F00\u59CB\u90E8\u7F72\u6570\u636E\u5E93"),await eo(e),e.logger.info("\u90E8\u7F72\u6570\u636E\u5E93\u5B8C\u6210")),(e.mode==="development"||e.mode==="preview"||e.mode==="production")&&(e.logger.info("\u5F00\u59CB\u542F\u52A8\u5BF9\u5916\u670D\u52A1"),await Xr(e),e.logger.info("\u5BF9\u5916\u670D\u52A1\u542F\u52A8\u5B8C\u6210"))};var Ce=async()=>{await T("development")};import U from"fs-extra";import no from"node:path";var to=(t,e)=>{let r={name:t.name,type:"module",bin:t.bin,main:"./index.umd.cjs",module:"./index.es.js",exports:{".":{import:"./index.es.js",require:"./index.umd.cjs"}},dependencies:t.dependencies};return e&&(r.main="./index.es.js",delete r.exports["."].require),r};import Us from"fs-extra";import{build as zs,defineConfig as Bs}from"vite";import Hs from"@vitejs/plugin-vue";import ro from"node:path";var ct=t=>t&&(t=t.replace(/\//g,"-"),t=t.replace(/@/g,""),t=t.replace(/(\w)/,e=>e.toUpperCase()),t.replace(/-(\w)/g,(e,r)=>r?r.toUpperCase():""));var oo=async t=>{let e={},r=Object.keys(t.pkg.dependencies||{});for(let i=0;i<r.length;i+=1)e[r[i]]=ct(r[i]);let o=ct(t.pkg.name)||"MyLib",s={mode:t.mode,root:process.cwd(),base:"/",plugins:[],build:{emptyOutDir:!1,sourcemap:t.mode==="development"?"inline":!1,outDir:t.output,lib:{entry:t.entry,name:o},rollupOptions:{external:r,output:{globals:e}}}};s.build.lib.fileName=i=>`index.${i}.js`,s.plugins.push(Hs()),await zs(Bs(s)),await Us.move(ro.join(t.output,"./index.umd.js"),ro.join(t.output,"./index.umd.cjs"))};import*as so from"esbuild";var io=async t=>{let e=Object.keys(t.pkg.dependencies||{});await so.build({format:"esm",entryPoints:[t.entry],minify:t.mode==="production",keepNames:t.mode==="development",bundle:!0,platform:"node",outfile:`${t.output}/index.es.js`,external:e,sourcemap:t.mode==="development"?"inline":!1})};var mt=async t=>{let e=t.root||process.cwd(),r=t.entry||no.resolve(e,"./src/index.js"),o=t.mode||"production",s=t.output||no.resolve(e,"./output",`./${o}`),i=!!t.node;await U.remove(s),await U.ensureDir(s),await U.exists(`${e}/static`)&&await U.copy(`${e}/static`,s);let n=await U.readJson(`${e}/package.json`);i?await io({mode:o,entry:r,output:s,pkg:n}):await oo({mode:o,entry:r,output:s,pkg:n});let a=await to(n,i);return await U.ensureFile(`${s}/package.json`),await U.writeFile(`${s}/package.json`,JSON.stringify(a,null,4)),{name:n.name}};var Re=async t=>{let e=!!t.debug,r=t.type||"app",o=e?"development":"production";switch(r){case"vue":await mt({mode:o});break;case"node":await mt({mode:o,node:!0});break;default:await T({mode:"build"});break}};var De=async()=>{await T("setup")};var Ae=async()=>{await T("preview")};var Le=async()=>{await T("production")};import{Command as ci}from"commander";import mi from"fs-extra";var ao=(t,e)=>{console.log(`
489
489
  ========================================================
490
490
  =
491
491
  = === = Sumor App Framework v${e}
@@ -493,10 +493,10 @@ function show(){
493
493
  = === = More Information: https://www.sumor.com
494
494
  =
495
495
  ========================================================
496
- `)};import ao from"yaml";import ee from"fs-extra";var L=async(t,e)=>{t=t||process.cwd();let r=`${t}/${e}.yml`,o;try{if(await ee.exists(r)){let n=await ee.readFile(r,"utf-8");o=ao.parse(n)}let s=`${t}/${e}.yaml`;if(!o&&await ee.exists(s)){let n=await ee.readFile(s,"utf-8");o=ao.parse(n)}let i=`${t}/${e}.json`;if(!o&&await ee.exists(i)){let n=await ee.readFile(i,"utf-8");o=JSON.parse(n)}}catch{console.log(`\u914D\u7F6E\u6587\u4EF6${e}\u89E3\u6790\u5931\u8D25`)}return o||{}};import Bs from"yaml";import me from"fs-extra";var mt=async(t,e,r)=>{let o=await L(t,e);await me.remove(`${t}/${e}.yml`),await me.remove(`${t}/${e}.yaml`),await me.remove(`${t}/${e}.json`),r==="yml"||r==="yaml"?await me.writeFile(`${t}/${e}.yml`,Bs.stringify(o)):r==="json"&&await me.writeFile(`${t}/${e}.json`,JSON.stringify(o,null,4))};import No from"fs-extra";import Fe from"fs-extra";var co=t=>{let e=t.split("/"),r=e.pop(),o=e.join("/");return{name:r,folder:o}};import{exec as Hs}from"child_process";var E=async(t,e,r)=>await new Promise((o,s)=>{let i=Hs(t,e),n="",a="",c=m=>(m=m.toString().replace(/\r\n/g,`
496
+ `)};import co from"yaml";import ee from"fs-extra";var L=async(t,e)=>{t=t||process.cwd();let r=`${t}/${e}.yml`,o;try{if(await ee.exists(r)){let n=await ee.readFile(r,"utf-8");o=co.parse(n)}let s=`${t}/${e}.yaml`;if(!o&&await ee.exists(s)){let n=await ee.readFile(s,"utf-8");o=co.parse(n)}let i=`${t}/${e}.json`;if(!o&&await ee.exists(i)){let n=await ee.readFile(i,"utf-8");o=JSON.parse(n)}}catch{console.log(`\u914D\u7F6E\u6587\u4EF6${e}\u89E3\u6790\u5931\u8D25`)}return o||{}};import Gs from"yaml";import le from"fs-extra";var lt=async(t,e,r)=>{let o=await L(t,e);await le.remove(`${t}/${e}.yml`),await le.remove(`${t}/${e}.yaml`),await le.remove(`${t}/${e}.json`),r==="yml"||r==="yaml"?await le.writeFile(`${t}/${e}.yml`,Gs.stringify(o)):r==="json"&&await le.writeFile(`${t}/${e}.json`,JSON.stringify(o,null,4))};import Io from"fs-extra";import Pe from"fs-extra";var mo=t=>{let e=t.split("/"),r=e.pop(),o=e.join("/");return{name:r,folder:o}};import{exec as Js}from"child_process";var E=async(t,e,r)=>await new Promise((o,s)=>{let i=Js(t,e),n="",a="",c=m=>(m=m.toString().replace(/\r\n/g,`
497
497
  `).replace(/\r/g,`
498
- `),m);i.stdout.on("data",async m=>{m=c(m),n+=m,r&&r(m)}),i.stderr.on("data",async m=>{m=c(m),n+=m,a+=m,r&&r(m)}),i.on("close",async m=>{m!==0?s(a):o(n)})});var Le=async t=>{let e=await E("git branch -vva",{cwd:t}),r=[],o=e.split(`
499
- `);for(let s in o){let i=o[s].split(" ").filter(n=>n!=="");if(i.length>=3){let n={};i[0]==="*"&&(n.current=!0,i.shift()),n.name=i.shift(),n.commit=i.shift(),n.name.indexOf("remotes/origin")>=0&&(n.remote=!0,n.origin=n.name,n.name=n.origin.replace("remotes/origin/","")),r.push(n)}}return r};var x=async(t,e)=>await E(`git ${e}`,{cwd:t});var Gs=async t=>{await Fe.writeFile(t+"/.gitignore",`# IDE configuration
498
+ `),m);i.stdout.on("data",async m=>{m=c(m),n+=m,r&&r(m)}),i.stderr.on("data",async m=>{m=c(m),n+=m,a+=m,r&&r(m)}),i.on("close",async m=>{m!==0?s(a):o(n)})});var Fe=async t=>{let e=await E("git branch -vva",{cwd:t}),r=[],o=e.split(`
499
+ `);for(let s in o){let i=o[s].split(" ").filter(n=>n!=="");if(i.length>=3){let n={};i[0]==="*"&&(n.current=!0,i.shift()),n.name=i.shift(),n.commit=i.shift(),n.name.indexOf("remotes/origin")>=0&&(n.remote=!0,n.origin=n.name,n.name=n.origin.replace("remotes/origin/","")),r.push(n)}}return r};var x=async(t,e)=>await E(`git ${e}`,{cwd:t});var Ws=async t=>{await Pe.writeFile(t+"/.gitignore",`# IDE configuration
500
500
  .idea
501
501
 
502
502
  # generated files
@@ -506,9 +506,9 @@ dist
506
506
  tmp
507
507
 
508
508
  # system
509
- .DS_Store`),await Fe.writeFile(t+"/README.md","")},Pe=async(t,e)=>{if(!await Fe.exists(t)){let{name:s,folder:i}=co(t);await Fe.ensureDir(i),await E(`git clone ${e} ${s}`,{cwd:i})}await E("git config user.name builder",{cwd:t}),await E("git config user.email builder@dummy.com",{cwd:t}),(await Le(t)).filter(s=>s.name==="1.0")[0]?(await x(t,"checkout 1.0"),await x(t,"pull")):(await x(t,"checkout --orphan 1.0"),await x(t,"reset --hard"),await Gs(t),await x(t,"add . -f"),await x(t,'commit -m "\u521D\u59CB\u5316"'),await x(t,"push -f origin 1.0"))};var mo=async(t,e)=>{let o=(await x(t,`log ${e} --pretty=format:"%H|%ad|%cd|%D|%s" --date=iso-strict-local`)).split(`
510
- `),s=[];for(let i of o){let n=i.split("|"),a=[],c="";if(n[3]){let m=n[3].split(",");for(let l of m)l.indexOf("tag")>=0&&a.push(l.replace("tag:","").trim())}n[4]&&(c=n[4]),s.push({id:n[0],authorDate:new Date(n[1]),committerDate:new Date(n[2]),tags:a,subject:c})}return s};var je=t=>Math.round(new Date(t).getTime()),lo=async t=>{await x(t,"fetch");let e=await Le(t),r=/^\d+\.\d+?$/,o=/^\d+\.\d+\.\d+?$/,s={};for(let i of e)if(i.remote&&r.test(i.name)){await x(t,"reset --hard HEAD"),await x(t,`checkout ${i.origin}`);let n=await mo(t,i.origin);n=n.reverse();let a=0;for(let c of n){let m=!0;for(let l of c.tags)if(o.test(l)){let u=parseInt(l.split(i.name+".")[1],10);isNaN(u)||(s[l]={id:c.id,name:l,authorDate:je(c.authorDate),committerDate:je(c.committerDate),beta:!1},u>=a&&(a=u+1),m=!1)}m&&(s[i.name+"."+a]={id:c.id,name:i.name+"."+a,authorDate:je(c.authorDate),committerDate:je(c.committerDate),beta:!0})}}return s};var uo=async(t,{url:e,username:r,password:o})=>{if(e.indexOf("http")===0){let s=e.split("/"),i=`${s[0]}//${r}:${o}@${s[2]}/${s.slice(3,s.length).join("/")}`,n=`${process.cwd()}/tmp/version/${t}`;return await Pe(n,i),await lo(n)}};import Js from"node-ssh";var le=class{constructor(e){this.config=e}async connect(){if(!this.connection){this.connection=new Js;try{await this.connection.connect(this.config)}catch{throw new Error("\u670D\u52A1\u5668SSH\u8FDE\u63A5\u5931\u8D25")}}}async disconnect(){this.connection&&(this.connection.dispose(),delete this.connection)}async exec(e,r){await this.connect(),r=r||{},r.cwd=r.cwd||"~";let o=await this.connection.execCommand(e,r);if(o.code===0||o.code===1)return o.stdout;throw new Error(o.stderr)}async install(e){let r=!0;try{await this.exec(`dpkg -s ${e}`)}catch{r=!1}if(!r)try{await this.connection.exec("apt-get update"),await this.connection.exec(`apt-get install ${e} -y`)}catch(o){throw new Error(`\u670D\u52A1\u5668\u8F6F\u4EF6\u5B89\u88C5\u5931\u8D25:${o.message}`)}}async uninstall(e){let r=!0;try{await this.exec(`dpkg -s ${e}`)}catch{r=!1}if(r)try{await this.exec(`apt-get --purge remove ${e} -y`)}catch(o){throw new Error(`\u670D\u52A1\u5668\u8F6F\u4EF6\u5378\u8F7D\u5931\u8D25:${o.message}`)}}addTool(e,r){this[e]=r(this)}};import _ from"fs-extra";import Vs from"archiver";import Ks from"extract-zip";import lt from"path";import{glob as Ys}from"glob";import Zs from"os";import Xs from"axios";import Ws from"uuid";var Me=()=>Ws.v4().replace(/-/g,"");var ut=class{normalize(e){let r=lt.normalize(e);return r=r.replace(/\\/g,"/"),r}async tmp(e){e=e||"sumor-utils";let r=this.normalize(`${Zs.tmpdir()}/${e}/${Me()}`);return await this.ensureDir(r),r}async download(e,r){await this.ensureFile(r);let o=_.createWriteStream(r);return(await Xs({source:e,method:"GET",responseType:"stream"})).data.pipe(o),await new Promise((i,n)=>{o.on("finish",i),o.on("error",n)})}async find(e,r){r=r||{};let o=await Ys(e,r);return o=o.map(s=>(s=lt.normalize(s),s=s.replace(/\\/g,"/"),s)),o}async zip(e,r,o){return await new Promise((s,i)=>{let n=_.createWriteStream(r),a=Vs("zip",{zlib:{level:9}});n.on("close",()=>{s()}),a.pipe(n),a.glob("**",{cwd:e,dot:!0,ignore:o||[]}),a.finalize()})}async unzip(e,r){return e=lt.normalize(e),await new Promise((o,s)=>{Ks(e,{dir:r},i=>{i?s(i):o()})})}async exists(e){return await new Promise(r=>{_.access(e,o=>{r(!o)})})}async isDirectory(e){return(await this.info(e)).isDirectory()}async info(e){return await new Promise((r,o)=>{_.open(e,"a",(s,i)=>{s&&o(s),_.fstat(i,(n,a)=>{n&&o(n),_.close(i,()=>{r(a)})})})})}async move(e,r){await _.move(e,r)}async remove(e){await _.remove(e)}async ensureFile(e){await _.ensureFile(e)}async ensureDir(e){await _.ensureDir(e)}async copy(e,r,o){await _.copy(e,r,o)}async writeFile(e,r){return await this.ensureFile(e),await new Promise((o,s)=>{_.writeFile(e,r,i=>{i?s(i):o()})})}async appendFile(e,r){return await this.ensureFile(e),await new Promise((o,s)=>{_.appendFile(e,r,i=>{i?s(i):o()})})}async readFile(e,r){if(await this.exists(e))return await new Promise(o=>{_.readFile(e,r,(s,i)=>{if(s)throw s;o(i)})})}async readJson(e){return await this.exists(e)?await _.readJson(e):null}async writeJson(e,r){return await this.ensureFile(e),await _.writeJson(e,r)}},I=new ut;I.exist=I.exists;I.readJSON=I.readJson;I.writeJSON=I.writeJson;I.delete=I.remove;var b=I;var fo=t=>({async tmp(e){e=e||"sumor-utils";let r=b.normalize(`/tmp/${e}/${Me()}`);return await this.ensureDir(r),r},async ensureDir(e){await t.exec(`mkdir -p ${e}`)},async exists(e){e=b.normalize(e);let r=e.split("/"),o=r.pop();e=r.join("/");let s=!1;try{let i=await t.exec(`ls ${e}`);i=i.split(`
511
- `),s=i.indexOf(o)>=0}catch{}return s},async remove(e){await t.exec(`rm -rf ${e}`)},async delete(e){await t.exec(`rm -rf ${e}`)},async putFolder(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmp.zip`,i=await this.tmp("sumor-utils-ssh"),n=`${i}/tmp.zip`;await b.zip(e,s),await this.putFile(s,n),await this.ensureDir(r),await this.unzip(n,r),await this.delete(i),await b.delete(o)},async getFolder(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmp.zip`,i=await this.tmp("sumor-utils-ssh"),n=`${i}/tmp.zip`;await this.zip(e,n),await this.getFile(n,s),await b.unzip(s,r),await this.delete(i),await b.delete(o)},async putFile(e,r){return await t.connect(),await t.connection.putFile(e,r)},async writeFile(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmpfile`;await b.ensureFile(s),await b.writeFile(s,r),await this.putFile(s,e),await b.delete(o)},async readFile(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmpfile`;await this.getFile(e,s);let i=await b.readFile(s,r);return await b.delete(o),i},async getFile(e,r){return await t.connect(),await t.connection.getFile(r,e)},async zip(e,r){await t.install("zip"),await t.exec(`cd ${e};zip -q -r ${r} ./*`)},async unzip(e,r){await t.install("unzip"),await t.exec(`unzip -o ${e} -d ${r}`)},async info(e){if(await this.exists(e)){let o=(await t.exec(`stat ${e} -c "%X|%Y|%Z"`)).split("|"),s={};return o[0]&&(s.access=parseInt(o[0],10)),o[1]&&(s.modify=parseInt(o[1],10)),o[2]&&(s.change=parseInt(o[2],10)),s}}});var po=t=>({async isOccupied(e){let r=!0;try{await t.exec(`lsof -i:${e}`)===""&&(r=!1)}catch(o){console.log(o)}return r},async getPort(e){if(e?e++:e=1,e>10)throw new Error("\u670D\u52A1\u5668\u7AEF\u53E3\u83B7\u53D6\u5931\u8D25");let r=3e4+Math.floor(Math.random()*1e4);return await this.isOccupied(r)?await this.getPort(e):r}});var go=t=>({async execCommand(e,r){return await t.install("docker.io"),await t.exec(e,r)},async remove(e){try{await this.execCommand(`docker rm -f ${e}`)}catch(r){if(r.message.indexOf("No such container")<0)throw r}},async delete(e){try{await this.execCommand(`docker rm -f ${e}`)}catch(r){if(r.message.indexOf("No such container")<0)throw r}},async run({mode:e,image:r,name:o,folder:s,port:i}){s=s||[],i=i||[];let n=["docker","run"];n.push("-itd");for(let a in s)n.push(`-v ${s[a].from}:${s[a].to}${s[a].readOnly?":ro":""}`);for(let a in i)n.push(`-p ${i[a].from}:${i[a].to}`);return o&&n.push(`--name ${o}`),r&&n.push(`-d ${r}`),e!==""&&n.push(e||"/bin/bash"),await this.execCommand(n.join(" "))},async exec(e,r,o){o=o||{},r=JSON.stringify(r);let s="";return o.interaction?s="-it":o.background&&(s="-itd"),await this.execCommand(`docker exec ${s} ${e} sh -c ${r}`,{options:{pty:!0}})},async export(e,r){await this.execCommand(`docker export ${e} > ${r}`)},async ip(e){return await this.execCommand(`docker inspect --format='{{.NetworkSettings.Gateway}}' ${e}`)},async import({path:e,name:r,version:o}){let s=`${r}:${o}`;if(!(await this.images()).filter(a=>a.Repository===r&&a.Tag===o)[0])await this.execCommand(`cat ${e} | docker import - ${s}`);else throw new Error(`\u955C\u50CF\u5DF2\u5B58\u5728\uFF0C\u5982\u9700\u5220\u9664\u8BF7\u624B\u5DE5\u6267\u884C\u547D\u4EE4\uFF1Adocker rmi ${s}`)},async images(){return await this._checkInfo("docker images",["Repository","Tag","Size"])},async deleteImage(e,r){await this.execCommand(`docker image rmi -f ${e}:${r}`)},async build(e,r,o){await this.execCommand(`docker build -t ${e}:${r} .`,{cwd:o})},async buildNode(e,r,o){let s=`FROM node:18.15.0
509
+ .DS_Store`),await Pe.writeFile(t+"/README.md","")},je=async(t,e)=>{if(!await Pe.exists(t)){let{name:s,folder:i}=mo(t);await Pe.ensureDir(i),await E(`git clone ${e} ${s}`,{cwd:i})}await E("git config user.name builder",{cwd:t}),await E("git config user.email builder@dummy.com",{cwd:t}),(await Fe(t)).filter(s=>s.name==="1.0")[0]?(await x(t,"checkout 1.0"),await x(t,"pull")):(await x(t,"checkout --orphan 1.0"),await x(t,"reset --hard"),await Ws(t),await x(t,"add . -f"),await x(t,'commit -m "\u521D\u59CB\u5316"'),await x(t,"push -f origin 1.0"))};var lo=async(t,e)=>{let o=(await x(t,`log ${e} --pretty=format:"%H|%ad|%cd|%D|%s" --date=iso-strict-local`)).split(`
510
+ `),s=[];for(let i of o){let n=i.split("|"),a=[],c="";if(n[3]){let m=n[3].split(",");for(let l of m)l.indexOf("tag")>=0&&a.push(l.replace("tag:","").trim())}n[4]&&(c=n[4]),s.push({id:n[0],authorDate:new Date(n[1]),committerDate:new Date(n[2]),tags:a,subject:c})}return s};var Me=t=>Math.round(new Date(t).getTime()),uo=async t=>{await x(t,"fetch");let e=await Fe(t),r=/^\d+\.\d+?$/,o=/^\d+\.\d+\.\d+?$/,s={};for(let i of e)if(i.remote&&r.test(i.name)){await x(t,"reset --hard HEAD"),await x(t,`checkout ${i.origin}`);let n=await lo(t,i.origin);n=n.reverse();let a=0;for(let c of n){let m=!0;for(let l of c.tags)if(o.test(l)){let u=parseInt(l.split(i.name+".")[1],10);isNaN(u)||(s[l]={id:c.id,name:l,authorDate:Me(c.authorDate),committerDate:Me(c.committerDate),beta:!1},u>=a&&(a=u+1),m=!1)}m&&(s[i.name+"."+a]={id:c.id,name:i.name+"."+a,authorDate:Me(c.authorDate),committerDate:Me(c.committerDate),beta:!0})}}return s};var fo=async(t,{url:e,username:r,password:o})=>{if(e.indexOf("http")===0){let s=e.split("/"),i=`${s[0]}//${r}:${o}@${s[2]}/${s.slice(3,s.length).join("/")}`,n=`${process.cwd()}/tmp/version/${t}`;return await je(n,i),await uo(n)}};import Vs from"node-ssh";var ue=class{constructor(e){this.config=e}async connect(){if(!this.connection){this.connection=new Vs;try{await this.connection.connect(this.config)}catch{throw new Error("\u670D\u52A1\u5668SSH\u8FDE\u63A5\u5931\u8D25")}}}async disconnect(){this.connection&&(this.connection.dispose(),delete this.connection)}async exec(e,r){await this.connect(),r=r||{},r.cwd=r.cwd||"~";let o=await this.connection.execCommand(e,r);if(o.code===0||o.code===1)return o.stdout;throw new Error(o.stderr)}async install(e){let r=!0;try{await this.exec(`dpkg -s ${e}`)}catch{r=!1}if(!r)try{await this.connection.exec("apt-get update"),await this.connection.exec(`apt-get install ${e} -y`)}catch(o){throw new Error(`\u670D\u52A1\u5668\u8F6F\u4EF6\u5B89\u88C5\u5931\u8D25:${o.message}`)}}async uninstall(e){let r=!0;try{await this.exec(`dpkg -s ${e}`)}catch{r=!1}if(r)try{await this.exec(`apt-get --purge remove ${e} -y`)}catch(o){throw new Error(`\u670D\u52A1\u5668\u8F6F\u4EF6\u5378\u8F7D\u5931\u8D25:${o.message}`)}}addTool(e,r){this[e]=r(this)}};import _ from"fs-extra";import Ys from"archiver";import Zs from"extract-zip";import ut from"path";import{glob as Xs}from"glob";import qs from"os";import Qs from"axios";import Ks from"uuid";var Ue=()=>Ks.v4().replace(/-/g,"");var ft=class{normalize(e){let r=ut.normalize(e);return r=r.replace(/\\/g,"/"),r}async tmp(e){e=e||"sumor-utils";let r=this.normalize(`${qs.tmpdir()}/${e}/${Ue()}`);return await this.ensureDir(r),r}async download(e,r){await this.ensureFile(r);let o=_.createWriteStream(r);return(await Qs({source:e,method:"GET",responseType:"stream"})).data.pipe(o),await new Promise((i,n)=>{o.on("finish",i),o.on("error",n)})}async find(e,r){r=r||{};let o=await Xs(e,r);return o=o.map(s=>(s=ut.normalize(s),s=s.replace(/\\/g,"/"),s)),o}async zip(e,r,o){return await new Promise((s,i)=>{let n=_.createWriteStream(r),a=Ys("zip",{zlib:{level:9}});n.on("close",()=>{s()}),a.pipe(n),a.glob("**",{cwd:e,dot:!0,ignore:o||[]}),a.finalize()})}async unzip(e,r){return e=ut.normalize(e),await new Promise((o,s)=>{Zs(e,{dir:r},i=>{i?s(i):o()})})}async exists(e){return await new Promise(r=>{_.access(e,o=>{r(!o)})})}async isDirectory(e){return(await this.info(e)).isDirectory()}async info(e){return await new Promise((r,o)=>{_.open(e,"a",(s,i)=>{s&&o(s),_.fstat(i,(n,a)=>{n&&o(n),_.close(i,()=>{r(a)})})})})}async move(e,r){await _.move(e,r)}async remove(e){await _.remove(e)}async ensureFile(e){await _.ensureFile(e)}async ensureDir(e){await _.ensureDir(e)}async copy(e,r,o){await _.copy(e,r,o)}async writeFile(e,r){return await this.ensureFile(e),await new Promise((o,s)=>{_.writeFile(e,r,i=>{i?s(i):o()})})}async appendFile(e,r){return await this.ensureFile(e),await new Promise((o,s)=>{_.appendFile(e,r,i=>{i?s(i):o()})})}async readFile(e,r){if(await this.exists(e))return await new Promise(o=>{_.readFile(e,r,(s,i)=>{if(s)throw s;o(i)})})}async readJson(e){return await this.exists(e)?await _.readJson(e):null}async writeJson(e,r){return await this.ensureFile(e),await _.writeJson(e,r)}},I=new ft;I.exist=I.exists;I.readJSON=I.readJson;I.writeJSON=I.writeJson;I.delete=I.remove;var b=I;var po=t=>({async tmp(e){e=e||"sumor-utils";let r=b.normalize(`/tmp/${e}/${Ue()}`);return await this.ensureDir(r),r},async ensureDir(e){await t.exec(`mkdir -p ${e}`)},async exists(e){e=b.normalize(e);let r=e.split("/"),o=r.pop();e=r.join("/");let s=!1;try{let i=await t.exec(`ls ${e}`);i=i.split(`
511
+ `),s=i.indexOf(o)>=0}catch{}return s},async remove(e){await t.exec(`rm -rf ${e}`)},async delete(e){await t.exec(`rm -rf ${e}`)},async putFolder(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmp.zip`,i=await this.tmp("sumor-utils-ssh"),n=`${i}/tmp.zip`;await b.zip(e,s),await this.putFile(s,n),await this.ensureDir(r),await this.unzip(n,r),await this.delete(i),await b.delete(o)},async getFolder(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmp.zip`,i=await this.tmp("sumor-utils-ssh"),n=`${i}/tmp.zip`;await this.zip(e,n),await this.getFile(n,s),await b.unzip(s,r),await this.delete(i),await b.delete(o)},async putFile(e,r){return await t.connect(),await t.connection.putFile(e,r)},async writeFile(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmpfile`;await b.ensureFile(s),await b.writeFile(s,r),await this.putFile(s,e),await b.delete(o)},async readFile(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmpfile`;await this.getFile(e,s);let i=await b.readFile(s,r);return await b.delete(o),i},async getFile(e,r){return await t.connect(),await t.connection.getFile(r,e)},async zip(e,r){await t.install("zip"),await t.exec(`cd ${e};zip -q -r ${r} ./*`)},async unzip(e,r){await t.install("unzip"),await t.exec(`unzip -o ${e} -d ${r}`)},async info(e){if(await this.exists(e)){let o=(await t.exec(`stat ${e} -c "%X|%Y|%Z"`)).split("|"),s={};return o[0]&&(s.access=parseInt(o[0],10)),o[1]&&(s.modify=parseInt(o[1],10)),o[2]&&(s.change=parseInt(o[2],10)),s}}});var go=t=>({async isOccupied(e){let r=!0;try{await t.exec(`lsof -i:${e}`)===""&&(r=!1)}catch(o){console.log(o)}return r},async getPort(e){if(e?e++:e=1,e>10)throw new Error("\u670D\u52A1\u5668\u7AEF\u53E3\u83B7\u53D6\u5931\u8D25");let r=3e4+Math.floor(Math.random()*1e4);return await this.isOccupied(r)?await this.getPort(e):r}});var wo=t=>({async execCommand(e,r){return await t.install("docker.io"),await t.exec(e,r)},async remove(e){try{await this.execCommand(`docker rm -f ${e}`)}catch(r){if(r.message.indexOf("No such container")<0)throw r}},async delete(e){try{await this.execCommand(`docker rm -f ${e}`)}catch(r){if(r.message.indexOf("No such container")<0)throw r}},async run({mode:e,image:r,name:o,folder:s,port:i}){s=s||[],i=i||[];let n=["docker","run"];n.push("-itd");for(let a in s)n.push(`-v ${s[a].from}:${s[a].to}${s[a].readOnly?":ro":""}`);for(let a in i)n.push(`-p ${i[a].from}:${i[a].to}`);return o&&n.push(`--name ${o}`),r&&n.push(`-d ${r}`),e!==""&&n.push(e||"/bin/bash"),await this.execCommand(n.join(" "))},async exec(e,r,o){o=o||{},r=JSON.stringify(r);let s="";return o.interaction?s="-it":o.background&&(s="-itd"),await this.execCommand(`docker exec ${s} ${e} sh -c ${r}`,{options:{pty:!0}})},async export(e,r){await this.execCommand(`docker export ${e} > ${r}`)},async ip(e){return await this.execCommand(`docker inspect --format='{{.NetworkSettings.Gateway}}' ${e}`)},async import({path:e,name:r,version:o}){let s=`${r}:${o}`;if(!(await this.images()).filter(a=>a.Repository===r&&a.Tag===o)[0])await this.execCommand(`cat ${e} | docker import - ${s}`);else throw new Error(`\u955C\u50CF\u5DF2\u5B58\u5728\uFF0C\u5982\u9700\u5220\u9664\u8BF7\u624B\u5DE5\u6267\u884C\u547D\u4EE4\uFF1Adocker rmi ${s}`)},async images(){return await this._checkInfo("docker images",["Repository","Tag","Size"])},async deleteImage(e,r){await this.execCommand(`docker image rmi -f ${e}:${r}`)},async build(e,r,o){await this.execCommand(`docker build -t ${e}:${r} .`,{cwd:o})},async buildNode(e,r,o){let s=`FROM node:18.15.0
512
512
 
513
513
  # \u521B\u5EFA/usr/runtime\u76EE\u5F55
514
514
  RUN mkdir -p /usr/runtime
@@ -529,8 +529,8 @@ phantomjs_cdnurl=https://registry.npmmirror.com/mirrors/phantomjs/
529
529
  sentrycli_cdnurl=https://registry.npmmirror.com/mirrors/sentry-cli/
530
530
  sqlite3_binary_site=https://registry.npmmirror.com/mirrors/sqlite3/
531
531
  python_mirror=https://registry.npmmirror.com/mirrors/python/`;await t.file.writeFile(`${n}/.npmrc`,c)}await t.file.writeFile(`${i}/Dockerfile`,s);let a=await this.execCommand(`docker build -t ${e}:${r} .`,{cwd:i});console.log(a),await t.file.remove(i)},async instances(){let e=await this._checkInfo("docker ps -a",["Names","CreatedAt","Status","Ports","Size"]);for(let r in e){e[r].instanceId=e[r].Names;let o=e[r].CreatedAt.split(" ");o.pop(),e[r].createdTime=new Date(o.join(" "))}return e},async instance(e){return(await this.instances()).filter(o=>o.instanceId===e)[0]},async _checkInfo(e,r){let o=[];for(let n in r)o.push(`{{.${r[n]}}}`);let s=await this.execCommand(`${e} --format "${o.join("|")}"`),i=[];if(s!==""){let n=s.split(`
532
- `);for(let a in n){let c=n[a].split("|"),m={};for(let l=0;l<r.length;l++)m[r[l]]=c[l];i.push(m)}}return i}});var O=async(t,e)=>{let r;try{let o=await t.exec(e);r=parseFloat(o,10)}catch(o){console.log(o)}return r},wo=t=>({async system(){let e=await O(t,"cat /proc/uptime | awk '{print $1}'");return e=Date.now()-parseInt(e*1e3,10),{disk:{total:await O(t,"df -m --output=size / | awk 'NR==2{print $1}'"),used:await O(t,"df -m --output=used / | awk 'NR==2{print $1}'"),free:await O(t,"df -m --output=avail / | awk 'NR==2{print $1}'")},memory:{total:await O(t,"free -m | awk 'NR==2{print $2}'"),used:await O(t,"free -m | awk 'NR==2{print $3}'"),free:await O(t,"free -m | awk 'NR==2{print $4}'"),cache:await O(t,"free -m | awk 'NR==2{print $6}'")},cpu:{usage:await O(t,`top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4}'`),cores:await O(t,'cat /proc/cpuinfo | grep "processor" | wc -l')},uptime:e}}});import qs from"path";var ho=t=>({async install(e){await t.exec(`npm i -g ${e}`)},async start(e,r){try{await t.install("nodejs"),await t.install("npm")}catch(s){console.log(s)}let o=!0;try{await t.exec("pm2 -v")}catch{o=!1}o||await t.node.install("pm2"),await t.exec("npm i",{cwd:qs.dirname(r)});try{await t.exec(`pm2 start ${r} --name ${e}`)}catch{await t.exec(`pm2 restart ${e}`)}},async stop(e){await t.exec(`pm2 stop ${e}`),await t.exec(`pm2 delete ${e}`)},async logs(e){return await t.exec(`pm2 logs --nostream --lines 1000 ${e}`)}});var S=t=>{let e=new le(t);return e.addTool("file",fo),e.addTool("port",po),e.addTool("docker",go),e.addTool("node",ho),e.addTool("monitor",wo),e};var yo=async t=>{let e={};for(let r in t.server){let o=S(t.server[r]),s=await o.docker.instances();s=s.filter(i=>i.instanceId.indexOf("sumor_app")===0),e[r]=s.map(i=>i.instanceId),await o.disconnect()}return e};import F from"fs-extra";var $o=async(t,e)=>{await x(t,"clean -df"),await x(t,`checkout ${e}`)};var xo=async({server:t,app:e,env:r,git:o,version:s,domain:i})=>{let n=S(t);if(!await(async()=>!!(await n.docker.images()).find($=>$.Repository===e&&$.Tag===s.name))()){console.log("\u5F00\u59CB\u6784\u5EFA\u4EE3\u7801");let g=o.url.split("/"),w=`${g[0]}//${o.username}:${o.password}@${g[2]}/${g.slice(3,g.length).join("/")}`,$=`${process.cwd()}/tmp/build/${e}/${s.name}`;if(!await F.exists($)){console.log(`\u6B63\u5728\u6784\u5EFA\u6E90\u4EE3\u7801\u5230${$}`),await F.ensureDir(`${process.cwd()}/tmp/build`);try{await Pe($,w),await $o($,s.id),await E("npm i",{cwd:$}),await E("npm run build",{cwd:$}),await F.remove($+"/web"),await F.remove($+"/node_modules"),await F.remove($+"/tmp")}catch(z){console.log(z)}}console.log("\u4EE3\u7801\u6784\u5EFA\u5B8C\u6210"),console.log(`\u6B63\u5728\u6784\u5EFA\u7248\u672C${s.name}\u955C\u50CF`),await n.docker.buildNode(e,s.name,$),console.log("\u6784\u5EFA\u7248\u672C\u955C\u50CF\u5B8C\u6210")}console.log("\u90E8\u7F72\u5BB9\u5668\u5B9E\u4F8B");let m=`${process.cwd()}/tmp/env/${e}/${r}`;console.log(`\u6B63\u5728\u914D\u7F6E\u73AF\u5883\u76F8\u5173\u4EE3\u7801\u5230${m}`);let l=`${process.cwd()}/assets/${e}/${r}`;await F.exists(l)&&await F.copy(l,m);let u=await n.port.getPort(),p={app:e,env:r,version:s.name,server:t.name,port:u,upTime:Date.now(),versionTime:s.committerDate},d=`/usr/sumor-cloud/env/${e}_${r}`;await n.file.putFolder(m,d),await F.remove(m);let h=`/usr/sumor-cloud/instance/${e}_${r}/${Date.now()}.json`;await n.file.writeFile(h,JSON.stringify(p,null,4));let f=`sumor_app_${e}_${r}_${s.name}_${u}`;return console.log(`\u6B63\u5728\u90E8\u7F72\u5B9E\u4F8B\u5230\u5BB9\u5668${f}`),await n.docker.execCommand(`docker run -itd --restart=on-failure -v ${h}:/usr/source/instance.json:ro -v ${d}:/usr/source/config:ro -v /usr/sumor-cloud/ssl/${i}:/usr/source/ssl:ro -p ${u}:443 --name ${f} -d ${e}:${s.name}`),await n.disconnect(),f};var _o=t=>{let e=t.split("_");e.shift();let r=e.shift(),o=e.shift(),s=e.shift(),i,n,a;e.length>1?(n=e.shift(),i=parseInt(e.shift())):a=e.shift();let c={type:r,app:o,env:s,port:i,version:n,action:a};for(let m in c)c[m]||delete c[m];return c};var Ue=t=>{let e=typeof t;if(t===null)e="null";else if(e==="object"){let r=Object.prototype.toString.call(t);r==="[object Array]"?e="array":r==="[object RegExp]"&&(e="regexp")}return e};var P=(t,e)=>(Ue(e)==="array"&&(e=e.join(" ")),`${t} ${e};`);var te=t=>{let e=[];for(let r in t)e.push(P(r,t[r]));return e};var re=t=>{let e=[];for(let r in t)if(Ue(t[r])==="array")for(let o in t[r])e.push(t[r][o]);else e.push(t[r]);return e};var N=(t,e)=>(e=re(e),re([`${t} {`,e.map(r=>` ${r}`),"}"]));var bo=()=>N("server",["listen 80 default_server;","server_name _;","return 301 https://$host$request_uri;"]);var So=(t,e)=>N(`upstream ${t}_stream`,e.map(r=>{let o=["server"];return o.push(r.url),r.down?o.push("down"):r.backup?o.push("backup"):(r.weight&&!isNaN(r.weight)&&o.push(`weight=${r.weight}`),r.try&&!isNaN(r.try)&&(o.push(`max_fails=${r.try}`),r.wait&&!isNaN(r.wait)&&o.push(`fail_timeout=${r.wait}s`))),o.join(" ")+";"}));var Eo=t=>{let e;return t.instances.length>0?e=te({"proxy_set_header Host":"$host","proxy_set_header X-Real-IP":"$remote_addr","proxy_set_header X-Forwarded-For":"$remote_addr",proxy_pass:`https://${t.name}_stream`}):e=te({root:"/etc/nginx/pages",index:"no_instance.html"}),N("server",[te({listen:t.port+" ssl",server_name:t.domain,access_log:`/tmp/${t.name}_access.log`,error_log:`/tmp/${t.name}_error.log`,ssl_certificate:`ssl/${t.domain}/domain.cer`,ssl_certificate_key:`ssl/${t.domain}/domain.key`,ssl_client_certificate:`ssl/${t.domain}/ca.cer`,ssl_session_timeout:"5m",ssl_ciphers:"ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4",ssl_protocols:"TLSv1 TLSv1.1 TLSv1.2",ssl_prefer_server_ciphers:"on"}),N("location /",[e])])};var vo=(t,e)=>{e=e||{},e.user=e.user||"root";let r=[];for(let o of t)o.port=o.port||443,o.instances.length>0&&r.push(So(o.name,o.instances)),r.push(Eo(o));return re([te({user:e.user,worker_processes:1}),N("events",["worker_connections 1024;"]),N("http",[P("proxy_connect_timeout","600s"),P("proxy_send_timeout","600s"),P("proxy_read_timeout","600s"),P("server_tokens","off"),P("client_max_body_size","10m"),bo(),re(r)])]).join(`
533
- `)};var Qs=`<html>
532
+ `);for(let a in n){let c=n[a].split("|"),m={};for(let l=0;l<r.length;l++)m[r[l]]=c[l];i.push(m)}}return i}});var O=async(t,e)=>{let r;try{let o=await t.exec(e);r=parseFloat(o,10)}catch(o){console.log(o)}return r},ho=t=>({async system(){let e=await O(t,"cat /proc/uptime | awk '{print $1}'");return e=Date.now()-parseInt(e*1e3,10),{disk:{total:await O(t,"df -m --output=size / | awk 'NR==2{print $1}'"),used:await O(t,"df -m --output=used / | awk 'NR==2{print $1}'"),free:await O(t,"df -m --output=avail / | awk 'NR==2{print $1}'")},memory:{total:await O(t,"free -m | awk 'NR==2{print $2}'"),used:await O(t,"free -m | awk 'NR==2{print $3}'"),free:await O(t,"free -m | awk 'NR==2{print $4}'"),cache:await O(t,"free -m | awk 'NR==2{print $6}'")},cpu:{usage:await O(t,`top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4}'`),cores:await O(t,'cat /proc/cpuinfo | grep "processor" | wc -l')},uptime:e}}});import ei from"path";var yo=t=>({async install(e){await t.exec(`npm i -g ${e}`)},async start(e,r){try{await t.install("nodejs"),await t.install("npm")}catch(s){console.log(s)}let o=!0;try{await t.exec("pm2 -v")}catch{o=!1}o||await t.node.install("pm2"),await t.exec("npm i",{cwd:ei.dirname(r)});try{await t.exec(`pm2 start ${r} --name ${e}`)}catch{await t.exec(`pm2 restart ${e}`)}},async stop(e){await t.exec(`pm2 stop ${e}`),await t.exec(`pm2 delete ${e}`)},async logs(e){return await t.exec(`pm2 logs --nostream --lines 1000 ${e}`)}});var S=t=>{let e=new ue(t);return e.addTool("file",po),e.addTool("port",go),e.addTool("docker",wo),e.addTool("node",yo),e.addTool("monitor",ho),e};var $o=async t=>{let e={};for(let r in t.server){let o=S(t.server[r]),s=await o.docker.instances();s=s.filter(i=>i.instanceId.indexOf("sumor_app")===0),e[r]=s.map(i=>i.instanceId),await o.disconnect()}return e};import F from"fs-extra";var xo=async(t,e)=>{await x(t,"clean -df"),await x(t,`checkout ${e}`)};var _o=async({server:t,app:e,env:r,git:o,version:s,domain:i})=>{let n=S(t);if(!await(async()=>!!(await n.docker.images()).find($=>$.Repository===e&&$.Tag===s.name))()){console.log("\u5F00\u59CB\u6784\u5EFA\u4EE3\u7801");let g=o.url.split("/"),w=`${g[0]}//${o.username}:${o.password}@${g[2]}/${g.slice(3,g.length).join("/")}`,$=`${process.cwd()}/tmp/build/${e}/${s.name}`;if(!await F.exists($)){console.log(`\u6B63\u5728\u6784\u5EFA\u6E90\u4EE3\u7801\u5230${$}`),await F.ensureDir(`${process.cwd()}/tmp/build`);try{await je($,w),await xo($,s.id),await E("npm i",{cwd:$}),await E("npm run build",{cwd:$}),await F.remove($+"/web"),await F.remove($+"/node_modules"),await F.remove($+"/tmp")}catch(z){console.log(z)}}console.log("\u4EE3\u7801\u6784\u5EFA\u5B8C\u6210"),console.log(`\u6B63\u5728\u6784\u5EFA\u7248\u672C${s.name}\u955C\u50CF`),await n.docker.buildNode(e,s.name,$),console.log("\u6784\u5EFA\u7248\u672C\u955C\u50CF\u5B8C\u6210")}console.log("\u90E8\u7F72\u5BB9\u5668\u5B9E\u4F8B");let m=`${process.cwd()}/tmp/env/${e}/${r}`;console.log(`\u6B63\u5728\u914D\u7F6E\u73AF\u5883\u76F8\u5173\u4EE3\u7801\u5230${m}`);let l=`${process.cwd()}/assets/${e}/${r}`;await F.exists(l)&&await F.copy(l,m);let u=await n.port.getPort(),p={app:e,env:r,version:s.name,server:t.name,port:u,upTime:Date.now(),versionTime:s.committerDate},d=`/usr/sumor-cloud/env/${e}_${r}`;await n.file.putFolder(m,d),await F.remove(m);let h=`/usr/sumor-cloud/instance/${e}_${r}/${Date.now()}.json`;await n.file.writeFile(h,JSON.stringify(p,null,4));let f=`sumor_app_${e}_${r}_${s.name}_${u}`;return console.log(`\u6B63\u5728\u90E8\u7F72\u5B9E\u4F8B\u5230\u5BB9\u5668${f}`),await n.docker.execCommand(`docker run -itd --restart=on-failure -v ${h}:/usr/source/instance.json:ro -v ${d}:/usr/source/config:ro -v /usr/sumor-cloud/ssl/${i}:/usr/source/ssl:ro -p ${u}:443 --name ${f} -d ${e}:${s.name}`),await n.disconnect(),f};var bo=t=>{let e=t.split("_");e.shift();let r=e.shift(),o=e.shift(),s=e.shift(),i,n,a;e.length>1?(n=e.shift(),i=parseInt(e.shift())):a=e.shift();let c={type:r,app:o,env:s,port:i,version:n,action:a};for(let m in c)c[m]||delete c[m];return c};var ze=t=>{let e=typeof t;if(t===null)e="null";else if(e==="object"){let r=Object.prototype.toString.call(t);r==="[object Array]"?e="array":r==="[object RegExp]"&&(e="regexp")}return e};var P=(t,e)=>(ze(e)==="array"&&(e=e.join(" ")),`${t} ${e};`);var te=t=>{let e=[];for(let r in t)e.push(P(r,t[r]));return e};var re=t=>{let e=[];for(let r in t)if(ze(t[r])==="array")for(let o in t[r])e.push(t[r][o]);else e.push(t[r]);return e};var N=(t,e)=>(e=re(e),re([`${t} {`,e.map(r=>` ${r}`),"}"]));var So=()=>N("server",["listen 80 default_server;","server_name _;","return 301 https://$host$request_uri;"]);var Eo=(t,e)=>N(`upstream ${t}_stream`,e.map(r=>{let o=["server"];return o.push(r.url),r.down?o.push("down"):r.backup?o.push("backup"):(r.weight&&!isNaN(r.weight)&&o.push(`weight=${r.weight}`),r.try&&!isNaN(r.try)&&(o.push(`max_fails=${r.try}`),r.wait&&!isNaN(r.wait)&&o.push(`fail_timeout=${r.wait}s`))),o.join(" ")+";"}));var vo=t=>{let e;return t.instances.length>0?e=te({"proxy_set_header Host":"$host","proxy_set_header X-Real-IP":"$remote_addr","proxy_set_header X-Forwarded-For":"$remote_addr",proxy_pass:`https://${t.name}_stream`}):e=te({root:"/etc/nginx/pages",index:"no_instance.html"}),N("server",[te({listen:t.port+" ssl",server_name:t.domain,access_log:`/tmp/${t.name}_access.log`,error_log:`/tmp/${t.name}_error.log`,ssl_certificate:`ssl/${t.domain}/domain.cer`,ssl_certificate_key:`ssl/${t.domain}/domain.key`,ssl_client_certificate:`ssl/${t.domain}/ca.cer`,ssl_session_timeout:"5m",ssl_ciphers:"ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4",ssl_protocols:"TLSv1 TLSv1.1 TLSv1.2",ssl_prefer_server_ciphers:"on"}),N("location /",[e])])};var ko=(t,e)=>{e=e||{},e.user=e.user||"root";let r=[];for(let o of t)o.port=o.port||443,o.instances.length>0&&r.push(Eo(o.name,o.instances)),r.push(vo(o));return re([te({user:e.user,worker_processes:1}),N("events",["worker_connections 1024;"]),N("http",[P("proxy_connect_timeout","600s"),P("proxy_send_timeout","600s"),P("proxy_read_timeout","600s"),P("server_tokens","off"),P("client_max_body_size","10m"),So(),re(r)])]).join(`
533
+ `)};var ti=`<html>
534
534
  <head>
535
535
  <head>
536
536
  <meta charset="UTF-8" />
@@ -540,31 +540,31 @@ python_mirror=https://registry.npmmirror.com/mirrors/python/`;await t.file.write
540
540
  </head>
541
541
  <body>
542
542
  <h1>\u5E94\u7528\u6682\u65F6\u65E0\u6CD5\u8BBF\u95EE</h1><h3>\u5B9E\u4F8B\u672A\u4E0A\u7EBF</h3></body>
543
- </html>`,ko=()=>({noInstancePage:Qs});var ue=async(t,e,r,o)=>{let s={};for(let i in t.env)for(let n in t.env[i]){let{domain:a,entry:c}=t.env[i][n];s[c]=s[c]||{},s[c][a]=[];let l=(e[i]||{})[n]||{},u;for(let p in l)(l[p]||{}).live&&(u=p);for(let p in r){let d=t.server[p],h=r[p].map(f=>_o(f)).filter(f=>f.app===n&&f.env===i&&f.version===u);for(let f of h)s[c][a].push(`${d.iHost||d.host}:${f.port}`)}}for(let i in s){let n=[443,80],a=[];for(let f in s[i]){let g={name:f.replace(".","_"),port:443,domain:f,instances:s[i][f].map(w=>({url:w}))};a.push(g)}let c=vo(a),m=S(t.server[i]),l="/usr/sumor-cloud/site";await m.file.ensureDir(l),await m.file.ensureDir(l+"/pages"),await m.file.writeFile(`${l}/nginx.conf`,c);let{noInstancePage:u}=ko();await m.file.writeFile(`${l}/pages/no_instance.html`,u);let p="sumor_site";if(o&&await m.docker.delete(p),!(await m.docker.instances()).filter(f=>f.instanceId===p)[0]){let f="/usr/sumor-cloud/ssl";await m.file.ensureDir(f),console.log("\u6B63\u5728\u7AD9\u70B9\u5B9E\u4F8B\u521D\u59CB\u5316"),await m.docker.run({image:"nginx",name:p,folder:[{from:`${l}/nginx.conf`,to:"/etc/nginx/nginx.conf"},{from:`${l}/pages`,to:"/etc/nginx/pages"},{from:f,to:"/etc/nginx/ssl"},{from:"/tmp/sumor-cloud/site",to:"/tmp"},{from:"/tmp/sumor-cloud/site-nginx",to:"/var/log/nginx"}],port:n.map(g=>({from:g,to:g}))})}await m.docker.exec(p,"nginx -s stop"),await m.docker.exec(p,"nginx -c /etc/nginx/nginx.conf"),await m.disconnect()}};var ft=async(t,e)=>{let r=S(t);await r.docker.delete(e),await r.disconnect()};var To=async(t,e,r)=>{let o=S(t);await o.file.putFolder(r,`/usr/sumor-cloud/ssl/${e}`),await o.disconnect()};var ei=t=>{let e=new Date(t),r=e.getFullYear(),o=`0${e.getMonth()+1}`.slice(-2),s=`0${e.getDate()}`.slice(-2),i=`0${e.getHours()}`.slice(-2),n=`0${e.getMinutes()}`.slice(-2),a=`0${e.getSeconds()}`.slice(-2);return`${r}-${o}-${s} ${i}:${n}:${a}`},ze=t=>t<1024?`${t}MB`:(t=t/1024,t<1024?`${t.toFixed(2)}GB`:(t=t/1024,t<1024?`${t.toFixed(2)}TB`:(t=t/1024,`${t.toFixed(2)}PB`))),Oo=async t=>{let e=S(t),r=await e.monitor.system();return await e.disconnect(),`- CPU\uFF1A${r.cpu.cores}\u6838\uFF0C\u5DF2\u5360\u7528${r.cpu.usage}%
544
- - \u5185\u5B58\uFF1A\u5171${ze(r.memory.total)}\uFF0C\u5269\u4F59${ze(r.memory.free+r.memory.cache)}
545
- - \u786C\u76D8\uFF1A\u5171${ze(r.disk.total)}\uFF0C\u5269\u4F59${ze(r.disk.free)}
546
- - \u542F\u52A8\u65F6\u95F4\uFF1A${ei(r.uptime)}`};var Io=async(t,e)=>{try{let r=Date.now();console.log("\u6B63\u5728\u542F\u52A8\u90E8\u7F72");for(let a in t.server)t.server[a].name=a;console.log(`
543
+ </html>`,To=()=>({noInstancePage:ti});var fe=async(t,e,r,o)=>{let s={};for(let i in t.env)for(let n in t.env[i]){let{domain:a,entry:c}=t.env[i][n];s[c]=s[c]||{},s[c][a]=[];let l=(e[i]||{})[n]||{},u;for(let p in l)(l[p]||{}).live&&(u=p);for(let p in r){let d=t.server[p],h=r[p].map(f=>bo(f)).filter(f=>f.app===n&&f.env===i&&f.version===u);for(let f of h)s[c][a].push(`${d.iHost||d.host}:${f.port}`)}}for(let i in s){let n=[443,80],a=[];for(let f in s[i]){let g={name:f.replace(".","_"),port:443,domain:f,instances:s[i][f].map(w=>({url:w}))};a.push(g)}let c=ko(a),m=S(t.server[i]),l="/usr/sumor-cloud/site";await m.file.ensureDir(l),await m.file.ensureDir(l+"/pages"),await m.file.writeFile(`${l}/nginx.conf`,c);let{noInstancePage:u}=To();await m.file.writeFile(`${l}/pages/no_instance.html`,u);let p="sumor_site";if(o&&await m.docker.delete(p),!(await m.docker.instances()).filter(f=>f.instanceId===p)[0]){let f="/usr/sumor-cloud/ssl";await m.file.ensureDir(f),console.log("\u6B63\u5728\u7AD9\u70B9\u5B9E\u4F8B\u521D\u59CB\u5316"),await m.docker.run({image:"nginx",name:p,folder:[{from:`${l}/nginx.conf`,to:"/etc/nginx/nginx.conf"},{from:`${l}/pages`,to:"/etc/nginx/pages"},{from:f,to:"/etc/nginx/ssl"},{from:"/tmp/sumor-cloud/site",to:"/tmp"},{from:"/tmp/sumor-cloud/site-nginx",to:"/var/log/nginx"}],port:n.map(g=>({from:g,to:g}))})}await m.docker.exec(p,"nginx -s stop"),await m.docker.exec(p,"nginx -c /etc/nginx/nginx.conf"),await m.disconnect()}};var pt=async(t,e)=>{let r=S(t);await r.docker.delete(e),await r.disconnect()};var Oo=async(t,e,r)=>{let o=S(t);await o.file.putFolder(r,`/usr/sumor-cloud/ssl/${e}`),await o.disconnect()};var ri=t=>{let e=new Date(t),r=e.getFullYear(),o=`0${e.getMonth()+1}`.slice(-2),s=`0${e.getDate()}`.slice(-2),i=`0${e.getHours()}`.slice(-2),n=`0${e.getMinutes()}`.slice(-2),a=`0${e.getSeconds()}`.slice(-2);return`${r}-${o}-${s} ${i}:${n}:${a}`},Be=t=>t<1024?`${t}MB`:(t=t/1024,t<1024?`${t.toFixed(2)}GB`:(t=t/1024,t<1024?`${t.toFixed(2)}TB`:(t=t/1024,`${t.toFixed(2)}PB`))),No=async t=>{let e=S(t),r=await e.monitor.system();return await e.disconnect(),`- CPU\uFF1A${r.cpu.cores}\u6838\uFF0C\u5DF2\u5360\u7528${r.cpu.usage}%
544
+ - \u5185\u5B58\uFF1A\u5171${Be(r.memory.total)}\uFF0C\u5269\u4F59${Be(r.memory.free+r.memory.cache)}
545
+ - \u786C\u76D8\uFF1A\u5171${Be(r.disk.total)}\uFF0C\u5269\u4F59${Be(r.disk.free)}
546
+ - \u542F\u52A8\u65F6\u95F4\uFF1A${ri(r.uptime)}`};var Co=async(t,e)=>{try{let r=Date.now();console.log("\u6B63\u5728\u542F\u52A8\u90E8\u7F72");for(let a in t.server)t.server[a].name=a;console.log(`
547
547
 
548
548
  ==================== \u66F4\u65B0\u8BC1\u4E66 ====================
549
- `);for(let a in t.env)for(let c in t.env[a]){let{domain:m,entry:l}=t.env[a][c],u=`${process.cwd()}/assets/ssl/${m}`;u&&t.server[l]&&(console.log(`\u66F4\u65B0${m}\u57DF\u540D\u8BC1\u4E66\u5230${l}\u670D\u52A1\u5668`),await To(t.server[l],m,u))}console.log(`
549
+ `);for(let a in t.env)for(let c in t.env[a]){let{domain:m,entry:l}=t.env[a][c],u=`${process.cwd()}/assets/ssl/${m}`;u&&t.server[l]&&(console.log(`\u66F4\u65B0${m}\u57DF\u540D\u8BC1\u4E66\u5230${l}\u670D\u52A1\u5668`),await Oo(t.server[l],m,u))}console.log(`
550
550
 
551
551
  ==================== \u68C0\u67E5\u5E94\u7528\u7248\u672C ====================
552
- `);let o={};for(let a in t.source){console.log(`\u5E94\u7528${a}\u6B63\u5728\u68C0\u67E5\u5E94\u7528\u7248\u672C`),o[a]=await uo(a,t.source[a]),console.log("\u5E94\u7528\u7248\u672C\u5217\u8868");for(let c in o[a])console.log(`- ${c}${o[a][c].beta?" \u6D4B\u8BD5\u7248":""}`);console.log(`\u5E94\u7528${a}\u68C0\u67E5\u5E94\u7528\u7248\u672C\u5B8C\u6210`)}console.log(`
552
+ `);let o={};for(let a in t.source){console.log(`\u5E94\u7528${a}\u6B63\u5728\u68C0\u67E5\u5E94\u7528\u7248\u672C`),o[a]=await fo(a,t.source[a]),console.log("\u5E94\u7528\u7248\u672C\u5217\u8868");for(let c in o[a])console.log(`- ${c}${o[a][c].beta?" \u6D4B\u8BD5\u7248":""}`);console.log(`\u5E94\u7528${a}\u68C0\u67E5\u5E94\u7528\u7248\u672C\u5B8C\u6210`)}console.log(`
553
553
 
554
554
  ==================== \u83B7\u53D6\u670D\u52A1\u5668\u8FD0\u884C\u72B6\u6001 ====================
555
- `);for(let a in t.server){let c=await Oo(t.server[a]);console.log(`\u670D\u52A1\u5668${a}\u8FD0\u884C\u72B6\u6001`),console.log(c)}console.log(`
555
+ `);for(let a in t.server){let c=await No(t.server[a]);console.log(`\u670D\u52A1\u5668${a}\u8FD0\u884C\u72B6\u6001`),console.log(c)}console.log(`
556
556
 
557
557
  ==================== \u83B7\u53D6\u670D\u52A1\u5668\u5B9E\u4F8B\u72B6\u6001 ====================
558
- `);let s=await yo(t);for(let a in s){console.log(`\u670D\u52A1\u5668${a}\u73B0\u5B58\u5B9E\u4F8B\u5217\u8868`);for(let c in s[a])console.log(`- ${s[a][c]}`)}console.log(`
558
+ `);let s=await $o(t);for(let a in s){console.log(`\u670D\u52A1\u5668${a}\u73B0\u5B58\u5B9E\u4F8B\u5217\u8868`);for(let c in s[a])console.log(`- ${s[a][c]}`)}console.log(`
559
559
 
560
560
  ==================== \u90E8\u7F72\u5E94\u7528 ====================
561
- `);let i={},n={};await No.remove(process.cwd()+"/tmp/env");for(let a in t.env){let c=t.env[a];for(let m in c){let{domain:l}=c[m],p=(e[a]||{})[m]||{},d;for(let f in p)(p[f]||{}).live&&(d=f);let h=Object.keys(p);for(let f in t.server){let g=s[f].filter(w=>{let z=w.split("_")[4];return w.indexOf(`sumor_app_${m}_${a}`)===0&&h.indexOf(z)<0});if(g.length>0){console.log(`\u6B63\u5728\u6E05\u9664${a}\u73AF\u5883\u5E94\u7528${m}\u5728\u670D\u52A1\u5668${f}\u4E2D\u7684\u8FC7\u671F\u5B9E\u4F8B`),s[f]=s[f].filter(w=>g.indexOf(w)<0),await ue(t,e,s);for(let w of g)console.log(`\u6E05\u9664\u5B9E\u4F8B${w}`),await ft(t.server[f],w)}}console.log(`\u6B63\u5728\u90E8\u7F72${a}\u73AF\u5883\u5E94\u7528${m}\uFF0C\u4E0A\u7EBF\u7248\u672C\uFF1A${d||"\u65E0"}`);for(let f in p){let g=p[f]||{};for(let w in g.instance){let $=g.instance[w];console.log(`\u8BA1\u5212\u90E8\u7F72${f}\u7248\u672C${$}\u4E2A\u5B9E\u4F8B\u5230${w}\u670D\u52A1\u5668`);let z=s[w].filter(C=>C.indexOf(`sumor_app_${m}_${a}_${f}`)===0),j=z.length;if(j<$){let C=$-j;console.log(`\u5F53\u524D\u5B9E\u4F8B\u4E2A\u6570\uFF1A${j}\uFF0C\u9700\u8981\u6269\u5BB9${C}\u4E2A`);for(let B=0;B<C;B++){console.log(`\u6B63\u5728\u6269\u5BB9\u7B2C${B+1}\u4E2A`);let R=o[m][f];if(R.beta&&!i[`${m}|${f}`]){let pe=`${process.cwd()}/tmp/build/${m}/${R.name}`;await No.remove(pe),i[`${m}|${f}`]=!0}if(R.beta&&!n[`${m}|${f}|${w}`]){let pe=S(t.server[w]);await pe.docker.deleteImage(m,f),await pe.disconnect(),n[`${m}|${f}|${w}`]=!0}let zo=await xo({server:t.server[w],app:m,env:a,git:t.source[m],version:R,domain:l});s[w].unshift(zo),await ue(t,e,s)}console.log(`\u6269\u5BB9${C}\u4E2A\u5B8C\u6210`)}else if(j>$){let C=j-$;console.log(`\u5F53\u524D\u5B9E\u4F8B\u4E2A\u6570\uFF1A${j}\uFF0C\u9700\u8981\u7F29\u51CF${C}\u4E2A`);let B=z.slice($,j);s[w]=s[w].filter(R=>B.indexOf(R)<0),await ue(t,e,s);for(let R of B)await ft(t.server[w],R);console.log(`\u7F29\u51CF${C}\u4E2A\u5B8C\u6210`)}else console.log("\u5B9E\u4F8B\u6570\u91CF\u5DF2\u7B26\u5408\u8BA1\u5212\uFF0C\u65E0\u9700\u4FEE\u6539")}}console.log(`\u90E8\u7F72${a}\u73AF\u5883\u5E94\u7528${m}\u5B8C\u6210`)}}console.log(`
561
+ `);let i={},n={};await Io.remove(process.cwd()+"/tmp/env");for(let a in t.env){let c=t.env[a];for(let m in c){let{domain:l}=c[m],p=(e[a]||{})[m]||{},d;for(let f in p)(p[f]||{}).live&&(d=f);let h=Object.keys(p);for(let f in t.server){let g=s[f].filter(w=>{let z=w.split("_")[4];return w.indexOf(`sumor_app_${m}_${a}`)===0&&h.indexOf(z)<0});if(g.length>0){console.log(`\u6B63\u5728\u6E05\u9664${a}\u73AF\u5883\u5E94\u7528${m}\u5728\u670D\u52A1\u5668${f}\u4E2D\u7684\u8FC7\u671F\u5B9E\u4F8B`),s[f]=s[f].filter(w=>g.indexOf(w)<0),await fe(t,e,s);for(let w of g)console.log(`\u6E05\u9664\u5B9E\u4F8B${w}`),await pt(t.server[f],w)}}console.log(`\u6B63\u5728\u90E8\u7F72${a}\u73AF\u5883\u5E94\u7528${m}\uFF0C\u4E0A\u7EBF\u7248\u672C\uFF1A${d||"\u65E0"}`);for(let f in p){let g=p[f]||{};for(let w in g.instance){let $=g.instance[w];console.log(`\u8BA1\u5212\u90E8\u7F72${f}\u7248\u672C${$}\u4E2A\u5B9E\u4F8B\u5230${w}\u670D\u52A1\u5668`);let z=s[w].filter(C=>C.indexOf(`sumor_app_${m}_${a}_${f}`)===0),j=z.length;if(j<$){let C=$-j;console.log(`\u5F53\u524D\u5B9E\u4F8B\u4E2A\u6570\uFF1A${j}\uFF0C\u9700\u8981\u6269\u5BB9${C}\u4E2A`);for(let B=0;B<C;B++){console.log(`\u6B63\u5728\u6269\u5BB9\u7B2C${B+1}\u4E2A`);let R=o[m][f];if(R.beta&&!i[`${m}|${f}`]){let de=`${process.cwd()}/tmp/build/${m}/${R.name}`;await Io.remove(de),i[`${m}|${f}`]=!0}if(R.beta&&!n[`${m}|${f}|${w}`]){let de=S(t.server[w]);await de.docker.deleteImage(m,f),await de.disconnect(),n[`${m}|${f}|${w}`]=!0}let Bo=await _o({server:t.server[w],app:m,env:a,git:t.source[m],version:R,domain:l});s[w].unshift(Bo),await fe(t,e,s)}console.log(`\u6269\u5BB9${C}\u4E2A\u5B8C\u6210`)}else if(j>$){let C=j-$;console.log(`\u5F53\u524D\u5B9E\u4F8B\u4E2A\u6570\uFF1A${j}\uFF0C\u9700\u8981\u7F29\u51CF${C}\u4E2A`);let B=z.slice($,j);s[w]=s[w].filter(R=>B.indexOf(R)<0),await fe(t,e,s);for(let R of B)await pt(t.server[w],R);console.log(`\u7F29\u51CF${C}\u4E2A\u5B8C\u6210`)}else console.log("\u5B9E\u4F8B\u6570\u91CF\u5DF2\u7B26\u5408\u8BA1\u5212\uFF0C\u65E0\u9700\u4FEE\u6539")}}console.log(`\u90E8\u7F72${a}\u73AF\u5883\u5E94\u7528${m}\u5B8C\u6210`)}}console.log(`
562
562
 
563
563
  ==================== \u5B9E\u4F8B\u60C5\u51B5 ====================
564
- `),console.log(s),await ue(t,e,s),console.log(`\u6240\u6709\u5E94\u7528\u5DF2\u5B8C\u6210\u90E8\u7F72 ${Date.now()-r}ms`)}catch(r){console.log(r)}};var Co=async t=>{t=t||{},t.root=t.root||process.cwd();let e=await L(t.root,"scope");t.type&&await mt(t.root,"scope",t.type);let r=await L(t.root,"scale");t.type&&await mt(t.root,"scale",t.type),await Io(e,r)};import ti from"inquirer";var Be=async({value:t,message:e,choices:r})=>t!==void 0?t:(await ti.prompt({name:"value",type:"list",message:e,choices:r})).value;import Ro from"fs-extra";var Do=async(t,e,r)=>{r=r||{},r.root=r.root||process.cwd();let o=await L(r.root,"scope"),s=await L(r.root,"scale");console.log(`\u6B63\u5728\u6253\u5370${t}\u5E94\u7528${e}\u73AF\u5883\u7684\u65E5\u5FD7`);try{e=await Be({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u73AF\u5883",choices:Object.keys(s).map(m=>({name:m,value:m}))}),t=await Be({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u5E94\u7528",choices:Object.keys(s[e]).map(m=>({name:m,value:m}))});let i=s[e][t],n=[];for(let m in i){let l=i[m].live;n.push({name:`${m} ${l?" (live)":""}`,value:m})}let a=await Be({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u7248\u672C",choices:n}),c=i[a].instance;for(let m in c){console.log(`\u6B63\u5728\u6253\u5370${m}\u670D\u52A1\u5668\u4E0A\u7684\u65E5\u5FD7`);let l=S(o.server[m]);try{let u=await l.docker.instances();u=u.filter(p=>p.instanceId.indexOf(`sumor_app_${t}_${e}_${a}`)===0),u=u.map(p=>p.instanceId);for(let p of u){console.log(`\u6B63\u5728\u6253\u5370\u5B9E\u4F8B${p}\u7684\u65E5\u5FD7`),await l.file.ensureDir("/tmp/sumor-logs");let d=`docker cp ${p}:/usr/source/tmp/main.log /tmp/sumor-logs/${p}.log`;await l.exec(d);let h=await l.exec(`cat /tmp/sumor-logs/${p}.log`),f=`${r.root}/tmp/logs/${t}/${e}/${p}.log`;await Ro.ensureFile(f),await Ro.writeFile(f,h);let g=await l.exec(`docker logs ${p}`);console.log(g)}}catch(u){console.log(u)}await l.disconnect()}}catch{console.error(`\u73AF\u5883${e}\u4E2D\u4E0D\u5B58\u5728\u5E94\u7528${t}`)}};import He from"fs-extra";import{execSync as ii}from"child_process";import ri from"axios";var Ao=async({registry:t,username:e,password:r})=>{if(!e||!r)throw new Error("\u83B7\u53D6\u6388\u6743\u5931\u8D25\uFF0CNPM\u767B\u5F55\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A");let o=`${t}/-/user/org.couchdb.user:${e}`;try{return(await ri.put(o,{name:e,password:r})).data.token}catch{throw new Error("\u83B7\u53D6\u6388\u6743\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5NPM\u767B\u9646\u4FE1\u606F")}};var Lo=({registry:t,auth:e,token:r})=>{let o="";return o+=`registry=${t}
564
+ `),console.log(s),await fe(t,e,s),console.log(`\u6240\u6709\u5E94\u7528\u5DF2\u5B8C\u6210\u90E8\u7F72 ${Date.now()-r}ms`)}catch(r){console.log(r)}};var Ro=async t=>{t=t||{},t.root=t.root||process.cwd();let e=await L(t.root,"scope");t.type&&await lt(t.root,"scope",t.type);let r=await L(t.root,"scale");t.type&&await lt(t.root,"scale",t.type),await Co(e,r)};import oi from"inquirer";var He=async({value:t,message:e,choices:r})=>t!==void 0?t:(await oi.prompt({name:"value",type:"list",message:e,choices:r})).value;import Do from"fs-extra";var Ao=async(t,e,r)=>{r=r||{},r.root=r.root||process.cwd();let o=await L(r.root,"scope"),s=await L(r.root,"scale");console.log(`\u6B63\u5728\u6253\u5370${t}\u5E94\u7528${e}\u73AF\u5883\u7684\u65E5\u5FD7`);try{e=await He({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u73AF\u5883",choices:Object.keys(s).map(m=>({name:m,value:m}))}),t=await He({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u5E94\u7528",choices:Object.keys(s[e]).map(m=>({name:m,value:m}))});let i=s[e][t],n=[];for(let m in i){let l=i[m].live;n.push({name:`${m} ${l?" (live)":""}`,value:m})}let a=await He({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u7248\u672C",choices:n}),c=i[a].instance;for(let m in c){console.log(`\u6B63\u5728\u6253\u5370${m}\u670D\u52A1\u5668\u4E0A\u7684\u65E5\u5FD7`);let l=S(o.server[m]);try{let u=await l.docker.instances();u=u.filter(p=>p.instanceId.indexOf(`sumor_app_${t}_${e}_${a}`)===0),u=u.map(p=>p.instanceId);for(let p of u){console.log(`\u6B63\u5728\u6253\u5370\u5B9E\u4F8B${p}\u7684\u65E5\u5FD7`),await l.file.ensureDir("/tmp/sumor-logs");let d=`docker cp ${p}:/usr/source/tmp/main.log /tmp/sumor-logs/${p}.log`;await l.exec(d);let h=await l.exec(`cat /tmp/sumor-logs/${p}.log`),f=`${r.root}/tmp/logs/${t}/${e}/${p}.log`;await Do.ensureFile(f),await Do.writeFile(f,h);let g=await l.exec(`docker logs ${p}`);console.log(g)}}catch(u){console.log(u)}await l.disconnect()}}catch{console.error(`\u73AF\u5883${e}\u4E2D\u4E0D\u5B58\u5728\u5E94\u7528${t}`)}};import Ge from"fs-extra";import{execSync as ai}from"child_process";import si from"axios";var Lo=async({registry:t,username:e,password:r})=>{if(!e||!r)throw new Error("\u83B7\u53D6\u6388\u6743\u5931\u8D25\uFF0CNPM\u767B\u5F55\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A");let o=`${t}/-/user/org.couchdb.user:${e}`;try{return(await si.put(o,{name:e,password:r})).data.token}catch{throw new Error("\u83B7\u53D6\u6388\u6743\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5NPM\u767B\u9646\u4FE1\u606F")}};var Fo=({registry:t,auth:e,token:r})=>{let o="";return o+=`registry=${t}
565
565
  `,e&&(o+=`${t.replace("http:","")}/:_auth=${e}
566
566
  `,o+=`${t.replace("http:","")}/:email=registry@sumor.com
567
567
  `),r&&(o+=`${t.replace("http:","")}/:_authToken="${r}"
568
- `),o};import Fo from"fs-extra";import si from"path";import{exec as oi}from"child_process";var fe=(t,e,r)=>new Promise((o,s)=>{let i=oi(t,e),n="",a="",c=m=>(m=m.toString().replace(/\r\n/g,`
568
+ `),o};import Po from"fs-extra";import ni from"path";import{exec as ii}from"child_process";var pe=(t,e,r)=>new Promise((o,s)=>{let i=ii(t,e),n="",a="",c=m=>(m=m.toString().replace(/\r\n/g,`
569
569
  `).replace(/\r/g,`
570
- `),m);i.stdout.on("data",async m=>{m=c(m),n+=m,r&&r(m)}),i.stderr.on("data",async m=>{m=c(m),n+=m,a+=m,r&&r(m)}),i.on("close",async m=>{m!==0?s(a):o(n)})});var Po=async({registry:t,target:e,npmrc:r,force:o,tag:s})=>{s=s||"latest";let i=si.normalize(`${e}/.npmrc`).replace(/\\/g,"/");await Fo.writeFile(i,r);let n=await Fo.readJson(`${e}/package.json`),a=`${n.name}@${n.version}`;try{await fe(`npm publish --allow-same-version --access public --tag ${s} --registry=${t} --userconfig=${i}`,{cwd:e}),console.log(`NPM\u5305${a}\u5DF2\u53D1\u5E03 ${e}`)}catch(c){let m;if(typeof c=="object"&&(m=c.message),typeof c=="string"&&(m=c),m&&m.indexOf("EPUBLISHCONFLICT")>=0)if(o){console.log(`\u4ED3\u5E93\u5DF2\u5B58\u5728\u8BE5\u7248\u672C${a}\uFF0C\u5C06\u5220\u9664\u91CD\u65B0\u53D1\u5E03`);let l=!1;try{await fe(`npm unpublish --registry=${t} --userconfig=${i} ${a}`,{cwd:e})}catch{l=!0}l||await fe(`npm publish --allow-same-version --access public --tag ${s} --registry=${t} --userconfig=${i}`,{cwd:e}),console.log(`NPM\u5305${a}\u5DF2\u53D1\u5E03 ${e}`)}else console.log("\u5DF2\u5B58\u5728\u8BE5\u7248\u672C");else console.log(c.message),console.log(c),console.log("\u53D1\u5E03\u5931\u8D25")}try{await fe(`npm dist-tag add ${a} ${s} --registry=${t} --userconfig=${i}`,{cwd:e})}catch(c){console.log(c.message),console.log(c),console.log("\u6807\u7B7E\u66F4\u65B0\u5931\u8D25")}};var jo=async({path:t,name:e,version:r,force:o,tag:s},i)=>{let{username:n,password:a,registry:c}=i;await He.exists(`${t}/package.json`)||await He.writeJson(`${t}/package.json`,{});let m=await He.readJson(`${t}/package.json`);if(m.version=r||m.version,m.name=e||m.name,console.log(`\u6B63\u5728\u66F4\u65B0\u5305\u4FE1\u606F${r}`),await He.writeJson(`${t}/package.json`,m),c){console.log("\u6B63\u5728\u83B7\u53D6NPM\u4ED3\u5E93\u6388\u6743");let l=Buffer.from(`${n}:${a}`).toString("base64"),u=await Ao({registry:c,username:n,password:a}),p=Lo({registry:c,auth:l,token:u});console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}`),await Po({registry:c,target:t,npmrc:p,force:o,tag:s})}else{let l="https://registry.npmjs.org";console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}\u5230${l}`),ii(`npm publish --tag ${s||"latest"} --registry ${l} --access public`,{cwd:t,stdio:"inherit"})}};var Mo=async({name:t,version:e,beta:r,registry:o,username:s,password:i})=>{let n={username:s,password:i,registry:o},a=`${process.cwd()}/output/production`;await jo({path:a,name:t,version:e,tag:r?"beta":void 0,force:!0},n)};var Uo=async()=>{let t=new ni,r=(await ai.readJson(`${H}/package.json`)).version||"0.0.0";no(r),t.name("sumor").version(r||"0.0.0","-v, --version"),t.command("publish <version>").description("\u53D1\u5E03\u7A0B\u5E8F\u5230NPM\u5305\u4ED3\u5E93").option("-b, --beta","\u53D1\u5E03\u6D4B\u8BD5\u7248").option("-n, --name [name]","\u53D1\u5E03\u5305\u540D\u79F0").option("-r, --registry [registry]","\u4ED3\u5E93\u5730\u5740").option("-u, --username [username]","\u7528\u6237\u540D").option("-p, --password [password]","\u5BC6\u7801").action(async(o,s)=>{await Mo({version:o,...s})}),t.command("dev").description("\u5F00\u53D1").action(async()=>{await Ie()}),t.command("build").description("\u6253\u5305\u4F9D\u8D56\u5E93").option("-d, --debug","\u8C03\u8BD5\u6A21\u5F0F").option("-t, --type [name]","\u6784\u5EFA\u73AF\u5883\uFF0Capp\u3001vue\u3001node").action(async o=>{await Ce(o)}),t.command("setup").description("\u5B89\u88C5").action(async()=>{await Re()}),t.command("preview").description("\u8BD5\u8FD0\u884C").action(async()=>{await De()}),t.command("run").description("\u8FD0\u884C").action(async()=>{await Ae()}),t.command("deploy").description("\u90E8\u7F72").option("-t, --type [type]","\u6307\u5B9A\u914D\u7F6E\u6587\u4EF6\u7C7B\u578B\uFF0C\u5982 yaml json").action(async o=>{await Co(o)}),t.command("log [app] [env]").description("\u67E5\u770B\u65E5\u5FD7").action(async(o,s)=>{await Do(o,s)}),t.parse(process.argv)};var vd={dev:Ie,build:Ce,setup:Re,preview:De,run:Ae,cli:Uo};export{vd as default};
570
+ `),m);i.stdout.on("data",async m=>{m=c(m),n+=m,r&&r(m)}),i.stderr.on("data",async m=>{m=c(m),n+=m,a+=m,r&&r(m)}),i.on("close",async m=>{m!==0?s(a):o(n)})});var jo=async({registry:t,target:e,npmrc:r,force:o,tag:s})=>{s=s||"latest";let i=ni.normalize(`${e}/.npmrc`).replace(/\\/g,"/");await Po.writeFile(i,r);let n=await Po.readJson(`${e}/package.json`),a=`${n.name}@${n.version}`;try{await pe(`npm publish --allow-same-version --access public --tag ${s} --registry=${t} --userconfig=${i}`,{cwd:e}),console.log(`NPM\u5305${a}\u5DF2\u53D1\u5E03 ${e}`)}catch(c){let m;if(typeof c=="object"&&(m=c.message),typeof c=="string"&&(m=c),m&&m.indexOf("EPUBLISHCONFLICT")>=0)if(o){console.log(`\u4ED3\u5E93\u5DF2\u5B58\u5728\u8BE5\u7248\u672C${a}\uFF0C\u5C06\u5220\u9664\u91CD\u65B0\u53D1\u5E03`);let l=!1;try{await pe(`npm unpublish --registry=${t} --userconfig=${i} ${a}`,{cwd:e})}catch{l=!0}l||await pe(`npm publish --allow-same-version --access public --tag ${s} --registry=${t} --userconfig=${i}`,{cwd:e}),console.log(`NPM\u5305${a}\u5DF2\u53D1\u5E03 ${e}`)}else console.log("\u5DF2\u5B58\u5728\u8BE5\u7248\u672C");else console.log(c.message),console.log(c),console.log("\u53D1\u5E03\u5931\u8D25")}try{await pe(`npm dist-tag add ${a} ${s} --registry=${t} --userconfig=${i}`,{cwd:e})}catch(c){console.log(c.message),console.log(c),console.log("\u6807\u7B7E\u66F4\u65B0\u5931\u8D25")}};var Mo=async({path:t,name:e,version:r,force:o,tag:s},i)=>{let{username:n,password:a,registry:c}=i;await Ge.exists(`${t}/package.json`)||await Ge.writeJson(`${t}/package.json`,{});let m=await Ge.readJson(`${t}/package.json`);if(m.version=r||m.version,m.name=e||m.name,console.log(`\u6B63\u5728\u66F4\u65B0\u5305\u4FE1\u606F${r}`),await Ge.writeJson(`${t}/package.json`,m),c){console.log("\u6B63\u5728\u83B7\u53D6NPM\u4ED3\u5E93\u6388\u6743");let l=Buffer.from(`${n}:${a}`).toString("base64"),u=await Lo({registry:c,username:n,password:a}),p=Fo({registry:c,auth:l,token:u});console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}`),await jo({registry:c,target:t,npmrc:p,force:o,tag:s})}else{let l="https://registry.npmjs.org";console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}\u5230${l}`),ai(`npm publish --tag ${s||"latest"} --registry ${l} --access public`,{cwd:t,stdio:"inherit"})}};var Uo=async({name:t,version:e,beta:r,registry:o,username:s,password:i})=>{let n={username:s,password:i,registry:o},a=`${process.cwd()}/output/production`;await Mo({path:a,name:t,version:e,tag:r?"beta":void 0,force:!0},n)};var zo=async()=>{let t=new ci,r=(await mi.readJson(`${H}/package.json`)).version||"0.0.0";ao(r),t.name("sumor").version(r||"0.0.0","-v, --version"),t.command("publish <version>").description("\u53D1\u5E03\u7A0B\u5E8F\u5230NPM\u5305\u4ED3\u5E93").option("-b, --beta","\u53D1\u5E03\u6D4B\u8BD5\u7248").option("-n, --name [name]","\u53D1\u5E03\u5305\u540D\u79F0").option("-r, --registry [registry]","\u4ED3\u5E93\u5730\u5740").option("-u, --username [username]","\u7528\u6237\u540D").option("-p, --password [password]","\u5BC6\u7801").action(async(o,s)=>{await Uo({version:o,...s})}),t.command("dev").description("\u5F00\u53D1").action(async()=>{await Ce()}),t.command("build").description("\u6253\u5305\u4F9D\u8D56\u5E93").option("-d, --debug","\u8C03\u8BD5\u6A21\u5F0F").option("-t, --type [name]","\u6784\u5EFA\u73AF\u5883\uFF0Capp\u3001vue\u3001node").action(async o=>{await Re(o)}),t.command("setup").description("\u5B89\u88C5").action(async()=>{await De()}),t.command("preview").description("\u8BD5\u8FD0\u884C").action(async()=>{await Ae()}),t.command("run").description("\u8FD0\u884C").action(async()=>{await Le()}),t.command("deploy").description("\u90E8\u7F72").option("-t, --type [type]","\u6307\u5B9A\u914D\u7F6E\u6587\u4EF6\u7C7B\u578B\uFF0C\u5982 yaml json").action(async o=>{await Ro(o)}),t.command("log [app] [env]").description("\u67E5\u770B\u65E5\u5FD7").action(async(o,s)=>{await Ao(o,s)}),t.parse(process.argv)};var Td={dev:Ce,build:Re,setup:De,preview:Ae,run:Le,cli:zo};export{Td as default};
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"sumor","type":"module","bin":{"sumor":"cli.js","sr":"cli.js"},"main":"./index.es.js","module":"./index.es.js","exports":{".":{"import":"./index.es.js"}},"dependencies":{"@vitejs/plugin-vue":"^4.2.3","chalk":"^5.3.0","commander":"^11.0.0","esbuild":"^0.19.3","fs-extra":"^11.1.1","vite":"^4.4.9","axios":"^1.4.0","@alicloud/sms-sdk":"^1.1.6","ali-oss":"6.1.1","body-parser":"^1.20.1","compression":"^1.7.4","cookie-parser":"^1.4.6","express":"^4.18.2","knex":"^2.1.0","multer":"^1.4.2","mysql2":"^3.1.0","serve-static":"^1.14.1","spdy":"^4.0.2","uuid":"^3.3.2","glob":"^10.3.4","jsrsasign":"^10.8.6","yaml":"^2.3.2","chokidar":"^3.5.3","http-proxy-middleware":"^2.0.6","archiver":"^2.1.1","extract-zip":"^1.6.6","inquirer":"^8.2.5","node-ssh":"^6.0.0","os-utils":"0.0.14"},"version":"1.2.0"}
1
+ {"name":"sumor","type":"module","bin":{"sumor":"cli.js","sr":"cli.js"},"main":"./index.es.js","module":"./index.es.js","exports":{".":{"import":"./index.es.js"}},"dependencies":{"@vitejs/plugin-vue":"^4.2.3","chalk":"^5.3.0","commander":"^11.0.0","esbuild":"^0.19.3","fs-extra":"^11.1.1","vite":"^4.4.9","axios":"^1.4.0","@alicloud/sms-sdk":"^1.1.6","ali-oss":"6.1.1","body-parser":"^1.20.1","compression":"^1.7.4","cookie-parser":"^1.4.6","express":"^4.18.2","knex":"^2.1.0","multer":"^1.4.2","mysql2":"^3.1.0","serve-static":"^1.14.1","spdy":"^4.0.2","uuid":"^3.3.2","glob":"^10.3.4","jsrsasign":"^10.8.6","yaml":"^2.3.2","chokidar":"^3.5.3","http-proxy-middleware":"^2.0.6","archiver":"^2.1.1","extract-zip":"^1.6.6","inquirer":"^8.2.5","node-ssh":"^6.0.0","os-utils":"0.0.14"},"version":"1.2.1"}