sumor 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.es.js CHANGED
@@ -1,26 +1,26 @@
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=`,
2
- meta:{keepAlive:true}`),l.routes)for(let d of l.routes)o.push(` {
3
- path: "${d}",
4
- component: ()=>import("${m}"),
5
- props: true${p}
1
+ import Xo from"chokidar";var lt=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 Bo from"@vitejs/plugin-vue";import Ho from"fs-extra";import Go from"vite-plugin-rewrite-all";var ut={"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 ft=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 zo=(t,e)=>{let r="";for(let s in t)r+=`$${s}:${t[s]};
2
+ `;for(let s in e)r+=`$${s}:$${e[s]};
3
+ `;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}},pt=t=>(t=ft(t),zo(t,ut));var dt=t=>{let e=pt(t);return{preprocessorOptions:{scss:{additionalData:e.scss},less:{modifyVars:e.less,javascriptEnabled:!0}}}};import{pathToFileURL as Jo}from"url";var gt=async(t,e)=>{let r={};await Ho.exists(process.cwd()+"/vite.config.js")&&(r=(await import(Jo(process.cwd()+"/vite.config.js"))).default);let o=t.config.styleVars,s=dt(o),i=t.uiPort;return r=Object.assign({root:process.cwd()+"/tmp/web",base:"/",publicDir:process.cwd()+"/web/public",cacheDir:process.cwd()+"/tmp/web/.vite"},r),r.server=Object.assign({},r.server,{server:{middlewareMode:"html"},port:i}),r.plugins=[Go(),Bo()].concat(r.plugins),r.css=Object.assign({},r.css,s),r};import we from"path";import Wo from"fs-extra";var he=async t=>{let e=t.root,r={root:e,pages:we.join(e,"/web/pages"),stores:we.join(e,"/web/stores"),tmp:we.join(e,"/tmp"),tmpWeb:we.join(e,"/tmp/web")};for(let o in r)r[o]=r[o].replace(/\\/g,"/"),await Wo.ensureDir(r[o]);return r};var oe=async t=>{let e=await he(t);return await gt(t,e)};import j from"fs-extra";import Ko from"node:path";import{fileURLToPath as Vo}from"node:url";var B=Ko.dirname(Vo(import.meta.url));var wt=async(t,e,r)=>{let o=`${B}/template/web`,s=await j.exists(`${e.tmpWeb}/index.html`);(r||!s)&&await j.copy(`${o}/index.html`,`${e.tmpWeb}/index.html`);let i=await j.exists(`${e.tmpWeb}/src`);(r||!i)&&await j.copy(`${o}/src`,`${e.tmpWeb}/src`);let n=`${e.root}/web/Frame.vue`,m=await j.exists(n);(r||m)&&await j.copy(`${o}/AppWithFrame.vue`,`${e.tmpWeb}/src/App.vue`);let a={dark:!!t.config.dark};await j.writeFile(`${e.tmpWeb}/src/env.js`,`export default ${JSON.stringify(a,null,4)}`)};import ye from"yaml";import v from"fs-extra";import Be from"fs-extra";var H=async(t,e)=>{await Be.ensureFile(t),await Be.readFile(t,"utf-8")!==e&&await Be.writeFile(t,e)};var se=async(t,e)=>{let r=await v.exists(`${t}.json`),o=await v.exists(`${t}.yaml`),s=await v.exists(`${t}.yml`),i={};if(s){let n=await v.readFile(`${t}.yml`,"utf-8");i=ye.parse(n)}else if(o){let n=await v.readFile(`${t}.yaml`,"utf-8");i=ye.parse(n)}else r?i=await v.readJson(`${t}.json`):e||(await v.ensureFile(`${t}.yml`),await v.writeFile(`${t}.yml`,ye.stringify(i)));return!e&&(r||o)&&!s&&(await v.remove(`${t}.json`),await v.remove(`${t}.yaml`),await H(`${t}.yml`,ye.stringify(i))),i};import Yo from"path";import{glob as Zo}from"glob";var $e=async(t,e)=>{e=e||{};let r=await Zo(t,e);return r=r.map(o=>(o=Yo.normalize(o),o=o.replace(/\\/g,"/"),o)),r};var ht=async(t,e)=>{let r=await $e("**/*.vue",{cwd:e.pages}),o=[];for(let i in r){let n=r[i],a=`${e.pages}/${n}`.replace(/\\/g,"/").replace(".vue",""),c=`../../web/pages/${n}`.replace(/\\/g,"/"),l=await se(a,t.mode==="production"),u=`/${n}`.replace(e.pages,"").replace(".vue","").replace(/\\/g,"/").toLowerCase().replace("/index","");u===""&&(u="/");let f="";if(l.alive&&(f=`,
4
+ meta:{keepAlive:true}`),l.routes)for(let w of l.routes)o.push(` {
5
+ path: "${w}",
6
+ component: ()=>import("${c}"),
7
+ props: true${f}
6
8
  }`);else o.push(` {
7
9
  path: "${u}",
8
- component: ()=>import("${m}"),
9
- props: true${p}
10
+ component: ()=>import("${c}"),
11
+ props: true${f}
10
12
  }`)}let s=`export default [
11
13
  ${o.join(`,
12
14
  `)}
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(`;
15
+ ]`;await H(`${e.tmpWeb}/routes.js`,s)};var yt=async t=>{let e=await $e("**/*.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
16
  `)};
15
17
  const stores = {
16
18
  ${o.join(`,
17
19
  `)}
18
20
  }
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]};
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
+ export default stores;`;await H(`${t.tmpWeb}/stores.js`,s)};var _e=async(t,e)=>{let r=await he(t);await wt(t,r,e),await ht(t,r),await yt(r)};import{createServer as qo,defineConfig as Qo}from"vite";var $t=async t=>{let{getLogger:e,root:r,config:o}=t,s=e("DEV"),i=lt(async c=>{await _e(t,c),s.info("\u4EE3\u7801\u5DF2\u66F4\u65B0")});await i(!0),Xo.watch(".",{cwd:`${r}/web`,ignored:/(^|[\/\\])(tmp|node_modules|\.git|\.nuxt|\.idea|\.vscode|\.cache|\.sass-cache|\.DS_Store|\.env)/,persistent:!0}).on("all",async(c,l)=>{await i()});let m=await oe(t),a=await qo(Qo(m));await a.listen(),a.printUrls()};var _t=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"dev":s="development";break;case"debug":s="development";break;case"development":s="development";break;case"build":s="build";break;case"setup":s="setup";break;case"preview":s="preview";break;case"production":s="production";break;case"run":s="production";break;default:s="production";break}return e.setContext({mode:s}),e.root=process.cwd(),e};var xt=async t=>new Promise(e=>{setTimeout(()=>{e()},t*1e3)});import es from"uuid";var xe=()=>es.v4().replace(/-/g,"");import ts from"stream";var rs=t=>{let e=t,r;return typeof t=="string"?r=Buffer.from(t):Buffer.isBuffer(t)&&(r=t),r&&(e=new ts.PassThrough,e.end(r)),e},be=rs;function bt(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 Se=async(t,e)=>{if(t){e=e||"stream";let r,o;switch(e){case"string":o=await bt(t),r=o.toString();break;case"buffer":r=await bt(t);break;default:r=t;break}return r}return t};var St={from:Se,to:be};var Et=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 vt=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 kt=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 Tt=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 Ot={from10to36:Et,from10to62:vt,from62to10:kt,from36to10:Tt};var Nt={delay:xt,uuid:xe,stream:St,number:Ot};var Ct=async t=>{let e=`${t.root}/sumor`,r=await se(e,t.mode==="production"),o=`${t.root}/config/config`,s=await se(o,t.mode==="production");return{...r,...s}};import ie from"fs-extra";var os=async t=>{if(await ie.exists(t)){let e={key:await ie.readFile(`${t}/domain.key`,"utf-8"),cert:await ie.readFile(`${t}/domain.cer`,"utf-8")};return await ie.exists(`${t}/ca.cer`)&&(e.ca=await ie.readFile(`${t}/ca.cer`,"utf-8")),e}},It=async t=>{let e=await os(`${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}`,m=t.mode==="development"||t.mode==="preview"?s+1:s;return process.env.SUMOR_ORIGIN=n,{ssl:e,protocol:r,domain:o,port:s,origin:n,uiPort:m}};import as from"fs";var Rt=(t,e,r,o,s,i)=>{let n=new Date(t).toISOString(),m=e.toUpperCase(),a=r.toUpperCase(),c=o?` [${o}]`:"",l="";return i&&(l=` | ${JSON.stringify(i)}`),`# ${n} [${m}] [${a}]${c} - ${s}${l}`};import{Chalk as ss}from"chalk";var Ee=new ss({}),Dt={trace:"#00a3af",debug:"#1183d3",info:"#2ecc71",warn:"#f39c12",error:"#b91f12",fatal:"#ff1300"},is={trace:"gray",debug:"blue",info:"green",warn:"yellow",error:"red",fatal:"red"},ns=(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),m=`0${r.getUTCMinutes()}`.slice(-2),a=`0${r.getUTCSeconds()}`.slice(-2),c=`00${r.getUTCMilliseconds()}`.slice(-3);return`${o}-${s}-${i} ${n}:${m}:${a}.${c}`},He=({time:t,offset:e,level:r,scope:o,id:s,message:i})=>{let n=ns(t,e||0),m=s?` ${s}`:"",a=`${n} ${r.toUpperCase()} ${o.toUpperCase()}${m} - `,c;switch(Ee.level){case 1:c=Ee[is[r.toLowerCase()]](a);break;case 2:c=Ee.hex(Dt[r.toLowerCase()]).visible(a);break;case 3:c=Ee.hex(Dt[r.toLowerCase()]).visible(a);break;default:c=a;break}return c+i};var At=t=>{let e=/#(.*?)\s-\s/g,r=t.match(e),o=[],s=(n,m)=>{let a=n.trim().replace("# ","").replace(" -","").split(" ");for(let h=0;h<a.length;h+=1)a[h]=a[h].trim().replace("[","").replace("]","");let c=new Date(a[0]).getTime(),l=a[1],u=a[2],f=a[3],w=m.split("|"),d=w.shift().trim(),p;if(w.length>0){let h=w.join("|").trim();p=JSON.parse(h)}let g={time:c,level:l,scope:u};f&&(g.id=f),g.message=d,p&&(g.data=p),o.push(g)},i=t;for(let n=0;n<r.length;n+=1){let m=r[n],a=i.split(m),c=a.shift();i=a.join(m),n>0&&s(r[n-1],c)}return s(r[r.length-1],i),o};var Ge=(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],m=n.replace("{","").replace("}","");e[m]?s=s.replace(n,e[m]):s=s.replace(n,"")}return s};var ne=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"],a=((c,l)=>{let u=c.indexOf(l);return u===-1?[]:c.slice(u)})(n,o);for(let c=0;c<n.length;c+=1){let l=n[c];a.indexOf(l)===-1?this[l]=function(){}:this[l]=function(u,f){let w=Date.now();i(`${Rt(w,l,r,s,u,f)}
22
+ `);let d=u;e.i18n&&e.i18n[u]&&(d=Ge(e.i18n[u],f));let p=e.offset!==void 0?e.offset:-new Date().getTimezoneOffset();console.log(He({time:w,offset:p,level:l,scope:r,id:s,message:d}))}}this.load=c=>{let l=At(c),u="";for(let f=0;f<l.length;f+=1){let w=l[f],{message:d,data:p}=w,g=d;e.i18n&&e.i18n[d]&&(g=Ge(e.i18n[d],p)),u+=`${He({...w,offset:e.offset||new Date().getTimezoneOffset(),message:g})}
23
+ `}return u}}};var Lt=async t=>{let e=`${t.root}/tmp/main.log`,r=o=>{as.appendFileSync(e,o)};return(o,s)=>new ne({scope:o,level:t.config.logLevel,id:s,saver:r})};import cs from"fs-extra";import Pt from"knex";var Je=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=Je(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 cs.ensureFile(this._config.connection.filename);break;case"mysql2":e={...this.config},r=e.database,delete e.database,o=Pt(Je(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=Pt(this._config))}async destroy(){this.knex&&(await new Promise(e=>{this.knex.destroy(()=>{e()})}),delete this.knex)}};var ae=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 $=(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=$(r,"_");e[o]=t[r]}return e};var Ft=t=>{let e={};for(let r in t){let o=G(r,"_",!0);e[o]=t[r]}return e};var jt=(t,e,r,o,s)=>{s=s||"";let i={},n,m=async function(){n||(n=await e.knex.transaction(),t.workingConnections++)};return i.setUser=a=>{s=a,o.trace(`\u5DF2\u4FEE\u6539\u64CD\u4F5C\u7528\u6237\u4E3A${a}`)},i.info=async(a,c)=>{if(!c&&r.info[a])return r.info[a];let l=await n.from(a).columnInfo(),u={};for(let f in l){let w=G(f,"_",!0),d;switch(l[f].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 ${f} ${JSON.stringify(l[f])}`);break}u[w]={type:d,length:parseInt(l[f].maxLength,10)}}return r.info[a]=u,u},i.count=async(a,c,l)=>{await m(),l=l||{},a=$(a,"_");let u=n.from(a);u.count({count:"*"});let f=!1;if(c){c=J(c);for(let d in c)if(ae(c[d])==="object")for(let p in c[d]){let g=p,h=c[d][p];g==="<>"&&h===null?u.whereNotNull(d):u.where(d,g,h)}else c[d]===null?u.whereNull(d):u.where(d,c[d]);f=!0}if(l.term&&l.term!==""&&l.termRange)for(let d in l.termRange){let p=l.termRange[d];parseInt(d)===0?f?u.andWhere(p,"like",`%${l.term}%`):(u.where(p,"like",`%${l.term}%`),f=!0):u.orWhere(p,"like",`%${l.term}%`)}return o.trace(u.toSQL().sql,u.toSQL().bindings),(await u)[0].count},i.single=async(a,c,l)=>{l=l||{},l.top=1;let u=await i.select(a,c,l);return u.length>1,u[0]},i.select=async(a,c,l)=>{o.trace(`\u67E5\u8BE2${a}\uFF0C\u6761\u4EF6${JSON.stringify(c)}\uFF0C\u53C2\u6570${JSON.stringify(l)}`),await m(),l=l||{},a=$(a,"_");let u=await i.info(a),f=n.from(a),w=l.field;w&&(w=w.map(g=>$(g,"_"))),f.select(w);let d=!1;if(c){c=J(c);for(let g in c)if(ae(c[g])==="object")for(let h in c[g]){let y=h,O=c[g][h];y==="<>"&&O===null?f.whereNotNull(g):f.where(g,y,O)}else c[g]===null?f.whereNull(g):f.where(g,c[g]);d=!0}if(l.term&&l.term!==""&&l.termRange)for(let g in l.termRange){let h=l.termRange[g];parseInt(g)===0?d?f.andWhere(h,"like",`%${l.term}%`):(f.where(h,"like",`%${l.term}%`),d=!0):f.orWhere(h,"like",`%${l.term}%`)}if(!l.sort&&u.createdTime&&(l.sort="created_time DESC"),l.sort)if(typeof l.sort=="string"){let g=l.sort.split(",");for(let h in g){let y=g[h].trim();y=y.split(" "),y[0]=$(y[0],"_"),g[h]=y.join(" ")}f.orderByRaw(g.join(","))}else f.orderBy(l.sort);return l.top&&f.limit(l.top),l.skip&&f.offset(l.skip),o.trace(f.toSQL().sql,f.toSQL().bindings),(await f).map(g=>Ft(g))},i.insert=async(a,c)=>{c=c||{},a=$(a,"_"),await m();let l=async()=>{let f=xe();return await i.count(a,{id:f})!==0?await l():f};c.id||(c.id=await l()),c.createdBy=s||"",c.createdTime=Date.now(),c.updatedBy=s||"",c.updatedTime=Date.now(),c=J(c);let u=n.insert(c).into(a);return o.trace(u.toSQL().sql,u.toSQL().bindings),await u,c.id},i.update=async(a,c)=>{c=c||{},a=$(a,"_"),await m();let l=c.id;if(delete c.id,l==null)throw new Error("\u6570\u636EID\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u627E\u5230\u8981\u66F4\u65B0\u7684\u6570\u636E");c.updatedBy=s||"",c.updatedTime=Date.now(),c=J(c);let u=n.update(c).from(a).where({id:l});o.trace(u.toSQL().sql,u.toSQL().bindings),await u},i.modify=async(a,c,l)=>{o.trace(`\u5F3A\u5236\u4FEE\u6539${a}\uFF0C\u6570\u636E${JSON.stringify(l)}\uFF0C\u68C0\u67E5\u5B57\u6BB5${JSON.stringify(c)}`),a=$(a,"_");let u={};for(let d of c)u[$(d,"_")]=l[d];let f=await i.single(a,u,{field:["id"]}),w;return f?(w=f.id,l.id=w,await i.update(a,l)):w=await i.insert(a,l),w},i.ensure=async(a,c,l)=>{o.trace(`\u786E\u4FDD${a}\u5B58\u5728\u6570\u636E${JSON.stringify(l)}\uFF0C\u68C0\u67E5\u5B57\u6BB5${JSON.stringify(c)}`),a=$(a,"_");let u={};for(let d of c)u[$(d,"_")]=l[d];let f=await i.select(a,u,{field:["id"]}),w;return f[0]?w=f[0].id:w=await i.insert(a,l),w},i.delete=async(a,c)=>{a=$(a,"_");let l=n.from(a);return c&&(c=J(c),l.where(c)),o.trace(l.toSQL().sql,l.toSQL().bindings),await l.del()},i.sql=async(a,c)=>(await m(),await n.raw(a,c)),i.commit=async()=>{if(n)try{await n.commit(),n=null,t.workingConnections--}catch(a){o.error(a)}},i.release=i.commit,i.rollback=async()=>{if(n)try{await n.rollback(),t.workingConnections--,n=null}catch(a){o.error(a)}},i};var W=async({config:t,logger:e})=>{e=e||{debug:console.log,trace:console.log};let r={workingConnections:0,alertConnections:20};setInterval(()=>{r.workingConnections>r.alertConnections&&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${r.workingConnections}`)},1e3);let o=new M(t,e);await o.ensure(),await o.connect();let s={info:{}};return{connect:async(m,a)=>jt(r,o,s,m,a),destroy:async()=>{await o.destroy()}}};var Mt=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 ke from"fs-extra";import{pathToFileURL as Wt}from"url";var ms=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.origin=t.origin||{},t.target=t.target||{},t),ls=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.text=t.text||"",t.expression=t.expression||"",t),We=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),us=(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]=We(t.property[o]),e.type[`${r}.${o}`]=t.property[o]}return t.join=t.join||{},t},fs=(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]=We(t.parameters[r])}return t},ve={text:ms,rule:ls,type:We,entity:us,program:fs};import Ke from"fs-extra";import ps from"path";import{glob as ds}from"glob";var K=async({condition:t,options:e})=>{e=e||{};let r=await ds(t,e);return r=r.map(o=>(o=ps.normalize(o),o=o.replace(/\\/g,"/"),o)),r};var V=t=>{let e=t.split("/"),o=e.pop().split("."),s=o.pop(),i=o.shift(),n=null;o.length>0&&(n=o.pop());let m=[...e,i].join(".");return{path:m,route:`/api/${m.replace(/\./g,"/")}`,name:i,suffix:s,type:n}};var Ve=async(t,e,r)=>{let o={};if(await Ke.exists(t)){let s=e?`**/**.${e}.json`:"**/**.json",i=await K({condition:s,options:{cwd:t}});for(let n of i){let m=`${t}/${n}`,a=V(n);o[a.path]=await Ke.readJson(m)}if(r&&r!=="json"){let n=e?`**/**.${e}.${r}`:`**/**.${r}`,m=await K({condition:n,options:{cwd:t}});for(let a of m){let c=`${t}/${a}`,l=V(a);o[l.path]=o[l.path]||{},o[l.path][l.suffix]=await Ke.readFile(c,"utf-8")}}}return o};var Ut={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 zt={"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 Bt=`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 Ht={"sumor.language":Bt};var Gt=async(t,e,r)=>{let{data:o,config:s,response:i,tools:n,wechat:m}=t;if(s.wechat){i.respond=!0;let a=o.id,c={appId:s.wechat.key,timeStamp:Math.round(Date.now()/1e3),nonceStr:n.uuid(),package:`prepay_id=${a}`,signType:"RSA"};c.paySign=m.pay.sign([c.appId,c.timeStamp,c.nonceStr,c.package]),r.end(`
368
368
  <html>
369
369
  <head>
370
370
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@@ -375,7 +375,7 @@ zu-ZA=\u7956\u9C81\u8BED(\u5357\u975E)`;var Wt={"sumor.language":Jt};var Vt=asyn
375
375
  <h1 id="message">\u6B63\u5728\u542F\u52A8\u5FAE\u4FE1\u652F\u4ED8\uFF0C\u8BF7\u7A0D\u540E\u3002\u5982\u9047\u5230\u95EE\u9898\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u6216\u8054\u7CFB\u5BA2\u670D\u3002</h1>
376
376
  <script>
377
377
  function onBridgeReady() {
378
- WeixinJSBridge.invoke('getBrandWCPayRequest', ${JSON.stringify(m)},
378
+ WeixinJSBridge.invoke('getBrandWCPayRequest', ${JSON.stringify(c)},
379
379
  function(res) {
380
380
  if (res.err_msg == "get_brand_wcpay_request:ok") {
381
381
  // \u4F7F\u7528\u4EE5\u4E0A\u65B9\u5F0F\u5224\u65AD\u524D\u7AEF\u8FD4\u56DE,\u5FAE\u4FE1\u56E2\u961F\u90D1\u91CD\u63D0\u793A\uFF1A
@@ -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 Jt=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 m=s.sumor.token;if(m.id){let a=m.data?m.data.nickname:"";return{id:m.id,user:m.user,nickname:a,time:m.time,permission:m.permission}}return{}}},logout:{name:"\u9000\u51FA\u767B\u5F55",program:async(o,s,i,n)=>{let m=s.sumor.token;m.user&&await m.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 m in o.exposeApis){let a=o.exposeApis[m];n[m]={name:a.name,desc:a.desc,parameters:a.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:Gt},r};var Kt=async t=>{let e=Jt(t),r={};for(let a in e)r[a]={name:e[a].name,parameters:e[a].parameters};let o=["text","rule","type","entity","view","api","event"],s={range:Ht,text:Ut,type:zt,api:r};for(let a of o){let c=a;s[a]=s[a]||{},(a==="api"||a==="event")&&(c="program");let l=await Ve(`${t.root}/${a}`,c);if(a==="api"){let u={};for(let f in l)u[`api.${f}`]=l[f];l=u}if(s[a]=Object.assign(s[a],l),ve[c])for(let u in s[a])s[a][u]=ve[c](s[a][u],s,u)}await ke.ensureDir(`${process.cwd()}/tmp`),await ke.writeFile(`${process.cwd()}/tmp/meta.json`,JSON.stringify(s,null,4));for(let a in e)s.api[a]=e[a];let i=await Ve(`${t.root}/view`,"view","sql");for(let a in i)s.view[a]=s.api[a]||ve.program({}),s.view[a]=Object.assign(s.view[a],i[a]);let n=`${t.root}/api`;if(await ke.exists(n)){let a=await K({condition:"**/**.js",options:{cwd:n}});for(let c of a){let u=`api.${V(c).path}`,f=`${n}/${c}`;s.api[u]=s.api[u]||{},s.api[u].program=(await import(Wt(f))).default}}let m=`${t.root}/event`;if(await ke.exists(m)){let a=await K({condition:"**/**.js",options:{cwd:m}});for(let c of a){let u=V(c).path,f=`${m}/${c}`;s.event[u]=s.event[u]||{},s.event[u].program=async w=>{w.logger.trace(`\u6B63\u5728\u6267\u884C\u4E8B\u4EF6${u}`);let d={...w},p;w.db||(p=await w.connectDB(),d=Object.assign(d,{db:p}));let g=(await import(Wt(f))).default;if(g)try{await g(d||w),p&&await p.commit(),w.logger.debug(`\u4E8B\u4EF6${u}\u5B8C\u6210`)}catch(h){p&&await p.rollback(),w.logger.error(`\u4E8B\u4EF6${u}\u6267\u884C\u5931\u8D25\uFF0C${h.message}`),w.logger.trace(h)}else w.logger.error(`\u4E8B\u4EF6${u}\u6267\u884C\u5931\u8D25\uFF0C\u8BE5\u7A0B\u5E8F\u4E0D\u5B58\u5728`)}}}t.setContext({meta:s})};var Vt=async t=>{let e=_t(t),r=await Ct(e);e.setContext({tools:Nt,config:r});let o=r.name||"\u8F7B\u5448\u4E91\u5E94\u7528",s=(r.logLevel||"info").toLowerCase(),i=r.language||"zh-CN",n=await It(e),m={};e.setContext({name:o,logLevel:s,language:i,...n,exposeApis:m});let a=await Lt(e),c=a("APP");if(e.setContext({getLogger:a,logger:c}),e.config.database){let l=await Mt(e);e.setContext({connectDB:l})}return await Kt(e),e};import zs from"express";import Yt from"fs-extra";var Zt=async t=>{let e=`${t.sumor.root}/instance.json`,r={};if(await Yt.exists(e))try{r=await Yt.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:m,upTime:a}=o.sumor.instance;s.set("sumor-instance",`${n}_${m}_${a}`)}i()})};var Xt=t=>{t.use((e,r,o)=>{let i=(e.get("accept-language")||t.sumor.language).split(","),n=i[0],m=[];for(let a in i)m.push(i[a].split(";")[0]);e.sumor.language=n,e.sumor.languages=m,o()})};var gs=(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},qt=(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 f in t){let w=t[f][""]||{},d={},p={};i&&(d=t[f][i]||{}),n&&(p=t[f][s]||{});let g={...w,...d,...p};for(let h in g)u[`${f}.${h}`]=g[h]}return u}let m=r.split("."),a=m.pop(),c=m.join("."),l;return t[c]&&(n&&(l=(t[c][s]||{})[a]),!l&&i&&(l=(t[c][i]||{})[a]),l||(l=(t[c][""]||{})[a])),gs(l,o)},Qt=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=qt(e,t.sumor.language),t.use((r,o,s)=>{r.sumor.text=qt(e,r.sumor.language),s()})};var er=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 tr=t=>{t.use((e,r,o)=>{e.sumor.timezone=e.get("sumor-timezone"),o()})};var ws=0,Te=t=>{t.use((e,r,o)=>{let s=++ws;e.sumor.ip=e.headers["x-forwarded-for"]||"0.0.0.0",e.sumor.getLogger=m=>t.sumor.getLogger(m,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 sr=60,rr=24*60,hs=(Math.floor(Date.now()/1e3)-ce.uptime())*1e3,ys=Date.now(),ir=t=>Math.round(t),$s=()=>ir((ce.totalmem()-ce.freemem())/ce.totalmem()*100),_s=()=>({time:Date.now(),idle:ce.cpus().map(t=>t.times.idle)}),xs=(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 ir(o/e.idle.length)},D={serverUpTime:hs,serviceUpTime:ys,interval:sr,memory:[],cpu:[]},Ye,or=async()=>{D.updateTime=Date.now();let t=_s();if(Ye){let e=xs(Ye,t);D.cpu.unshift(e),D.cpu=D.cpu.slice(0,rr)}Ye=t,D.memory.unshift($s()),D.memory=D.memory.slice(0,rr)},nr=async t=>{or(),setInterval(()=>{or()},sr*1e3),t.use((e,r,o)=>{e.sumor.monitor=JSON.parse(JSON.stringify(D)),o()})};import Ze from"body-parser";import bs from"multer";import Ss from"fs-extra";var ar=async t=>{let e=`${t.sumor.root}/tmp/uploads`;await Ss.ensureDir(e);let r=bs({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(Ze.urlencoded({extended:!1})),t.use(Ze.json()),t.use(Ze.text()),t.use((o,s,i)=>{o.sumor.data={...o.params,...o.query,...o.body},i()})};import Es from"cookie-parser";var cr=t=>{t.use(Es()),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 mr=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 Oe=(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=mr(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 m;n==="number"?(r.default===void 0&&(r.default=0),m=parseInt(r.default,10)):(r.default===void 0&&(r.default=""),m=r.default.toString()),s.defaultTo(m)}r.notNull&&s.notNullable()}r.key&&s.primary(),o&&s.alter()};var lr=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 m in r.property)r.property[m].key&&(i=!0);i||(o.id={type:"string",length:32});for(let m in r.property)(m==="id"&&!i||["createdBy","createdTime","updatedBy","updatedTime"].indexOf(m)<0)&&(o[m]=r.property[m]);let n={type:"number",length:13};if(r.join)for(let m in r.join)o[`${$(m,"_")}_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 m=$(n,"_"),a=o[n];!a.rename&&!a.deleted&&Oe(i,m,a)}}).transacting(t);else if(r.rename){let i=$(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 m in o){let a=$(m,"_"),c=o[m];if(i[a]&&c.rename){let l=$(c.rename,"_");n.renameColumn(a,l)}}}).transacting(t),i=await t(e).columnInfo(),await t.schema.alterTable(e,n=>{for(let m in o){let a=$(m,"_"),c=o[m];c.rename||(i[a]?c.deleted?n.dropColumn(a):Oe(n,a,c,!0):!c.rename&&!c.deleted&&Oe(n,a,c))}})}};var ur=(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 fr=t=>{let e={};for(let r in t)e[r]=t[r].sql;return e};var pr=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 dr=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 gr=(t,e)=>{e=!!e;let r={};for(let a in t){let c=$(a,"_");r[c]=t[a]}let o=fr(r),s=pr(o),i=dr(s),n=ur(i,e),m={};for(let a in n){let c=G(n[a],"_");m[c]=r[n[a]]}return m};var wr=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 m in r){let a=$(m,"_");e.debug(`\u6B63\u5728\u5B89\u88C5\u5B9E\u4F53${m}\u4E3A${a}`),await lr(i,a,r[m]),e.debug(`\u6B63\u5728\u5B89\u88C5\u5B9E\u4F53${m}\u5B8C\u6210`)}for(let m in o){let a=$(m,"_");await i.schema.dropViewIfExists(a)}let n=gr(o);for(let m in n){let a=$(m,"_");e.debug(`\u6B63\u5728\u5B89\u88C5\u89C6\u56FE${m}\u4E3A${a}`),await i.schema.createViewOrReplace(a,c=>{c.as(n[m].sql)}),e.debug(`\u6B63\u5728\u5B89\u88C5\u89C6\u56FE${m}\u5B8C\u6210`)}await i.commit()}catch{await i.rollback()}await s.destroy()};var Ne={install:wr,operator:W};var Ce=async(t,e)=>{let r=t.type||"sqlite",o;if(r==="redis"){let s={};o=i=>({get:async(n,m)=>(s[n]||{})[m],set:async(n,m,a)=>{s[n]=s[n]||{},s[n][m]=a}})}else{await Ne.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,m)=>{let a=await s.connect(i),c=await a.single("cache",{namespace:n,key:m});if(await a.commit(),c)return i.trace(`\u8BFB\u53D6\u7F13\u5B58${n} ${m}\u3002\u6570\u636E\u4E3A${c.value}`),c.value;i.trace(`\u8BFB\u53D6\u7F13\u5B58${n} ${m}\u3002\u6570\u636E\u4E3A\u7A7A`)},set:async(n,m,a)=>{let c=await s.connect(i);try{a?await c.modify("cache",["namespace","key"],{namespace:n,key:m,value:a}):await c.delete("cache",{namespace:n,key:m}),await c.commit(),i.trace(`\u5199\u5165\u7F13\u5B58${n} ${m}\u6210\u529F\u3002\u6570\u636E\u4E3A${a}`)}catch(l){await c.rollback(),i.trace(`\u5199\u5165\u7F13\u5B58${n} ${m}\u5931\u8D25\u3002\u6570\u636E\u4E3A${a}`),i.error(l)}}})}return o};var hr=async t=>{let e=t.sumor.config.cache||{},r=t.sumor.getLogger("CACHE"),o=await Ce(e,r);t.sumor.cache=o(r),t.use(async(s,i,n)=>{let m=s.sumor.getLogger("CACHE");s.sumor.cache=o(m),n()})};var Xe=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(ae(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=(m,a)=>{a?s.push(`${m}-${a}`):s.push(`${m}`)};if(typeof e=="string")o=this.has(e,r),o||i(e,r);else for(let m in e){let a=e[m];typeof a=="string"?(o=this.has(a,""),o||i(a,"")):(o=this.has(a.key,a.value),o||i(a.key,a.value))}let n=s.length>0;if(s.length>0){let m=new Error("sumorApp.PERMISSION_DENIED");throw m.data={auth:s.join(",")},m}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}},yr=async t=>{t.use(async(e,r,o)=>{e.sumor.token=new Xe(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 $r=async t=>{t.use(async(e,r,o)=>{let s=e.sumor.getLogger("DATABASE");e.sumor.db=await e.sumor.connectDB(s),o()})};var vs=({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>`},qe=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(vs({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}}},_r=async t=>{t.use((e,r,o)=>{e.sumor.response=new qe(e,r),o()})};import ks from"ali-oss";var Qe={resize:{mode:"m",width:"w",height:"h",longer:"l",shorter:"s"},quality:{related:"q",absolute:"Q"},circle:{radius:"r"},blur:{radius:"r",size:"s"}},Ts=t=>{let e={};if(t.image){let r=[];for(let o in Qe){let s=t.image[o];if(s){let i=[];i.push(o);for(let n in Qe[o])s[n]&&i.push(`${Qe[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},et=class{constructor(e){this.aliyunOSS=new ks(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 a=await this.aliyunOSS.get(e,{process:"image/average-hue"});if(a.content){let c=JSON.parse(a.content.toString());o.color=c.RGB.replace("0x","#")}}catch{}}catch(a){if(a.code!=="NoSuchKey")i=a.message;else return null}if(!i&&s&&s.res.status>299&&(i=s.res),i){let a=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw a.data={msg:i},a}let n=JSON.parse(s.content.toString()),m=a=>{if(n[a])return n[a].value};return o.format=m("Format"),o.size=m("FileSize"),o.height=m("ImageHeight"),o.height&&(o.height=parseInt(o.height,10)),o.width=m("ImageWidth"),o.width&&(o.width=parseInt(o.width,10)),o.make=m("LensMake"),o.model=m("LensModel"),o}async get(e,r){let o,s,i;try{s=await this.aliyunOSS.getStream(e,Ts(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}},xr=et;import Y from"fs-extra";import br from"path";var tt=class{constructor(e){this.config=e,this.root=br.resolve(process.cwd(),this.config.path)}_getTargetPath(e){return br.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)}},Sr=tt;import Os from"crypto";var Er=t=>{let e={},r=Os.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 xr(e);break;case"file":this._instance=new Sr(e);break;default:break}}async put(e,r){if(r=be(r),this._instance)try{let o=Er(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 Se(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 vr=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 Ns from"@alicloud/sms-sdk";var rt,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:m}=this._config;if(this._config&&!this._config.disable){switch(rt||(rt=new Ns({accessKeyId:n,secretAccessKey:m})),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(a=>{setTimeout(()=>{a()},1e3)}),new Error("sumorSMS.MOBILE_PREFIX_NOT_SUPPORT")}try{await new Promise((a,c)=>{rt.sendSMS({PhoneNumbers:o,SignName:i,TemplateCode:e,TemplateParam:JSON.stringify(s)}).then(l=>{let{Code:u}=l;u==="OK"?a():c(u)},l=>{l.data?c(l.data.Code):c(l)})})}catch(a){let c=new Error("sumorSMS.SMS_SEND_FAILED");throw c.data={msg:a},c}}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 kr=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 ot from"axios";import Rs from"axios";import Cs from"crypto";import Is from"fs";var Ie=(t,e)=>{let r=`${process.cwd()}/${e.pay.privateKey}`,o=Is.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>
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(`
486
+ `;return Cs.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=Ie([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 Rs({method:t.method.toUpperCase(),url:r+t.url,data:t.body,headers:n})).data}catch(m){throw m.response}};var Tr=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 Or(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 Nr(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:Tr,close:Or,check:Nr,sign:Ie};var Cr=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 ot.post(e,r):o=await ot.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>Cr&&(await this._refreshToken(),r=await e()),(!r||!r.token||Date.now()-r.time>Cr)&&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 m=await this.list(e);r||(r=m.total),o+=m.count,s=s.concat(m.data.openid),o<r&&(e=m.next_openid,await i())};await i();let n=[];for(let m of s)n.push(await this.detail(m));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 a in s)n[a]={value:s[a]};let m=`https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${i}`;try{await this.call(m,{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(a){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(a)}}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 ot.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 Ir=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 Ce(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 Rr=async t=>{await Zt(t),await _r(t),await Xt(t),await Qt(t),await er(t),await tr(t),await Te(t),await nr(t),await ar(t),await cr(t),await hr(t),await $r(t),await yr(t),await vr(t),await kr(t),await Ir(t)};var Dr=(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,m,a)=>{let c={};if(n.files)for(let l in n.files){let u=[];for(let f in n.files[l])u.push({name:n.files[l][f].originalname,size:n.files[l][f].size,mime:n.files[l][f].mimetype,encoding:n.files[l][f].encoding,path:`${s}/${n.files[l][f].filename}`});c[l]=u}Object.assign(n.sumor.data,c),a()},r):e.all(o,(n,m,a)=>{a()},r),!!i};var Ar=(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 Lr=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=Dr(r,t,async function(n,m,a){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,m);try{let c=t.sumor.meta.api[r];n.sumor.data=Ar(n.sumor.data,c);let l=await c.program(n.sumor,n,m);n.sumor.response.data=l||n.sumor.response.data,await n.sumor.db.commit()}catch(c){try{await n.sumor.db.rollback()}catch{}n.sumor.response.error(c.message);let l="";c instanceof Error&&(l=t.sumor.text(c.message)),n.sumor.logger.debug(`\u5916\u90E8\u8BF7\u6C42\u51FA\u9519\uFF1A${c.message} ${l}`),n.sumor.logger.trace(c)}a()});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 Ms}from"http-proxy-middleware";var Pr=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 Ds from"fs-extra";var Fr=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 m=`${s}/${e.files[i][n].filename}`;await Ds.remove(m)}}o()})};var jr=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 st from"fs-extra";import Mr from"node:path";import As from"serve-static";import Ls from"fs";import{pathToFileURL as Ps}from"url";var Ur=async t=>{let e="/",r=Mr.resolve(process.cwd(),"./output/web");if(await st.exists(r)){let o=await st.readFile(`${r}/client/index.html`,"utf-8"),s=JSON.parse(await st.readFile(`${r}/client/ssr-manifest.json`,"utf-8"));t.use(e,As(`${r}/client`,{index:!1}));let i;try{let n=Mr.resolve(r,"./server/entry-server.js");Ls.existsSync(n)&&(i=await import(Ps(n)),i=i.render)}catch(n){Te.error("ssrServerEntry load failed",n.stack)}t.use("*",async(n,m)=>{try{let a=n.originalUrl.replace(e,"/"),c=n.sumor.ssrContext,[l,u]=await i(a,s,c),f=`<title>${c.pageInfo.title}</title>
487
+ <meta name="description" content="${c.pageInfo.description}" />
488
+ <meta name="keywords" content="${c.pageInfo.keywords}" />`,w=o.replace("<!--app-page-info-->",f).replace("<!--preload-links-->",u).replace("<!--app-html-->",l);m.status(200).set({"Content-Type":"text/html"}).end(w)}catch(a){console.log(a.stack),m.status(500).end(a.stack)}})}};import Fs from"compression";import js from"zlib";import zr from"serve-static";import Br from"fs-extra";var Hr=async t=>{let e=`${t.sumor.root}/static`,r=`${B}/template/public`;t.use(Fs({filter(){return!0},flush:js.Z_SYNC_FLUSH})),await Br.exists(r)&&t.use(zr(r)),await Br.exists(e)&&t.use(zr(e))};var Gr=async t=>{if(await Pr(t),await Fr(t),await jr(t),await Hr(t),t.sumor.mode==="development"){let e=`http://localhost:${t.sumor.uiPort}`;t.use("*",Ms({target:e,changeOrigin:!0,ws:!0,logProvider:function(o){let s=i=>{};return{log:s,debug:s,info:s,warn:s,error:s}}}))}(t.sumor.mode==="production"||t.sumor.mode==="preview")&&await Ur(t)};import Jr from"http";import Us from"https";import"spdy";var Re=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 Wr=async t=>{let e=t.sumor.port;if(t.sumor.protocol==="https"){let r;if(e===443){let i=Jr.createServer((n,m)=>{let a=`https://${n.headers.host}${n.url}`;m.writeHead(301,{Location:a}),m.end()});r=await new Promise(n=>{i.listen(80,()=>{n(Re(i))})}),t.sumor.logger.info("http\u670D\u52A1\u5DF2\u542F\u52A8\uFF0C\u8BBF\u95EE\u5C06\u8DF3\u8F6C\u81F3https")}let o;o=Us.createServer({...t.sumor.ssl},t),o.on("error",i=>{t.sumor.logger.error(i)});let s=await new Promise(i=>{o.listen(e,()=>{i(Re(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=Jr.createServer(t),o=await new Promise(s=>{r.listen(e,()=>{s(Re(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 Kr=async t=>{let e=zs();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 Rr(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 Lr(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 Gr(e),e.sumor.logger.debug("\u540E\u7F6E\u4E2D\u95F4\u4EF6\u52A0\u8F7D\u5B8C\u6210"),await Wr(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{build as Vr,defineConfig as Yr}from"vite";var Zr=async t=>{await _e(t,!0);let e=await oe(t);e.build.ssrManifest=!0,e.build.outDir="../../output/web/client",e.build.emptyOutDir=!0,await Vr(Yr(e));let r=await oe(t);r.build.ssr="src/entry-server.js",r.build.outDir="../../output/web/server",r.build.emptyOutDir=!0,await Vr(Yr(r))};var Xr=async t=>{let e=t.config.database,r=t.getLogger("DATABASE");await Ne.install({config:e,logger:r,entity:t.meta.entity,view:t.meta.view})};var N=async t=>{t=t||{};let e=await Vt(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 $t(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 Zr(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 Xr(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 Kr(e),e.logger.info("\u5BF9\u5916\u670D\u52A1\u542F\u52A8\u5B8C\u6210"))};import{Command as li}from"commander";import ui from"fs-extra";var qr=(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 U from"fs-extra";import so from"node:path";var Qr=(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 Bs from"fs-extra";import{build as Hs,defineConfig as Gs}from"vite";import Js from"@vitejs/plugin-vue";import eo from"node:path";var it=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 to=async t=>{let e={},r=Object.keys(t.pkg.dependencies||{});for(let i=0;i<r.length;i+=1)e[r[i]]=it(r[i]);let o=it(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(Js()),await Hs(Gs(s)),await Bs.move(eo.join(t.output,"./index.umd.js"),eo.join(t.output,"./index.umd.cjs"))};import*as ro from"esbuild";var oo=async t=>{let e=Object.keys(t.pkg.dependencies||{});await ro.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 le=async t=>{let e=t.root||process.cwd(),r=t.entry||so.resolve(e,"./src/index.js"),o=t.mode||"production",s=t.output||so.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 oo({mode:o,entry:r,output:s,pkg:n}):await to({mode:o,entry:r,output:s,pkg:n});let m=await Qr(n,i);return await U.ensureFile(`${s}/package.json`),await U.writeFile(`${s}/package.json`,JSON.stringify(m,null,4)),{name:n.name}};var io=async t=>{let e=!!t.debug,r=t.type||"app",o=e?"development":"production";switch(r){case"vue":await le({mode:o});break;case"node":await le({mode:o,node:!0});break;default:await N({mode:"build"});break}};import no from"yaml";import ee from"fs-extra";var A=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=no.parse(n)}let s=`${t}/${e}.yaml`;if(!o&&await ee.exists(s)){let n=await ee.readFile(s,"utf-8");o=no.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 Ws from"yaml";import ue from"fs-extra";var nt=async(t,e,r)=>{let o=await A(t,e);await ue.remove(`${t}/${e}.yml`),await ue.remove(`${t}/${e}.yaml`),await ue.remove(`${t}/${e}.json`),r==="yml"||r==="yaml"?await ue.writeFile(`${t}/${e}.yml`,Ws.stringify(o)):r==="json"&&await ue.writeFile(`${t}/${e}.json`,JSON.stringify(o,null,4))};import Oo from"fs-extra";import Ae from"fs-extra";var ao=t=>{let e=t.split("/"),r=e.pop(),o=e.join("/");return{name:r,folder:o}};import{exec as Ks}from"child_process";var E=async(t,e,r)=>await new Promise((o,s)=>{let i=Ks(t,e),n="",m="",a=c=>(c=c.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
+ `),c);i.stdout.on("data",async c=>{c=a(c),n+=c,r&&r(c)}),i.stderr.on("data",async c=>{c=a(c),n+=c,m+=c,r&&r(c)}),i.on("close",async c=>{c!==0?s(m):o(n)})});var De=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 _=async(t,e)=>await E(`git ${e}`,{cwd:t});var Vs=async t=>{await Ae.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 Ae.writeFile(`${t}/README.md`,"")},Le=async(t,e)=>{if(!await Ae.exists(t)){let{name:s,folder:i}=ao(t);await Ae.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 De(t)).filter(s=>s.name==="1.0")[0]?(await _(t,"checkout 1.0"),await _(t,"pull")):(await _(t,"checkout --orphan 1.0"),await _(t,"reset --hard"),await Vs(t),await _(t,"add . -f"),await _(t,'commit -m "\u521D\u59CB\u5316"'),await _(t,"push -f origin 1.0"))};var co=async(t,e)=>{let o=(await _(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("|"),m=[],a="";if(n[3]){let c=n[3].split(",");for(let l of c)l.indexOf("tag")>=0&&m.push(l.replace("tag:","").trim())}n[4]&&(a=n[4]),s.push({id:n[0],authorDate:new Date(n[1]),committerDate:new Date(n[2]),tags:m,subject:a})}return s};var Pe=t=>Math.round(new Date(t).getTime()),mo=async t=>{await _(t,"fetch");let e=await De(t),r=/^\d+\.\d+?$/,o=/^\d+\.\d+\.\d+?$/,s={};for(let i of e)if(i.remote&&r.test(i.name)){await _(t,"reset --hard HEAD"),await _(t,`checkout ${i.origin}`);let n=await co(t,i.origin);n=n.reverse();let m=0;for(let a of n){let c=!0;for(let l of a.tags)if(o.test(l)){let u=parseInt(l.split(`${i.name}.`)[1],10);isNaN(u)||(s[l]={id:a.id,name:l,authorDate:Pe(a.authorDate),committerDate:Pe(a.committerDate),beta:!1},u>=m&&(m=u+1),c=!1)}c&&(s[`${i.name}.${m}`]={id:a.id,name:`${i.name}.${m}`,authorDate:Pe(a.authorDate),committerDate:Pe(a.committerDate),beta:!0})}}return s};var lo=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 Le(n,i),await mo(n)}};import Ys from"node-ssh";var fe=class{constructor(e){this.config=e}async connect(){if(!this.connection){this.connection=new Ys;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 x from"fs-extra";import Xs from"archiver";import qs from"extract-zip";import at from"path";import{glob as Qs}from"glob";import ei from"os";import ti from"axios";import Zs from"uuid";var Fe=()=>Zs.v4().replace(/-/g,"");var ct=class{normalize(e){let r=at.normalize(e);return r=r.replace(/\\/g,"/"),r}async tmp(e){e=e||"sumor-utils";let r=this.normalize(`${ei.tmpdir()}/${e}/${Fe()}`);return await this.ensureDir(r),r}async download(e,r){await this.ensureFile(r);let o=x.createWriteStream(r);return(await ti({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 Qs(e,r);return o=o.map(s=>(s=at.normalize(s),s=s.replace(/\\/g,"/"),s)),o}async zip(e,r,o){return await new Promise((s,i)=>{let n=x.createWriteStream(r),m=Xs("zip",{zlib:{level:9}});n.on("close",()=>{s()}),m.pipe(n),m.glob("**",{cwd:e,dot:!0,ignore:o||[]}),m.finalize()})}async unzip(e,r){return e=at.normalize(e),await new Promise((o,s)=>{qs(e,{dir:r},i=>{i?s(i):o()})})}async exists(e){return await new Promise(r=>{x.access(e,o=>{r(!o)})})}async isDirectory(e){return(await this.info(e)).isDirectory()}async info(e){return await new Promise((r,o)=>{x.open(e,"a",(s,i)=>{s&&o(s),x.fstat(i,(n,m)=>{n&&o(n),x.close(i,()=>{r(m)})})})})}async move(e,r){await x.move(e,r)}async remove(e){await x.remove(e)}async ensureFile(e){await x.ensureFile(e)}async ensureDir(e){await x.ensureDir(e)}async copy(e,r,o){await x.copy(e,r,o)}async writeFile(e,r){return await this.ensureFile(e),await new Promise((o,s)=>{x.writeFile(e,r,i=>{i?s(i):o()})})}async appendFile(e,r){return await this.ensureFile(e),await new Promise((o,s)=>{x.appendFile(e,r,i=>{i?s(i):o()})})}async readFile(e,r){if(await this.exists(e))return await new Promise(o=>{x.readFile(e,r,(s,i)=>{if(s)throw s;o(i)})})}async readJson(e){return await this.exists(e)?await x.readJson(e):null}async writeJson(e,r){return await this.ensureFile(e),await x.writeJson(e,r)}},C=new ct;C.exist=C.exists;C.readJSON=C.readJson;C.writeJSON=C.writeJson;C.delete=C.remove;var b=C;var uo=t=>({async tmp(e){e=e||"sumor-utils";let r=b.normalize(`/tmp/${e}/${Fe()}`);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 fo=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 po=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 m in s)n.push(`-v ${s[m].from}:${s[m].to}${s[m].readOnly?":ro":""}`);for(let m in i)n.push(`-p ${i[m].from}:${i[m].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(m=>m.Repository===r&&m.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
@@ -519,7 +519,7 @@ WORKDIR /usr/source
519
519
  COPY ./source /usr/source
520
520
  RUN npm install
521
521
 
522
- CMD ["npm", "start"]`,i=`/tmp/sumor-deployer-version/${e}_${r}`,n=`${i}/source`;if(await t.file.ensureDir(n),await t.file.putFolder(o,n),!await t.file.exists(`${n}/.npmrc`)){let c=`registry=https://registry.npmmirror.com
522
+ CMD ["npm", "start"]`,i=`/tmp/sumor-deployer-version/${e}_${r}`,n=`${i}/source`;if(await t.file.ensureDir(n),await t.file.putFolder(o,n),!await t.file.exists(`${n}/.npmrc`)){let a=`registry=https://registry.npmmirror.com
523
523
  sass_binary_site=https://registry.npmmirror.com/mirrors/node-sass/
524
524
  sharp_binary_host=https://registry.npmmirror.com/mirrors/sharp
525
525
  sharp_libvips_binary_host=https://registry.npmmirror.com/mirrors/sharp-libvips
@@ -528,9 +528,9 @@ puppeteer_download_host=https://registry.npmmirror.com/mirrors/
528
528
  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
- 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>
531
+ python_mirror=https://registry.npmmirror.com/mirrors/python/`;await t.file.writeFile(`${n}/.npmrc`,a)}await t.file.writeFile(`${i}/Dockerfile`,s);let m=await this.execCommand(`docker build -t ${e}:${r} .`,{cwd:i});console.log(m),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 m in n){let a=n[m].split("|"),c={};for(let l=0;l<r.length;l++)c[r[l]]=a[l];i.push(c)}}return i}});var k=async(t,e)=>{let r;try{let o=await t.exec(e);r=parseFloat(o,10)}catch(o){console.log(o)}return r},go=t=>({async system(){let e=await k(t,"cat /proc/uptime | awk '{print $1}'");return e=Date.now()-parseInt(e*1e3,10),{disk:{total:await k(t,"df -m --output=size / | awk 'NR==2{print $1}'"),used:await k(t,"df -m --output=used / | awk 'NR==2{print $1}'"),free:await k(t,"df -m --output=avail / | awk 'NR==2{print $1}'")},memory:{total:await k(t,"free -m | awk 'NR==2{print $2}'"),used:await k(t,"free -m | awk 'NR==2{print $3}'"),free:await k(t,"free -m | awk 'NR==2{print $4}'"),cache:await k(t,"free -m | awk 'NR==2{print $6}'")},cpu:{usage:await k(t,`top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4}'`),cores:await k(t,'cat /proc/cpuinfo | grep "processor" | wc -l')},uptime:e}}});import ri from"path";var wo=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:ri.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 fe(t);return e.addTool("file",uo),e.addTool("port",fo),e.addTool("docker",po),e.addTool("node",wo),e.addTool("monitor",go),e};var ho=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 L from"fs-extra";var yo=async(t,e)=>{await _(t,"clean -df"),await _(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(y=>y.Repository===e&&y.Tag===s.name))()){console.log("\u5F00\u59CB\u6784\u5EFA\u4EE3\u7801");let g=o.url.split("/"),h=`${g[0]}//${o.username}:${o.password}@${g[2]}/${g.slice(3,g.length).join("/")}`,y=`${process.cwd()}/tmp/build/${e}/${s.name}`;if(!await L.exists(y)){console.log(`\u6B63\u5728\u6784\u5EFA\u6E90\u4EE3\u7801\u5230${y}`),await L.ensureDir(`${process.cwd()}/tmp/build`);try{await Le(y,h),await yo(y,s.id),await E("npm i",{cwd:y}),await E("npm run build",{cwd:y}),await L.remove(`${y}/web`),await L.remove(`${y}/node_modules`),await L.remove(`${y}/tmp`)}catch(O){console.log(O)}}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,y),console.log("\u6784\u5EFA\u7248\u672C\u955C\u50CF\u5B8C\u6210")}console.log("\u90E8\u7F72\u5BB9\u5668\u5B9E\u4F8B");let c=`${process.cwd()}/tmp/env/${e}/${r}`;console.log(`\u6B63\u5728\u914D\u7F6E\u73AF\u5883\u76F8\u5173\u4EE3\u7801\u5230${c}`);let l=`${process.cwd()}/assets/${e}/${r}`;await L.exists(l)&&await L.copy(l,c);let u=await n.port.getPort(),f={app:e,env:r,version:s.name,server:t.name,port:u,upTime:Date.now(),versionTime:s.committerDate},w=`/usr/sumor-cloud/env/${e}_${r}`;await n.file.putFolder(c,w),await L.remove(c);let d=`/usr/sumor-cloud/instance/${e}_${r}/${Date.now()}.json`;await n.file.writeFile(d,JSON.stringify(f,null,4));let p=`sumor_app_${e}_${r}_${s.name}_${u}`;return console.log(`\u6B63\u5728\u90E8\u7F72\u5B9E\u4F8B\u5230\u5BB9\u5668${p}`),await n.docker.execCommand(`docker run -itd --restart=on-failure -v ${d}:/usr/source/instance.json:ro -v ${w}:/usr/source/config:ro -v /usr/sumor-cloud/ssl/${i}:/usr/source/ssl:ro -p ${u}:443 --name ${p} -d ${e}:${s.name}`),await n.disconnect(),p};var _o=t=>{let e=t.split("_");e.shift();let r=e.shift(),o=e.shift(),s=e.shift(),i,n,m;e.length>1?(n=e.shift(),i=parseInt(e.shift())):m=e.shift();let a={type:r,app:o,env:s,port:i,version:n,action:m};for(let c in a)a[c]||delete a[c];return a};var je=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)=>(je(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(je(t[r])==="array")for(let o in t[r])e.push(t[r][o]);else e.push(t[r]);return e};var T=(t,e)=>(e=re(e),re([`${t} {`,e.map(r=>` ${r}`),"}"]));var xo=()=>T("server",["listen 80 default_server;","server_name _;","return 301 https://$host$request_uri;"]);var bo=(t,e)=>T(`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 So=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"}),T("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"}),T("location /",[e])])};var Eo=(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(bo(o.name,o.instances)),r.push(So(o));return re([te({user:e.user,worker_processes:1}),T("events",["worker_connections 1024;"]),T("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"),xo(),re(r)])]).join(`
533
+ `)};var oi=`<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>`,vo=()=>({noInstancePage:oi});var pe=async(t,e,r,o)=>{let s={};for(let i in t.env)for(let n in t.env[i]){let{domain:m,entry:a}=t.env[i][n];s[a]=s[a]||{},s[a][m]=[];let l=(e[i]||{})[n]||{},u;for(let f in l)(l[f]||{}).live&&(u=f);for(let f in r){let w=t.server[f],d=r[f].map(p=>_o(p)).filter(p=>p.app===n&&p.env===i&&p.version===u);for(let p of d)s[a][m].push(`${w.iHost||w.host}:${p.port}`)}}for(let i in s){let n=[443,80],m=[];for(let p in s[i]){let g={name:p.replace(".","_"),port:443,domain:p,instances:s[i][p].map(h=>({url:h}))};m.push(g)}let a=Eo(m),c=S(t.server[i]),l="/usr/sumor-cloud/site";await c.file.ensureDir(l),await c.file.ensureDir(`${l}/pages`),await c.file.writeFile(`${l}/nginx.conf`,a);let{noInstancePage:u}=vo();await c.file.writeFile(`${l}/pages/no_instance.html`,u);let f="sumor_site";if(o&&await c.docker.delete(f),!(await c.docker.instances()).filter(p=>p.instanceId===f)[0]){let p="/usr/sumor-cloud/ssl";await c.file.ensureDir(p),console.log("\u6B63\u5728\u7AD9\u70B9\u5B9E\u4F8B\u521D\u59CB\u5316"),await c.docker.run({image:"nginx",name:f,folder:[{from:`${l}/nginx.conf`,to:"/etc/nginx/nginx.conf"},{from:`${l}/pages`,to:"/etc/nginx/pages"},{from:p,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 c.docker.exec(f,"nginx -s stop"),await c.docker.exec(f,"nginx -c /etc/nginx/nginx.conf"),await c.disconnect()}};var mt=async(t,e)=>{let r=S(t);await r.docker.delete(e),await r.disconnect()};var ko=async(t,e,r)=>{let o=S(t);await o.file.putFolder(r,`/usr/sumor-cloud/ssl/${e}`),await o.disconnect()};var si=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),m=`0${e.getSeconds()}`.slice(-2);return`${r}-${o}-${s} ${i}:${n}:${m}`},Me=t=>t<1024?`${t}MB`:(t/=1024,t<1024?`${t.toFixed(2)}GB`:(t/=1024,t<1024?`${t.toFixed(2)}TB`:(t/=1024,`${t.toFixed(2)}PB`))),To=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${Me(r.memory.total)}\uFF0C\u5269\u4F59${Me(r.memory.free+r.memory.cache)}
545
+ - \u786C\u76D8\uFF1A\u5171${Me(r.disk.total)}\uFF0C\u5269\u4F59${Me(r.disk.free)}
546
+ - \u542F\u52A8\u65F6\u95F4\uFF1A${si(r.uptime)}`};var No=async(t,e)=>{try{let r=Date.now();console.log("\u6B63\u5728\u542F\u52A8\u90E8\u7F72");for(let m in t.server)t.server[m].name=m;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 m in t.env)for(let a in t.env[m]){let{domain:c,entry:l}=t.env[m][a],u=`${process.cwd()}/assets/ssl/${c}`;u&&t.server[l]&&(console.log(`\u66F4\u65B0${c}\u57DF\u540D\u8BC1\u4E66\u5230${l}\u670D\u52A1\u5668`),await ko(t.server[l],c,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 m in t.source){console.log(`\u5E94\u7528${m}\u6B63\u5728\u68C0\u67E5\u5E94\u7528\u7248\u672C`),o[m]=await lo(m,t.source[m]),console.log("\u5E94\u7528\u7248\u672C\u5217\u8868");for(let a in o[m])console.log(`- ${a}${o[m][a].beta?" \u6D4B\u8BD5\u7248":""}`);console.log(`\u5E94\u7528${m}\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 m in t.server){let a=await To(t.server[m]);console.log(`\u670D\u52A1\u5668${m}\u8FD0\u884C\u72B6\u6001`),console.log(a)}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 ho(t);for(let m in s){console.log(`\u670D\u52A1\u5668${m}\u73B0\u5B58\u5B9E\u4F8B\u5217\u8868`);for(let a in s[m])console.log(`- ${s[m][a]}`)}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 Oo.remove(`${process.cwd()}/tmp/env`);for(let m in t.env){let a=t.env[m];for(let c in a){let{domain:l}=a[c],f=(e[m]||{})[c]||{},w;for(let p in f)(f[p]||{}).live&&(w=p);let d=Object.keys(f);for(let p in t.server){let g=s[p].filter(h=>{let O=h.split("_")[4];return h.indexOf(`sumor_app_${c}_${m}`)===0&&d.indexOf(O)<0});if(g.length>0){console.log(`\u6B63\u5728\u6E05\u9664${m}\u73AF\u5883\u5E94\u7528${c}\u5728\u670D\u52A1\u5668${p}\u4E2D\u7684\u8FC7\u671F\u5B9E\u4F8B`),s[p]=s[p].filter(h=>g.indexOf(h)<0),await pe(t,e,s);for(let h of g)console.log(`\u6E05\u9664\u5B9E\u4F8B${h}`),await mt(t.server[p],h)}}console.log(`\u6B63\u5728\u90E8\u7F72${m}\u73AF\u5883\u5E94\u7528${c}\uFF0C\u4E0A\u7EBF\u7248\u672C\uFF1A${w||"\u65E0"}`);for(let p in f){let g=f[p]||{};for(let h in g.instance){let y=g.instance[h];console.log(`\u8BA1\u5212\u90E8\u7F72${p}\u7248\u672C${y}\u4E2A\u5B9E\u4F8B\u5230${h}\u670D\u52A1\u5668`);let O=s[h].filter(I=>I.indexOf(`sumor_app_${c}_${m}_${p}`)===0),F=O.length;if(F<y){let I=y-F;console.log(`\u5F53\u524D\u5B9E\u4F8B\u4E2A\u6570\uFF1A${F}\uFF0C\u9700\u8981\u6269\u5BB9${I}\u4E2A`);for(let z=0;z<I;z++){console.log(`\u6B63\u5728\u6269\u5BB9\u7B2C${z+1}\u4E2A`);let R=o[c][p];if(R.beta&&!i[`${c}|${p}`]){let ge=`${process.cwd()}/tmp/build/${c}/${R.name}`;await Oo.remove(ge),i[`${c}|${p}`]=!0}if(R.beta&&!n[`${c}|${p}|${h}`]){let ge=S(t.server[h]);await ge.docker.deleteImage(c,p),await ge.disconnect(),n[`${c}|${p}|${h}`]=!0}let Uo=await $o({server:t.server[h],app:c,env:m,git:t.source[c],version:R,domain:l});s[h].unshift(Uo),await pe(t,e,s)}console.log(`\u6269\u5BB9${I}\u4E2A\u5B8C\u6210`)}else if(F>y){let I=F-y;console.log(`\u5F53\u524D\u5B9E\u4F8B\u4E2A\u6570\uFF1A${F}\uFF0C\u9700\u8981\u7F29\u51CF${I}\u4E2A`);let z=O.slice(y,F);s[h]=s[h].filter(R=>z.indexOf(R)<0),await pe(t,e,s);for(let R of z)await mt(t.server[h],R);console.log(`\u7F29\u51CF${I}\u4E2A\u5B8C\u6210`)}else console.log("\u5B9E\u4F8B\u6570\u91CF\u5DF2\u7B26\u5408\u8BA1\u5212\uFF0C\u65E0\u9700\u4FEE\u6539")}}console.log(`\u90E8\u7F72${m}\u73AF\u5883\u5E94\u7528${c}\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 pe(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 A(t.root,"scope");t.type&&await nt(t.root,"scope",t.type);let r=await A(t.root,"scale");t.type&&await nt(t.root,"scale",t.type),await No(e,r)};import Io from"fs-extra";import ii from"inquirer";var Ue=async({value:t,message:e,choices:r})=>t!==void 0?t:(await ii.prompt({name:"value",type:"list",message:e,choices:r})).value;var Ro=async(t,e,r)=>{r=r||{},r.root=r.root||process.cwd();let o=await A(r.root,"scope"),s=await A(r.root,"scale");console.log(`\u6B63\u5728\u6253\u5370${t}\u5E94\u7528${e}\u73AF\u5883\u7684\u65E5\u5FD7`);try{e=await Ue({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u73AF\u5883",choices:Object.keys(s).map(c=>({name:c,value:c}))}),t=await Ue({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u5E94\u7528",choices:Object.keys(s[e]).map(c=>({name:c,value:c}))});let i=s[e][t],n=[];for(let c in i){let l=i[c].live;n.push({name:`${c} ${l?" (live)":""}`,value:c})}let m=await Ue({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u7248\u672C",choices:n}),a=i[m].instance;for(let c in a){console.log(`\u6B63\u5728\u6253\u5370${c}\u670D\u52A1\u5668\u4E0A\u7684\u65E5\u5FD7`);let l=S(o.server[c]);try{let u=await l.docker.instances();u=u.filter(f=>f.instanceId.indexOf(`sumor_app_${t}_${e}_${m}`)===0),u=u.map(f=>f.instanceId);for(let f of u){console.log(`\u6B63\u5728\u6253\u5370\u5B9E\u4F8B${f}\u7684\u65E5\u5FD7`),await l.file.ensureDir("/tmp/sumor-logs");let w=`docker cp ${f}:/usr/source/tmp/main.log /tmp/sumor-logs/${f}.log`;await l.exec(w);let d=await l.exec(`cat /tmp/sumor-logs/${f}.log`),p=`${r.root}/tmp/logs/${t}/${e}/${f}.log`;await Io.ensureFile(p),await Io.writeFile(p,d);let g=await l.exec(`docker logs ${f}`);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 ze from"fs-extra";import{execSync as mi}from"child_process";import ni from"axios";var Do=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 ni.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 Ao=({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 Lo from"fs-extra";import ci from"path";import{exec as ai}from"child_process";var de=(t,e,r)=>new Promise((o,s)=>{let i=ai(t,e),n="",m="",a=c=>(c=c.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
+ `),c);i.stdout.on("data",async c=>{c=a(c),n+=c,r&&r(c)}),i.stderr.on("data",async c=>{c=a(c),n+=c,m+=c,r&&r(c)}),i.on("close",async c=>{c!==0?s(m):o(n)})});var Po=async({registry:t,target:e,npmrc:r,force:o,tag:s})=>{s=s||"latest";let i=ci.normalize(`${e}/.npmrc`).replace(/\\/g,"/");await Lo.writeFile(i,r);let n=await Lo.readJson(`${e}/package.json`),m=`${n.name}@${n.version}`;try{await de(`npm publish --allow-same-version --access public --tag ${s} --registry=${t} --userconfig=${i}`,{cwd:e}),console.log(`NPM\u5305${m}\u5DF2\u53D1\u5E03 ${e}`)}catch(a){let c;if(typeof a=="object"&&(c=a.message),typeof a=="string"&&(c=a),c&&c.indexOf("EPUBLISHCONFLICT")>=0)if(o){console.log(`\u4ED3\u5E93\u5DF2\u5B58\u5728\u8BE5\u7248\u672C${m}\uFF0C\u5C06\u5220\u9664\u91CD\u65B0\u53D1\u5E03`);let l=!1;try{await de(`npm unpublish --registry=${t} --userconfig=${i} ${m}`,{cwd:e})}catch{l=!0}l||await de(`npm publish --allow-same-version --access public --tag ${s} --registry=${t} --userconfig=${i}`,{cwd:e}),console.log(`NPM\u5305${m}\u5DF2\u53D1\u5E03 ${e}`)}else console.log("\u5DF2\u5B58\u5728\u8BE5\u7248\u672C");else console.log(a.message),console.log(a),console.log("\u53D1\u5E03\u5931\u8D25")}try{await de(`npm dist-tag add ${m} ${s} --registry=${t} --userconfig=${i}`,{cwd:e})}catch(a){console.log(a.message),console.log(a),console.log("\u6807\u7B7E\u66F4\u65B0\u5931\u8D25")}};var Fo=async({path:t,name:e,version:r,force:o,tag:s},i)=>{let{username:n,password:m,registry:a}=i;await ze.exists(`${t}/package.json`)||await ze.writeJson(`${t}/package.json`,{});let c=await ze.readJson(`${t}/package.json`);if(c.version=r||c.version,c.name=e||c.name,console.log(`\u6B63\u5728\u66F4\u65B0\u5305\u4FE1\u606F${r}`),await ze.writeJson(`${t}/package.json`,c),a){console.log("\u6B63\u5728\u83B7\u53D6NPM\u4ED3\u5E93\u6388\u6743");let l=Buffer.from(`${n}:${m}`).toString("base64"),u=await Do({registry:a,username:n,password:m}),f=Ao({registry:a,auth:l,token:u});console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}`),await Po({registry:a,target:t,npmrc:f,force:o,tag:s})}else{let l="https://registry.npmjs.org";console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}\u5230${l}`),mi(`npm publish --tag ${s||"latest"} --registry ${l} --access public`,{cwd:t,stdio:"inherit"})}};var jo=async({name:t,version:e,beta:r,registry:o,username:s,password:i})=>{let n={username:s,password:i,registry:o},m=`${process.cwd()}/output/production`;await Fo({path:m,name:t,version:e,tag:r?"beta":void 0,force:!0},n)};var Mo=async()=>{let t=new li,r=(await ui.readJson(`${B}/package.json`)).version||"0.0.0";qr(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 jo({version:o,...s})}),t.command("dev").description("\u5F00\u53D1").action(async()=>{await N({mode:"dev"})}),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 io(o)}),t.command("setup").description("\u5B89\u88C5").action(async()=>{await N({mode:"setup"})}),t.command("preview").description("\u8BD5\u8FD0\u884C").action(async()=>{await N({mode:"preview"})}),t.command("run").description("\u8FD0\u884C").action(async()=>{await N({mode:"run"})}),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 Ro(o,s)}),t.parse(process.argv)};var yd={app:N,pack:le,cli:Mo};export{yd 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","vite-plugin-rewrite-all":"^1.0.1"},"version":"1.2.2"}
@@ -1,24 +1,20 @@
1
1
  <template>
2
- <SumorApp>
3
- <Frame>
4
- <router-view v-slot="{ Component }">
5
- <Suspense>
6
- <component :is="Component" />
7
- </Suspense>
8
- </router-view>
9
- </Frame>
10
- </SumorApp>
2
+ <Frame>
3
+ <router-view v-slot="{ Component }">
4
+ <Suspense>
5
+ <component :is="Component" />
6
+ </Suspense>
7
+ </router-view>
8
+ </Frame>
11
9
  </template>
12
10
  <script>
13
- import SumorApp from "./SumorApp.vue";
14
11
  import Frame from "../../../web/Frame.vue";
15
12
  export default {
16
13
  components: {
17
- SumorApp,
18
14
  Frame
19
15
  }
20
16
  };
21
17
  </script>
22
18
  <style lang="scss">
23
- @import "style.scss";
19
+ @import "style";
24
20
  </style>
@@ -1,16 +1,13 @@
1
1
  <template>
2
- <SumorApp>
3
- <router-view v-slot="{ Component }">
4
- <Suspense>
5
- <component :is="Component" />
6
- </Suspense>
7
- </router-view>
8
- </SumorApp>
2
+ <router-view v-slot="{ Component }">
3
+ <Suspense>
4
+ <component :is="Component" />
5
+ </Suspense>
6
+ </router-view>
9
7
  </template>
10
8
  <script>
11
- import SumorApp from "./SumorApp.vue";
12
9
  export default {
13
- components:{SumorApp}
10
+ components:{}
14
11
  }
15
12
  </script>
16
13
  <style lang="scss">
@@ -1,66 +0,0 @@
1
- <template>
2
- <div class="SumorApp"><slot></slot></div>
3
- </template>
4
- <script>
5
- export default {
6
- data(){
7
- return {
8
- sumor: this.$store("sumor")
9
- }
10
- },
11
- mounted(){
12
- if(this.$env.dark){
13
- this.loadDarkMode();
14
- this.listenDarkModeChange();
15
- }
16
- if (typeof window !== "undefined" && window) {
17
- window.addEventListener('resize', () => {
18
- this.sumor.resize();
19
- setTimeout(()=>{
20
- this.sumor.resize();
21
- },10);
22
- })
23
-
24
- // 监听popstate事件(浏览器前进后退)
25
- window.addEventListener('popstate', () => {
26
- this.sumor.resize();
27
- setTimeout(()=>{
28
- this.sumor.resize();
29
- },10);
30
- })
31
- }
32
- },
33
- methods:{
34
- loadDarkMode() {
35
- if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
36
- // 当前处于dark模式
37
- this.sumor.setDark(true)
38
- } else {
39
- // 当前不处于dark模式
40
- this.sumor.setDark(false)
41
- }
42
- },
43
- listenDarkModeChange() {
44
- const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
45
-
46
- // 监听媒体查询的变化
47
- darkModeMediaQuery.addEventListener('change', (event) => {
48
- if (event.matches) {
49
- // dark模式被启用
50
- this.sumor.setDark(true)
51
- } else {
52
- // dark模式被禁用
53
- this.sumor.setDark(false)
54
- }
55
- });
56
- }
57
- }
58
- }
59
- </script>
60
- <style scoped>
61
- .SumorApp{
62
- width: 100%;
63
- height: 100%;
64
- overflow: auto;
65
- }
66
- </style>
@@ -1,64 +0,0 @@
1
- import { defineConfig } from 'vite'
2
- import vuePlugin from '@vitejs/plugin-vue';
3
- import styleImport from "vite-plugin-style-import";
4
- import customStyle from "./styleVars.js";
5
- import fs from "fs";
6
- import path from 'path'
7
- import { fileURLToPath } from 'url'
8
- import pluginRewriteAll from 'vite-plugin-rewrite-all';
9
-
10
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
11
-
12
- let pkg = fs.readFileSync(process.cwd()+"/package.json", "utf-8");
13
- pkg = JSON.parse(pkg);
14
- const styleImportLibs = [];
15
- if(pkg.dependencies){
16
- for(let dep in pkg.dependencies){
17
- switch (dep) {
18
- case "ant-design-vue":
19
- styleImportLibs.push({
20
- libraryName: "ant-design-vue",
21
- esModule: true,
22
- resolveStyle: (name) => `ant-design-vue/es/${name}/style/index.less`
23
- });
24
- }
25
- }
26
- }
27
-
28
- const getSSL = (url)=>{
29
- let ssl = undefined;
30
- try{
31
- ssl = fs.readFileSync(url, 'utf-8');
32
- }catch (e) {
33
- ssl = undefined;
34
- }
35
- return ssl;
36
- };
37
-
38
- export default defineConfig({
39
- root: process.cwd()+"/tmp/web",
40
- base: '/',
41
- publicDir: process.cwd()+"/web/public",
42
- cacheDir: process.cwd()+"/tmp/web/.vite",
43
- plugins: [
44
- pluginRewriteAll(),
45
- vuePlugin(),
46
- styleImport({
47
- libs: styleImportLibs
48
- })
49
- ],
50
- resolve: {
51
- alias: {
52
- '@': path.resolve(__dirname, './web'),
53
- },
54
- },
55
- server: {
56
- server: { middlewareMode: 'html' },
57
- // HTTPS-PLACEHOLDER
58
- // PORT-PLACEHOLDER
59
- proxy: {
60
- // SERVICE-PLACEHOLDER
61
- },
62
- },
63
- css: customStyle
64
- });