sumor 1.2.5 → 1.2.7

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,34 @@
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]};
1
+ import Xo from"chokidar";var ut=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 Ho from"@vitejs/plugin-vue";import Be from"fs-extra";import Go from"vite-plugin-rewrite-all";var ft={"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 pt=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 Bo=(t,e)=>{let r="";for(let s in t)r+=`$${s}:${t[s]};
2
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.build=Object.assign({},r.build),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 E 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 E.exists(`${t}.json`),o=await E.exists(`${t}.yaml`),s=await E.exists(`${t}.yml`),i={};if(s){let n=await E.readFile(`${t}.yml`,"utf-8");i=ye.parse(n)}else if(o){let n=await E.readFile(`${t}.yaml`,"utf-8");i=ye.parse(n)}else r?i=await E.readJson(`${t}.json`):e||(await E.ensureFile(`${t}.yml`),await E.writeFile(`${t}.yml`,ye.stringify(i)));return!e&&(r||o)&&!s&&(await E.remove(`${t}.json`),await E.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}
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}},dt=t=>(t=pt(t),Bo(t,ft));var gt=t=>{let e=dt(t);return{preprocessorOptions:{scss:{additionalData:e.scss},less:{modifyVars:e.less,javascriptEnabled:!0}}}};import{pathToFileURL as Jo}from"url";var wt=async(t,e)=>{let r={};await Be.exists(process.cwd()+"/vite.config.js")&&(r=(await import(Jo(process.cwd()+"/vite.config.js"))).default);let o=t.config.styleVars,s=gt(o),i=t.uiPort;return await Be.remove(process.cwd()+"/tmp/web/.vite"),await Be.ensureDir(process.cwd()+"/tmp/web/.vite"),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(),Ho()].concat(r.plugins),r.css=Object.assign({},r.css,s),r.build=Object.assign({},r.build),r.resolve=Object.assign({extensions:[".vue",".mjs",".js",".ts",".jsx",".tsx",".json"]},r.resolve),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 wt(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 ht=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 E from"fs-extra";import He from"fs-extra";var H=async(t,e)=>{await He.ensureFile(t),await He.readFile(t,"utf-8")!==e&&await He.writeFile(t,e)};var se=async(t,e)=>{let r=await E.exists(`${t}.json`),o=await E.exists(`${t}.yaml`),s=await E.exists(`${t}.yml`),i={};if(s){let n=await E.readFile(`${t}.yml`,"utf-8");i=ye.parse(n)}else if(o){let n=await E.readFile(`${t}.yaml`,"utf-8");i=ye.parse(n)}else r?i=await E.readJson(`${t}.json`):e||(await E.ensureFile(`${t}.yml`),await E.writeFile(`${t}.yml`,ye.stringify(i)));return!e&&(r||o)&&!s&&(await E.remove(`${t}.json`),await E.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 yt=async(t,e)=>{let r=await $e("**/*.vue",{cwd:e.pages}),o=[];for(let n in r){let m=r[n],c=`${e.pages}/${m}`.replace(/\\/g,"/").replace(".vue",""),l=`../../web/pages/${m}`.replace(/\\/g,"/"),u=await se(c,t.mode==="production"),f=`/${m}`.replace(e.pages,"").replace(".vue","").replace(/\\/g,"/").toLowerCase().replace("/index","");f===""&&(f="/");let w="";if(u.alive&&(w=`,
4
+ meta:{keepAlive:true}`),u.routes)for(let d of u.routes)o.push(` {
5
+ path: "${d}",
6
+ component: ()=>import("${l}"),
7
+ props: true${w}
8
8
  }`);else o.push(` {
9
- path: "${u}",
10
- component: ()=>import("${c}"),
11
- props: true${f}
12
- }`)}let s=`export default [
9
+ path: "${f}",
10
+ component: ()=>import("${l}"),
11
+ props: true${w}
12
+ }`)}let s=t.config.pages||[];for(let n of s)if(n.redirect)o.push(` {
13
+ path: "${n.path}",
14
+ redirect: "${n.redirect}"
15
+ }`);else{let m="";n.alive&&(m=`,
16
+ meta:{keepAlive:true}`),o.push(` {
17
+ path: "${n.path}",
18
+ component: ()=>import("../../web${n.component}"),
19
+ props: true${m}
20
+ }`)}let i=`export default [
13
21
  ${o.join(`,
14
22
  `)}
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(`;
23
+ ]`;await H(`${e.tmpWeb}/routes.js`,i)};var $t=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(`;
16
24
  `)};
17
25
  const stores = {
18
26
  ${o.join(`,
19
27
  `)}
20
28
  }
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 vt=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 Et=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:vt,from10to62:Et,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{ssl:e,protocol:r,domain:o,port:s,origin:n,uiPort:m}};import as from"fs";var Dt=(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 ve=new ss({}),Rt={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(ve.level){case 1:c=ve[is[r.toLowerCase()]](a);break;case 2:c=ve.hex(Rt[r.toLowerCase()]).visible(a);break;case 3:c=ve.hex(Rt[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(`${Dt(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},Ee={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
29
+ export default stores;`;await H(`${t.tmpWeb}/stores.js`,s)};var xe=async(t,e)=>{let r=await he(t);await ht(t,r,e),await yt(t,r),await $t(r)};import{createServer as qo,defineConfig as Qo}from"vite";var xt=async t=>{let{getLogger:e,root:r,config:o}=t,s=e("DEV"),i=ut(async c=>{await xe(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 bt=async t=>new Promise(e=>{setTimeout(()=>{e()},t*1e3)});import es from"uuid";var _e=()=>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 St(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 St(t),r=o.toString();break;case"buffer":r=await St(t);break;default:r=t;break}return r}return t};var vt={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 kt=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 Tt=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 Ot=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 Nt={from10to36:Et,from10to62:kt,from62to10:Tt,from36to10:Ot};var Ct={delay:bt,uuid:_e,stream:vt,number:Nt};var It=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}},Dt=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{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 ve=new ss({}),At={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}`},Ge=({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(ve.level){case 1:c=ve[is[r.toLowerCase()]](a);break;case 2:c=ve.hex(At[r.toLowerCase()]).visible(a);break;case 3:c=ve.hex(At[r.toLowerCase()]).visible(a);break;default:c=a;break}return c+i};var Lt=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 Je=(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)}
30
+ `);let d=u;e.i18n&&e.i18n[u]&&(d=Je(e.i18n[u],f));let p=e.offset!==void 0?e.offset:-new Date().getTimezoneOffset();console.log(Ge({time:w,offset:p,level:l,scope:r,id:s,message:d}))}}this.load=c=>{let l=Lt(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=Je(e.i18n[d],p)),u+=`${Ge({...w,offset:e.offset||new Date().getTimezoneOffset(),message:g})}
31
+ `}return u}}};var Pt=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 Ft from"knex";var We=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=We(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=Ft(We(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=Ft(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 jt=t=>{let e={};for(let r in t){let o=G(r,"_",!0);e[o]=t[r]}return e};var Mt=(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=>jt(g))},i.insert=async(a,c)=>{c=c||{},a=$(a,"_"),await m();let l=async()=>{let f=_e();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)=>Mt(r,o,s,m,a),destroy:async()=>{await o.destroy()}}};var Ut=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 Kt}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),Ke=t=>(t=t||{},t.name=t.name||"",t.desc=t.desc||"",t.type=t.type||"any",t.placeholder=t.placeholder||"",t.required=t.required===!0,t.length=t.length||0,t.rule=t.rule||[],t.helper=t.helper||{},t.type==="string"&&(t.trim=t.trim!==!1,t.upperCase=t.upperCase===!0,t.lowerCase=t.lowerCase===!0),t),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]=Ke(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]=Ke(t.parameters[r])}return t},Ee={text:ms,rule:ls,type:Ke,entity:us,program:fs};import Ve 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 Ye=async(t,e,r)=>{let o={};if(await Ve.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 Ve.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 Ve.readFile(c,"utf-8")}}}return o};var zt={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 Bt={"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 Ht=`sq=\u963F\u5C14\u5DF4\u5C3C\u4E9A\u8BED|Shqip
24
32
  sq-AL=\u963F\u5C14\u5DF4\u5C3C\u4E9A\u8BED(\u963F\u5C14\u5DF4\u5C3C\u4E9A)|Shqiptar (Shqip\xEBri)
25
33
  gsw=\u963F\u5C14\u8428\u65AF\u8BED
26
34
  gsw-FR=\u963F\u5C14\u8428\u65AF\u8BED(\u6CD5\u56FD)
@@ -364,7 +372,7 @@ zh-HK=\u4E2D\u6587(\u7E41\u4F53\uFF0C\u9999\u6E2F\u7279\u522B\u884C\u653F\u533A)
364
372
  zh-CN=\u4E2D\u6587(\u7B80\u4F53)
365
373
  zh-SG=\u4E2D\u6587(\u7B80\u4F53\uFF0C\u65B0\u52A0\u5761)
366
374
  zu=\u7956\u9C81\u8BED
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(`
375
+ zu-ZA=\u7956\u9C81\u8BED(\u5357\u975E)`;var Gt={"sumor.language":Ht};var Jt=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
376
  <html>
369
377
  <head>
370
378
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@@ -412,7 +420,7 @@ if (typeof WeixinJSBridge == "undefined") {
412
420
  }
413
421
  </script>
414
422
  </body>
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),Ee[c])for(let u in s[a])s[a][u]=Ee[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]||Ee.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{}r.version=r.version||"0.0.0",r.server=r.server||"local",r.port=r.port||t.sumor.port,r.time=new Date().getTime(),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{version:n,server:m,port:a,time:c}=o.sumor.instance;s.set("sumor-instance",`${n}_${m}_${a}_${c}`)}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)},R={serverUpTime:hs,serviceUpTime:ys,interval:sr,memory:[],cpu:[]},Ye,or=async()=>{R.updateTime=Date.now();let t=_s();if(Ye){let e=xs(Ye,t);R.cpu.unshift(e),R.cpu=R.cpu.slice(0,rr)}Ye=t,R.memory.unshift($s()),R.memory=R.memory.slice(0,rr)},nr=async t=>{or(),setInterval(()=>{or()},sr*1e3),t.use((e,r,o)=>{e.sumor.monitor=JSON.parse(JSON.stringify(R)),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 vs from"cookie-parser";var cr=t=>{t.use(vs()),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 Es=({title:t,code:e,desc:r,data:o})=>{let s=JSON.stringify(o,null,4);return`<html>
423
+ </html>`)}};var Wt=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:Jt},r};var Vt=async t=>{let e=Wt(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:Gt,text:zt,type:Bt,api:r};for(let a of o){let c=a;s[a]=s[a]||{},(a==="api"||a==="event")&&(c="program");let l=await Ye(`${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),Ee[c])for(let u in s[a])s[a][u]=Ee[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 Ye(`${t.root}/view`,"view","sql");for(let a in i)s.view[a]=s.api[a]||Ee.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(Kt(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(Kt(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 Yt=async t=>{let e=_t(t),r=await It(e);e.setContext({tools:Ct,config:r});let o=r.name||"\u8F7B\u5448\u4E91\u5E94\u7528",s=(r.logLevel||"info").toLowerCase(),i=r.language||"zh-CN",n=await Dt(e),m={};e.setContext({name:o,logLevel:s,language:i,...n,exposeApis:m});let a=await Pt(e),c=a("APP");if(e.setContext({getLogger:a,logger:c}),e.config.database){let l=await Ut(e);e.setContext({connectDB:l})}return await Vt(e),e};import zs from"express";import Zt from"fs-extra";var Xt=async t=>{let e=`${t.sumor.root}/instance.json`,r={};if(await Zt.exists(e))try{r=await Zt.readJson(e)}catch{}r.version=r.version||"0.0.0",r.server=r.server||"local",r.port=r.port||t.sumor.port,r.time=new Date().getTime(),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{version:n,server:m,port:a,time:c}=o.sumor.instance;s.set("sumor-instance",`${n}_${m}_${a}_${c}`)}i()})};var qt=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)},er=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 tr=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 rr=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 ir=60,or=24*60,hs=(Math.floor(Date.now()/1e3)-ce.uptime())*1e3,ys=Date.now(),nr=t=>Math.round(t),$s=()=>nr((ce.totalmem()-ce.freemem())/ce.totalmem()*100),xs=()=>({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 nr(o/e.idle.length)},R={serverUpTime:hs,serviceUpTime:ys,interval:ir,memory:[],cpu:[]},Ze,sr=async()=>{R.updateTime=Date.now();let t=xs();if(Ze){let e=_s(Ze,t);R.cpu.unshift(e),R.cpu=R.cpu.slice(0,or)}Ze=t,R.memory.unshift($s()),R.memory=R.memory.slice(0,or)},ar=async t=>{sr(),setInterval(()=>{sr()},ir*1e3),t.use((e,r,o)=>{e.sumor.monitor=JSON.parse(JSON.stringify(R)),o()})};import Xe from"body-parser";import bs from"multer";import Ss from"fs-extra";var cr=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(Xe.urlencoded({extended:!1})),t.use(Xe.json()),t.use(Xe.text()),t.use((o,s,i)=>{o.sumor.data={...o.params,...o.query,...o.body},i()})};import vs from"cookie-parser";var mr=t=>{t.use(vs()),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 lr=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=lr(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 ur=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 fr=(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 pr=t=>{let e={};for(let r in t)e[r]=t[r].sql;return e};var dr=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 gr=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 wr=(t,e)=>{e=!!e;let r={};for(let a in t){let c=$(a,"_");r[c]=t[a]}let o=pr(r),s=dr(o),i=gr(s),n=fr(i,e),m={};for(let a in n){let c=G(n[a],"_");m[c]=r[n[a]]}return m};var hr=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 ur(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=wr(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:hr,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 yr=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 qe=class{constructor(e){this.req=e,this._id=e.sumor.cookie.t,this._user=null,this._permission={},this._data={},this._time=0}async update({user:e,data:r,permission:o}){e&&(this._user=e,this.req.sumor.db&&this.req.sumor.db.setUser(e)),o&&(this._permission=o),r&&(this._data=r)}get id(){return this._id||""}set id(e){throw new Error("sumorApp.TOKEN_ID_EDIT_FORBIDDEN_DIRECTLY")}get time(){return this._time||""}set time(e){throw new Error("sumorApp.TOKEN_TIME_EDIT_FORBIDDEN_DIRECTLY")}get data(){return this._data||{}}set data(e){throw new Error("sumorApp.TOKEN_DATA_EDIT_FORBIDDEN_DIRECTLY")}get user(){return this._user||""}set user(e){throw new Error("sumorApp.USER_EDIT_FORBIDDEN_DIRECTLY")}get permission(){return this._permission}set permission(e){throw new Error("sumorApp.PERMISSION_EDIT_FORBIDDEN_DIRECTLY")}async setId(e){this._id=e,await this.save()}async setData(e,r){this._data[e]=r,await this.save()}async setPermission(e,r){if(e){let o={};if(typeof e=="string")o[e]=r||[];else if(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}},$r=async t=>{t.use(async(e,r,o)=>{e.sumor.token=new qe(e),t.sumor.meta.event.token&&(e.sumor.token.load=async()=>{await t.sumor.meta.event.token.program(e.sumor,e,r)},await e.sumor.token.load()),e.sumor.token.user&&e.sumor.db&&e.sumor.db.setUser(e.sumor.token.user),o()})};var xr=async t=>{t.use(async(e,r,o)=>{let s=e.sumor.getLogger("DATABASE");e.sumor.db=await e.sumor.connectDB(s),o()})};var Es=({title:t,code:e,desc:r,data:o})=>{let s=JSON.stringify(o,null,4);return`<html>
416
424
  <head>
417
425
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
418
426
  <style type="text/css">
@@ -481,11 +489,11 @@ function show(){
481
489
  }
482
490
  </script>
483
491
  </body>
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(Es({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 vr=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=vr(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 Er=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 Ds 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(`
492
+ </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(Es({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 et={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 et){let s=t.image[o];if(s){let i=[];i.push(o);for(let n in et[o])s[n]&&i.push(`${et[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},tt=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}},br=tt;import Y from"fs-extra";import Sr from"path";var rt=class{constructor(e){this.config=e,this.root=Sr.resolve(process.cwd(),this.config.path)}_getTargetPath(e){return Sr.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)}},vr=rt;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 br(e);break;case"file":this._instance=new vr(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 kr=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 ot,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(ot||(ot=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)=>{ot.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 Tr=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 st from"axios";import Ds 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
493
  `)}
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 Ds({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 Dr=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 Er(t),await kr(t),await Ir(t)};var Rr=(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=Rr(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 Rs 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 Rs.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>
494
+ `;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 Ds({method:t.method.toUpperCase(),url:r+t.url,data:t.body,headers:n})).data}catch(m){throw m.response}};var Or=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 Nr(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 Cr(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:Or,close:Nr,check:Cr,sign:Ie};var Ir=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 st.post(e,r):o=await st.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>Ir&&(await this._refreshToken(),r=await e()),(!r||!r.token||Date.now()-r.time>Ir)&&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 st.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 Dr=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 Xt(t),await _r(t),await qt(t),await er(t),await tr(t),await rr(t),await Te(t),await ar(t),await cr(t),await mr(t),await yr(t),await xr(t),await $r(t),await kr(t),await Tr(t),await Dr(t)};var Ar=(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 Lr=(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 Pr=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=Ar(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=Lr(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 Fr=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 Rs from"fs-extra";var jr=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 Rs.remove(m)}}o()})};var Mr=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 it from"fs-extra";import Ur from"node:path";import As from"serve-static";import Ls from"fs";import{pathToFileURL as Ps}from"url";var zr=async t=>{let e="/",r=Ur.resolve(process.cwd(),"./output/web");if(await it.exists(r)){let o=await it.readFile(`${r}/client/index.html`,"utf-8"),s=JSON.parse(await it.readFile(`${r}/client/ssr-manifest.json`,"utf-8"));t.use(e,As(`${r}/client`,{index:!1}));let i;try{let n=Ur.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
495
  <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 De=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(De(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(De(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(De(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 Dr(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(`
496
+ <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 Br from"serve-static";import Hr from"fs-extra";var Gr=async t=>{let e=`${t.sumor.root}/static`,r=`${B}/template/public`;t.use(Fs({filter(){return!0},flush:js.Z_SYNC_FLUSH})),await Hr.exists(r)&&t.use(Br(r)),await Hr.exists(e)&&t.use(Br(e))};var Jr=async t=>{if(await Fr(t),await jr(t),await Mr(t),await Gr(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 zr(t)};import Wr from"http";import Us from"https";import"spdy";var De=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 Kr=async t=>{let e=t.sumor.port;if(t.sumor.protocol==="https"){let r;if(e===443){let i=Wr.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(De(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(De(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=Wr.createServer(t),o=await new Promise(s=>{r.listen(e,()=>{s(De(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 Vr=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 Pr(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 Jr(e),e.sumor.logger.debug("\u540E\u7F6E\u4E2D\u95F4\u4EF6\u52A0\u8F7D\u5B8C\u6210"),await Kr(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 Yr,defineConfig as Zr}from"vite";var Xr=async t=>{await xe(t,!0);let e=await oe(t);e.build.ssrManifest=!0,e.build.outDir="../../output/web/client",e.build.emptyOutDir=!0,await Yr(Zr(e));let r=await oe(t);r.build.ssr="src/entry-server.js",r.build.outDir="../../output/web/server",r.build.emptyOutDir=!0,await Yr(Zr(r))};var qr=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 Yt(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 xt(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 Xr(e),e.logger.info("\u751F\u4EA7\u4EE3\u7801\u751F\u6210\u5B8C\u6BD5")),e.mode==="setup"&&(e.logger.info("\u5F00\u59CB\u90E8\u7F72\u6570\u636E\u5E93"),await qr(e),e.logger.info("\u90E8\u7F72\u6570\u636E\u5E93\u5B8C\u6210")),(e.mode==="development"||e.mode==="preview"||e.mode==="production")&&(e.logger.info("\u5F00\u59CB\u542F\u52A8\u5BF9\u5916\u670D\u52A1"),await Vr(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
497
  ========================================================
490
498
  =
491
499
  = === = Sumor App Framework v${e}
@@ -493,10 +501,10 @@ function show(){
493
501
  = === = More Information: https://www.sumor.com
494
502
  =
495
503
  ========================================================
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 v=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,`
504
+ `)};import U from"fs-extra";import io from"node:path";var eo=(t,e)=>{let r={name:t.name,type:"module",bin:t.bin,main:"./index.umd.cjs",module:"./index.es.js",exports:{".":{import:"./index.es.js",require:"./index.umd.cjs"}},dependencies:t.dependencies};return e&&(r.main="./index.es.js",delete r.exports["."].require),r};import Bs from"fs-extra";import{build as Hs,defineConfig as Gs}from"vite";import Js from"@vitejs/plugin-vue";import to from"node:path";var nt=t=>t&&(t=t.replace(/\//g,"-"),t=t.replace(/@/g,""),t=t.replace(/(\w)/,e=>e.toUpperCase()),t.replace(/-(\w)/g,(e,r)=>r?r.toUpperCase():""));var ro=async t=>{let e={},r=Object.keys(t.pkg.dependencies||{});for(let i=0;i<r.length;i+=1)e[r[i]]=nt(r[i]);let o=nt(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(to.join(t.output,"./index.umd.js"),to.join(t.output,"./index.umd.cjs"))};import*as oo from"esbuild";var so=async t=>{let e=Object.keys(t.pkg.dependencies||{});await oo.build({format:"esm",entryPoints:[t.entry],minify:t.mode==="production",keepNames:t.mode==="development",bundle:!0,platform:"node",outfile:`${t.output}/index.es.js`,external:e,sourcemap:t.mode==="development"?"inline":!1})};var le=async t=>{let e=t.root||process.cwd(),r=t.entry||io.resolve(e,"./src/index.js"),o=t.mode||"production",s=t.output||io.resolve(e,"./output",`./${o}`),i=!!t.node;await U.remove(s),await U.ensureDir(s),await U.exists(`${e}/static`)&&await U.copy(`${e}/static`,s);let n=await U.readJson(`${e}/package.json`);i?await so({mode:o,entry:r,output:s,pkg:n}):await ro({mode:o,entry:r,output:s,pkg:n});let m=await eo(n,i);return await U.ensureFile(`${s}/package.json`),await U.writeFile(`${s}/package.json`,JSON.stringify(m,null,4)),{name:n.name}};var no=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 ao 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=ao.parse(n)}let s=`${t}/${e}.yaml`;if(!o&&await ee.exists(s)){let n=await ee.readFile(s,"utf-8");o=ao.parse(n)}let i=`${t}/${e}.json`;if(!o&&await ee.exists(i)){let n=await ee.readFile(i,"utf-8");o=JSON.parse(n)}}catch{console.log(`\u914D\u7F6E\u6587\u4EF6${e}\u89E3\u6790\u5931\u8D25`)}return o||{}};import Ws from"yaml";import ue from"fs-extra";var at=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 No from"fs-extra";import Ae from"fs-extra";var co=t=>{let e=t.split("/"),r=e.pop(),o=e.join("/");return{name:r,folder:o}};import{exec as Ks}from"child_process";var v=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
505
  `).replace(/\r/g,`
498
506
  `),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 Re=async t=>{let e=await v("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 v(`git ${e}`,{cwd:t});var Vs=async t=>{await Ae.writeFile(`${t}/.gitignore`,`# IDE configuration
507
+ `);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 v(`git ${e}`,{cwd:t});var Vs=async t=>{await Ae.writeFile(`${t}/.gitignore`,`# IDE configuration
500
508
  .idea
501
509
 
502
510
  # generated files
@@ -506,9 +514,9 @@ dist
506
514
  tmp
507
515
 
508
516
  # system
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 v(`git clone ${e} ${s}`,{cwd:i})}await v("git config user.name builder",{cwd:t}),await v("git config user.email builder@dummy.com",{cwd:t}),(await Re(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 Re(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
517
+ .DS_Store`),await Ae.writeFile(`${t}/README.md`,"")},Le=async(t,e)=>{if(!await Ae.exists(t)){let{name:s,folder:i}=co(t);await Ae.ensureDir(i),await v(`git clone ${e} ${s}`,{cwd:i})}await v("git config user.name builder",{cwd:t}),await v("git config user.email builder@dummy.com",{cwd:t}),(await Re(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 Vs(t),await x(t,"add . -f"),await x(t,'commit -m "\u521D\u59CB\u5316"'),await x(t,"push -f origin 1.0"))};var mo=async(t,e)=>{let o=(await x(t,`log ${e} --pretty=format:"%H|%ad|%cd|%D|%s" --date=iso-strict-local`)).split(`
518
+ `),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()),lo=async t=>{await x(t,"fetch");let e=await Re(t),r=/^\d+\.\d+?$/,o=/^\d+\.\d+\.\d+?$/,s={};for(let i of e)if(i.remote&&r.test(i.name)){await x(t,"reset --hard HEAD"),await x(t,`checkout ${i.origin}`);let n=await mo(t,i.origin);n=n.reverse();let 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 uo=async(t,{url:e,username:r,password:o})=>{if(e.indexOf("http")===0){let s=e.split("/"),i=`${s[0]}//${r}:${o}@${s[2]}/${s.slice(3,s.length).join("/")}`,n=`${process.cwd()}/tmp/version/${t}`;return await Le(n,i),await lo(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 _ from"fs-extra";import Xs from"archiver";import qs from"extract-zip";import ct 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 mt=class{normalize(e){let r=ct.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=_.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=ct.normalize(s),s=s.replace(/\\/g,"/"),s)),o}async zip(e,r,o){return await new Promise((s,i)=>{let n=_.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=ct.normalize(e),await new Promise((o,s)=>{qs(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,m)=>{n&&o(n),_.close(i,()=>{r(m)})})})})}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)}},C=new mt;C.exist=C.exists;C.readJSON=C.readJson;C.writeJSON=C.writeJson;C.delete=C.remove;var b=C;var fo=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(`
519
+ `),s=i.indexOf(o)>=0}catch{}return s},async remove(e){await t.exec(`rm -rf ${e}`)},async delete(e){await t.exec(`rm -rf ${e}`)},async putFolder(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmp.zip`,i=await this.tmp("sumor-utils-ssh"),n=`${i}/tmp.zip`;await b.zip(e,s),await this.putFile(s,n),await this.ensureDir(r),await this.unzip(n,r),await this.delete(i),await b.delete(o)},async getFolder(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmp.zip`,i=await this.tmp("sumor-utils-ssh"),n=`${i}/tmp.zip`;await this.zip(e,n),await this.getFile(n,s),await b.unzip(s,r),await this.delete(i),await b.delete(o)},async putFile(e,r){return await t.connect(),await t.connection.putFile(e,r)},async writeFile(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmpfile`;await b.ensureFile(s),await b.writeFile(s,r),await this.putFile(s,e),await b.delete(o)},async readFile(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmpfile`;await this.getFile(e,s);let i=await b.readFile(s,r);return await b.delete(o),i},async getFile(e,r){return await t.connect(),await t.connection.getFile(r,e)},async zip(e,r){await t.install("zip"),await t.exec(`cd ${e};zip -q -r ${r} ./*`)},async unzip(e,r){await t.install("unzip"),await t.exec(`unzip -o ${e} -d ${r}`)},async info(e){if(await this.exists(e)){let o=(await t.exec(`stat ${e} -c "%X|%Y|%Z"`)).split("|"),s={};return o[0]&&(s.access=parseInt(o[0],10)),o[1]&&(s.modify=parseInt(o[1],10)),o[2]&&(s.change=parseInt(o[2],10)),s}}});var po=t=>({async isOccupied(e){let r=!0;try{await t.exec(`lsof -i:${e}`)===""&&(r=!1)}catch(o){console.log(o)}return r},async getPort(e){if(e?e++:e=1,e>10)throw new Error("\u670D\u52A1\u5668\u7AEF\u53E3\u83B7\u53D6\u5931\u8D25");let r=3e4+Math.floor(Math.random()*1e4);return await this.isOccupied(r)?await this.getPort(e):r}});var go=t=>({async execCommand(e,r){return await t.install("docker.io"),await t.exec(e,r)},async remove(e){try{await this.execCommand(`docker rm -f ${e}`)}catch(r){if(r.message.indexOf("No such container")<0)throw r}},async delete(e){try{await this.execCommand(`docker rm -f ${e}`)}catch(r){if(r.message.indexOf("No such container")<0)throw r}},async run({mode:e,image:r,name:o,folder:s,port:i}){s=s||[],i=i||[];let n=["docker","run"];n.push("-itd");for(let 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
520
 
513
521
  # \u521B\u5EFA/usr/runtime\u76EE\u5F55
514
522
  RUN mkdir -p /usr/runtime
@@ -529,7 +537,7 @@ phantomjs_cdnurl=https://registry.npmmirror.com/mirrors/phantomjs/
529
537
  sentrycli_cdnurl=https://registry.npmmirror.com/mirrors/sentry-cli/
530
538
  sqlite3_binary_site=https://registry.npmmirror.com/mirrors/sqlite3/
531
539
  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 v("npm i",{cwd:y}),await v("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 vo=(t,e)=>{e=e||{},e.user=e.user||"root";let r=[];for(let o of t)o.port=o.port||443,o.instances.length>0&&r.push(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(`
540
+ `);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},wo=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 ho=t=>({async install(e){await t.exec(`npm i -g ${e}`)},async start(e,r){try{await t.install("nodejs"),await t.install("npm")}catch(s){console.log(s)}let o=!0;try{await t.exec("pm2 -v")}catch{o=!1}o||await t.node.install("pm2"),await t.exec("npm i",{cwd: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",fo),e.addTool("port",po),e.addTool("docker",go),e.addTool("node",ho),e.addTool("monitor",wo),e};var yo=async t=>{let e={};for(let r in t.server){let o=S(t.server[r]),s=await o.docker.instances();s=s.filter(i=>i.instanceId.indexOf("sumor_app")===0),e[r]=s.map(i=>i.instanceId),await o.disconnect()}return e};import L from"fs-extra";var $o=async(t,e)=>{await x(t,"clean -df"),await x(t,`checkout ${e}`)};var xo=async({server:t,app:e,env:r,git:o,version:s,domain:i})=>{let n=S(t);if(!await(async()=>!!(await n.docker.images()).find(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 $o(y,s.id),await v("npm i",{cwd:y}),await v("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 bo=()=>T("server",["listen 80 default_server;","server_name _;","return 301 https://$host$request_uri;"]);var So=(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 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"}),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(So(o.name,o.instances)),r.push(vo(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"),bo(),re(r)])]).join(`
533
541
  `)};var oi=`<html>
534
542
  <head>
535
543
  <head>
@@ -540,31 +548,31 @@ python_mirror=https://registry.npmmirror.com/mirrors/python/`;await t.file.write
540
548
  </head>
541
549
  <body>
542
550
  <h1>\u5E94\u7528\u6682\u65F6\u65E0\u6CD5\u8BBF\u95EE</h1><h3>\u5B9E\u4F8B\u672A\u4E0A\u7EBF</h3></body>
543
- </html>`,Eo=()=>({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=vo(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}=Eo();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}%
551
+ </html>`,ko=()=>({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}=ko();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 lt=async(t,e)=>{let r=S(t);await r.docker.delete(e),await r.disconnect()};var To=async(t,e,r)=>{let o=S(t);await o.file.putFolder(r,`/usr/sumor-cloud/ssl/${e}`),await o.disconnect()};var 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`))),Oo=async t=>{let e=S(t),r=await e.monitor.system();return await e.disconnect(),`- CPU\uFF1A${r.cpu.cores}\u6838\uFF0C\u5DF2\u5360\u7528${r.cpu.usage}%
544
552
  - \u5185\u5B58\uFF1A\u5171${Me(r.memory.total)}\uFF0C\u5269\u4F59${Me(r.memory.free+r.memory.cache)}
545
553
  - \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(`
554
+ - \u542F\u52A8\u65F6\u95F4\uFF1A${si(r.uptime)}`};var Co=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
555
 
548
556
  ==================== \u66F4\u65B0\u8BC1\u4E66 ====================
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(`
557
+ `);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 To(t.server[l],c,u))}console.log(`
550
558
 
551
559
  ==================== \u68C0\u67E5\u5E94\u7528\u7248\u672C ====================
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(`
560
+ `);let o={};for(let m in t.source){console.log(`\u5E94\u7528${m}\u6B63\u5728\u68C0\u67E5\u5E94\u7528\u7248\u672C`),o[m]=await uo(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
561
 
554
562
  ==================== \u83B7\u53D6\u670D\u52A1\u5668\u8FD0\u884C\u72B6\u6001 ====================
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(`
563
+ `);for(let m in t.server){let a=await Oo(t.server[m]);console.log(`\u670D\u52A1\u5668${m}\u8FD0\u884C\u72B6\u6001`),console.log(a)}console.log(`
556
564
 
557
565
  ==================== \u83B7\u53D6\u670D\u52A1\u5668\u5B9E\u4F8B\u72B6\u6001 ====================
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(`
566
+ `);let s=await yo(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
567
 
560
568
  ==================== \u90E8\u7F72\u5E94\u7528 ====================
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 D=o[c][p];if(D.beta&&!i[`${c}|${p}`]){let ge=`${process.cwd()}/tmp/build/${c}/${D.name}`;await Oo.remove(ge),i[`${c}|${p}`]=!0}if(D.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:D,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(D=>z.indexOf(D)<0),await pe(t,e,s);for(let D of z)await mt(t.server[h],D);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(`
569
+ `);let i={},n={};await No.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 lt(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 D=o[c][p];if(D.beta&&!i[`${c}|${p}`]){let ge=`${process.cwd()}/tmp/build/${c}/${D.name}`;await No.remove(ge),i[`${c}|${p}`]=!0}if(D.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 zo=await xo({server:t.server[h],app:c,env:m,git:t.source[c],version:D,domain:l});s[h].unshift(zo),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(D=>z.indexOf(D)<0),await pe(t,e,s);for(let D of z)await lt(t.server[h],D);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
570
 
563
571
  ==================== \u5B9E\u4F8B\u60C5\u51B5 ====================
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 Do=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 Ro=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}
572
+ `),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 Io=async t=>{t=t||{},t.root=t.root||process.cwd();let e=await A(t.root,"scope");t.type&&await at(t.root,"scope",t.type);let r=await A(t.root,"scale");t.type&&await at(t.root,"scale",t.type),await Co(e,r)};import Do 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 Do.ensureFile(p),await Do.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 Ao=async({registry:t,username:e,password:r})=>{if(!e||!r)throw new Error("\u83B7\u53D6\u6388\u6743\u5931\u8D25\uFF0CNPM\u767B\u5F55\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A");let o=`${t}/-/user/org.couchdb.user:${e}`;try{return(await 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 Lo=({registry:t,auth:e,token:r})=>{let o="";return o+=`registry=${t}
565
573
  `,e&&(o+=`${t.replace("http:","")}/:_auth=${e}
566
574
  `,o+=`${t.replace("http:","")}/:email=registry@sumor.com
567
575
  `),r&&(o+=`${t.replace("http:","")}/:_authToken="${r}"
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,`
576
+ `),o};import Po 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
577
  `).replace(/\r/g,`
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 Ro({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 Do(o,s)}),t.parse(process.argv)};var yd={app:N,pack:le,cli:Mo};export{yd as default};
578
+ `),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 Fo=async({registry:t,target:e,npmrc:r,force:o,tag:s})=>{s=s||"latest";let i=ci.normalize(`${e}/.npmrc`).replace(/\\/g,"/");await Po.writeFile(i,r);let n=await Po.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 jo=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 Ao({registry:a,username:n,password:m}),f=Lo({registry:a,auth:l,token:u});console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}`),await Fo({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 Mo=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 jo({path:m,name:t,version:e,tag:r?"beta":void 0,force:!0},n)};var Uo=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 Mo({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 no(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 Io(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:Uo};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","vite-plugin-rewrite-all":"^1.0.1"},"version":"1.2.5"}
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.7"}
@@ -1,6 +1,6 @@
1
1
  import { createApp } from './main'
2
2
 
3
- const { app, router } = createApp()
3
+ const { app, router } = await createApp()
4
4
 
5
5
  // wait until router is ready before mounting to ensure hydration match
6
6
  router.isReady().then(() => {
@@ -3,7 +3,7 @@ import { renderToString } from 'vue/server-renderer'
3
3
  import { createApp } from './main'
4
4
 
5
5
  export async function render(url, manifest, ctx) {
6
- const { app, router } = createApp()
6
+ const { app, router } = await createApp()
7
7
 
8
8
  // set the router to the desired URL before rendering
9
9
  await router.push(url)
@@ -2,6 +2,7 @@ import { createPinia } from 'pinia'
2
2
  import { createSSRApp } from 'vue'
3
3
  import VueLazyload from 'vue-lazyload'
4
4
  import App from './App.vue'
5
+ import {init} from "@sumor/ux";
5
6
  import {
6
7
  createRouter,
7
8
  createMemoryHistory,
@@ -15,7 +16,8 @@ import env from "./env.js";
15
16
  // SSR requires a fresh app instance per request, therefore we export a function
16
17
  // that creates a fresh app instance. If using Vuex, we'd also be creating a
17
18
  // fresh store here.
18
- export function createApp() {
19
+ export async function createApp() {
20
+ init();
19
21
  const app = createSSRApp(App)
20
22
  // sumor.init({reactive});
21
23
  // app.config.globalProperties.$sumor = sumor;