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