sumor 1.2.5 → 1.2.6
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 +43 -35
- package/package.json +1 -1
package/index.es.js
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
|
-
import Xo from"chokidar";var
|
|
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}},
|
|
4
|
-
meta:{keepAlive:true}`),
|
|
5
|
-
path: "${
|
|
6
|
-
component: ()=>import("${
|
|
7
|
-
props: true${
|
|
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: "${
|
|
10
|
-
component: ()=>import("${
|
|
11
|
-
props: true${
|
|
12
|
-
}`)}let s
|
|
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`,
|
|
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
|
|
22
|
-
`);let d=u;e.i18n&&e.i18n[u]&&(d=
|
|
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
|
|
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>`},
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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}=
|
|
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()),
|
|
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
|
|
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},
|
|
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>`,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.6"}
|