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