sumor 1.3.0 → 2.0.0

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.
Files changed (179) hide show
  1. package/.eslintignore +6 -0
  2. package/.eslintrc.yml +4 -0
  3. package/.gitattributes +1 -0
  4. package/.github/workflows/audit.yml +22 -0
  5. package/.github/workflows/available.yml +22 -0
  6. package/.github/workflows/ci.yml +45 -0
  7. package/.github/workflows/coverage.yml +23 -0
  8. package/.github/workflows/publish.yml +31 -0
  9. package/.github/workflows/ut.yml +24 -0
  10. package/.husky/pre-commit +10 -0
  11. package/.husky/pre-push +10 -0
  12. package/.prettierrc.yml +7 -0
  13. package/LICENSE +21 -0
  14. package/demo/api/error.js +3 -0
  15. package/demo/api/file.js +4 -0
  16. package/demo/api/file.yaml +11 -0
  17. package/demo/api/hello.js +4 -0
  18. package/demo/api/hello.yaml +13 -0
  19. package/demo/api/login.js +4 -0
  20. package/demo/api/logout.js +4 -0
  21. package/demo/api/long.js +9 -0
  22. package/demo/api/long.yaml +2 -0
  23. package/demo/api/user/admin.js +12 -0
  24. package/demo/api/user/info.js +8 -0
  25. package/demo/config/config.yaml +2 -0
  26. package/demo/i18n/demo.yaml +1 -0
  27. package/demo/package.json +6 -0
  28. package/i18n/README.md +32 -0
  29. package/i18n/sumor_api.yaml +16 -0
  30. package/i18n/sumor_app.yaml +3 -0
  31. package/i18n/sumor_internal.yaml +1 -0
  32. package/i18n/sumor_token.yaml +2 -0
  33. package/i18nExt/sumor_api.de.yaml +3 -0
  34. package/i18nExt/sumor_api.en.yaml +3 -0
  35. package/i18nExt/sumor_api.es.yaml +3 -0
  36. package/i18nExt/sumor_api.fr.yaml +3 -0
  37. package/i18nExt/sumor_api.it.yaml +3 -0
  38. package/i18nExt/sumor_api.ja.yaml +3 -0
  39. package/i18nExt/sumor_api.ko.yaml +3 -0
  40. package/i18nExt/sumor_api.pt.yaml +3 -0
  41. package/i18nExt/sumor_api.zh-TW.yaml +3 -0
  42. package/i18nExt/sumor_api.zh.yaml +3 -0
  43. package/i18nExt/sumor_app.de.yaml +3 -0
  44. package/i18nExt/sumor_app.en.yaml +3 -0
  45. package/i18nExt/sumor_app.es.yaml +3 -0
  46. package/i18nExt/sumor_app.zh-TW.yaml +3 -0
  47. package/i18nExt/sumor_app.zh.yaml +3 -0
  48. package/i18nExt/sumor_internal.de.yaml +1 -0
  49. package/i18nExt/sumor_internal.en.yaml +1 -0
  50. package/i18nExt/sumor_internal.es.yaml +1 -0
  51. package/i18nExt/sumor_internal.zh-TW.yaml +1 -0
  52. package/i18nExt/sumor_internal.zh.yaml +1 -0
  53. package/i18nExt/sumor_token.de.yaml +2 -0
  54. package/i18nExt/sumor_token.es.yaml +2 -0
  55. package/i18nExt/sumor_token.fr.yaml +2 -0
  56. package/i18nExt/sumor_token.it.yaml +2 -0
  57. package/i18nExt/sumor_token.ja.yaml +2 -0
  58. package/i18nExt/sumor_token.ko.yaml +2 -0
  59. package/i18nExt/sumor_token.pt.yaml +2 -0
  60. package/i18nExt/sumor_token.ru.yaml +2 -0
  61. package/i18nExt/sumor_token.tr.yaml +2 -0
  62. package/i18nExt/sumor_token.zh-TW.yaml +2 -0
  63. package/i18nExt/sumor_token.zh.yaml +2 -0
  64. package/jest.config.json +26 -0
  65. package/modules/alertPage/html/template.html +162 -0
  66. package/modules/alertPage/html/undraw_access-denied.svg +52 -0
  67. package/modules/alertPage/html/undraw_alert.svg +1 -0
  68. package/modules/alertPage/html/undraw_celebration.svg +78 -0
  69. package/modules/alertPage/html/undraw_complete-form.svg +1 -0
  70. package/modules/alertPage/html/undraw_login.svg +1 -0
  71. package/modules/alertPage/index.js +46 -0
  72. package/modules/alertPage/index.test.js +12 -0
  73. package/modules/i18n/README.md +90 -0
  74. package/modules/i18n/convertI18nValue/README.md +31 -0
  75. package/modules/i18n/convertI18nValue/getI18nTemplate.js +26 -0
  76. package/modules/i18n/convertI18nValue/getI18nTemplate.test.js +40 -0
  77. package/modules/i18n/convertI18nValue/index.js +14 -0
  78. package/modules/i18n/convertI18nValue/index.test.js +55 -0
  79. package/modules/i18n/convertI18nValue/stringVariableReplace.js +13 -0
  80. package/modules/i18n/convertI18nValue/stringVariableReplace.test.js +39 -0
  81. package/modules/i18n/index.js +26 -0
  82. package/modules/i18n/index.test.js +13 -0
  83. package/modules/i18n/load/README.md +28 -0
  84. package/modules/i18n/load/load.js +31 -0
  85. package/modules/i18n/load/load.test.js +30 -0
  86. package/modules/i18n/registry.js +48 -0
  87. package/modules/i18n/registry.test.js +84 -0
  88. package/modules/logger/convert/parseFile.js +14 -0
  89. package/modules/logger/convert/parseFile.test.js +28 -0
  90. package/modules/logger/convert/stringifyCMD.js +48 -0
  91. package/modules/logger/convert/stringifyCMD.test.js +37 -0
  92. package/modules/logger/convert/stringifyFile.js +24 -0
  93. package/modules/logger/convert/stringifyFile.test.js +79 -0
  94. package/modules/logger/index.js +82 -0
  95. package/modules/logger/index.test.js +124 -0
  96. package/modules/logger/logFileOperator.js +50 -0
  97. package/modules/logger/logFileOperator.test.js +69 -0
  98. package/modules/middlewares/apiMiddleware/errorCatcher.js +9 -0
  99. package/modules/middlewares/apiMiddleware/exposeApis/index.js +82 -0
  100. package/modules/middlewares/apiMiddleware/index.js +111 -0
  101. package/modules/middlewares/apiMiddleware/index.test.js +145 -0
  102. package/modules/middlewares/apiMiddleware/load/index.js +35 -0
  103. package/modules/middlewares/apiMiddleware/load/index.test.js +30 -0
  104. package/modules/middlewares/apiMiddleware/metadataToSwagger.js +139 -0
  105. package/modules/middlewares/apiMiddleware/prepareData/format/caseSensitive.js +26 -0
  106. package/modules/middlewares/apiMiddleware/prepareData/format/caseSensitive.test.js +36 -0
  107. package/modules/middlewares/apiMiddleware/prepareData/format/convertType.js +48 -0
  108. package/modules/middlewares/apiMiddleware/prepareData/format/convertType.test.js +53 -0
  109. package/modules/middlewares/apiMiddleware/prepareData/format/defaultValue.js +31 -0
  110. package/modules/middlewares/apiMiddleware/prepareData/format/defaultValue.test.js +31 -0
  111. package/modules/middlewares/apiMiddleware/prepareData/format/index.js +18 -0
  112. package/modules/middlewares/apiMiddleware/prepareData/format/index.test.js +40 -0
  113. package/modules/middlewares/apiMiddleware/prepareData/format/precision.js +12 -0
  114. package/modules/middlewares/apiMiddleware/prepareData/format/precision.test.js +33 -0
  115. package/modules/middlewares/apiMiddleware/prepareData/format/trim.js +15 -0
  116. package/modules/middlewares/apiMiddleware/prepareData/format/trim.test.js +24 -0
  117. package/modules/middlewares/apiMiddleware/prepareData/index.js +29 -0
  118. package/modules/middlewares/apiMiddleware/prepareData/index.test.js +121 -0
  119. package/modules/middlewares/apiMiddleware/prepareData/validate/checkLength.js +26 -0
  120. package/modules/middlewares/apiMiddleware/prepareData/validate/checkLength.test.js +52 -0
  121. package/modules/middlewares/apiMiddleware/prepareData/validate/index.js +30 -0
  122. package/modules/middlewares/apiMiddleware/public/favicon.ico +0 -0
  123. package/modules/middlewares/apiMiddleware/response/sendError.js +57 -0
  124. package/modules/middlewares/apiMiddleware/response/sendError.test.js +251 -0
  125. package/modules/middlewares/apiMiddleware/response/sendNotFound.js +26 -0
  126. package/modules/middlewares/apiMiddleware/response/sendResponse.js +25 -0
  127. package/modules/middlewares/apiMiddleware/response/sendSuccess.js +30 -0
  128. package/modules/middlewares/bodyMiddleware/cleanupFiles.js +14 -0
  129. package/modules/middlewares/bodyMiddleware/cleanupFiles.test.js +54 -0
  130. package/modules/middlewares/bodyMiddleware/fileParser.js +69 -0
  131. package/modules/middlewares/bodyMiddleware/fileParser.test.js +163 -0
  132. package/modules/middlewares/bodyMiddleware/index.js +12 -0
  133. package/modules/middlewares/bodyMiddleware/index.test.js +64 -0
  134. package/modules/middlewares/bodyMiddleware/mergeData.js +4 -0
  135. package/modules/middlewares/bodyMiddleware/mergeData.test.js +38 -0
  136. package/modules/middlewares/i18nMiddleware/index.js +82 -0
  137. package/modules/middlewares/i18nMiddleware/index.test.js +75 -0
  138. package/modules/middlewares/tokenMiddleware/Token.js +115 -0
  139. package/modules/middlewares/tokenMiddleware/Token.test.js +67 -0
  140. package/modules/middlewares/tokenMiddleware/index.js +32 -0
  141. package/modules/middlewares/tokenMiddleware/index.test.js +115 -0
  142. package/modules/middlewares/tokenMiddleware/parseCookie.js +24 -0
  143. package/modules/middlewares/tokenMiddleware/parseCookie.test.js +49 -0
  144. package/modules/serve/formatConfig.js +7 -0
  145. package/modules/serve/formatConfig.test.js +28 -0
  146. package/modules/serve/index.js +30 -0
  147. package/modules/serve/index.test.js +69 -0
  148. package/modules/serve/listenApp.js +11 -0
  149. package/modules/system/getSystemLanguage.js +9 -0
  150. package/modules/system/getSystemLanguage.test.js +19 -0
  151. package/modules/utils/getError.js +56 -0
  152. package/modules/utils/getError.test.js +97 -0
  153. package/modules/utils/loadConfig.js +73 -0
  154. package/modules/utils/loadConfig.test.js +129 -0
  155. package/modules/utils/pathUtils.js +43 -0
  156. package/modules/utils/pathUtils.test.js +52 -0
  157. package/modules/utils/type.js +14 -0
  158. package/modules/utils/type.test.js +40 -0
  159. package/package.json +61 -1
  160. package/src/app.js +40 -0
  161. package/src/cli.js +28 -0
  162. package/src/index.js +3 -0
  163. package/test-utils/codeTest/README.md +4 -0
  164. package/test-utils/codeTest/custom.css +47 -0
  165. package/test-utils/codeTest/index.js +80 -0
  166. package/test-utils/codeTest/utils/calculateCoverage.js +55 -0
  167. package/test-utils/codeTest/utils/getTestFiles.js +20 -0
  168. package/test-utils/codeTest/utils/runTests.js +38 -0
  169. package/test-utils/codeTest/utils/startServer.js +23 -0
  170. package/test-utils/tmp.js +15 -0
  171. package/cli.js +0 -3
  172. package/index.es.js +0 -578
  173. package/template/web/AppWithFrame.vue +0 -20
  174. package/template/web/index.html +0 -19
  175. package/template/web/src/App.vue +0 -15
  176. package/template/web/src/entry-client.js +0 -9
  177. package/template/web/src/entry-server.js +0 -69
  178. package/template/web/src/main.js +0 -41
  179. package/template/web/src/style.scss +0 -389
package/index.es.js DELETED
@@ -1,578 +0,0 @@
1
- import Yo from"chokidar";var ut=t=>{let e={running:!1,next:!1};return async(...r)=>{if(e.running){e.next=!0;return}e.running=!0,await t(...r),await new Promise(o=>{setTimeout(o,500)}),e.running=!1,e.next&&(e.next=!1,await t())}};import zo from"@vitejs/plugin-vue";import Be from"fs-extra";import Bo from"vite-plugin-rewrite-all";var ft={"font-size-base":"font-size","font-size-lg":"font-size-large","border-radius-base":"border-radius","border-radius-sm":"border-radius-small","primary-color":"color-primary","info-color":"color-info","success-color":"color-success","processing-color":"color-info","error-color":"color-danger","highlight-color":"color-danger","warning-color":"color-warning","link-color":"color-primary","--color-primary":"color-primary","--color-success":"color-success","--color-warning":"color-warning","--color-danger":"color-danger","--color-info":"color-info","--border-radius-base":"border-radius","--border-radius-small":"border-radius-small"};var pt=t=>{let e={"color-blue":"#50a1ff","color-indigo":"#6610f2","color-purple":"#926dde","color-pink":"#e83e8c","color-red":"#ff4954","color-orange":"#ffbe00","color-yellow":"#ffba00","color-green":"#3cd458","color-teal":"#20c997","color-cyan":"#17a2b8","color-white":"#fff","color-gray":"#868e96","color-gray-dark":"#343a40","color-primary":"#50a1ff","color-secondary":"#e9ecf0","color-success":"#3cd458","color-info":"#926dde","color-warning":"#ffba00","color-danger":"#ff4954","color-light":"#f8f9fa","color-dark":"#273343","color-background":"#f8f8f8","font-size":"14px","font-size-small":"12px","font-size-large":"16px","border-radius":"2px"},r={"border-radius-small":"1px"};try{let o=parseInt(t["border-radius"].replace("px",""),10);r["border-radius-small"]=`${parseInt(o/2,10)}px`}catch{}return{...e,...t,...r}};var Uo=(t,e)=>{let r="";for(let s in t)r+=`$${s}:${t[s]};
2
- `;for(let s in e)r+=`$${s}:$${e[s]};
3
- `;let o={};for(let s in t)o[s]=t[s];for(let s in e)o[s]=`@${e[s]}`;return{scss:r,less:o}},dt=t=>(t=pt(t),Uo(t,ft));var gt=t=>{let e=dt(t);return{preprocessorOptions:{scss:{additionalData:e.scss},less:{modifyVars:e.less,javascriptEnabled:!0}}}};import{pathToFileURL as Ho}from"url";var wt=async(t,e)=>{let r={};await Be.exists(process.cwd()+"/vite.config.js")&&(r=(await import(Ho(process.cwd()+"/vite.config.js"))).default);let o=t.config.styleVars,s=gt(o),i=t.uiPort;return await Be.remove(process.cwd()+"/tmp/web/.vite"),await Be.ensureDir(process.cwd()+"/tmp/web/.vite"),r=Object.assign({root:process.cwd()+"/tmp/web",base:"/",publicDir:process.cwd()+"/web/public",cacheDir:process.cwd()+"/tmp/web/.vite"},r),r.server=Object.assign({},r.server,{server:{middlewareMode:"html"},port:i}),r.plugins=[Bo(),zo()].concat(r.plugins),r.css=Object.assign({},r.css,s),r.build=Object.assign({},r.build),r.resolve=Object.assign({extensions:[".vue",".mjs",".js",".ts",".jsx",".tsx",".json"]},r.resolve),r};import ge from"path";import Go from"fs-extra";var we=async t=>{let e=t.root,r={root:e,pages:ge.join(e,"/web/pages"),stores:ge.join(e,"/web/stores"),tmp:ge.join(e,"/tmp"),tmpWeb:ge.join(e,"/tmp/web")};for(let o in r)r[o]=r[o].replace(/\\/g,"/"),await Go.ensureDir(r[o]);return r};var re=async t=>{let e=await we(t);return await wt(t,e)};import j from"fs-extra";import Jo from"node:path";import{fileURLToPath as Wo}from"node:url";var he=Jo.dirname(Wo(import.meta.url));var ht=async(t,e,r)=>{let o=`${he}/template/web`,s=await j.exists(`${e.tmpWeb}/index.html`);(r||!s)&&await j.copy(`${o}/index.html`,`${e.tmpWeb}/index.html`);let i=await j.exists(`${e.tmpWeb}/src`);(r||!i)&&await j.copy(`${o}/src`,`${e.tmpWeb}/src`);let n=`${e.root}/web/Frame.vue`,m=await j.exists(n);(r||m)&&await j.copy(`${o}/AppWithFrame.vue`,`${e.tmpWeb}/src/App.vue`);let a={dark:!!t.config.dark};await j.writeFile(`${e.tmpWeb}/src/env.js`,`export default ${JSON.stringify(a,null,4)}`)};import ye from"yaml";import E from"fs-extra";import He from"fs-extra";var B=async(t,e)=>{await He.ensureFile(t),await He.readFile(t,"utf-8")!==e&&await He.writeFile(t,e)};var oe=async(t,e)=>{let r=await E.exists(`${t}.json`),o=await E.exists(`${t}.yaml`),s=await E.exists(`${t}.yml`),i={};if(s){let n=await E.readFile(`${t}.yml`,"utf-8");i=ye.parse(n)}else if(o){let n=await E.readFile(`${t}.yaml`,"utf-8");i=ye.parse(n)}else r?i=await E.readJson(`${t}.json`):e||(await E.ensureFile(`${t}.yml`),await E.writeFile(`${t}.yml`,ye.stringify(i)));return!e&&(r||o)&&!s&&(await E.remove(`${t}.json`),await E.remove(`${t}.yaml`),await B(`${t}.yml`,ye.stringify(i))),i};import Ko from"path";import{glob as Vo}from"glob";var $e=async(t,e)=>{e=e||{};let r=await Vo(t,e);return r=r.map(o=>(o=Ko.normalize(o),o=o.replace(/\\/g,"/"),o)),r};var yt=async(t,e)=>{let r=await $e("**/*.vue",{cwd:e.pages}),o=[];for(let n in r){let m=r[n],c=`${e.pages}/${m}`.replace(/\\/g,"/").replace(".vue",""),l=`../../web/pages/${m}`.replace(/\\/g,"/"),u=await oe(c,t.mode==="production"),f=`/${m}`.replace(e.pages,"").replace(".vue","").replace(/\\/g,"/").toLowerCase().replace("/index","");f===""&&(f="/");let w="";if(u.alive&&(w=`,
4
- meta:{keepAlive:true}`),u.routes)for(let d of u.routes)o.push(` {
5
- path: "${d}",
6
- component: ()=>import("${l}"),
7
- props: true${w}
8
- }`);else o.push(` {
9
- path: "${f}",
10
- component: ()=>import("${l}"),
11
- props: true${w}
12
- }`)}let s=t.config.pages||[];for(let n of s)if(n.redirect)o.push(` {
13
- path: "${n.path}",
14
- redirect: "${n.redirect}"
15
- }`);else{let m="";n.alive&&(m=`,
16
- meta:{keepAlive:true}`),o.push(` {
17
- path: "${n.path}",
18
- component: ()=>import("../../web${n.component}"),
19
- props: true${m}
20
- }`)}let i=`export default [
21
- ${o.join(`,
22
- `)}
23
- ]`;await B(`${e.tmpWeb}/routes.js`,i)};var $t=async t=>{let e=await $e("**/*.js",{cwd:t.stores}),r=[],o=[];for(let i in e){let n=`store${parseInt(i)+1}`;r.push(`import ${n} from "../../web/stores/${e[i]}"`),o.push(`"${e[i].replace(".js","").replace(/\\/g,"/").replace(/\//g,".")}":${n}`)}let s=`${r.join(`;
24
- `)};
25
- const stores = {
26
- ${o.join(`,
27
- `)}
28
- }
29
- export default stores;`;await B(`${t.tmpWeb}/stores.js`,s)};var xe=async(t,e)=>{let r=await we(t);await ht(t,r,e),await yt(t,r),await $t(r)};import{createServer as Zo,defineConfig as Xo}from"vite";var xt=async t=>{let{getLogger:e,root:r,config:o}=t,s=e("DEV"),i=ut(async c=>{await xe(t,c),s.info("\u4EE3\u7801\u5DF2\u66F4\u65B0")});await i(!0),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,l)=>{await i()});let m=await re(t),a=await Zo(Xo(m));await a.listen(),a.printUrls()};var _t=t=>{let e={},r={};e.setContext=(i,n)=>{typeof i=="object"?(Object.assign(e,i),Object.assign(r,i)):(e[i]=n,r[i]=n)},e.getContext=()=>({...r});let o=(t.mode||process.env.mode||"production").toLowerCase(),s;switch(o){case"dev":s="development";break;case"debug":s="development";break;case"development":s="development";break;case"build":s="build";break;case"setup":s="setup";break;case"preview":s="preview";break;case"production":s="production";break;case"run":s="production";break;default:s="production";break}return e.setContext({mode:s}),e.root=process.cwd(),e};var bt=async t=>new Promise(e=>{setTimeout(()=>{e()},t*1e3)});import qo from"uuid";var _e=()=>qo.v4().replace(/-/g,"");import Qo from"stream";var es=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},be=es;function St(t){return new Promise((e,r)=>{let o=[];t.on("error",r),t.on("data",s=>o.push(s)),t.on("end",()=>e(Buffer.concat(o)))})}var Se=async(t,e)=>{if(t){e=e||"stream";let r,o;switch(e){case"string":o=await St(t),r=o.toString();break;case"buffer":r=await St(t);break;default:r=t;break}return r}return t};var vt={from:Se,to:be};var Et=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyz".split(""),r=e.length,o=+t,s=[];do{let i=o%r;o=(o-i)/r,s.unshift(e[i])}while(o);return s.join("")};var kt=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".split(""),r=e.length,o=+t,s=[];do{let i=o%r;o=(o-i)/r,s.unshift(e[i])}while(o);return s.join("")};var Tt=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ",r=e.length;t=String(t);let o=t.length,s=0,i=0;for(;s<o;)i+=r**s++*e.indexOf(t.charAt(o-s)||0);return i};var Ot=t=>{let e="0123456789abcdefghigklmnopqrstuvwxyz",r=e.length;t=String(t);let o=t.length,s=0,i=0;for(;s<o;)i+=r**s++*e.indexOf(t.charAt(o-s)||0);return i};var Nt={from10to36:Et,from10to62:kt,from62to10:Tt,from36to10:Ot};var Ct={delay:bt,uuid:_e,stream:vt,number:Nt};var It=async t=>{let e=`${t.root}/sumor`,r=await 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 ts=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}},Dt=async t=>{let e=await ts(`${t.root}/ssl`),r=t.config.protocol||"https";r==="https"&&!e&&(r="http");let o=t.config.domain||"localhost",s=parseInt(t.config.port||(r==="http"?80:443),10),i=r==="http"&&s===80||r==="https"&&s===443?"":`:${s}`,n=t.config.origin||`${r}://${o}${i}`,m=t.mode==="development"||t.mode==="preview"?s+1:s;return{ssl:e,protocol:r,domain:o,port:s,origin:n,uiPort:m}};import is from"fs";var Rt=(t,e,r,o,s,i)=>{let n=new Date(t).toISOString(),m=e.toUpperCase(),a=r.toUpperCase(),c=o?` [${o}]`:"",l="";return i&&(l=` | ${JSON.stringify(i)}`),`# ${n} [${m}] [${a}]${c} - ${s}${l}`};import{Chalk as rs}from"chalk";var ve=new rs({}),At={trace:"#00a3af",debug:"#1183d3",info:"#2ecc71",warn:"#f39c12",error:"#b91f12",fatal:"#ff1300"},os={trace:"gray",debug:"blue",info:"green",warn:"yellow",error:"red",fatal:"red"},ss=(t,e)=>{let r=new Date(t+e*60*1e3),o=r.getUTCFullYear(),s=`0${r.getUTCMonth()+1}`.slice(-2),i=`0${r.getUTCDate()}`.slice(-2),n=`0${r.getUTCHours()}`.slice(-2),m=`0${r.getUTCMinutes()}`.slice(-2),a=`0${r.getUTCSeconds()}`.slice(-2),c=`00${r.getUTCMilliseconds()}`.slice(-3);return`${o}-${s}-${i} ${n}:${m}:${a}.${c}`},Ge=({time:t,offset:e,level:r,scope:o,id:s,message:i})=>{let n=ss(t,e||0),m=s?` ${s}`:"",a=`${n} ${r.toUpperCase()} ${o.toUpperCase()}${m} - `,c;switch(ve.level){case 1:c=ve[os[r.toLowerCase()]](a);break;case 2:c=ve.hex(At[r.toLowerCase()]).visible(a);break;case 3:c=ve.hex(At[r.toLowerCase()]).visible(a);break;default:c=a;break}return c+i};var Lt=t=>{let e=/#(.*?)\s-\s/g,r=t.match(e),o=[],s=(n,m)=>{let a=n.trim().replace("# ","").replace(" -","").split(" ");for(let h=0;h<a.length;h+=1)a[h]=a[h].trim().replace("[","").replace("]","");let c=new Date(a[0]).getTime(),l=a[1],u=a[2],f=a[3],w=m.split("|"),d=w.shift().trim(),p;if(w.length>0){let h=w.join("|").trim();p=JSON.parse(h)}let g={time:c,level:l,scope:u};f&&(g.id=f),g.message=d,p&&(g.data=p),o.push(g)},i=t;for(let n=0;n<r.length;n+=1){let m=r[n],a=i.split(m),c=a.shift();i=a.join(m),n>0&&s(r[n-1],c)}return s(r[r.length-1],i),o};var Je=(t,e)=>{e=e||{};let r=/\{([a-zA-Z0-9]+)\}/g,o=t.match(r),s=t;for(let i=0;i<o.length;i+=1){let n=o[i],m=n.replace("{","").replace("}","");e[m]?s=s.replace(n,e[m]):s=s.replace(n,"")}return s};var 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"],a=((c,l)=>{let u=c.indexOf(l);return u===-1?[]:c.slice(u)})(n,o);for(let c=0;c<n.length;c+=1){let l=n[c];a.indexOf(l)===-1?this[l]=function(){}:this[l]=function(u,f){let w=Date.now();i(`${Rt(w,l,r,s,u,f)}
30
- `);let d=u;e.i18n&&e.i18n[u]&&(d=Je(e.i18n[u],f));let p=e.offset!==void 0?e.offset:-new Date().getTimezoneOffset();console.log(Ge({time:w,offset:p,level:l,scope:r,id:s,message:d}))}}this.load=c=>{let l=Lt(c),u="";for(let f=0;f<l.length;f+=1){let w=l[f],{message:d,data:p}=w,g=d;e.i18n&&e.i18n[d]&&(g=Je(e.i18n[d],p)),u+=`${Ge({...w,offset:e.offset||new Date().getTimezoneOffset(),message:g})}
31
- `}return u}}};var Pt=async t=>{let e=`${t.root}/tmp/main.log`,r=o=>{is.appendFileSync(e,o)};return(o,s)=>new ie({scope:o,level:t.config.logLevel,id:s,saver:r})};import ns from"fs-extra";import Ft from"knex";var We=t=>{t=t||{};let e={};switch(t.type=t.type||"better-sqlite3",t.type){case"sqlite":e.client="better-sqlite3";break;case"sqlite3":e.client="better-sqlite3";break;case"better-sqlite3":e.client="better-sqlite3";break;case"mysql":e.client="mysql2";break;case"mysql2":e.client="mysql2";break;default:throw new Error(`\u4E0D\u652F\u6301\u6570\u636E\u5E93\u7C7B\u578B${t.type}`)}switch(e.client){case"better-sqlite3":e.connection={filename:t.path||`${process.cwd()}/main.sqlite`},e.useNullAsDefault=!0;break;case"mysql2":e.connection={host:t.host,port:t.port||3306,user:t.user,password:t.password,database:t.database,charset:t.charset||"utf8mb4"},e.pool=t.pool||{min:2,max:10};break;default:break}return e};var M=class{constructor(e,r){this.config=e,this._config=We(e),this._logger=r||{debug:console.log,trace:console.log}}async ensure(){let e,r,o,s,i;switch(this._config.client){case"better-sqlite3":await ns.ensureFile(this._config.connection.filename);break;case"mysql2":e={...this.config},r=e.database,delete e.database,o=Ft(We(e)),s=await o.raw("show databases"),i=!!s[0].filter(n=>n.Database===r)[0],i||(this._logger.trace("\u6570\u636E\u5E93\u4E0D\u5B58\u5728\uFF0C\u6B63\u5728\u521B\u5EFA"),await o.raw(`CREATE DATABASE IF NOT EXISTS ${r} default charset utf8mb4 COLLATE utf8mb4_general_ci`),this._logger.trace("\u6570\u636E\u5E93\u521B\u5EFA\u5B8C\u6210")),await new Promise(n=>{o.destroy(()=>{n()})});break;default:this._logger.trace(`\u6682\u4E0D\u652F\u6301${this._config.client}\u7C7B\u578B\u6570\u636E\u5E93\u521B\u5EFA\uFF0C\u8BF7\u81EA\u884C\u786E\u8BA4\u6570\u636E\u5E93\u5B58\u5728`);break}}async connect(){this.knex||(this.knex=Ft(this._config))}async destroy(){this.knex&&(await new Promise(e=>{this.knex.destroy(()=>{e()})}),delete this.knex)}};var 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 H=(t,e,r)=>{e=e||"-",t=t.toLowerCase();let o=t.split(e);t="";for(let s in o){let i=o[s];t+=i.replace(i[0],i[0].toUpperCase())}return r&&(t=t.replace(t[0],t[0].toLowerCase())),t};var $=(t,e)=>{e=e||"-";let r=function(s){return s>="A"&&s<="Z"},o=[];for(let s=0;s<t.length;s++){let i=t.charAt(s),n=i.toLowerCase();o.length===0?o.push(n):(r(i)&&o.push(""),o[o.length-1]=o[o.length-1]+=n)}return o.join(e)};var G=t=>{let e={};for(let r in t){let o=$(r,"_");e[o]=t[r]}return e};var jt=t=>{let e={};for(let r in t){let o=H(r,"_",!0);e[o]=t[r]}return e};var Mt=(t,e,r,o,s)=>{s=s||"";let i={},n,m=async function(){n||(n=await e.knex.transaction(),t.workingConnections++)};return i.setUser=a=>{s=a,o.trace(`\u5DF2\u4FEE\u6539\u64CD\u4F5C\u7528\u6237\u4E3A${a}`)},i.info=async(a,c)=>{if(!c&&r.info[a])return r.info[a];let l=await n.from(a).columnInfo(),u={};for(let f in l){let w=H(f,"_",!0),d;switch(l[f].type){case"char":d="string";break;case"varchar":d="string";break;case"text":d="string";break;case"mediumtext":d="string";break;case"tinyint":d="number";break;case"smallint":d="number";break;case"int":d="number";break;case"integer":d="number";break;case"bigint":d="number";break;case"float":d="number";break;case"double":d="number";break;case"":d="string";break;default:d="string",console.log(`\u672A\u77E5\u6570\u636E\u7C7B\u578B ${f} ${JSON.stringify(l[f])}`);break}u[w]={type:d,length:parseInt(l[f].maxLength,10)}}return r.info[a]=u,u},i.count=async(a,c,l)=>{await m(),l=l||{},a=$(a,"_");let u=n.from(a);u.count({count:"*"});let f=!1;if(c){c=G(c);for(let d in c)if(ne(c[d])==="object")for(let p in c[d]){let g=p,h=c[d][p];g==="<>"&&h===null?u.whereNotNull(d):u.where(d,g,h)}else c[d]===null?u.whereNull(d):u.where(d,c[d]);f=!0}if(l.term&&l.term!==""&&l.termRange)for(let d in l.termRange){let p=l.termRange[d];parseInt(d)===0?f?u.andWhere(p,"like",`%${l.term}%`):(u.where(p,"like",`%${l.term}%`),f=!0):u.orWhere(p,"like",`%${l.term}%`)}return o.trace(u.toSQL().sql,u.toSQL().bindings),(await u)[0].count},i.single=async(a,c,l)=>{l=l||{},l.top=1;let u=await i.select(a,c,l);return u.length>1,u[0]},i.select=async(a,c,l)=>{o.trace(`\u67E5\u8BE2${a}\uFF0C\u6761\u4EF6${JSON.stringify(c)}\uFF0C\u53C2\u6570${JSON.stringify(l)}`),await m(),l=l||{},a=$(a,"_");let u=await i.info(a),f=n.from(a),w=l.field;w&&(w=w.map(g=>$(g,"_"))),f.select(w);let d=!1;if(c){c=G(c);for(let g in c)if(ne(c[g])==="object")for(let h in c[g]){let y=h,O=c[g][h];y==="<>"&&O===null?f.whereNotNull(g):f.where(g,y,O)}else c[g]===null?f.whereNull(g):f.where(g,c[g]);d=!0}if(l.term&&l.term!==""&&l.termRange)for(let g in l.termRange){let h=l.termRange[g];parseInt(g)===0?d?f.andWhere(h,"like",`%${l.term}%`):(f.where(h,"like",`%${l.term}%`),d=!0):f.orWhere(h,"like",`%${l.term}%`)}if(!l.sort&&u.createdTime&&(l.sort="created_time DESC"),l.sort)if(typeof l.sort=="string"){let g=l.sort.split(",");for(let h in g){let y=g[h].trim();y=y.split(" "),y[0]=$(y[0],"_"),g[h]=y.join(" ")}f.orderByRaw(g.join(","))}else f.orderBy(l.sort);return l.top&&f.limit(l.top),l.skip&&f.offset(l.skip),o.trace(f.toSQL().sql,f.toSQL().bindings),(await f).map(g=>jt(g))},i.insert=async(a,c)=>{c=c||{},a=$(a,"_"),await m();let l=async()=>{let f=_e();return await i.count(a,{id:f})!==0?await l():f};c.id||(c.id=await l()),c.createdBy=s||"",c.createdTime=Date.now(),c.updatedBy=s||"",c.updatedTime=Date.now(),c=G(c);let u=n.insert(c).into(a);return o.trace(u.toSQL().sql,u.toSQL().bindings),await u,c.id},i.update=async(a,c)=>{c=c||{},a=$(a,"_"),await m();let l=c.id;if(delete c.id,l==null)throw new Error("\u6570\u636EID\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u627E\u5230\u8981\u66F4\u65B0\u7684\u6570\u636E");c.updatedBy=s||"",c.updatedTime=Date.now(),c=G(c);let u=n.update(c).from(a).where({id:l});o.trace(u.toSQL().sql,u.toSQL().bindings),await u},i.modify=async(a,c,l)=>{o.trace(`\u5F3A\u5236\u4FEE\u6539${a}\uFF0C\u6570\u636E${JSON.stringify(l)}\uFF0C\u68C0\u67E5\u5B57\u6BB5${JSON.stringify(c)}`),a=$(a,"_");let u={};for(let d of c)u[$(d,"_")]=l[d];let f=await i.single(a,u,{field:["id"]}),w;return f?(w=f.id,l.id=w,await i.update(a,l)):w=await i.insert(a,l),w},i.ensure=async(a,c,l)=>{o.trace(`\u786E\u4FDD${a}\u5B58\u5728\u6570\u636E${JSON.stringify(l)}\uFF0C\u68C0\u67E5\u5B57\u6BB5${JSON.stringify(c)}`),a=$(a,"_");let u={};for(let d of c)u[$(d,"_")]=l[d];let f=await i.select(a,u,{field:["id"]}),w;return f[0]?w=f[0].id:w=await i.insert(a,l),w},i.delete=async(a,c)=>{a=$(a,"_");let l=n.from(a);return c&&(c=G(c),l.where(c)),o.trace(l.toSQL().sql,l.toSQL().bindings),await l.del()},i.sql=async(a,c)=>(await m(),await n.raw(a,c)),i.commit=async()=>{if(n)try{await n.commit(),n=null,t.workingConnections--}catch(a){o.error(a)}},i.release=i.commit,i.rollback=async()=>{if(n)try{await n.rollback(),t.workingConnections--,n=null}catch(a){o.error(a)}},i};var J=async({config:t,logger:e})=>{e=e||{debug:console.log,trace:console.log};let r={workingConnections:0,alertConnections:20};setInterval(()=>{r.workingConnections>r.alertConnections&&console.log(`\u6570\u636E\u5E93\u8FDE\u63A5\u8FC7\u591A\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u6709\u672A\u63D0\u4EA4\u7684\u4E8B\u52A1\uFF0C\u5F53\u524D\u8FDE\u63A5\u6570${r.workingConnections}`)},1e3);let o=new M(t,e);await o.ensure(),await o.connect();let s={info:{}};return{connect:async(m,a)=>Mt(r,o,s,m,a),destroy:async()=>{await o.destroy()}}};var Ut=async t=>{let e=t.config.database,r=t.getLogger("DATABASE"),o=await J({config:e,logger:r});return async s=>await o.connect(s||r)};import ke from"fs-extra";import{pathToFileURL as Kt}from"url";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),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),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]=Ke(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]=Ke(t.parameters[r])}return t},Ee={text:as,rule:cs,type:Ke,entity:ms,program:ls};import Ve from"fs-extra";import us from"path";import{glob as fs}from"glob";var W=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 m=[...e,i].join(".");return{path:m,route:`/api/${m.replace(/\./g,"/")}`,name:i,suffix:s,type:n}};var Ye=async(t,e,r)=>{let o={};if(await Ve.exists(t)){let s=e?`**/**.${e}.json`:"**/**.json",i=await W({condition:s,options:{cwd:t}});for(let n of i){let m=`${t}/${n}`,a=K(n);o[a.path]=await Ve.readJson(m)}if(r&&r!=="json"){let n=e?`**/**.${e}.${r}`:`**/**.${r}`,m=await W({condition:n,options:{cwd:t}});for(let a of m){let c=`${t}/${a}`,l=K(a);o[l.path]=o[l.path]||{},o[l.path][l.suffix]=await Ve.readFile(c,"utf-8")}}}return o};var zt={sumorApp:{name:"\u8F7B\u5448\u4E91\u5E94\u7528\u6587\u672C",origin:{INTERNAL_ERROR:"\u7A0B\u5E8F\u5185\u90E8\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8054\u7CFB\u7BA1\u7406\u5458",NETWORK_ERROR:"\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8054\u7CFB\u7BA1\u7406\u5458",PERMISSION_DENIED:"\u6CA1\u6709\u8BBF\u95EE\u8BE5\u529F\u80FD\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002\u7F3A\u5C11\u6743\u9650\uFF1A${auth}",LOGIN_EXPIRED:"\u767B\u9646\u6388\u6743\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u9646",PERMISSION_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539permission\uFF0C\u8BF7\u4F7F\u7528setPermission",LOGIN_STATUS_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u767B\u5F55\u72B6\u6001",USER_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539user\uFF0C\u8BF7\u4F7F\u7528setUser",TOKEN_ID_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724CID\uFF0C\u8BF7\u4F7F\u7528setID",TOKEN_TIME_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724C\u65F6\u95F4",TOKEN_DATA_EDIT_FORBIDDEN_DIRECTLY:"\u7981\u6B62\u76F4\u63A5\u4FEE\u6539\u4EE4\u724C\u6570\u636E",LACK_USER_ID:"\u7F3A\u5C11\u7528\u6237ID",AUTH_ERROR:"\u6388\u6743\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",AUTH_ERROR_COOKIE_MISSING:"cookie\u4E22\u5931",API_NOT_FOUND:"\u63A5\u53E3\u672A\u627E\u5230",INVALID_PARAMETER:"\u65E0\u6548\u6570\u636E:${msg}",RULE_LOGIC_NOT_FUNCTION:"\u89C4\u5219\u903B\u8F91\u4E0D\u662F\u6709\u6548\u51FD\u6570\u65B9\u6CD5",SUFFIX_REQUIRED:"\u8F6C\u6362\u4E3A\u5BF9\u8C61\u7F3A\u5C11\u5FC5\u8981\u7684\u540E\u7F00\u540D",PATH_ARROGATION:"\u8DEF\u5F84\u8D8A\u7EA7",NOT_SUPPORT_ABSOLUTE_PATH:"\u4E0D\u652F\u6301\u7EDD\u5BF9\u8DEF\u5F84",REQUIRED:"\u5FC5\u586B\u9879",LENGTH_OUT_OF_LIMIT:"\u957F\u5EA6\u5FC5\u987B\u5C0F\u4E8E${length}",WECHAT_DISABLED:"\u5FAE\u4FE1\u672A\u542F\u7528\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458"},target:{en:{INTERNAL_ERROR:"Internal program error, please try again later, or contact administrator",NETWORK_ERROR:"Network error. Please try again later or contact the administrator",PERMISSION_DENIED:"You do not have permission ${auth}, please contact administrator",LOGIN_EXPIRED:"Login expired, please login",INVALID_PARAMETER:"Invalid data: ${msg}",RULE_LOGIC_NOT_FUNCTION:"Rule logic isn't valid function",SUFFIX_REQUIRED:"Suffix required for object path",PATH_ARROGATION:"Path arrogation",NOT_SUPPORT_ABSOLUTE_PATH:"Not support absolute path",REQUIRED:"Required",LENGTH_OUT_OF_LIMIT:"The length must be less than ${length}"}}},sumorSMS:{origin:{MOBILE_FORMAT:"\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF",MOBILE_PREFIX_NOT_SUPPORT:"\u8BE5\u56FD\u5BB6\u5730\u533A\u6682\u672A\u5F00\u901A\u670D\u52A1",SMS_SEND_FAILED:"\u6D88\u606F\u53D1\u9001\u5931\u8D25:${msg}"}},sumorStorage:{name:"\u8F7B\u5448\u4E91\u5B58\u50A8\u6587\u672C",origin:{STORAGE_INSTANCE_ERROR:"\u5B58\u50A8\u7CFB\u7EDF\u4EA4\u4E92\u5F02\u5E38:${msg}",STORAGE_FILE_SAVE_FAILED:"\u6587\u4EF6\u5199\u5165\u5931\u8D25",STORAGE_NOT_CONNECTED:"\u672A\u914D\u7F6E\u5B58\u50A8\u670D\u52A1\u5668\u8FDE\u63A5",STORAGE_FILE_READ_FAILED:"\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25",STORAGE_FILE_DELETE_FAILED:"\u6587\u4EF6\u5220\u9664\u5931\u8D25",STORAGE_FILE_INFO_FAILED:"\u6587\u4EF6\u83B7\u53D6\u4FE1\u606F\u5931\u8D25"}},sumorDemo:{origin:{DEMO_TEXT_ZH:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_ZHCN:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u5927\u9646\u7B80\u4F53\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_ZHHK:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u9999\u6E2F\u7E41\u4F53\u4E2D\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C",DEMO_TEXT_EN:"\u6F14\u793A\u6587\u672C\uFF1A\u82F1\u6587\uFF0C\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u4E0D\u5339\u914D\uFF0C\u5DF2\u56DE\u5F52\u539F\u59CB\u6587\u672C"},target:{en:{DEMO_TEXT_EN:"Demo text for english"},zh:{DEMO_TEXT_ZH:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u6587"},"zh-CN":{DEMO_TEXT_ZHCN:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u56FD\u5927\u9646\u7B80\u4F53\u4E2D\u6587"},"zh-HK":{DEMO_TEXT_ZHHK:"\u6F14\u793A\u6587\u672C\uFF1A\u4E2D\u570B\u9999\u6E2F\u7E41\u9AD4\u4E2D\u6587"}}}};var Bt={"sumorApp.term":{name:"\u67E5\u8BE2\u6761\u4EF6",required:!1},"sumorApp.skip":{name:"\u8DF3\u8FC7\u6761\u6570",type:"number",default:0,required:!1},"sumorApp.top":{name:"\u6761\u6570",type:"number",default:100,required:!1},"sumorApp.sort":{name:"\u6392\u5E8F\u89C4\u5219",type:"string",required:!1}};var Ht=`sq=\u963F\u5C14\u5DF4\u5C3C\u4E9A\u8BED|Shqip
32
- sq-AL=\u963F\u5C14\u5DF4\u5C3C\u4E9A\u8BED(\u963F\u5C14\u5DF4\u5C3C\u4E9A)|Shqiptar (Shqip\xEBri)
33
- gsw=\u963F\u5C14\u8428\u65AF\u8BED
34
- gsw-FR=\u963F\u5C14\u8428\u65AF\u8BED(\u6CD5\u56FD)
35
- ar=\u963F\u62C9\u4F2F\u8BED|\u0627\u0644\u0639\u0631\u0628\u064A\u0629
36
- ar-DZ=\u963F\u62C9\u4F2F\u8BED(\u963F\u5C14\u53CA\u5229\u4E9A)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u062C\u0632\u0627\u0626\u0631)
37
- ar-AE=\u963F\u62C9\u4F2F\u8BED(\u963F\u8054\u914B)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0645\u062A\u062D\u062F\u0629)
38
- ar-OM=\u963F\u62C9\u4F2F\u8BED(\u963F\u66FC)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0633\u0644\u0637\u0646\u0629 \u0639\u0645\u0627\u0646)
39
- ar-EG=\u963F\u62C9\u4F2F\u8BED(\u57C3\u53CA)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0645\u0635\u0631)
40
- ar-BH=\u963F\u62C9\u4F2F\u8BED(\u5DF4\u6797)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u0628\u062D\u0631\u064A\u0646)
41
- ar-QA=\u963F\u62C9\u4F2F\u8BED(\u5361\u5854\u5C14)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0642\u0637\u0631)
42
- ar-KW=\u963F\u62C9\u4F2F\u8BED(\u79D1\u5A01\u7279)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u0643\u0648\u064A\u062A)
43
- ar-LB=\u963F\u62C9\u4F2F\u8BED(\u9ECE\u5DF4\u5AE9)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0644\u0628\u0646\u0627\u0646)
44
- ar-LY=\u963F\u62C9\u4F2F\u8BED(\u5229\u6BD4\u4E9A)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0644\u064A\u0628\u064A\u0627)
45
- ar-MA=\u963F\u62C9\u4F2F\u8BED(\u6469\u6D1B\u54E5)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u0645\u063A\u0631\u0628)
46
- ar-SA=\u963F\u62C9\u4F2F\u8BED(\u6C99\u7279\u963F\u62C9\u4F2F)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629)
47
- ar-TN=\u963F\u62C9\u4F2F\u8BED(\u7A81\u5C3C\u65AF)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u062A\u0648\u0646\u0633)
48
- ar-SY=\u963F\u62C9\u4F2F\u8BED(\u53D9\u5229\u4E9A)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0633\u0648\u0631\u064A\u0627)
49
- ar-YE=\u963F\u62C9\u4F2F\u8BED(\u4E5F\u95E8)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u064A\u0645\u0646)
50
- ar-IQ=\u963F\u62C9\u4F2F\u8BED(\u4F0A\u62C9\u514B)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u0639\u0631\u0627\u0642)
51
- ar-JO=\u963F\u62C9\u4F2F\u8BED(\u7EA6\u65E6)|\u0627\u0644\u0639\u0631\u0628\u064A\u0629 (\u0627\u0644\u0623\u0631\u062F\u0646)
52
- am=\u963F\u59C6\u54C8\u62C9\u8BED|\u12A0\u121B\u122D\u129B
53
- am-ET=\u963F\u59C6\u54C8\u62C9\u8BED(\u57C3\u585E\u4FC4\u6BD4\u4E9A)|\u12A0\u121B\u122D\u129B (\u12A2\u1275\u12EE\u1335\u12EB)
54
- as=\u963F\u8428\u59C6\u8BED|\u0985\u09B8\u09AE\u09C0\u09AF\u09BC\u09BE
55
- as-IN=\u963F\u8428\u59C6\u8BED(\u5370\u5EA6)|\u0985\u09B8\u09AE (\u09AD\u09BE\u09F0\u09A4)
56
- az=\u963F\u585E\u62DC\u7586\u8BED|Az\u0259rbaycan
57
- az-Latn=\u963F\u585E\u62DC\u7586\u8BED(\u62C9\u4E01\u8BED)|Az\u0259rbaycan dili (Lat\u0131n dili)
58
- az-Latn-AZ=\u963F\u585E\u62DC\u7586\u8BED(\u62C9\u4E01\u8BED\uFF0C\u963F\u585E\u62DC\u7586)|Azerbaijani (Lat\u0131nca, Azerbaijani)
59
- az-Cyrl=\u963F\u585E\u62DC\u7586\u8BED(\u897F\u91CC\u5C14\u6587)|Azerbaijani (\u015Firniyyat)
60
- az-Cyrl-AZ=\u963F\u585E\u62DC\u7586\u8BED(\u897F\u91CC\u5C14\u6587\uFF0C\u963F\u585E\u62DC\u7586)|Azerbaijani (\u015Eirniyyat, Azerbaijani)
61
- kn=\u57C3\u7EB3\u5FB7\u8BED
62
- kn-IN=\u57C3\u7EB3\u5FB7\u8BED(\u5370\u5EA6)
63
- ga=\u7231\u5C14\u5170\u8BED
64
- ga-IE=\u7231\u5C14\u5170\u8BED(\u7231\u5C14\u5170)
65
- et=\u7231\u6C99\u5C3C\u4E9A\u8BED
66
- et-EE=\u7231\u6C99\u5C3C\u4E9A\u8BED(\u7231\u6C99\u5C3C\u4E9A)
67
- oc=\u5965\u514B\u897F\u5510\u8BED
68
- oc-FR=\u5965\u514B\u897F\u5510\u8BED(\u6CD5\u56FD)
69
- or=\u5965\u91CC\u96C5\u8BED
70
- or-IN=\u5965\u91CC\u96C5\u8BED(\u5370\u5EA6)
71
- ba=\u5DF4\u4EC0\u57FA\u5C14\u8BED
72
- ba-RU=\u5DF4\u4EC0\u57FA\u5C14\u8BED(\u4FC4\u7F57\u65AF)
73
- eu=\u5DF4\u65AF\u514B\u8BED
74
- eu-ES=\u5DF4\u65AF\u514B\u8BED(\u5DF4\u65AF\u514B)
75
- nso=\u5DF4\u7D22\u6258\u8BED
76
- nso-ZA=\u5DF4\u7D22\u6258\u8BED(\u5357\u975E)
77
- be=\u767D\u4FC4\u7F57\u65AF\u8BED
78
- be-BY=\u767D\u4FC4\u7F57\u65AF\u8BED(\u767D\u4FC4\u7F57\u65AF)
79
- bg=\u4FDD\u52A0\u5229\u4E9A\u8BED
80
- bg-BG=\u4FDD\u52A0\u5229\u4E9A\u8BED(\u4FDD\u52A0\u5229\u4E9A)
81
- se=\u5317\u8428\u7C73\u8BED
82
- se-FI=\u5317\u8428\u7C73\u8BED(\u82AC\u5170)
83
- se-NO=\u5317\u8428\u7C73\u8BED(\u632A\u5A01)
84
- se-SE=\u5317\u8428\u7C73\u8BED(\u745E\u5178)
85
- is=\u51B0\u5C9B\u8BED
86
- is-IS=\u51B0\u5C9B\u8BED(\u51B0\u5C9B)
87
- pl=\u6CE2\u5170\u8BED
88
- pl-PL=\u6CE2\u5170\u8BED(\u6CE2\u5170)
89
- bs=\u6CE2\u65AF\u5C3C\u4E9A\u8BED
90
- bs-Latn=\u6CE2\u65AF\u5C3C\u4E9A\u8BED(\u62C9\u4E01\u8BED)
91
- bs-L=\u6CE2\u65AF\u5C3C\u4E9A\u8BED(\u62C9\u4E01\u8BED\uFF0C\u6CE2\u65AF\u5C3C\u4E9A\u548C\u9ED1\u585E\u54E5\u7EF4\u90A3)
92
- bs-Cyrl=\u6CE2\u65AF\u5C3C\u4E9A\u8BED(\u897F\u91CC\u5C14\u6587)
93
- fa=\u6CE2\u65AF\u8BED
94
- fa-IR=\u6CE2\u65AF\u8BED
95
- \u5E03\u91CC\u591A\u5C3C\u8BED
96
- br-FR=\u5E03\u91CC\u591A\u5C3C\u8BED(\u6CD5\u56FD)
97
- bo=\u85CF\u8BED
98
- bo-CN=\u85CF\u8BED(\u4E2D\u56FD)
99
- ko=\u671D\u9C9C\u8BED
100
- ko-KR=\u671D\u9C9C\u8BED(\u97E9\u56FD)
101
- tn=\u8328\u74E6\u7EB3\u8BED
102
- tn-ZA=\u8328\u74E6\u7EB3\u8BED(\u5357\u975E)
103
- prs=\u8FBE\u91CC\u8BED
104
- prs-AF=\u8FBE\u91CC\u8BED(\u963F\u5BCC\u6C57)
105
- tt=\u9791\u977C\u8BED
106
- tt-RU=\u9791\u977C\u8BED(\u4FC4\u7F57\u65AF)
107
- da=\u4E39\u9EA6\u8BED
108
- da-DK=\u4E39\u9EA6\u8BED(\u4E39\u9EA6)
109
- de=\u5FB7\u8BED
110
- de-AT=\u5FB7\u8BED(\u5965\u5730\u5229)
111
- de-DE=\u5FB7\u8BED(\u5FB7\u56FD)
112
- de-LI=\u5FB7\u8BED(\u5217\u652F\u6566\u58EB\u767B)
113
- de-LU=\u5FB7\u8BED(\u5362\u68EE\u5821)
114
- de-CH=\u5FB7\u8BED(\u745E\u58EB)
115
- dv=\u8FEA\u7EF4\u5E0C\u8BED
116
- dv-MV=\u8FEA\u7EF4\u5E0C\u8BED(\u9A6C\u5C14\u4EE3\u592B)
117
- ru=\u4FC4\u8BED
118
- ru-RU=\u4FC4\u8BED(\u4FC4\u7F57\u65AF)
119
- fo=\u6CD5\u7F57\u8BED
120
- fo-FO=\u6CD5\u7F57\u8BED(\u6CD5\u7F57\u7FA4\u5C9B)
121
- fr=\u6CD5\u8BED
122
- fr-BE=\u6CD5\u8BED(\u6BD4\u5229\u65F6)
123
- fr-FR=\u6CD5\u8BED(\u6CD5\u56FD)
124
- fr-CA=\u6CD5\u8BED(\u52A0\u62FF\u5927)
125
- fr-LU=\u6CD5\u8BED(\u5362\u68EE\u5821)
126
- fr-MC=\u6CD5\u8BED(\u6469\u7EB3\u54E5)
127
- fr-CH=\u6CD5\u8BED(\u745E\u58EB)
128
- sa=\u68B5\u8BED
129
- sa-IN=\u68B5\u8BED(\u5370\u5EA6)
130
- fil=\u83F2\u5F8B\u5BBE\u8BED
131
- fil-PH=\u83F2\u5F8B\u5BBE\u8BED(\u83F2\u5F8B\u5BBE)
132
- fi=\u82AC\u5170\u8BED
133
- fi-FI=\u82AC\u5170\u8BED(\u82AC\u5170)
134
- fy=\u5F17\u91CC\u897F\u4E9A\u8BED
135
- fy-NL=\u5F17\u91CC\u897F\u4E9A\u8BED(\u8377\u5170)
136
- km=\u9AD8\u68C9\u8BED
137
- km-KH=\u9AD8\u68C9\u8BED(\u67EC\u57D4\u5BE8)
138
- kl=\u683C\u9675\u5170\u8BED
139
- kl-GL=\u683C\u9675\u5170\u8BED(\u683C\u9675\u5170)
140
- ka=\u683C\u9C81\u5409\u4E9A\u8BED
141
- ka-GE=\u683C\u9C81\u5409\u4E9A\u8BED(\u683C\u9C81\u5409\u4E9A)
142
- gu=\u53E4\u5409\u62C9\u7279\u8BED
143
- gu-IN=\u53E4\u5409\u62C9\u7279\u8BED(\u5370\u5EA6)
144
- kk=\u54C8\u8428\u514B\u8BED
145
- kk-KZ=\u54C8\u8428\u514B\u8BED(\u54C8\u8428\u514B\u65AF\u5766)
146
- ha=\u8C6A\u6492\u8BED
147
- ha-Latn=\u8C6A\u6492\u8BED(\u62C9\u4E01\u8BED)
148
- ha-Latn-NG=\u8C6A\u6492\u8BED(\u62C9\u4E01\u8BED\uFF0C\u5C3C\u65E5\u5229\u4E9A)
149
- nl=\u8377\u5170\u8BED
150
- nl-BE=\u8377\u5170\u8BED(\u6BD4\u5229\u65F6)
151
- nl-NL=\u8377\u5170\u8BED(\u8377\u5170)
152
- qut=\u57FA\u5207\u8BED
153
- qut-GT=\u57FA\u5207\u8BED(\u5371\u5730\u9A6C\u62C9)
154
- ky=\u5409\u5C14\u5409\u65AF\u8BED
155
- ky-KG=\u5409\u5C14\u5409\u65AF\u8BED(\u5409\u5C14\u5409\u65AF\u65AF\u5766)
156
- gl=\u52A0\u5229\u897F\u4E9A\u8BED
157
- gl-ES=\u52A0\u5229\u897F\u4E9A\u8BED(\u52A0\u5229\u897F\u4E9A\u8BED)
158
- ca=\u52A0\u6CF0\u7F57\u5C3C\u4E9A\u8BED
159
- ca-ES=\u52A0\u6CF0\u7F57\u5C3C\u4E9A\u8BED(\u52A0\u6CF0\u7F57\u5C3C\u4E9A)
160
- cs=\u6377\u514B\u8BED
161
- cs-CZ=\u6377\u514B\u8BED(\u6377\u514B\u5171\u548C\u56FD)
162
- co=\u79D1\u897F\u5609\u8BED
163
- co-FR=\u79D1\u897F\u5609\u8BED(\u6CD5\u56FD)
164
- \u514B\u7F57\u5730\u4E9A\u8BED
165
- hr-HR=\u514B\u7F57\u5730\u4E9A\u8BED(\u514B\u7F57\u5730\u4E9A)
166
- hr-B=\u514B\u7F57\u5730\u4E9A\u8BED(\u62C9\u4E01\u8BED\uFF0C\u6CE2\u65AF\u5C3C\u4E9A\u548C\u9ED1\u585E\u54E5\u7EF4\u90A3)
167
- quz=\u514B\u4E18\u4E9A\u8BED
168
- quz-BO=\u514B\u4E18\u4E9A\u8BED(\u73BB\u5229\u7EF4\u4E9A)
169
- quz-EC=\u514B\u4E18\u4E9A\u8BED(\u5384\u74DC\u591A\u5C14)
170
- quz-PE=\u514B\u4E18\u4E9A\u8BED(\u79D8\u9C81)
171
- kok=\u5B54\u5361\u5C3C\u8BED
172
- kok-IN=\u5B54\u5361\u5C3C\u8BED(\u5370\u5EA6)
173
- lv=\u62C9\u8131\u7EF4\u4E9A\u8BED
174
- lv-LV=\u62C9\u8131\u7EF4\u4E9A\u8BED(\u62C9\u8131\u7EF4\u4E9A)
175
- lo=\u8001\u631D\u8BED
176
- lo-LA=\u8001\u631D\u8BED(\u8001\u631D\u4EBA\u6C11\u6C11\u4E3B\u5171\u548C\u56FD)
177
- lt=\u7ACB\u9676\u5B9B\u8BED
178
- lt-LT=\u7ACB\u9676\u5B9B\u8BED(\u7ACB\u9676\u5B9B)
179
- lb=\u5362\u68EE\u5821\u8BED
180
- lb-LU=\u5362\u68EE\u5821\u8BED(\u5362\u68EE\u5821)
181
- rw=\u5362\u65FA\u8FBE\u8BED
182
- rw-RW=\u5362\u65FA\u8FBE\u8BED(\u5362\u65FA\u8FBE)
183
- ro=\u7F57\u9A6C\u5C3C\u4E9A\u8BED
184
- ro-RO=\u7F57\u9A6C\u5C3C\u4E9A\u8BED(\u7F57\u9A6C\u5C3C\u4E9A)
185
- rm=\u7F57\u66FC\u4EC0\u8BED
186
- rm-CH=\u7F57\u66FC\u4EC0\u8BED(\u745E\u58EB)
187
- smj=\u5F8B\u52D2\u8428\u7C73\u8BED
188
- smj-NO=\u5F8B\u52D2\u8428\u7C73\u8BED(\u632A\u5A01)
189
- smj-SE=\u5F8B\u52D2\u8428\u7C73\u8BED(\u745E\u5178)
190
- mt=\u9A6C\u8033\u4ED6\u8BED
191
- mt-MT=\u9A6C\u8033\u4ED6\u8BED(\u9A6C\u8033\u4ED6)
192
- mr=\u9A6C\u62C9\u5730\u8BED
193
- mr-IN=\u9A6C\u62C9\u5730\u8BED(\u5370\u5EA6)
194
- ml=\u9A6C\u62C9\u96C5\u62C9\u59C6\u8BED
195
- ml-IN=\u9A6C\u62C9\u96C5\u62C9\u59C6\u8BED(\u5370\u5EA6)
196
- ms=\u9A6C\u6765\u8BED
197
- ms-MY=\u9A6C\u6765\u8BED(\u9A6C\u6765\u897F\u4E9A)
198
- ms-BN=\u9A6C\u6765\u8BED(\u6587\u83B1\u8FBE\u9C81\u8428\u5170\u56FD)
199
- arn=\u9A6C\u666E\u4E39\u5188\u8BED
200
- arn-CL=\u9A6C\u666E\u4E39\u5188\u8BED(\u667A\u5229)
201
- mk=\u9A6C\u5176\u987F\u8BED
202
- mk-MK=\u9A6C\u5176\u987F\u8BED(\u524D\u5357\u65AF\u62C9\u592B\u9A6C\u5176\u987F\u5171\u548C\u56FD)
203
- mi=\u6BDB\u5229\u8BED
204
- mi-NZ=\u6BDB\u5229\u8BED(\u65B0\u897F\u5170)
205
- mn=\u8499\u53E4\u8BED
206
- mn-Mong=\u8499\u53E4\u8BED(\u4F20\u7EDF\u8499\u53E4\u8BED)
207
- mn-Mong-CN=\u8499\u53E4\u8BED(\u4F20\u7EDF\u8499\u53E4\u8BED\uFF0C\u4E2D\u56FD)
208
- mn-Cyrl=\u8499\u53E4\u8BED(\u897F\u91CC\u5C14\u6587)
209
- mn-MN=\u8499\u53E4\u8BED(\u897F\u91CC\u5C14\u6587\uFF0C\u8499\u53E4)
210
- bn=\u5B5F\u52A0\u62C9\u8BED
211
- bn-BD=\u5B5F\u52A0\u62C9\u8BED(\u5B5F\u52A0\u62C9\u56FD)
212
- bn-IN=\u5B5F\u52A0\u62C9\u8BED(\u5370\u5EA6)
213
- moh=\u83AB\u970D\u514B\u8BED
214
- moh-CA=\u83AB\u970D\u514B\u8BED(\u83AB\u970D\u514B)
215
- af=\u5357\u975E\u8377\u5170\u8BED
216
- af-ZA=\u5357\u975E\u8377\u5170\u8BED(\u5357\u975E)
217
- sma=\u5357\u8428\u7C73\u8BED
218
- sma-NO=\u5357\u8428\u7C73\u8BED(\u632A\u5A01)
219
- sma-SE=\u5357\u8428\u7C73\u8BED(\u745E\u5178)
220
- ne=\u5C3C\u6CCA\u5C14\u8BED
221
- ne-NP=\u5C3C\u6CCA\u5C14\u8BED(\u5C3C\u6CCA\u5C14)
222
- nn-NO=\u5C3C\u8BFA\u65AF\u514B\u632A\u5A01\u8BED(\u632A\u5A01)
223
- no=\u632A\u5A01\u8BED
224
- nn=\u5C3C\u8BFA\u65AF\u514B\u8BED
225
- pa=\u65C1\u906E\u666E\u8BED
226
- pa-IN=\u65C1\u906E\u666E\u8BED(\u5370\u5EA6)
227
- pt=\u8461\u8404\u7259\u8BED
228
- pt-BR=\u8461\u8404\u7259\u8BED(\u5DF4\u897F)
229
- pt-PT=\u8461\u8404\u7259\u8BED(\u8461\u8404\u7259)
230
- ps=\u666E\u4EC0\u56FE\u8BED
231
- ps-AF=\u666E\u4EC0\u56FE\u8BED(\u963F\u5BCC\u6C57)
232
- ja=\u65E5\u8BED
233
- ja-JP=\u65E5\u8BED(\u65E5\u672C)
234
- sv=\u745E\u5178\u8BED
235
- sv-FI=\u745E\u5178\u8BED(\u82AC\u5170)
236
- sv-SE=\u745E\u5178\u8BED(\u745E\u5178)
237
- sr=\u585E\u5C14\u7EF4\u4E9A\u8BED
238
- sr-Latn=\u585E\u5C14\u7EF4\u4E9A\u8BED(\u62C9\u4E01\u8BED)
239
- sr-Latn-ME=\u585E\u5C14\u7EF4\u4E9A\u8BED(\u62C9\u4E01\u8BED\uFF0C\u9ED1\u5C71\u5171\u548C\u56FD)
240
- sr-Latn-RS=\u585E\u5C14\u7EF4\u4E9A\u8BED(\u62C9\u4E01\u8BED\uFF0C\u585E\u5C14\u7EF4\u4E9A\u5171\u548C\u56FD)
241
- sr-Cyrl=\u585E\u5C14\u7EF4\u4E9A\u8BED(\u897F\u91CC\u5C14\u6587)
242
- sr-Cyrl-ME=\u585E\u5C14\u7EF4\u4E9A\u8BED(\u897F\u91CC\u5C14\u6587\uFF0C\u9ED1\u5C71\u5171\u548C\u56FD)
243
- sr-Cyrl-RS=\u585E\u5C14\u7EF4\u4E9A\u8BED(\u897F\u91CC\u5C14\u6587\uFF0C\u585E\u5C14\u7EF4\u4E9A\u5171\u548C\u56FD)
244
- si=\u50E7\u4F3D\u7F57\u8BED
245
- si-LK=\u50E7\u4F3D\u7F57\u8BED(\u65AF\u91CC\u5170\u5361)
246
- hsb=\u4E0A\u7D22\u5E03\u8BED
247
- hsb-DE=\u4E0A\u7D22\u5E03\u8BED(\u5FB7\u56FD)
248
- nb=\u4E66\u9762\u632A\u5A01\u8BED
249
- nb-NO=\u4E66\u9762\u632A\u5A01\u8BED(\u632A\u5A01)
250
- sms=\u65AF\u79D1\u7279\u8428\u7C73\u8BED
251
- sms-FI=\u65AF\u79D1\u7279\u8428\u7C73\u8BED(\u82AC\u5170)
252
- sk=\u65AF\u6D1B\u4F10\u514B\u8BED
253
- sk-SK=\u65AF\u6D1B\u4F10\u514B\u8BED(\u65AF\u6D1B\u4F10\u514B)
254
- sl=\u65AF\u6D1B\u6587\u5C3C\u4E9A\u8BED
255
- sl-SI=\u65AF\u6D1B\u6587\u5C3C\u4E9A\u8BED(\u65AF\u6D1B\u6587\u5C3C\u4E9A)
256
- sw=\u65AF\u74E6\u5E0C\u91CC\u8BED
257
- sw-KE=\u65AF\u74E6\u5E0C\u91CC\u8BED(\u80AF\u5C3C\u4E9A)
258
- gd=\u82CF\u683C\u5170\u76D6\u7ACB\u8BED
259
- gd-GB=\u82CF\u683C\u5170\u76D6\u7ACB\u8BED(\u82F1\u56FD)
260
- xh=\u7D22\u8428\u8BED
261
- xh-ZA=\u7D22\u8428\u8BED(\u5357\u975E)
262
- tg=\u5854\u5409\u514B\u8BED
263
- tg-Cyrl=\u5854\u5409\u514B\u8BED(\u897F\u91CC\u5C14\u6587)
264
- tg-Cyrl-TJ=\u5854\u5409\u514B\u8BED(\u897F\u91CC\u5C14\u6587\uFF0C\u5854\u5409\u514B\u65AF\u5766)
265
- tzm=\u5854\u9A6C\u585E\u7279\u8BED
266
- tzm-Latn=\u5854\u9A6C\u585E\u7279\u8BED(\u62C9\u4E01\u8BED)
267
- tzm-Latn-DZ=\u5854\u9A6C\u585E\u7279\u8BED(\u62C9\u4E01\u8BED\uFF0C\u963F\u5C14\u53CA\u5229\u4E9A)
268
- th=\u6CF0\u56FD\u8BED
269
- te=\u6CF0\u5362\u56FA\u8BED
270
- te-IN=\u6CF0\u5362\u56FA\u8BED(\u5370\u5EA6)
271
- ta=\u6CF0\u7C73\u5C14\u8BED
272
- ta-IN=\u6CF0\u7C73\u5C14\u8BED(\u5370\u5EA6)
273
- th-TH=\u6CF0\u8BED(\u6CF0\u56FD)
274
- tr=\u571F\u8033\u5176\u8BED
275
- tr-TR=\u571F\u8033\u5176\u8BED(\u571F\u8033\u5176)
276
- tk=\u571F\u5E93\u66FC\u8BED
277
- tk-TM=\u571F\u5E93\u66FC\u8BED(\u571F\u5E93\u66FC\u65AF\u5766)
278
- cy=\u5A01\u5C14\u58EB\u8BED
279
- cy-GB=\u5A01\u5C14\u58EB\u8BED(\u82F1\u56FD)
280
- ug=\u7EF4\u543E\u5C14\u8BED
281
- ug-CN=\u7EF4\u543E\u5C14\u8BED(\u4E2D\u56FD)
282
- wo=\u6C83\u6D1B\u592B\u8BED
283
- wo-SN=\u6C83\u6D1B\u592B\u8BED(\u585E\u5185\u52A0\u5C14)
284
- ur=\u4E4C\u5C14\u90FD\u8BED
285
- ur-PK=\u4E4C\u5C14\u90FD\u8BED(\u5DF4\u57FA\u65AF\u5766\u4F0A\u65AF\u5170\u5171\u548C\u56FD)
286
- uk=\u4E4C\u514B\u5170\u8BED
287
- uk-UA=\u4E4C\u514B\u5170\u8BED(\u4E4C\u514B\u5170)
288
- uz=\u4E4C\u5179\u522B\u514B\u8BED
289
- uz-Latn=\u4E4C\u5179\u522B\u514B\u8BED(\u62C9\u4E01\u8BED)
290
- uz-Latn-UZ=\u4E4C\u5179\u522B\u514B\u8BED(\u62C9\u4E01\u8BED\uFF0C\u4E4C\u5179\u522B\u514B\u65AF\u5766)
291
- uz-Cyrl=\u4E4C\u5179\u522B\u514B\u8BED(\u897F\u91CC\u5C14\u6587)
292
- uz-Cyrl-UZ=\u4E4C\u5179\u522B\u514B\u8BED(\u897F\u91CC\u5C14\u6587\uFF0C\u4E4C\u5179\u522B\u514B\u65AF\u5766)
293
- es=\u897F\u73ED\u7259\u8BED
294
- es-AR=\u897F\u73ED\u7259\u8BED(\u963F\u6839\u5EF7)
295
- es-PY=\u897F\u73ED\u7259\u8BED(\u5DF4\u62C9\u572D)
296
- es-PA=\u897F\u73ED\u7259\u8BED(\u5DF4\u62FF\u9A6C)
297
- es-PR=\u897F\u73ED\u7259\u8BED(\u6CE2\u591A\u9ECE\u5404)
298
- es-BO=\u897F\u73ED\u7259\u8BED(\u73BB\u5229\u7EF4\u4E9A)
299
- es-DO=\u897F\u73ED\u7259\u8BED(\u591A\u7C73\u5C3C\u52A0\u5171\u548C\u56FD)
300
- es-EC=\u897F\u73ED\u7259\u8BED(\u5384\u74DC\u591A\u5C14)
301
- es-CO=\u897F\u73ED\u7259\u8BED(\u54E5\u4F26\u6BD4\u4E9A)
302
- es-CR=\u897F\u73ED\u7259\u8BED(\u54E5\u65AF\u8FBE\u9ECE\u52A0)
303
- es-HN=\u897F\u73ED\u7259\u8BED(\u6D2A\u90FD\u62C9\u65AF)
304
- es-US=\u897F\u73ED\u7259\u8BED(\u7F8E\u56FD)
305
- es-PE=\u897F\u73ED\u7259\u8BED(\u79D8\u9C81)
306
- es-MX=\u897F\u73ED\u7259\u8BED(\u58A8\u897F\u54E5)
307
- es-NI=\u897F\u73ED\u7259\u8BED(\u5C3C\u52A0\u62C9\u74DC)
308
- es-SV=\u897F\u73ED\u7259\u8BED(\u8428\u5C14\u74E6\u591A)
309
- es-GT=\u897F\u73ED\u7259\u8BED(\u5371\u5730\u9A6C\u62C9)
310
- es-VE=\u897F\u73ED\u7259\u8BED(\u59D4\u5185\u745E\u62C9\u73BB\u5229\u74E6\u5C14\u5171\u548C\u56FD)
311
- es-UY=\u897F\u73ED\u7259\u8BED(\u4E4C\u62C9\u572D)
312
- es-ES=\u897F\u73ED\u7259\u8BED(\u897F\u73ED\u7259\uFF0C\u56FD\u9645\u6392\u5E8F)
313
- es-CL=\u897F\u73ED\u7259\u8BED(\u667A\u5229)
314
- he=\u5E0C\u4F2F\u6765\u8BED
315
- he-IL=\u5E0C\u4F2F\u6765\u8BED(\u4EE5\u8272\u5217)
316
- el=\u5E0C\u814A\u8BED
317
- el-GR=\u5E0C\u814A\u8BED(\u5E0C\u814A)
318
- dsb=\u4E0B\u7D22\u5E03\u8BED
319
- dsb-DE=\u4E0B\u7D22\u5E03\u8BED(\u5FB7\u56FD)
320
- hu=\u5308\u7259\u5229\u8BED
321
- hu-HU=\u5308\u7259\u5229\u8BED(\u5308\u7259\u5229)
322
- syr=\u53D9\u5229\u4E9A\u8BED
323
- syr-SY=\u53D9\u5229\u4E9A\u8BED(\u53D9\u5229\u4E9A)
324
- sah=\u96C5\u5E93\u7279\u8BED
325
- sah-RU=\u96C5\u5E93\u7279\u8BED(\u4FC4\u7F57\u65AF)
326
- hy=\u4E9A\u7F8E\u5C3C\u4E9A\u8BED
327
- hy-AM=\u4E9A\u7F8E\u5C3C\u4E9A\u8BED(\u4E9A\u7F8E\u5C3C\u4E9A)
328
- ig=\u4F0A\u535A\u8BED
329
- ig-NG=\u4F0A\u535A\u8BED(\u5C3C\u65E5\u5229\u4E9A)
330
- smn=\u4F0A\u7EB3\u91CC\u8428\u7C73\u8BED
331
- smn-FI=\u4F0A\u7EB3\u91CC\u8428\u7C73\u8BED(\u82AC\u5170)
332
- ii=\u5F5D\u8BED
333
- ii-CN=\u5F5D\u8BED(\u4E2D\u56FD)
334
- it=\u610F\u5927\u5229\u8BED
335
- it-CH=\u610F\u5927\u5229\u8BED(\u745E\u58EB)
336
- it-IT=\u610F\u5927\u5229\u8BED(\u610F\u5927\u5229)
337
- iu=\u56E0\u7EBD\u7279\u8BED
338
- iu-Latn=\u56E0\u7EBD\u7279\u8BED(\u62C9\u4E01\u8BED)
339
- iu-Latn-CA=\u56E0\u7EBD\u7279\u8BED(\u62C9\u4E01\u8BED\uFF0C\u52A0\u62FF\u5927)
340
- iu-Cans=\u56E0\u7EBD\u7279\u8BED(\u97F3\u8282)
341
- iu-Cans-CA=\u56E0\u7EBD\u7279\u8BED(\u97F3\u8282\uFF0C\u52A0\u62FF\u5927)
342
- hi=\u5370\u5730\u8BED
343
- hi-IN=\u5370\u5730\u8BED(\u5370\u5EA6)
344
- id=\u5370\u5EA6\u5C3C\u897F\u4E9A\u8BED
345
- id-ID=\u5370\u5EA6\u5C3C\u897F\u4E9A\u8BED(\u5370\u5EA6\u5C3C\u897F\u4E9A)
346
- en=\u82F1\u8BED
347
- en-IE=\u82F1\u8BED(\u7231\u5C14\u5170)
348
- en-AU=\u82F1\u8BED(\u6FB3\u5927\u5229\u4E9A)
349
- en-BZ=\u82F1\u8BED(\u4F2F\u5229\u5179)
350
- en-PH=\u82F1\u8BED(\u83F2\u5F8B\u5BBE\u5171\u548C\u56FD)
351
- en-029=\u82F1\u8BED(\u52A0\u52D2\u6BD4\u6D77)
352
- en-CA=\u82F1\u8BED(\u52A0\u62FF\u5927)
353
- en-ZW=\u82F1\u8BED(\u6D25\u5DF4\u5E03\u97E6)
354
- en-MY=\u82F1\u8BED(\u9A6C\u6765\u897F\u4E9A)
355
- en-US=\u82F1\u8BED(\u7F8E\u56FD)
356
- en-ZA=\u82F1\u8BED(\u5357\u975E)
357
- en-TT=\u82F1\u8BED(\u7279\u7ACB\u5C3C\u8FBE\u548C\u591A\u5DF4\u54E5)
358
- en-SG=\u82F1\u8BED(\u65B0\u52A0\u5761)
359
- en-NZ=\u82F1\u8BED(\u65B0\u897F\u5170)
360
- en-JM=\u82F1\u8BED(\u7259\u4E70\u52A0)
361
- en-IN=\u82F1\u8BED(\u5370\u5EA6)
362
- en-GB=\u82F1\u8BED(\u82F1\u56FD)
363
- yo=\u7EA6\u9C81\u5DF4\u8BED
364
- yo-NG=\u7EA6\u9C81\u5DF4\u8BED(\u5C3C\u65E5\u5229\u4E9A)
365
- vi=\u8D8A\u5357\u8BED
366
- vi-VN=\u8D8A\u5357\u8BED(\u8D8A\u5357)
367
- zh=\u4E2D\u6587
368
- zh-Hant=\u4E2D\u6587(\u7E41\u4F53)
369
- zh-MO=\u4E2D\u6587(\u7E41\u4F53\uFF0C\u6FB3\u95E8\u7279\u522B\u884C\u653F\u533A)
370
- zh-TW=\u4E2D\u6587(\u7E41\u4F53\uFF0C\u53F0\u6E7E)
371
- zh-HK=\u4E2D\u6587(\u7E41\u4F53\uFF0C\u9999\u6E2F\u7279\u522B\u884C\u653F\u533A)
372
- zh-CN=\u4E2D\u6587(\u7B80\u4F53)
373
- zh-SG=\u4E2D\u6587(\u7B80\u4F53\uFF0C\u65B0\u52A0\u5761)
374
- zu=\u7956\u9C81\u8BED
375
- zu-ZA=\u7956\u9C81\u8BED(\u5357\u975E)`;var Gt={"sumor.language":Ht};var Jt=async(t,e,r)=>{let{data:o,config:s,response:i,tools:n,wechat:m}=t;if(s.wechat){i.respond=!0;let a=o.id,c={appId:s.wechat.key,timeStamp:Math.round(Date.now()/1e3),nonceStr:n.uuid(),package:`prepay_id=${a}`,signType:"RSA"};c.paySign=m.pay.sign([c.appId,c.timeStamp,c.nonceStr,c.package]),r.end(`
376
- <html>
377
- <head>
378
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
379
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
380
- <title>\u5FAE\u4FE1\u652F\u4ED8</title>
381
- </head>
382
- <body>
383
- <h1 id="message">\u6B63\u5728\u542F\u52A8\u5FAE\u4FE1\u652F\u4ED8\uFF0C\u8BF7\u7A0D\u540E\u3002\u5982\u9047\u5230\u95EE\u9898\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u6216\u8054\u7CFB\u5BA2\u670D\u3002</h1>
384
- <script>
385
- function onBridgeReady() {
386
- WeixinJSBridge.invoke('getBrandWCPayRequest', ${JSON.stringify(c)},
387
- function(res) {
388
- if (res.err_msg == "get_brand_wcpay_request:ok") {
389
- // \u4F7F\u7528\u4EE5\u4E0A\u65B9\u5F0F\u5224\u65AD\u524D\u7AEF\u8FD4\u56DE,\u5FAE\u4FE1\u56E2\u961F\u90D1\u91CD\u63D0\u793A\uFF1A
390
- //res.err_msg\u5C06\u5728\u7528\u6237\u652F\u4ED8\u6210\u529F\u540E\u8FD4\u56DEok\uFF0C\u4F46\u5E76\u4E0D\u4FDD\u8BC1\u5B83\u7EDD\u5BF9\u53EF\u9760\u3002
391
-
392
- var divElem = document.getElementById('message'); // \u83B7\u53D6\u6307\u5B9AID\u7684div\u5143\u7D20
393
- divElem.innerHTML = '\u652F\u4ED8\u5B8C\u6210'; // \u4FEE\u6539div\u5143\u7D20\u4E2D\u7684\u5185\u5BB9
394
- setTimeout(function (){
395
- var target = '${s.wechat.pay.callback||""}';
396
- if(target&&target!==""){
397
- window.location.href = target;
398
- }else{
399
- var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
400
- if(isChrome) {
401
- window.location.href = 'about:blank';
402
- window.close();
403
- } else {
404
- window.close();
405
- }
406
- }
407
- },1000);
408
- }
409
- });
410
- }
411
- if (typeof WeixinJSBridge == "undefined") {
412
- if (document.addEventListener) {
413
- document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
414
- } else if (document.attachEvent) {
415
- document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
416
- document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
417
- }
418
- } else {
419
- onBridgeReady();
420
- }
421
- </script>
422
- </body>
423
- </html>`)}};var Wt=t=>{let e={monitor:{name:"\u670D\u52A1\u5065\u5EB7\u72B6\u6001\u76D1\u63A7",program:async(o,s,i)=>s.sumor.monitor},text:{name:"\u5F53\u524D\u8BED\u8A00\u73AF\u5883\u6587\u672C\u6570\u636E",program:async(o,s,i)=>s.sumor.text()},token:{name:"\u5F53\u524D\u6388\u6743\u767B\u5F55\u4EE4\u724C",program:(o,s,i,n)=>{let m=s.sumor.token;if(m.id){let a=m.data?m.data.nickname:"";return{id:m.id,user:m.user,nickname:a,time:m.time,permission:m.permission}}return{}}},logout:{name:"\u9000\u51FA\u767B\u5F55",program:async(o,s,i,n)=>{let m=s.sumor.token;m.user&&await m.destroy()}},range:{name:"\u6570\u636E\u8F93\u5165\u8303\u56F4\u5217\u8868",parameters:{name:{name:"\u6570\u636E\u540D\u79F0",desc:"\u5E2E\u52A9\u6570\u636E\u7684\u540D\u79F0",required:!0,type:"string"}},program:async(o,s,i)=>{let n=s.sumor.data.name;return s.sumor.range(n)}},meta:{name:"\u63A5\u53E3\u4FE1\u606F",program:async(o,s,i)=>{let n={};for(let m in o.exposeApis){let a=o.exposeApis[m];n[m]={name:a.name,desc:a.desc,parameters:a.parameters}}return{name:o.name,instance:o.instance,api:n,text:s.sumor.text()}}}},r={};for(let o in e)r[`sumor.${o}`]=e[o];return r["wx.pay"]={name:"\u5FAE\u4FE1\u652F\u4ED8",program:Jt},r};var Vt=async t=>{let e=Wt(t),r={};for(let a in e)r[a]={name:e[a].name,parameters:e[a].parameters};let o=["text","rule","type","entity","view","api","event"],s={range:Gt,text:zt,type:Bt,api:r};for(let a of o){let c=a;s[a]=s[a]||{},(a==="api"||a==="event")&&(c="program");let l=await Ye(`${t.root}/${a}`,c);if(a==="api"){let u={};for(let f in l)u[`api.${f}`]=l[f];l=u}if(s[a]=Object.assign(s[a],l),Ee[c])for(let u in s[a])s[a][u]=Ee[c](s[a][u],s,u)}await ke.ensureDir(`${process.cwd()}/tmp`),await ke.writeFile(`${process.cwd()}/tmp/meta.json`,JSON.stringify(s,null,4));for(let a in e)s.api[a]=e[a];let i=await Ye(`${t.root}/view`,"view","sql");for(let a in i)s.view[a]=s.api[a]||Ee.program({}),s.view[a]=Object.assign(s.view[a],i[a]);let n=`${t.root}/api`;if(await ke.exists(n)){let a=await W({condition:"**/**.js",options:{cwd:n}});for(let c of a){let u=`api.${K(c).path}`,f=`${n}/${c}`;s.api[u]=s.api[u]||{},s.api[u].program=(await import(Kt(f))).default}}let m=`${t.root}/event`;if(await ke.exists(m)){let a=await W({condition:"**/**.js",options:{cwd:m}});for(let c of a){let u=K(c).path,f=`${m}/${c}`;s.event[u]=s.event[u]||{},s.event[u].program=async w=>{w.logger.trace(`\u6B63\u5728\u6267\u884C\u4E8B\u4EF6${u}`);let d={...w},p;w.db||(p=await w.connectDB(),d=Object.assign(d,{db:p}));let g=(await import(Kt(f))).default;if(g)try{await g(d||w),p&&await p.commit(),w.logger.debug(`\u4E8B\u4EF6${u}\u5B8C\u6210`)}catch(h){p&&await p.rollback(),w.logger.error(`\u4E8B\u4EF6${u}\u6267\u884C\u5931\u8D25\uFF0C${h.message}`),w.logger.trace(h)}else w.logger.error(`\u4E8B\u4EF6${u}\u6267\u884C\u5931\u8D25\uFF0C\u8BE5\u7A0B\u5E8F\u4E0D\u5B58\u5728`)}}}t.setContext({meta:s})};var Yt=async t=>{let e=_t(t),r=await It(e);e.setContext({tools:Ct,config:r});let o=r.name||"\u8F7B\u5448\u4E91\u5E94\u7528",s=(r.logLevel||"info").toLowerCase(),i=r.language||"zh-CN",n=await Dt(e),m={};e.setContext({name:o,logLevel:s,language:i,...n,exposeApis:m});let a=await Pt(e),c=a("APP");if(e.setContext({getLogger:a,logger:c}),e.config.database){let l=await Ut(e);e.setContext({connectDB:l})}return await Vt(e),e};import zs from"express";import Zt from"fs-extra";var Xt=async t=>{let e=`${t.sumor.root}/instance.json`,r={};if(await Zt.exists(e))try{r=await Zt.readJson(e)}catch{}r.version=r.version||"0.0.0",r.server=r.server||"local",r.port=r.port||t.sumor.port,r.time=new Date().getTime(),t.sumor.instance=JSON.parse(JSON.stringify(r)),t.use((o,s,i)=>{if(o.sumor.instance=JSON.parse(JSON.stringify(r)),o.sumor.instance){let{version:n,server:m,port:a,time:c}=o.sumor.instance;s.set("sumor-instance",`${n}_${m}_${a}_${c}`)}i()})};var qt=t=>{t.use((e,r,o)=>{let i=(e.get("accept-language")||t.sumor.language).split(","),n=i[0],m=[];for(let a in i)m.push(i[a].split(";")[0]);e.sumor.language=n,e.sumor.languages=m,o()})};var 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},Qt=(t,e)=>(r,o,s)=>{o=o||{},s=s||e;let i,n;if(s!==""){let u=s.split("-");i=u[0],n=u[1]}if(!r){let u={};for(let f in t){let w=t[f][""]||{},d={},p={};i&&(d=t[f][i]||{}),n&&(p=t[f][s]||{});let g={...w,...d,...p};for(let h in g)u[`${f}.${h}`]=g[h]}return u}let m=r.split("."),a=m.pop(),c=m.join("."),l;return t[c]&&(n&&(l=(t[c][s]||{})[a]),!l&&i&&(l=(t[c][i]||{})[a]),l||(l=(t[c][""]||{})[a])),ps(l,o)},er=async t=>{let e={};for(let r in t.sumor.meta.text){e[r]=e[r]||{},e[r][""]=t.sumor.meta.text[r].origin||{};for(let o in t.sumor.meta.text[r].target)e[r][o]=t.sumor.meta.text[r].target[o]||{}}t.sumor.text=Qt(e,t.sumor.language),t.use((r,o,s)=>{r.sumor.text=Qt(e,r.sumor.language),s()})};var tr=async t=>{t.sumor.range=e=>e?t.sumor.meta.range[e]:t.sumor.meta.range,t.use((e,r,o)=>{e.sumor.range=t.sumor.range,o()})};var rr=t=>{t.use((e,r,o)=>{e.sumor.timezone=e.get("sumor-timezone"),o()})};var ds=0,Te=t=>{t.use((e,r,o)=>{let s=++ds;e.sumor.ip=e.headers["x-forwarded-for"]||"0.0.0.0",e.sumor.getLogger=m=>t.sumor.getLogger(m,s),e.sumor.logger=e.sumor.getLogger("PROGRAM");let i=e.sumor.getLogger("HTTP"),n=e.headers["user-agent"]||"unknown agent";i.info(`${e.method} ${e.originalUrl} IP/${e.sumor.ip} ${n}`),o()})};import ae from"os";var ir=60,or=24*60,gs=(Math.floor(Date.now()/1e3)-ae.uptime())*1e3,ws=Date.now(),nr=t=>Math.round(t),hs=()=>nr((ae.totalmem()-ae.freemem())/ae.totalmem()*100),ys=()=>({time:Date.now(),idle:ae.cpus().map(t=>t.times.idle)}),$s=(t,e)=>{let r=e.time-t.time,o=0;for(let s in e.idle){let n=(e.idle[s]-t.idle[s])/r;n>1&&(n=1),n=100-n*100,o+=n}return nr(o/e.idle.length)},R={serverUpTime:gs,serviceUpTime:ws,interval:ir,memory:[],cpu:[]},Ze,sr=async()=>{R.updateTime=Date.now();let t=ys();if(Ze){let e=$s(Ze,t);R.cpu.unshift(e),R.cpu=R.cpu.slice(0,or)}Ze=t,R.memory.unshift(hs()),R.memory=R.memory.slice(0,or)},ar=async t=>{sr(),setInterval(()=>{sr()},ir*1e3),t.use((e,r,o)=>{e.sumor.monitor=JSON.parse(JSON.stringify(R)),o()})};import Xe from"body-parser";import xs from"multer";import _s from"fs-extra";var cr=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(Xe.urlencoded({extended:!1})),t.use(Xe.json()),t.use(Xe.text()),t.use((o,s,i)=>{o.sumor.data={...o.params,...o.query,...o.body},i()})};import bs from"cookie-parser";var mr=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 lr=t=>{let e=t.length,r=t.type,o;switch(r){case"string":e>1e3?o="text":o="string";break;case"number":e>18?o="string":t.scale!==null&&t.scale!==void 0?o="double":e>9?o="bigInteger":e>4?o="integer":e>2?o="smallint":o="tinyint";break;default:break}return o};var Oe=(t,e,r,o)=>{let s;switch(r.type=r.type||"string",r.type){case"string":r.length=r.length||255;break;case"number":r.length=r.length||10;break;default:break}if(r.increment)s=t.increments(e);else{let i=lr(r),n;switch(i){case"tinyint":s=t.tinyint(e),n="number";break;case"smallint":s=t.smallint(e),n="number";break;case"integer":s=t.integer(e),n="number";break;case"bigInteger":s=t.bigInteger(e),n="number";break;case"string":s=t.string(e,r.length),n="string";break;case"text":s=t.text(e,r.length),n="string";break;case"double":s=t.double(e,r.length,r.scale),n="number";break;default:break}if(r.default!==null){let m;n==="number"?(r.default===void 0&&(r.default=0),m=parseInt(r.default,10)):(r.default===void 0&&(r.default=""),m=r.default.toString()),s.defaultTo(m)}r.notNull&&s.notNullable()}r.key&&s.primary(),o&&s.alter()};var ur=async(t,e,r)=>{r=r||{};let o={},s=await t.schema.hasTable(e).transacting(t);if(!r.rename&&!r.deleted){let i=!1;for(let m in r.property)r.property[m].key&&(i=!0);i||(o.id={type:"string",length:32});for(let m in r.property)(m==="id"&&!i||["createdBy","createdTime","updatedBy","updatedTime"].indexOf(m)<0)&&(o[m]=r.property[m]);let n={type:"number",length:13};if(r.join)for(let m in r.join)o[`${$(m,"_")}_id`]={type:"string",length:32};o.createdBy={name:"\u521B\u5EFA\u8005",type:"string",length:32},o.createdTime={name:"\u521B\u5EFA\u65F6\u95F4",...n},o.updatedBy={name:"\u66F4\u65B0\u8005",type:"string",length:32},o.updatedTime={name:"\u66F4\u65B0\u65F6\u95F4",...n}}if(!s)!r.rename&&!r.deleted&&await t.schema.createTable(e,i=>{for(let n in o){let m=$(n,"_"),a=o[n];!a.rename&&!a.deleted&&Oe(i,m,a)}}).transacting(t);else if(r.rename){let i=$(r.rename,"_");await t.schema.renameTable(e,i)}else if(r.deleted)await t.schema.dropTable(e);else{let i=await t(e).columnInfo();await t.schema.alterTable(e,n=>{for(let m in o){let a=$(m,"_"),c=o[m];if(i[a]&&c.rename){let l=$(c.rename,"_");n.renameColumn(a,l)}}}).transacting(t),i=await t(e).columnInfo(),await t.schema.alterTable(e,n=>{for(let m in o){let a=$(m,"_"),c=o[m];c.rename||(i[a]?c.deleted?n.dropColumn(a):Oe(n,a,c,!0):!c.rename&&!c.deleted&&Oe(n,a,c))}})}};var fr=(t,e)=>{let r=[];for(let s in t)r.push({name:s,index:t[s]});r=r.sort((s,i)=>s.index>i.index?1:-1),e&&(r=r.reverse());let o=[];for(let s in r)o.push(r[s].name);return o};var pr=t=>{let e={};for(let r in t)e[r]=t[r].sql;return e};var dr=t=>{let e={};for(let o in t){e[o]=[];for(let s in t){let i=t[s].toLowerCase();i=i.replace(/`/g,""),i=i.replace(/\n/g," "),i=i.replace(/ {2}/g," "),i=i.replace(/ {2}/g," "),i=i.replace(/ {2}/g," "),(i.indexOf(` from ${o} `)>=0||i.indexOf(` join ${o} `)>=0)&&e[o].push(s)}}let r={};for(let o in t){r[o]=[];for(let s in e)e[s].indexOf(o)>=0&&r[o].push(s)}return r};var gr=t=>{let e={},r=o=>{if(t[o].length===0)return 1;let s=1;for(let i in t[o])s+=r(t[o][i]);return s};for(let o in t)e[o]=r(o);return e};var wr=(t,e)=>{e=!!e;let r={};for(let a in t){let c=$(a,"_");r[c]=t[a]}let o=pr(r),s=dr(o),i=gr(s),n=fr(i,e),m={};for(let a in n){let c=H(n[a],"_");m[c]=r[n[a]]}return m};var hr=async({config:t,logger:e,entity:r,view:o})=>{e=e||{debug:console.log,trace:console.log};let s=new M(t,e);await s.ensure(),await s.connect();let i=await s.knex.transaction();try{for(let m in r){let a=$(m,"_");e.debug(`\u6B63\u5728\u5B89\u88C5\u5B9E\u4F53${m}\u4E3A${a}`),await ur(i,a,r[m]),e.debug(`\u6B63\u5728\u5B89\u88C5\u5B9E\u4F53${m}\u5B8C\u6210`)}for(let m in o){let a=$(m,"_");await i.schema.dropViewIfExists(a)}let n=wr(o);for(let m in n){let a=$(m,"_");e.debug(`\u6B63\u5728\u5B89\u88C5\u89C6\u56FE${m}\u4E3A${a}`),await i.schema.createViewOrReplace(a,c=>{c.as(n[m].sql)}),e.debug(`\u6B63\u5728\u5B89\u88C5\u89C6\u56FE${m}\u5B8C\u6210`)}await i.commit()}catch{await i.rollback()}await s.destroy()};var Ne={install:hr,operator:J};var Ce=async(t,e)=>{let r=t.type||"sqlite",o;if(r==="redis"){let s={};o=i=>({get:async(n,m)=>(s[n]||{})[m],set:async(n,m,a)=>{s[n]=s[n]||{},s[n][m]=a}})}else{await Ne.install({config:t,logger:e,entity:{cache:{property:{namespace:{type:"string",length:100,notNull:!0},key:{type:"string",length:500,notNull:!0},value:{type:"string",length:1e4,notNull:!0}}}}});let s=await J({config:t,logger:e});o=i=>({get:async(n,m)=>{let a=await s.connect(i),c=await a.single("cache",{namespace:n,key:m});if(await a.commit(),c)return i.trace(`\u8BFB\u53D6\u7F13\u5B58${n} ${m}\u3002\u6570\u636E\u4E3A${c.value}`),c.value;i.trace(`\u8BFB\u53D6\u7F13\u5B58${n} ${m}\u3002\u6570\u636E\u4E3A\u7A7A`)},set:async(n,m,a)=>{let c=await s.connect(i);try{a?await c.modify("cache",["namespace","key"],{namespace:n,key:m,value:a}):await c.delete("cache",{namespace:n,key:m}),await c.commit(),i.trace(`\u5199\u5165\u7F13\u5B58${n} ${m}\u6210\u529F\u3002\u6570\u636E\u4E3A${a}`)}catch(l){await c.rollback(),i.trace(`\u5199\u5165\u7F13\u5B58${n} ${m}\u5931\u8D25\u3002\u6570\u636E\u4E3A${a}`),i.error(l)}}})}return o};var yr=async t=>{let e=t.sumor.config.cache||{},r=t.sumor.getLogger("CACHE"),o=await Ce(e,r);t.sumor.cache=o(r),t.use(async(s,i,n)=>{let m=s.sumor.getLogger("CACHE");s.sumor.cache=o(m),n()})};var qe=class{constructor(e){this.req=e,this._id=e.sumor.cookie.t,this._user=null,this._permission={},this._data={},this._time=0}async update({user:e,data:r,permission:o}){e&&(this._user=e,this.req.sumor.db&&this.req.sumor.db.setUser(e)),o&&(this._permission=o),r&&(this._data=r)}get id(){return this._id||""}set id(e){throw new Error("sumorApp.TOKEN_ID_EDIT_FORBIDDEN_DIRECTLY")}get time(){return this._time||""}set time(e){throw new Error("sumorApp.TOKEN_TIME_EDIT_FORBIDDEN_DIRECTLY")}get data(){return this._data||{}}set data(e){throw new Error("sumorApp.TOKEN_DATA_EDIT_FORBIDDEN_DIRECTLY")}get user(){return this._user||""}set user(e){throw new Error("sumorApp.USER_EDIT_FORBIDDEN_DIRECTLY")}get permission(){return this._permission}set permission(e){throw new Error("sumorApp.PERMISSION_EDIT_FORBIDDEN_DIRECTLY")}async setId(e){this._id=e,await this.save()}async setData(e,r){this._data[e]=r,await this.save()}async setPermission(e,r){if(e){let o={};if(typeof e=="string")o[e]=r||[];else if(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=(m,a)=>{a?s.push(`${m}-${a}`):s.push(`${m}`)};if(typeof e=="string")o=this.has(e,r),o||i(e,r);else for(let m in e){let a=e[m];typeof a=="string"?(o=this.has(a,""),o||i(a,"")):(o=this.has(a.key,a.value),o||i(a.key,a.value))}let n=s.length>0;if(s.length>0){let m=new Error("sumorApp.PERMISSION_DENIED");throw m.data={auth:s.join(",")},m}return n}}else throw new Error("sumorApp.LOGIN_EXPIRED")}async destroy(){this._id=null,await this.save()}async save(){this.req.sumor.cookie.t=this._id}},$r=async t=>{t.use(async(e,r,o)=>{e.sumor.token=new qe(e),t.sumor.meta.event.token&&(e.sumor.token.load=async()=>{await t.sumor.meta.event.token.program(e.sumor,e,r)},await e.sumor.token.load()),e.sumor.token.user&&e.sumor.db&&e.sumor.db.setUser(e.sumor.token.user),o()})};var xr=async t=>{t.use(async(e,r,o)=>{let s=e.sumor.getLogger("DATABASE");e.sumor.db=await e.sumor.connectDB(s),o()})};var Ss=({title:t,code:e,desc:r,data:o})=>{let s=JSON.stringify(o,null,4);return`<html>
424
- <head>
425
- <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
426
- <style type="text/css">
427
- html{
428
- background: #273343;
429
- color: #fff;
430
- text-align: center;
431
- padding: 30px;
432
- }
433
- .title{
434
- opacity: .6;
435
- padding-bottom: 10px;
436
- }
437
- .content{
438
- padding-bottom: 10px;
439
- }
440
- .showDetail{
441
- margin-top: 20px;
442
- color: #03a9f4;
443
- cursor: pointer;
444
- }
445
- .showDetail.show{
446
- display: none;
447
- }
448
- .detailBox{
449
- position: relative;
450
- opacity: 0;
451
- }
452
- .detailBox.show{
453
- opacity: 1;
454
- }
455
- pre{
456
- border: 1px solid rgba(255,255,255,.6);
457
- border-radius: 2px;
458
- text-align: left;
459
- height: 50%;
460
- max-width: 500px;
461
- margin: 0 auto;
462
- margin-top: 20px;
463
- overflow: auto;
464
- padding: 10px;
465
- }
466
- .detailMessage{
467
- font-size: 14px;
468
- width: fit-content;
469
- margin: 0 auto;
470
- margin-top: 5px;
471
- }
472
- </style>
473
- </head>
474
- <body>
475
- <h1>${t}</h1>
476
- <div class="title">\u9519\u8BEF\u539F\u56E0</div>
477
- <div class="content">${e} ${r}</div>
478
- <div class="title showDetail" onclick="show()">\u70B9\u51FB\u67E5\u770B\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F</div>
479
- <div class="detailBox">
480
- <pre>${s}</pre>
481
- <div class="detailMessage">\u8BF7\u5C06\u8BE5\u6280\u672F\u4FE1\u606F\u63D0\u4F9B\u7ED9\u5E94\u7528\u7BA1\u7406\u5458</div>
482
- </div>
483
- <script>
484
- function show(){
485
- var oDiv = document.getElementsByTagName('div')[2];
486
- oDiv.classList.add('show')
487
- var oPre = document.getElementsByTagName('div')[3];
488
- oPre.classList.add('show');
489
- }
490
- </script>
491
- </body>
492
- </html>`},Qe=class{constructor(e,r){this.req=e,this.res=r,this.respond=!1,this._changed=!1,this._hasError=!1,this._code="OK",this._message="",this._data=null}set code(e){let r=this.req.sumor.text(e,this._data);e&&r?(this._code=e,this._message=r):(this._code="sumorApp.NETWORK_ERROR",this._message=this.req.sumor.text(this._code))}get code(){return this._code}set message(e){this._message=e}get message(){return this._message}set data(e){this._data=e,this._changed=!0}get data(){return this._data}set changed(e){this._changed=e}get changed(){return this._changed}error(e){this.code=e,this._hasError=!0}end(){if(this._data!==void 0)try{this.res.send(this._data)}catch(e){if(e.code!=="ERR_HTTP_HEADERS_SENT")throw e}}send(){let e={code:this._code,message:this._message,data:this._data};if(this._hasError)try{this.res.status(500),this.req.accepts(["html","json"])==="html"?this.res.send(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}}},_r=async t=>{t.use((e,r,o)=>{e.sumor.response=new Qe(e,r),o()})};import vs from"ali-oss";var et={resize:{mode:"m",width:"w",height:"h",longer:"l",shorter:"s"},quality:{related:"q",absolute:"Q"},circle:{radius:"r"},blur:{radius:"r",size:"s"}},Es=t=>{let e={};if(t.image){let r=[];for(let o in et){let s=t.image[o];if(s){let i=[];i.push(o);for(let n in et[o])s[n]&&i.push(`${et[o][n]}_${s[n]}`);r.push(i.join(","))}}t.image.format&&r.push(`format,${t.image.format}`),t.image.orient&&r.push("auto-orient,1"),r.length>0&&(e.process=`image/${r.join("/")}`)}return e},tt=class{constructor(e){this.aliyunOSS=new vs(e)}async put(e,r){let o=await this.aliyunOSS.putStream(e,r);if(o.res.status>299){let s=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw s.data={msg:o.res},s}}async info(e,r){r=r||{};let o={},s,i;try{if(s=await this.aliyunOSS.get(e,{process:"image/info"}),r.color)try{let a=await this.aliyunOSS.get(e,{process:"image/average-hue"});if(a.content){let c=JSON.parse(a.content.toString());o.color=c.RGB.replace("0x","#")}}catch{}}catch(a){if(a.code!=="NoSuchKey")i=a.message;else return null}if(!i&&s&&s.res.status>299&&(i=s.res),i){let a=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw a.data={msg:i},a}let n=JSON.parse(s.content.toString()),m=a=>{if(n[a])return n[a].value};return o.format=m("Format"),o.size=m("FileSize"),o.height=m("ImageHeight"),o.height&&(o.height=parseInt(o.height,10)),o.width=m("ImageWidth"),o.width&&(o.width=parseInt(o.width,10)),o.make=m("LensMake"),o.model=m("LensModel"),o}async get(e,r){let o,s,i;try{s=await this.aliyunOSS.getStream(e,Es(r))}catch(n){n.code!=="NoSuchKey"&&(i=n.message)}if(!i&&s&&s.res.status>299&&(i=s.res),i){let n=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw n.data={msg:i},n}return s&&(o=s.stream),o}async delete(e){let r=await this.aliyunOSS.delete(e);if(r.res.status>299){let o=new Error("sumorStorage.STORAGE_INSTANCE_ERROR");throw o.data={msg:r.res},o}}async exists(e){let r=!0;try{await this.aliyunOSS.get(e)}catch(o){if(o.code==="NoSuchKey")r=!1;else throw new Error("sumorStorage.STORAGE_INSTANCE_ERROR")}return r}},br=tt;import V from"fs-extra";import Sr from"path";var rt=class{constructor(e){this.config=e,this.root=Sr.resolve(process.cwd(),this.config.path)}_getTargetPath(e){return Sr.join(this.root,e)}async put(e,r){let o=this._getTargetPath(e);V.ensureFileSync(o),await new Promise(s=>{let i=V.createWriteStream(o,{encoding:"utf8",start:0});r.pipe(i),r.on("end",()=>{s()})})}async get(e){let r=this._getTargetPath(e);if(await V.exists(r))return V.createReadStream(r)}async delete(e){let r=this._getTargetPath(e);await V.remove(r)}async exists(e){let r=this._getTargetPath(e);return await V.exists(r)}},vr=rt;import ks from"crypto";var Er=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 Y=class{constructor(e,r){if(this._logger=r,e)switch(e.type){case"aliyunOSS":this._instance=new br(e);break;case"file":this._instance=new vr(e);break;default:break}}async put(e,r){if(r=be(r),this._instance)try{let o=Er(r),s=await this._instance.put(e,r);return o.response=s,o}catch{throw new Error("sumorStorage.STORAGE_FILE_SAVE_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async get(e,r){if(r=r||{},this._instance)try{let o=await this._instance.get(e,r);return await Se(o,r.type)}catch{throw new Error("sumorStorage.STORAGE_FILE_READ_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async delete(e){if(this._instance)try{return await this._instance.delete(e)}catch{throw new Error("sumorStorage.STORAGE_FILE_DELETE_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async info(e,r){if(this._instance)try{return await this._instance.info(e,r)}catch{throw new Error("sumorStorage.STORAGE_FILE_INFO_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}async exists(e){if(this._instance)try{return await this._instance.exists(e)}catch{throw new Error("sumorStorage.STORAGE_FILE_INFO_FAILED")}else throw new Error("sumorStorage.STORAGE_NOT_CONNECTED")}};var kr=async t=>{let e=t.sumor.getLogger("STORAGE");t.sumor.storage=new Y(t.sumor.config.storage,e),t.use((r,o,s)=>{let i=r.sumor.getLogger("STORAGE");r.sumor.storage=new Y(t.sumor.config.storage,i),s()})};import Ts from"@alicloud/sms-sdk";var ot,Z=class{constructor(e,r){this._config=e,this._logger=r||{error:console.log,debug:console.log,trace:console.log}}async send(e,r,o,s){let{signName:i,accessKeyId:n,secretAccessKey:m}=this._config;if(this._config&&!this._config.disable){switch(ot||(ot=new Ts({accessKeyId:n,secretAccessKey:m})),r){case 86:if(!o.match(/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/))throw new Error("sumorSMS.MOBILE_FORMAT");break;default:throw await new Promise(a=>{setTimeout(()=>{a()},1e3)}),new Error("sumorSMS.MOBILE_PREFIX_NOT_SUPPORT")}try{await new Promise((a,c)=>{ot.sendSMS({PhoneNumbers:o,SignName:i,TemplateCode:e,TemplateParam:JSON.stringify(s)}).then(l=>{let{Code:u}=l;u==="OK"?a():c(u)},l=>{l.data?c(l.data.Code):c(l)})})}catch(a){let c=new Error("sumorSMS.SMS_SEND_FAILED");throw c.data={msg:a},c}}else this._logger.error(`\u6D88\u606F\u53D1\u9001\u529F\u80FD\u4E0D\u53EF\u7528\u3002\u9700\u8981\u53D1\u9001\u6D88\u606F${e}\u7ED9${r} ${o}\uFF0C\u53C2\u6570${JSON.stringify(s)}`)}};var Tr=async t=>{if(t.sumor.config.sms){let e=t.sumor.getLogger("SMS");t.sumor.sms=new Z(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 Z(t.sumor.config.sms,s)}o()})};import st from"axios";import Cs from"axios";import Os from"crypto";import Ns from"fs";var Ie=(t,e)=>{let r=`${process.cwd()}/${e.pay.privateKey}`,o=Ns.readFileSync(r,"utf8"),s=`${t.join(`
493
- `)}
494
- `;return Os.createSign("RSA-SHA256").update(s).sign(o,"base64")};var X=async(t,e)=>{let r="https://api.mch.weixin.qq.com",o=Math.floor(Date.now()/1e3),s=Math.random().toString(36).substr(2,15),i=Ie([t.method.toUpperCase(),t.url,o,s,t.body],e),n={"Content-Type":"application/json",Accept:"application/json",Authorization:`WECHATPAY2-SHA256-RSA2048 mchid="${e.pay.mchId}",nonce_str="${s}",signature="${i}",timestamp="${o}",serial_no="${e.pay.serialNo}"`};try{return(await Cs({method:t.method.toUpperCase(),url:r+t.url,data:t.body,headers:n})).data}catch(m){throw m.response}};var Or=async(t,e)=>{t.desc=t.desc||"\u865A\u62DF\u5546\u54C1";let r={method:"POST",url:"/v3/pay/transactions/jsapi",body:JSON.stringify({appid:e.key,mchid:e.pay.mchId,description:t.desc,out_trade_no:t.id,notify_url:e.pay.notifyUrl,amount:{total:Math.round(t.amount*100),currency:"CNY"},payer:{openid:t.openId}})};return(await X(r,e)).prepay_id};async function Nr(t,e){return await X({method:"POST",url:`/v3/pay/transactions/out-trade-no/${t}/close`,body:JSON.stringify({mchid:e.pay.mchId,out_trade_no:t})},e)}async function Cr(t,e){let r;try{r=await X({method:"GET",url:`/v3/pay/transactions/out-trade-no/${t}?mchid=${e.pay.mchId}`},e)}catch(o){if(o.status===404)r={trade_state:"NOTPAY"};else throw o}return r}var ce={order:Or,close:Nr,check:Cr,sign:Ie};var Ir=30*60*1e3,q=class{constructor(e,r,o){this._config=e,this._cache=r,this._name=e.name||"",this._logger=o,this._updatingToken=!1,e.pay&&(this.pay={order(s){return ce.order(s,e)},close(s){return ce.close(s,e)},check(s){return ce.check(s,e)},sign(s){return ce.sign(s,e)}})}async call(e,r){let o;try{r?o=await st.post(e,r):o=await st.get(e)}catch(i){let n=new Error("WECHAT_API_FAILED");throw n.data={msg:`\u5FAE\u4FE1\u670D\u52A1\u5668\u8FDE\u63A5\u5931\u8D25\uFF1A${i.message}`},n}if(!o.data.errcode)return o.data;this._logger.error();let s=new Error("WECHAT_ERROR");throw s.data={msg:o.data.errmsg},s}async init(e){this._app=e,this._logger.info(`\u5FAE\u4FE1\u6821\u9A8C\u6587\u4EF6\u5DF2\u542F\u52A8 /MP_verify_${this._config.verifyCode}.txt`),e.get(`/MP_verify_${this._config.verifyCode}.txt`,(r,o)=>{o.send(this._config.verifyCode)}),await this.getToken(),setInterval(()=>{this._logger.trace("\u5F00\u59CB\u68C0\u67E5\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u662F\u5426\u8FC7\u671F"),this.getToken(),this._logger.trace("\u68C0\u67E5\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u5DF2\u5B8C\u6210")},60*1e3)}async getToken(){let e=async()=>{let o=await this._cache.get("wechatAccessToken",this._name);return o&&(o=JSON.parse(o)),o=o||{},o.time=o.time||0,o},r=await e();return Date.now()-r.time>Ir&&(await this._refreshToken(),r=await e()),(!r||!r.token||Date.now()-r.time>Ir)&&this._logger.error("\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u66F4\u65B0\u5931\u8D25"),r.token}async reloadUsers(){let e="",r,o=0,s=[],i=async()=>{let m=await this.list(e);r||(r=m.total),o+=m.count,s=s.concat(m.data.openid),o<r&&(e=m.next_openid,await i())};await i();let n=[];for(let m of s)n.push(await this.detail(m));return n}async list(e){e=e||"";let o=`https://api.weixin.qq.com/cgi-bin/user/get?access_token=${await this.getToken()}&next_openid=${e}`;return await this.call(o)}async detail(e){let o=`https://api.weixin.qq.com/cgi-bin/user/info?access_token=${await this.getToken()}&openid=${e}`;return await this.call(o)}async sendTemplateMessage(e,r,o,s){let i=await this.getToken(),n={};for(let a in s)n[a]={value:s[a]};let m=`https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${i}`;try{await this.call(m,{touser:e,template_id:r,url:o,data:n}),this._logger.debug(`\u6A21\u7248\u6D88\u606F\u5DF2\u53D1\u9001\u7ED9${e}\uFF0C\u6A21\u7248${r}\uFF0C\u6570\u636E${JSON.stringify(s)}`)}catch(a){this._logger.error(`\u7ED9${e}\u7684\u6A21\u7248\u6D88\u606F\u53D1\u9001\u5931\u8D25\uFF0C\u6A21\u7248${r}\uFF0C\u6570\u636E${JSON.stringify(s)}`),this._logger.error(a)}}async updateMenu(e){let r=await this.getToken();await this.call(`https://api.weixin.qq.com/cgi-bin/menu/create?access_token=${r}`,e)}async _refreshToken(){if(!this._updatingToken){this._updatingToken=!0,this._logger.info("\u6B63\u5728\u66F4\u65B0\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1");let e=`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${this._config.key}&secret=${this._config.secret}`,r=await st.get(e);if(r.status===200){let o={};r.data.access_token?(o.token=r.data.access_token,o.time=Date.now(),this._logger.trace(`\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1: ${o.token}`),this._logger.info("\u5FAE\u4FE1\u670D\u52A1\u6388\u6743\u51ED\u8BC1\u5DF2\u66F4\u65B0"),await this._cache.set("wechatAccessToken",this._name,JSON.stringify(o))):this._logger.error(r.data)}else this._logger.error(r.data);this._updatingToken=!1}}};var Dr=async t=>{if(t.sumor.config.wechat){let e=t.sumor.getLogger("WECHAT");e.debug("\u5FAE\u4FE1\u670D\u52A1\u5668\u6B63\u5728\u542F\u52A8");let r;t.sumor.config.wechat.cache?r=(await Ce(t.sumor.config.wechat.cache,e))(e):r=t.sumor.cache,e.trace(`\u5FAE\u4FE1\u670D\u52A1\u5668\u914D\u7F6E\u4FE1\u606F ${JSON.stringify(t.sumor.config.wechat)}`),t.sumor.wechat=new q(t.sumor.config.wechat,r,e),await t.sumor.wechat.init(t),e.debug("\u5FAE\u4FE1\u670D\u52A1\u5668\u5DF2\u542F\u52A8"),t.use((o,s,i)=>{let n=o.sumor.getLogger("WECHAT");o.sumor.wechat=new q(t.sumor.config.wechat,n),i()})}};var Rr=async t=>{await Xt(t),await _r(t),await qt(t),await er(t),await tr(t),await rr(t),await Te(t),await ar(t),await cr(t),await mr(t),await yr(t),await xr(t),await $r(t),await kr(t),await Tr(t),await Dr(t)};var Ar=(t,e,r)=>{let o=`/${t.replace(/\./g,"/")}`,s=`${e.sumor.root}/tmp/uploads`,i=e.uploader(e.sumor.meta.api[t].parameters);return i?e.all(o,i,(n,m,a)=>{let c={};if(n.files)for(let l in n.files){let u=[];for(let f in n.files[l])u.push({name:n.files[l][f].originalname,size:n.files[l][f].size,mime:n.files[l][f].mimetype,encoding:n.files[l][f].encoding,path:`${s}/${n.files[l][f].filename}`});c[l]=u}Object.assign(n.sumor.data,c),a()},r):e.all(o,(n,m,a)=>{a()},r),!!i};var Lr=(t,e)=>{for(let r in e.parameters){let o=e.parameters[r];switch(o.default!==void 0&&(o.type==="string"?(t[r]===null||t[r]===void 0||t[r]==="")&&(t[r]=o.default):(t[r]===null||t[r]===void 0)&&(t[r]=o.default)),o.type){case"string":t[r]!==null&&t[r]!==void 0&&typeof t[r]!="string"&&(t[r]=t[r].toString());break;case"number":typeof t[r]!="number"&&t[r]!==null&&t[r]!==void 0&&(typeof t[r]=="string"?(t[r]=parseFloat(t[r]),isNaN(t[r])&&(t[r]=null)):delete t[r]);break;default:break}if(t[r]&&(o.trim&&(t[r]=t[r].trim()),o.upperCase&&(t[r]=t[r].toUpperCase()),o.lowerCase&&(t[r]=t[r].toLowerCase())),o.required===!0&&(t[r]===void 0||t[r]===null||t[r]===""))throw new Error("sumorApp.REQUIRED");if(o.length&&t[r]&&t[r].length>o.length){let s=new Error("sumorApp.LENGTH_OUT_OF_LIMIT");throw s.data={length:o.length},s}for(let s of o.rule)if(!new RegExp(s.expression).test(t[r]))throw new Error(s.text)}return t};var Pr=async t=>{let e=Object.keys(t.sumor.meta.api);e.sort((r,o)=>r>o?1:-1);for(let r of e){let o=`/${r.replace(/\./g,"/")}`,i=Ar(r,t,async function(n,m,a){n.sumor.meta=t.sumor.meta,n.sumor.cors=!0,n.sumor.response.changed=!0,t.sumor.meta.event.context&&await t.sumor.meta.event.context.program(n.sumor,n,m);try{let c=t.sumor.meta.api[r];n.sumor.data=Lr(n.sumor.data,c);let l=await c.program(n.sumor,n,m);n.sumor.response.data=l||n.sumor.response.data,await n.sumor.db.commit()}catch(c){try{await n.sumor.db.rollback()}catch{}n.sumor.response.error(c.message);let l="";c instanceof Error&&(l=t.sumor.text(c.message)),n.sumor.logger.debug(`\u5916\u90E8\u8BF7\u6C42\u51FA\u9519\uFF1A${c.message} ${l}`),n.sumor.logger.trace(c)}a()});t.sumor.exposeApis[o]={name:t.sumor.meta.api[r].name||"",desc:t.sumor.meta.api[r].desc||"",parameters:t.sumor.meta.api[r].parameters||{}},t.sumor.logger.info(`\u63A5\u53E3\u5DF2\u5C31\u7EEA\uFF1A${o}${i?" (\u5141\u8BB8\u6587\u4EF6\u4E0A\u4F20)":""}`)}t.sumor.logger.info("\u6240\u6709\u63A5\u53E3\u5DF2\u5C31\u7EEA")};import{createProxyMiddleware as Ms}from"http-proxy-middleware";var Fr=t=>{t.use((e,r,o)=>{e.sumor.cors&&(r.header("Access-Control-Allow-Origin","*"),r.header("Access-Control-Allow-Headers","X-Requested-With"),r.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS")),o()})};import Is from"fs-extra";var jr=t=>{t.use(async(e,r,o)=>{if(e.files){let s=`${t.sumor.root}/tmp/uploads`;for(let i in e.files)for(let n in e.files[i]){let m=`${s}/${e.files[i][n].filename}`;await Is.remove(m)}}o()})};var Mr=t=>{t.use((e,r,o)=>{e.sumor.saveCookie(),e.sumor.response.respond?e.sumor.response.end():e.sumor.response.changed?e.sumor.response.send():o()})};import it from"fs-extra";import Ur from"node:path";import Ds from"serve-static";import Rs from"fs";import{pathToFileURL as As}from"url";var zr=async t=>{let e="/",r=Ur.resolve(process.cwd(),"./output/web");if(await it.exists(r)){let o=await it.readFile(`${r}/client/index.html`,"utf-8"),s=JSON.parse(await it.readFile(`${r}/client/ssr-manifest.json`,"utf-8"));t.use(e,Ds(`${r}/client`,{index:!1}));let i;try{let n=Ur.resolve(r,"./server/entry-server.js");Rs.existsSync(n)&&(i=await import(As(n)),i=i.render)}catch(n){Te.error("ssrServerEntry load failed",n.stack)}t.use("*",async(n,m)=>{try{let a=n.originalUrl.replace(e,"/"),c=n.sumor.ssrContext,[l,u]=await i(a,s,c),f=`<title>${c.pageInfo.title}</title>
495
- <meta name="description" content="${c.pageInfo.description}" />
496
- <meta name="keywords" content="${c.pageInfo.keywords}" />`,w=o.replace("<!--app-page-info-->",f).replace("<!--preload-links-->",u).replace("<!--app-html-->",l);m.status(200).set({"Content-Type":"text/html"}).end(w)}catch(a){console.log(a.stack),m.status(500).end(a.stack)}})}};import Ls from"compression";import Ps from"zlib";import Fs from"serve-static";import js from"fs-extra";var Br=async t=>{let e=`${t.sumor.root}/static`;t.use(Ls({filter(){return!0},flush:Ps.Z_SYNC_FLUSH})),await js.exists(e)&&t.use(Fs(e))};var Hr=async t=>{if(await Fr(t),await jr(t),await Mr(t),await Br(t),t.sumor.mode==="development"){let e=`http://localhost:${t.sumor.uiPort}`;t.use("*",Ms({target:e,changeOrigin:!0,ws:!0,logProvider:function(o){let s=i=>{};return{log:s,debug:s,info:s,warn:s,error:s}}}))}(t.sumor.mode==="production"||t.sumor.mode==="preview")&&await zr(t)};import Gr from"http";import Us from"https";import"spdy";var De=t=>{let e=[];return t.on("connection",o=>{e.push(o),o.once("close",()=>{e.splice(e.indexOf(o),1)})}),async()=>await new Promise(o=>{e.forEach(s=>{s.destroy()}),t.close(()=>{o()})})};var Jr=async t=>{let e=t.sumor.port;if(t.sumor.protocol==="https"){let r;if(e===443){let i=Gr.createServer((n,m)=>{let a=`https://${n.headers.host}${n.url}`;m.writeHead(301,{Location:a}),m.end()});r=await new Promise(n=>{i.listen(80,()=>{n(De(i))})}),t.sumor.logger.info("http\u670D\u52A1\u5DF2\u542F\u52A8\uFF0C\u8BBF\u95EE\u5C06\u8DF3\u8F6C\u81F3https")}let o;o=Us.createServer({...t.sumor.ssl},t),o.on("error",i=>{t.sumor.logger.error(i)});let s=await new Promise(i=>{o.listen(e,()=>{i(De(o))})});t.sumor.close=async()=>{t.sumor.logger.info("\u6B63\u5728\u7EC8\u6B62\u7F51\u9875\u670D\u52A1"),r&&await r(),await s(),t.sumor.logger.info("\u7F51\u9875\u670D\u52A1\u5DF2\u505C\u6B62\u8FD0\u884C")}}else{let r=Gr.createServer(t),o=await new Promise(s=>{r.listen(e,()=>{s(De(r))})});t.sumor.close=async()=>{t.sumor.logger.info("\u6B63\u5728\u7EC8\u6B62\u7F51\u9875\u670D\u52A1"),await o(),t.sumor.logger.info("\u7F51\u9875\u670D\u52A1\u5DF2\u505C\u6B62\u8FD0\u884C")}}};var Wr=async t=>{let e=zs();e.disable("x-powered-by"),e.sumor=t,e.sumor.app=e,e.use((r,o,s)=>{r.sumor=t.getContext(),r.sumor.ssrContext={pageInfo:{title:"",description:"",keywords:""}},r.sumor.cors=!1,s()}),await Rr(e),e.use((r,o,s)=>{r.sumor.logger.trace(`\u4F1A\u8BDD\u4EA4\u4E92\u5BF9\u8C61: ${Object.keys(r.sumor).join(", ")}`),s()}),e.sumor.logger.debug("\u524D\u7F6E\u4E2D\u95F4\u4EF6\u52A0\u8F7D\u5B8C\u6210"),e.sumor.meta.event.setup&&await e.sumor.meta.event.setup.program(e.sumor),e.sumor.meta.event.prepare&&await e.sumor.meta.event.prepare.program(e.sumor),await Pr(e),e.sumor.logger.debug("\u5904\u7406\u7A0B\u5E8F\u52A0\u8F7D\u5B8C\u6210"),e.sumor.meta.event.serve&&await e.sumor.meta.event.serve.program(e.sumor),await Hr(e),e.sumor.logger.debug("\u540E\u7F6E\u4E2D\u95F4\u4EF6\u52A0\u8F7D\u5B8C\u6210"),await Jr(e),e.sumor.meta.event.served&&await e.sumor.meta.event.served.program(e.sumor),e.sumor.logger.info(`\u5E94\u7528\u5DF2\u8FD0\u884C\u5728 ${e.sumor.origin}`),e.sumor.mode==="production"&&process.on("uncaughtException",r=>{e.sumor.logger.error("\u672A\u6355\u6349\u9519\u8BEF"),e.sumor.logger.error(r)})};import{build as Kr,defineConfig as Vr}from"vite";var Yr=async t=>{await xe(t,!0);let e=await re(t);e.build.ssrManifest=!0,e.build.outDir="../../output/web/client",e.build.emptyOutDir=!0,await Kr(Vr(e));let r=await re(t);r.build.ssr="src/entry-server.js",r.build.outDir="../../output/web/server",r.build.emptyOutDir=!0,await Kr(Vr(r))};var Zr=async t=>{let e=t.config.database,r=t.getLogger("DATABASE");await Ne.install({config:e,logger:r,entity:t.meta.entity,view:t.meta.view})};var N=async t=>{t=t||{};let e=await Yt(t);e.logger.info(`\u65E5\u5FD7\u8BB0\u5F55\u7EA7\u522B\uFF1A${e.logLevel.toUpperCase()}`),e.logger.info(`\u8FD0\u884C\u6A21\u5F0F\uFF1A${e.mode.toUpperCase()}`),e.logger.trace(`\u5168\u5C40\u4EA4\u4E92\u5BF9\u8C61: ${Object.keys(e).join(", ")}`),e.logger.trace(`\u914D\u7F6E\u4FE1\u606F: ${JSON.stringify(e.config,null,4)}`),e.mode==="development"&&(e.logger.info("\u5F00\u59CB\u51C6\u5907\u5F00\u53D1\u73AF\u5883"),await xt(e),e.logger.info("\u5F00\u53D1\u73AF\u5883\u51C6\u5907\u5B8C\u6210")),(e.mode==="build"||e.mode==="preview")&&(e.logger.info("\u5F00\u59CB\u751F\u6210\u751F\u4EA7\u4EE3\u7801"),await Yr(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 Zr(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 Wr(e),e.logger.info("\u5BF9\u5916\u670D\u52A1\u542F\u52A8\u5B8C\u6210"))};import{Command as li}from"commander";import ui from"fs-extra";var Xr=(t,e)=>{console.log(`
497
- ========================================================
498
- =
499
- = === = Sumor App Framework v${e}
500
- = ======= =
501
- = === = More Information: https://www.sumor.com
502
- =
503
- ========================================================
504
- `)};import U from"fs-extra";import oo from"node:path";var qr=(t,e)=>{let r={name:t.name,type:"module",bin:t.bin,main:"./index.umd.cjs",module:"./index.es.js",exports:{".":{import:"./index.es.js",require:"./index.umd.cjs"}},dependencies:t.dependencies};return e&&(r.main="./index.es.js",delete r.exports["."].require),r};import Bs from"fs-extra";import{build as Hs,defineConfig as Gs}from"vite";import Js from"@vitejs/plugin-vue";import Qr from"node:path";var nt=t=>t&&(t=t.replace(/\//g,"-"),t=t.replace(/@/g,""),t=t.replace(/(\w)/,e=>e.toUpperCase()),t.replace(/-(\w)/g,(e,r)=>r?r.toUpperCase():""));var eo=async t=>{let e={},r=Object.keys(t.pkg.dependencies||{});for(let i=0;i<r.length;i+=1)e[r[i]]=nt(r[i]);let o=nt(t.pkg.name)||"MyLib",s={mode:t.mode,root:process.cwd(),base:"/",plugins:[],build:{emptyOutDir:!1,sourcemap:t.mode==="development"?"inline":!1,outDir:t.output,lib:{entry:t.entry,name:o},rollupOptions:{external:r,output:{globals:e}}}};s.build.lib.fileName=i=>`index.${i}.js`,s.plugins.push(Js()),await Hs(Gs(s)),await Bs.move(Qr.join(t.output,"./index.umd.js"),Qr.join(t.output,"./index.umd.cjs"))};import*as to from"esbuild";var ro=async t=>{let e=Object.keys(t.pkg.dependencies||{});await to.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 me=async t=>{let e=t.root||process.cwd(),r=t.entry||oo.resolve(e,"./src/index.js"),o=t.mode||"production",s=t.output||oo.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 ro({mode:o,entry:r,output:s,pkg:n}):await eo({mode:o,entry:r,output:s,pkg:n});let m=await qr(n,i);return await U.ensureFile(`${s}/package.json`),await U.writeFile(`${s}/package.json`,JSON.stringify(m,null,4)),{name:n.name}};var so=async t=>{let e=!!t.debug,r=t.type||"app",o=e?"development":"production";switch(r){case"vue":await me({mode:o});break;case"node":await me({mode:o,node:!0});break;default:await N({mode:"build"});break}};import io from"yaml";import Q from"fs-extra";var A=async(t,e)=>{t=t||process.cwd();let r=`${t}/${e}.yml`,o;try{if(await Q.exists(r)){let n=await Q.readFile(r,"utf-8");o=io.parse(n)}let s=`${t}/${e}.yaml`;if(!o&&await Q.exists(s)){let n=await Q.readFile(s,"utf-8");o=io.parse(n)}let i=`${t}/${e}.json`;if(!o&&await Q.exists(i)){let n=await Q.readFile(i,"utf-8");o=JSON.parse(n)}}catch{console.log(`\u914D\u7F6E\u6587\u4EF6${e}\u89E3\u6790\u5931\u8D25`)}return o||{}};import Ws from"yaml";import le from"fs-extra";var at=async(t,e,r)=>{let o=await A(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`,Ws.stringify(o)):r==="json"&&await le.writeFile(`${t}/${e}.json`,JSON.stringify(o,null,4))};import To from"fs-extra";import Ae from"fs-extra";var no=t=>{let e=t.split("/"),r=e.pop(),o=e.join("/");return{name:r,folder:o}};import{exec as Ks}from"child_process";var v=async(t,e,r)=>await new Promise((o,s)=>{let i=Ks(t,e),n="",m="",a=c=>(c=c.toString().replace(/\r\n/g,`
505
- `).replace(/\r/g,`
506
- `),c);i.stdout.on("data",async c=>{c=a(c),n+=c,r&&r(c)}),i.stderr.on("data",async c=>{c=a(c),n+=c,m+=c,r&&r(c)}),i.on("close",async c=>{c!==0?s(m):o(n)})});var Re=async t=>{let e=await v("git branch -vva",{cwd:t}),r=[],o=e.split(`
507
- `);for(let s in o){let i=o[s].split(" ").filter(n=>n!=="");if(i.length>=3){let n={};i[0]==="*"&&(n.current=!0,i.shift()),n.name=i.shift(),n.commit=i.shift(),n.name.indexOf("remotes/origin")>=0&&(n.remote=!0,n.origin=n.name,n.name=n.origin.replace("remotes/origin/","")),r.push(n)}}return r};var x=async(t,e)=>await v(`git ${e}`,{cwd:t});var Vs=async t=>{await Ae.writeFile(`${t}/.gitignore`,`# IDE configuration
508
- .idea
509
-
510
- # generated files
511
- node_modules
512
- output
513
- dist
514
- tmp
515
-
516
- # system
517
- .DS_Store`),await Ae.writeFile(`${t}/README.md`,"")},Le=async(t,e)=>{if(!await Ae.exists(t)){let{name:s,folder:i}=no(t);await Ae.ensureDir(i),await v(`git clone ${e} ${s}`,{cwd:i})}await v("git config user.name builder",{cwd:t}),await v("git config user.email builder@dummy.com",{cwd:t}),(await Re(t)).filter(s=>s.name==="1.0")[0]?(await x(t,"checkout 1.0"),await x(t,"pull")):(await x(t,"checkout --orphan 1.0"),await x(t,"reset --hard"),await Vs(t),await x(t,"add . -f"),await x(t,'commit -m "\u521D\u59CB\u5316"'),await x(t,"push -f origin 1.0"))};var ao=async(t,e)=>{let o=(await x(t,`log ${e} --pretty=format:"%H|%ad|%cd|%D|%s" --date=iso-strict-local`)).split(`
518
- `),s=[];for(let i of o){let n=i.split("|"),m=[],a="";if(n[3]){let c=n[3].split(",");for(let l of c)l.indexOf("tag")>=0&&m.push(l.replace("tag:","").trim())}n[4]&&(a=n[4]),s.push({id:n[0],authorDate:new Date(n[1]),committerDate:new Date(n[2]),tags:m,subject:a})}return s};var Pe=t=>Math.round(new Date(t).getTime()),co=async t=>{await x(t,"fetch");let e=await Re(t),r=/^\d+\.\d+?$/,o=/^\d+\.\d+\.\d+?$/,s={};for(let i of e)if(i.remote&&r.test(i.name)){await x(t,"reset --hard HEAD"),await x(t,`checkout ${i.origin}`);let n=await ao(t,i.origin);n=n.reverse();let m=0;for(let a of n){let c=!0;for(let l of a.tags)if(o.test(l)){let u=parseInt(l.split(`${i.name}.`)[1],10);isNaN(u)||(s[l]={id:a.id,name:l,authorDate:Pe(a.authorDate),committerDate:Pe(a.committerDate),beta:!1},u>=m&&(m=u+1),c=!1)}c&&(s[`${i.name}.${m}`]={id:a.id,name:`${i.name}.${m}`,authorDate:Pe(a.authorDate),committerDate:Pe(a.committerDate),beta:!0})}}return s};var mo=async(t,{url:e,username:r,password:o})=>{if(e.indexOf("http")===0){let s=e.split("/"),i=`${s[0]}//${r}:${o}@${s[2]}/${s.slice(3,s.length).join("/")}`,n=`${process.cwd()}/tmp/version/${t}`;return await Le(n,i),await co(n)}};import Ys from"node-ssh";var ue=class{constructor(e){this.config=e}async connect(){if(!this.connection){this.connection=new Ys;try{await this.connection.connect(this.config)}catch{throw new Error("\u670D\u52A1\u5668SSH\u8FDE\u63A5\u5931\u8D25")}}}async disconnect(){this.connection&&(this.connection.dispose(),delete this.connection)}async exec(e,r){await this.connect(),r=r||{},r.cwd=r.cwd||"~";let o=await this.connection.execCommand(e,r);if(o.code===0||o.code===1)return o.stdout;throw new Error(o.stderr)}async install(e){let r=!0;try{await this.exec(`dpkg -s ${e}`)}catch{r=!1}if(!r)try{await this.connection.exec("apt-get update"),await this.connection.exec(`apt-get install ${e} -y`)}catch(o){throw new Error(`\u670D\u52A1\u5668\u8F6F\u4EF6\u5B89\u88C5\u5931\u8D25:${o.message}`)}}async uninstall(e){let r=!0;try{await this.exec(`dpkg -s ${e}`)}catch{r=!1}if(r)try{await this.exec(`apt-get --purge remove ${e} -y`)}catch(o){throw new Error(`\u670D\u52A1\u5668\u8F6F\u4EF6\u5378\u8F7D\u5931\u8D25:${o.message}`)}}addTool(e,r){this[e]=r(this)}};import _ from"fs-extra";import Xs from"archiver";import qs from"extract-zip";import ct from"path";import{glob as Qs}from"glob";import ei from"os";import ti from"axios";import Zs from"uuid";var Fe=()=>Zs.v4().replace(/-/g,"");var mt=class{normalize(e){let r=ct.normalize(e);return r=r.replace(/\\/g,"/"),r}async tmp(e){e=e||"sumor-utils";let r=this.normalize(`${ei.tmpdir()}/${e}/${Fe()}`);return await this.ensureDir(r),r}async download(e,r){await this.ensureFile(r);let o=_.createWriteStream(r);return(await ti({source:e,method:"GET",responseType:"stream"})).data.pipe(o),await new Promise((i,n)=>{o.on("finish",i),o.on("error",n)})}async find(e,r){r=r||{};let o=await Qs(e,r);return o=o.map(s=>(s=ct.normalize(s),s=s.replace(/\\/g,"/"),s)),o}async zip(e,r,o){return await new Promise((s,i)=>{let n=_.createWriteStream(r),m=Xs("zip",{zlib:{level:9}});n.on("close",()=>{s()}),m.pipe(n),m.glob("**",{cwd:e,dot:!0,ignore:o||[]}),m.finalize()})}async unzip(e,r){return e=ct.normalize(e),await new Promise((o,s)=>{qs(e,{dir:r},i=>{i?s(i):o()})})}async exists(e){return await new Promise(r=>{_.access(e,o=>{r(!o)})})}async isDirectory(e){return(await this.info(e)).isDirectory()}async info(e){return await new Promise((r,o)=>{_.open(e,"a",(s,i)=>{s&&o(s),_.fstat(i,(n,m)=>{n&&o(n),_.close(i,()=>{r(m)})})})})}async move(e,r){await _.move(e,r)}async remove(e){await _.remove(e)}async ensureFile(e){await _.ensureFile(e)}async ensureDir(e){await _.ensureDir(e)}async copy(e,r,o){await _.copy(e,r,o)}async writeFile(e,r){return await this.ensureFile(e),await new Promise((o,s)=>{_.writeFile(e,r,i=>{i?s(i):o()})})}async appendFile(e,r){return await this.ensureFile(e),await new Promise((o,s)=>{_.appendFile(e,r,i=>{i?s(i):o()})})}async readFile(e,r){if(await this.exists(e))return await new Promise(o=>{_.readFile(e,r,(s,i)=>{if(s)throw s;o(i)})})}async readJson(e){return await this.exists(e)?await _.readJson(e):null}async writeJson(e,r){return await this.ensureFile(e),await _.writeJson(e,r)}},C=new mt;C.exist=C.exists;C.readJSON=C.readJson;C.writeJSON=C.writeJson;C.delete=C.remove;var b=C;var lo=t=>({async tmp(e){e=e||"sumor-utils";let r=b.normalize(`/tmp/${e}/${Fe()}`);return await this.ensureDir(r),r},async ensureDir(e){await t.exec(`mkdir -p ${e}`)},async exists(e){e=b.normalize(e);let r=e.split("/"),o=r.pop();e=r.join("/");let s=!1;try{let i=await t.exec(`ls ${e}`);i=i.split(`
519
- `),s=i.indexOf(o)>=0}catch{}return s},async remove(e){await t.exec(`rm -rf ${e}`)},async delete(e){await t.exec(`rm -rf ${e}`)},async putFolder(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmp.zip`,i=await this.tmp("sumor-utils-ssh"),n=`${i}/tmp.zip`;await b.zip(e,s),await this.putFile(s,n),await this.ensureDir(r),await this.unzip(n,r),await this.delete(i),await b.delete(o)},async getFolder(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmp.zip`,i=await this.tmp("sumor-utils-ssh"),n=`${i}/tmp.zip`;await this.zip(e,n),await this.getFile(n,s),await b.unzip(s,r),await this.delete(i),await b.delete(o)},async putFile(e,r){return await t.connect(),await t.connection.putFile(e,r)},async writeFile(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmpfile`;await b.ensureFile(s),await b.writeFile(s,r),await this.putFile(s,e),await b.delete(o)},async readFile(e,r){let o=await b.tmp("sumor-utils-ssh"),s=`${o}/tmpfile`;await this.getFile(e,s);let i=await b.readFile(s,r);return await b.delete(o),i},async getFile(e,r){return await t.connect(),await t.connection.getFile(r,e)},async zip(e,r){await t.install("zip"),await t.exec(`cd ${e};zip -q -r ${r} ./*`)},async unzip(e,r){await t.install("unzip"),await t.exec(`unzip -o ${e} -d ${r}`)},async info(e){if(await this.exists(e)){let o=(await t.exec(`stat ${e} -c "%X|%Y|%Z"`)).split("|"),s={};return o[0]&&(s.access=parseInt(o[0],10)),o[1]&&(s.modify=parseInt(o[1],10)),o[2]&&(s.change=parseInt(o[2],10)),s}}});var uo=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 fo=t=>({async execCommand(e,r){return await t.install("docker.io"),await t.exec(e,r)},async remove(e){try{await this.execCommand(`docker rm -f ${e}`)}catch(r){if(r.message.indexOf("No such container")<0)throw r}},async delete(e){try{await this.execCommand(`docker rm -f ${e}`)}catch(r){if(r.message.indexOf("No such container")<0)throw r}},async run({mode:e,image:r,name:o,folder:s,port:i}){s=s||[],i=i||[];let n=["docker","run"];n.push("-itd");for(let m in s)n.push(`-v ${s[m].from}:${s[m].to}${s[m].readOnly?":ro":""}`);for(let m in i)n.push(`-p ${i[m].from}:${i[m].to}`);return o&&n.push(`--name ${o}`),r&&n.push(`-d ${r}`),e!==""&&n.push(e||"/bin/bash"),await this.execCommand(n.join(" "))},async exec(e,r,o){o=o||{},r=JSON.stringify(r);let s="";return o.interaction?s="-it":o.background&&(s="-itd"),await this.execCommand(`docker exec ${s} ${e} sh -c ${r}`,{options:{pty:!0}})},async export(e,r){await this.execCommand(`docker export ${e} > ${r}`)},async ip(e){return await this.execCommand(`docker inspect --format='{{.NetworkSettings.Gateway}}' ${e}`)},async import({path:e,name:r,version:o}){let s=`${r}:${o}`;if(!(await this.images()).filter(m=>m.Repository===r&&m.Tag===o)[0])await this.execCommand(`cat ${e} | docker import - ${s}`);else throw new Error(`\u955C\u50CF\u5DF2\u5B58\u5728\uFF0C\u5982\u9700\u5220\u9664\u8BF7\u624B\u5DE5\u6267\u884C\u547D\u4EE4\uFF1Adocker rmi ${s}`)},async images(){return await this._checkInfo("docker images",["Repository","Tag","Size"])},async deleteImage(e,r){await this.execCommand(`docker image rmi -f ${e}:${r}`)},async build(e,r,o){await this.execCommand(`docker build -t ${e}:${r} .`,{cwd:o})},async buildNode(e,r,o){let s=`FROM node:18.15.0
520
-
521
- # \u521B\u5EFA/usr/runtime\u76EE\u5F55
522
- RUN mkdir -p /usr/runtime
523
- RUN mkdir -p /usr/ssl
524
-
525
- # \u521D\u59CB\u5316\u6E90\u4EE3\u7801\u76EE\u5F55
526
- WORKDIR /usr/source
527
- COPY ./source /usr/source
528
- RUN npm install
529
-
530
- CMD ["npm", "start"]`,i=`/tmp/sumor-deployer-version/${e}_${r}`,n=`${i}/source`;if(await t.file.ensureDir(n),await t.file.putFolder(o,n),!await t.file.exists(`${n}/.npmrc`)){let a=`registry=https://registry.npmmirror.com
531
- sass_binary_site=https://registry.npmmirror.com/mirrors/node-sass/
532
- sharp_binary_host=https://registry.npmmirror.com/mirrors/sharp
533
- sharp_libvips_binary_host=https://registry.npmmirror.com/mirrors/sharp-libvips
534
- electron_mirror=https://registry.npmmirror.com/mirrors/electron/
535
- puppeteer_download_host=https://registry.npmmirror.com/mirrors/
536
- phantomjs_cdnurl=https://registry.npmmirror.com/mirrors/phantomjs/
537
- sentrycli_cdnurl=https://registry.npmmirror.com/mirrors/sentry-cli/
538
- sqlite3_binary_site=https://registry.npmmirror.com/mirrors/sqlite3/
539
- python_mirror=https://registry.npmmirror.com/mirrors/python/`;await t.file.writeFile(`${n}/.npmrc`,a)}await t.file.writeFile(`${i}/Dockerfile`,s);let m=await this.execCommand(`docker build -t ${e}:${r} .`,{cwd:i});console.log(m),await t.file.remove(i)},async instances(){let e=await this._checkInfo("docker ps -a",["Names","CreatedAt","Status","Ports","Size"]);for(let r in e){e[r].instanceId=e[r].Names;let o=e[r].CreatedAt.split(" ");o.pop(),e[r].createdTime=new Date(o.join(" "))}return e},async instance(e){return(await this.instances()).filter(o=>o.instanceId===e)[0]},async _checkInfo(e,r){let o=[];for(let n in r)o.push(`{{.${r[n]}}}`);let s=await this.execCommand(`${e} --format "${o.join("|")}"`),i=[];if(s!==""){let n=s.split(`
540
- `);for(let m in n){let a=n[m].split("|"),c={};for(let l=0;l<r.length;l++)c[r[l]]=a[l];i.push(c)}}return i}});var k=async(t,e)=>{let r;try{let o=await t.exec(e);r=parseFloat(o,10)}catch(o){console.log(o)}return r},po=t=>({async system(){let e=await k(t,"cat /proc/uptime | awk '{print $1}'");return e=Date.now()-parseInt(e*1e3,10),{disk:{total:await k(t,"df -m --output=size / | awk 'NR==2{print $1}'"),used:await k(t,"df -m --output=used / | awk 'NR==2{print $1}'"),free:await k(t,"df -m --output=avail / | awk 'NR==2{print $1}'")},memory:{total:await k(t,"free -m | awk 'NR==2{print $2}'"),used:await k(t,"free -m | awk 'NR==2{print $3}'"),free:await k(t,"free -m | awk 'NR==2{print $4}'"),cache:await k(t,"free -m | awk 'NR==2{print $6}'")},cpu:{usage:await k(t,`top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4}'`),cores:await k(t,'cat /proc/cpuinfo | grep "processor" | wc -l')},uptime:e}}});import ri from"path";var go=t=>({async install(e){await t.exec(`npm i -g ${e}`)},async start(e,r){try{await t.install("nodejs"),await t.install("npm")}catch(s){console.log(s)}let o=!0;try{await t.exec("pm2 -v")}catch{o=!1}o||await t.node.install("pm2"),await t.exec("npm i",{cwd:ri.dirname(r)});try{await t.exec(`pm2 start ${r} --name ${e}`)}catch{await t.exec(`pm2 restart ${e}`)}},async stop(e){await t.exec(`pm2 stop ${e}`),await t.exec(`pm2 delete ${e}`)},async logs(e){return await t.exec(`pm2 logs --nostream --lines 1000 ${e}`)}});var S=t=>{let e=new ue(t);return e.addTool("file",lo),e.addTool("port",uo),e.addTool("docker",fo),e.addTool("node",go),e.addTool("monitor",po),e};var wo=async t=>{let e={};for(let r in t.server){let o=S(t.server[r]),s=await o.docker.instances();s=s.filter(i=>i.instanceId.indexOf("sumor_app")===0),e[r]=s.map(i=>i.instanceId),await o.disconnect()}return e};import L from"fs-extra";var ho=async(t,e)=>{await x(t,"clean -df"),await x(t,`checkout ${e}`)};var yo=async({server:t,app:e,env:r,git:o,version:s,domain:i})=>{let n=S(t);if(!await(async()=>!!(await n.docker.images()).find(y=>y.Repository===e&&y.Tag===s.name))()){console.log("\u5F00\u59CB\u6784\u5EFA\u4EE3\u7801");let g=o.url.split("/"),h=`${g[0]}//${o.username}:${o.password}@${g[2]}/${g.slice(3,g.length).join("/")}`,y=`${process.cwd()}/tmp/build/${e}/${s.name}`;if(!await L.exists(y)){console.log(`\u6B63\u5728\u6784\u5EFA\u6E90\u4EE3\u7801\u5230${y}`),await L.ensureDir(`${process.cwd()}/tmp/build`);try{await Le(y,h),await ho(y,s.id),await v("npm i",{cwd:y}),await v("npm run build",{cwd:y}),await L.remove(`${y}/web`),await L.remove(`${y}/node_modules`),await L.remove(`${y}/tmp`)}catch(O){console.log(O)}}console.log("\u4EE3\u7801\u6784\u5EFA\u5B8C\u6210"),console.log(`\u6B63\u5728\u6784\u5EFA\u7248\u672C${s.name}\u955C\u50CF`),await n.docker.buildNode(e,s.name,y),console.log("\u6784\u5EFA\u7248\u672C\u955C\u50CF\u5B8C\u6210")}console.log("\u90E8\u7F72\u5BB9\u5668\u5B9E\u4F8B");let c=`${process.cwd()}/tmp/env/${e}/${r}`;console.log(`\u6B63\u5728\u914D\u7F6E\u73AF\u5883\u76F8\u5173\u4EE3\u7801\u5230${c}`);let l=`${process.cwd()}/assets/${e}/${r}`;await L.exists(l)&&await L.copy(l,c);let u=await n.port.getPort(),f={app:e,env:r,version:s.name,server:t.name,port:u,upTime:Date.now(),versionTime:s.committerDate},w=`/usr/sumor-cloud/env/${e}_${r}`;await n.file.putFolder(c,w),await L.remove(c);let d=`/usr/sumor-cloud/instance/${e}_${r}/${Date.now()}.json`;await n.file.writeFile(d,JSON.stringify(f,null,4));let p=`sumor_app_${e}_${r}_${s.name}_${u}`;return console.log(`\u6B63\u5728\u90E8\u7F72\u5B9E\u4F8B\u5230\u5BB9\u5668${p}`),await n.docker.execCommand(`docker run -itd --restart=on-failure -v ${d}:/usr/source/instance.json:ro -v ${w}:/usr/source/config:ro -v /usr/sumor-cloud/ssl/${i}:/usr/source/ssl:ro -p ${u}:443 --name ${p} -d ${e}:${s.name}`),await n.disconnect(),p};var $o=t=>{let e=t.split("_");e.shift();let r=e.shift(),o=e.shift(),s=e.shift(),i,n,m;e.length>1?(n=e.shift(),i=parseInt(e.shift())):m=e.shift();let a={type:r,app:o,env:s,port:i,version:n,action:m};for(let c in a)a[c]||delete a[c];return a};var je=t=>{let e=typeof t;if(t===null)e="null";else if(e==="object"){let r=Object.prototype.toString.call(t);r==="[object Array]"?e="array":r==="[object RegExp]"&&(e="regexp")}return e};var P=(t,e)=>(je(e)==="array"&&(e=e.join(" ")),`${t} ${e};`);var ee=t=>{let e=[];for(let r in t)e.push(P(r,t[r]));return e};var te=t=>{let e=[];for(let r in t)if(je(t[r])==="array")for(let o in t[r])e.push(t[r][o]);else e.push(t[r]);return e};var T=(t,e)=>(e=te(e),te([`${t} {`,e.map(r=>` ${r}`),"}"]));var xo=()=>T("server",["listen 80 default_server;","server_name _;","return 301 https://$host$request_uri;"]);var _o=(t,e)=>T(`upstream ${t}_stream`,e.map(r=>{let o=["server"];return o.push(r.url),r.down?o.push("down"):r.backup?o.push("backup"):(r.weight&&!isNaN(r.weight)&&o.push(`weight=${r.weight}`),r.try&&!isNaN(r.try)&&(o.push(`max_fails=${r.try}`),r.wait&&!isNaN(r.wait)&&o.push(`fail_timeout=${r.wait}s`))),`${o.join(" ")};`}));var bo=t=>{let e;return t.instances.length>0?e=ee({"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=ee({root:"/etc/nginx/pages",index:"no_instance.html"}),T("server",[ee({listen:`${t.port} ssl`,server_name:t.domain,access_log:`/tmp/${t.name}_access.log`,error_log:`/tmp/${t.name}_error.log`,ssl_certificate:`ssl/${t.domain}/domain.cer`,ssl_certificate_key:`ssl/${t.domain}/domain.key`,ssl_client_certificate:`ssl/${t.domain}/ca.cer`,ssl_session_timeout:"5m",ssl_ciphers:"ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4",ssl_protocols:"TLSv1 TLSv1.1 TLSv1.2",ssl_prefer_server_ciphers:"on"}),T("location /",[e])])};var So=(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(_o(o.name,o.instances)),r.push(bo(o));return te([ee({user:e.user,worker_processes:1}),T("events",["worker_connections 1024;"]),T("http",[P("proxy_connect_timeout","600s"),P("proxy_send_timeout","600s"),P("proxy_read_timeout","600s"),P("server_tokens","off"),P("client_max_body_size","10m"),xo(),te(r)])]).join(`
541
- `)};var oi=`<html>
542
- <head>
543
- <head>
544
- <meta charset="UTF-8" />
545
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
546
- <title>\u5E94\u7528\u5F02\u5E38</title>
547
- </head>
548
- </head>
549
- <body>
550
- <h1>\u5E94\u7528\u6682\u65F6\u65E0\u6CD5\u8BBF\u95EE</h1><h3>\u5B9E\u4F8B\u672A\u4E0A\u7EBF</h3></body>
551
- </html>`,vo=()=>({noInstancePage:oi});var fe=async(t,e,r,o)=>{let s={};for(let i in t.env)for(let n in t.env[i]){let{domain:m,entry:a}=t.env[i][n];s[a]=s[a]||{},s[a][m]=[];let l=(e[i]||{})[n]||{},u;for(let f in l)(l[f]||{}).live&&(u=f);for(let f in r){let w=t.server[f],d=r[f].map(p=>$o(p)).filter(p=>p.app===n&&p.env===i&&p.version===u);for(let p of d)s[a][m].push(`${w.iHost||w.host}:${p.port}`)}}for(let i in s){let n=[443,80],m=[];for(let p in s[i]){let g={name:p.replace(".","_"),port:443,domain:p,instances:s[i][p].map(h=>({url:h}))};m.push(g)}let a=So(m),c=S(t.server[i]),l="/usr/sumor-cloud/site";await c.file.ensureDir(l),await c.file.ensureDir(`${l}/pages`),await c.file.writeFile(`${l}/nginx.conf`,a);let{noInstancePage:u}=vo();await c.file.writeFile(`${l}/pages/no_instance.html`,u);let f="sumor_site";if(o&&await c.docker.delete(f),!(await c.docker.instances()).filter(p=>p.instanceId===f)[0]){let p="/usr/sumor-cloud/ssl";await c.file.ensureDir(p),console.log("\u6B63\u5728\u7AD9\u70B9\u5B9E\u4F8B\u521D\u59CB\u5316"),await c.docker.run({image:"nginx",name:f,folder:[{from:`${l}/nginx.conf`,to:"/etc/nginx/nginx.conf"},{from:`${l}/pages`,to:"/etc/nginx/pages"},{from:p,to:"/etc/nginx/ssl"},{from:"/tmp/sumor-cloud/site",to:"/tmp"},{from:"/tmp/sumor-cloud/site-nginx",to:"/var/log/nginx"}],port:n.map(g=>({from:g,to:g}))})}await c.docker.exec(f,"nginx -s stop"),await c.docker.exec(f,"nginx -c /etc/nginx/nginx.conf"),await c.disconnect()}};var lt=async(t,e)=>{let r=S(t);await r.docker.delete(e),await r.disconnect()};var Eo=async(t,e,r)=>{let o=S(t);await o.file.putFolder(r,`/usr/sumor-cloud/ssl/${e}`),await o.disconnect()};var si=t=>{let e=new Date(t),r=e.getFullYear(),o=`0${e.getMonth()+1}`.slice(-2),s=`0${e.getDate()}`.slice(-2),i=`0${e.getHours()}`.slice(-2),n=`0${e.getMinutes()}`.slice(-2),m=`0${e.getSeconds()}`.slice(-2);return`${r}-${o}-${s} ${i}:${n}:${m}`},Me=t=>t<1024?`${t}MB`:(t/=1024,t<1024?`${t.toFixed(2)}GB`:(t/=1024,t<1024?`${t.toFixed(2)}TB`:(t/=1024,`${t.toFixed(2)}PB`))),ko=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}%
552
- - \u5185\u5B58\uFF1A\u5171${Me(r.memory.total)}\uFF0C\u5269\u4F59${Me(r.memory.free+r.memory.cache)}
553
- - \u786C\u76D8\uFF1A\u5171${Me(r.disk.total)}\uFF0C\u5269\u4F59${Me(r.disk.free)}
554
- - \u542F\u52A8\u65F6\u95F4\uFF1A${si(r.uptime)}`};var Oo=async(t,e)=>{try{let r=Date.now();console.log("\u6B63\u5728\u542F\u52A8\u90E8\u7F72");for(let m in t.server)t.server[m].name=m;console.log(`
555
-
556
- ==================== \u66F4\u65B0\u8BC1\u4E66 ====================
557
- `);for(let m in t.env)for(let a in t.env[m]){let{domain:c,entry:l}=t.env[m][a],u=`${process.cwd()}/assets/ssl/${c}`;u&&t.server[l]&&(console.log(`\u66F4\u65B0${c}\u57DF\u540D\u8BC1\u4E66\u5230${l}\u670D\u52A1\u5668`),await Eo(t.server[l],c,u))}console.log(`
558
-
559
- ==================== \u68C0\u67E5\u5E94\u7528\u7248\u672C ====================
560
- `);let o={};for(let m in t.source){console.log(`\u5E94\u7528${m}\u6B63\u5728\u68C0\u67E5\u5E94\u7528\u7248\u672C`),o[m]=await mo(m,t.source[m]),console.log("\u5E94\u7528\u7248\u672C\u5217\u8868");for(let a in o[m])console.log(`- ${a}${o[m][a].beta?" \u6D4B\u8BD5\u7248":""}`);console.log(`\u5E94\u7528${m}\u68C0\u67E5\u5E94\u7528\u7248\u672C\u5B8C\u6210`)}console.log(`
561
-
562
- ==================== \u83B7\u53D6\u670D\u52A1\u5668\u8FD0\u884C\u72B6\u6001 ====================
563
- `);for(let m in t.server){let a=await ko(t.server[m]);console.log(`\u670D\u52A1\u5668${m}\u8FD0\u884C\u72B6\u6001`),console.log(a)}console.log(`
564
-
565
- ==================== \u83B7\u53D6\u670D\u52A1\u5668\u5B9E\u4F8B\u72B6\u6001 ====================
566
- `);let s=await wo(t);for(let m in s){console.log(`\u670D\u52A1\u5668${m}\u73B0\u5B58\u5B9E\u4F8B\u5217\u8868`);for(let a in s[m])console.log(`- ${s[m][a]}`)}console.log(`
567
-
568
- ==================== \u90E8\u7F72\u5E94\u7528 ====================
569
- `);let i={},n={};await To.remove(`${process.cwd()}/tmp/env`);for(let m in t.env){let a=t.env[m];for(let c in a){let{domain:l}=a[c],f=(e[m]||{})[c]||{},w;for(let p in f)(f[p]||{}).live&&(w=p);let d=Object.keys(f);for(let p in t.server){let g=s[p].filter(h=>{let O=h.split("_")[4];return h.indexOf(`sumor_app_${c}_${m}`)===0&&d.indexOf(O)<0});if(g.length>0){console.log(`\u6B63\u5728\u6E05\u9664${m}\u73AF\u5883\u5E94\u7528${c}\u5728\u670D\u52A1\u5668${p}\u4E2D\u7684\u8FC7\u671F\u5B9E\u4F8B`),s[p]=s[p].filter(h=>g.indexOf(h)<0),await fe(t,e,s);for(let h of g)console.log(`\u6E05\u9664\u5B9E\u4F8B${h}`),await lt(t.server[p],h)}}console.log(`\u6B63\u5728\u90E8\u7F72${m}\u73AF\u5883\u5E94\u7528${c}\uFF0C\u4E0A\u7EBF\u7248\u672C\uFF1A${w||"\u65E0"}`);for(let p in f){let g=f[p]||{};for(let h in g.instance){let y=g.instance[h];console.log(`\u8BA1\u5212\u90E8\u7F72${p}\u7248\u672C${y}\u4E2A\u5B9E\u4F8B\u5230${h}\u670D\u52A1\u5668`);let O=s[h].filter(I=>I.indexOf(`sumor_app_${c}_${m}_${p}`)===0),F=O.length;if(F<y){let I=y-F;console.log(`\u5F53\u524D\u5B9E\u4F8B\u4E2A\u6570\uFF1A${F}\uFF0C\u9700\u8981\u6269\u5BB9${I}\u4E2A`);for(let z=0;z<I;z++){console.log(`\u6B63\u5728\u6269\u5BB9\u7B2C${z+1}\u4E2A`);let D=o[c][p];if(D.beta&&!i[`${c}|${p}`]){let de=`${process.cwd()}/tmp/build/${c}/${D.name}`;await To.remove(de),i[`${c}|${p}`]=!0}if(D.beta&&!n[`${c}|${p}|${h}`]){let de=S(t.server[h]);await de.docker.deleteImage(c,p),await de.disconnect(),n[`${c}|${p}|${h}`]=!0}let Mo=await yo({server:t.server[h],app:c,env:m,git:t.source[c],version:D,domain:l});s[h].unshift(Mo),await fe(t,e,s)}console.log(`\u6269\u5BB9${I}\u4E2A\u5B8C\u6210`)}else if(F>y){let I=F-y;console.log(`\u5F53\u524D\u5B9E\u4F8B\u4E2A\u6570\uFF1A${F}\uFF0C\u9700\u8981\u7F29\u51CF${I}\u4E2A`);let z=O.slice(y,F);s[h]=s[h].filter(D=>z.indexOf(D)<0),await fe(t,e,s);for(let D of z)await lt(t.server[h],D);console.log(`\u7F29\u51CF${I}\u4E2A\u5B8C\u6210`)}else console.log("\u5B9E\u4F8B\u6570\u91CF\u5DF2\u7B26\u5408\u8BA1\u5212\uFF0C\u65E0\u9700\u4FEE\u6539")}}console.log(`\u90E8\u7F72${m}\u73AF\u5883\u5E94\u7528${c}\u5B8C\u6210`)}}console.log(`
570
-
571
- ==================== \u5B9E\u4F8B\u60C5\u51B5 ====================
572
- `),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 No=async t=>{t=t||{},t.root=t.root||process.cwd();let e=await A(t.root,"scope");t.type&&await at(t.root,"scope",t.type);let r=await A(t.root,"scale");t.type&&await at(t.root,"scale",t.type),await Oo(e,r)};import Co from"fs-extra";import ii from"inquirer";var Ue=async({value:t,message:e,choices:r})=>t!==void 0?t:(await ii.prompt({name:"value",type:"list",message:e,choices:r})).value;var Io=async(t,e,r)=>{r=r||{},r.root=r.root||process.cwd();let o=await A(r.root,"scope"),s=await A(r.root,"scale");console.log(`\u6B63\u5728\u6253\u5370${t}\u5E94\u7528${e}\u73AF\u5883\u7684\u65E5\u5FD7`);try{e=await Ue({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u73AF\u5883",choices:Object.keys(s).map(c=>({name:c,value:c}))}),t=await Ue({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u5E94\u7528",choices:Object.keys(s[e]).map(c=>({name:c,value:c}))});let i=s[e][t],n=[];for(let c in i){let l=i[c].live;n.push({name:`${c} ${l?" (live)":""}`,value:c})}let m=await Ue({message:"\u8BF7\u9009\u62E9\u8981\u67E5\u770B\u7684\u7248\u672C",choices:n}),a=i[m].instance;for(let c in a){console.log(`\u6B63\u5728\u6253\u5370${c}\u670D\u52A1\u5668\u4E0A\u7684\u65E5\u5FD7`);let l=S(o.server[c]);try{let u=await l.docker.instances();u=u.filter(f=>f.instanceId.indexOf(`sumor_app_${t}_${e}_${m}`)===0),u=u.map(f=>f.instanceId);for(let f of u){console.log(`\u6B63\u5728\u6253\u5370\u5B9E\u4F8B${f}\u7684\u65E5\u5FD7`),await l.file.ensureDir("/tmp/sumor-logs");let w=`docker cp ${f}:/usr/source/tmp/main.log /tmp/sumor-logs/${f}.log`;await l.exec(w);let d=await l.exec(`cat /tmp/sumor-logs/${f}.log`),p=`${r.root}/tmp/logs/${t}/${e}/${f}.log`;await Co.ensureFile(p),await Co.writeFile(p,d);let g=await l.exec(`docker logs ${f}`);console.log(g)}}catch(u){console.log(u)}await l.disconnect()}}catch{console.error(`\u73AF\u5883${e}\u4E2D\u4E0D\u5B58\u5728\u5E94\u7528${t}`)}};import ze from"fs-extra";import{execSync as mi}from"child_process";import ni from"axios";var Do=async({registry:t,username:e,password:r})=>{if(!e||!r)throw new Error("\u83B7\u53D6\u6388\u6743\u5931\u8D25\uFF0CNPM\u767B\u5F55\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A");let o=`${t}/-/user/org.couchdb.user:${e}`;try{return(await ni.put(o,{name:e,password:r})).data.token}catch{throw new Error("\u83B7\u53D6\u6388\u6743\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5NPM\u767B\u9646\u4FE1\u606F")}};var Ro=({registry:t,auth:e,token:r})=>{let o="";return o+=`registry=${t}
573
- `,e&&(o+=`${t.replace("http:","")}/:_auth=${e}
574
- `,o+=`${t.replace("http:","")}/:email=registry@sumor.com
575
- `),r&&(o+=`${t.replace("http:","")}/:_authToken="${r}"
576
- `),o};import Ao from"fs-extra";import ci from"path";import{exec as ai}from"child_process";var pe=(t,e,r)=>new Promise((o,s)=>{let i=ai(t,e),n="",m="",a=c=>(c=c.toString().replace(/\r\n/g,`
577
- `).replace(/\r/g,`
578
- `),c);i.stdout.on("data",async c=>{c=a(c),n+=c,r&&r(c)}),i.stderr.on("data",async c=>{c=a(c),n+=c,m+=c,r&&r(c)}),i.on("close",async c=>{c!==0?s(m):o(n)})});var Lo=async({registry:t,target:e,npmrc:r,force:o,tag:s})=>{s=s||"latest";let i=ci.normalize(`${e}/.npmrc`).replace(/\\/g,"/");await Ao.writeFile(i,r);let n=await Ao.readJson(`${e}/package.json`),m=`${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${m}\u5DF2\u53D1\u5E03 ${e}`)}catch(a){let c;if(typeof a=="object"&&(c=a.message),typeof a=="string"&&(c=a),c&&c.indexOf("EPUBLISHCONFLICT")>=0)if(o){console.log(`\u4ED3\u5E93\u5DF2\u5B58\u5728\u8BE5\u7248\u672C${m}\uFF0C\u5C06\u5220\u9664\u91CD\u65B0\u53D1\u5E03`);let l=!1;try{await pe(`npm unpublish --registry=${t} --userconfig=${i} ${m}`,{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${m}\u5DF2\u53D1\u5E03 ${e}`)}else console.log("\u5DF2\u5B58\u5728\u8BE5\u7248\u672C");else console.log(a.message),console.log(a),console.log("\u53D1\u5E03\u5931\u8D25")}try{await pe(`npm dist-tag add ${m} ${s} --registry=${t} --userconfig=${i}`,{cwd:e})}catch(a){console.log(a.message),console.log(a),console.log("\u6807\u7B7E\u66F4\u65B0\u5931\u8D25")}};var Po=async({path:t,name:e,version:r,force:o,tag:s},i)=>{let{username:n,password:m,registry:a}=i;await ze.exists(`${t}/package.json`)||await ze.writeJson(`${t}/package.json`,{});let c=await ze.readJson(`${t}/package.json`);if(c.version=r||c.version,c.name=e||c.name,console.log(`\u6B63\u5728\u66F4\u65B0\u5305\u4FE1\u606F${r}`),await ze.writeJson(`${t}/package.json`,c),a){console.log("\u6B63\u5728\u83B7\u53D6NPM\u4ED3\u5E93\u6388\u6743");let l=Buffer.from(`${n}:${m}`).toString("base64"),u=await Do({registry:a,username:n,password:m}),f=Ro({registry:a,auth:l,token:u});console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}`),await Lo({registry:a,target:t,npmrc:f,force:o,tag:s})}else{let l="https://registry.npmjs.org";console.log(`\u6B63\u5728\u53D1\u5E03\u7248\u672C${r}\u5230${l}`),mi(`npm publish --tag ${s||"latest"} --registry ${l} --access public`,{cwd:t,stdio:"inherit"})}};var Fo=async({name:t,version:e,beta:r,registry:o,username:s,password:i})=>{let n={username:s,password:i,registry:o},m=`${process.cwd()}/output/production`;await Po({path:m,name:t,version:e,tag:r?"beta":void 0,force:!0},n)};var jo=async()=>{let t=new li,r=(await ui.readJson(`${he}/package.json`)).version||"0.0.0";Xr(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 Fo({version:o,...s})}),t.command("dev").description("\u5F00\u53D1").action(async()=>{await N({mode:"dev"})}),t.command("build").description("\u6253\u5305\u4F9D\u8D56\u5E93").option("-d, --debug","\u8C03\u8BD5\u6A21\u5F0F").option("-t, --type [name]","\u6784\u5EFA\u73AF\u5883\uFF0Capp\u3001vue\u3001node").action(async o=>{await so(o)}),t.command("setup").description("\u5B89\u88C5").action(async()=>{await N({mode:"setup"})}),t.command("preview").description("\u8BD5\u8FD0\u884C").action(async()=>{await N({mode:"preview"})}),t.command("run").description("\u8FD0\u884C").action(async()=>{await N({mode:"run"})}),t.command("deploy").description("\u90E8\u7F72").option("-t, --type [type]","\u6307\u5B9A\u914D\u7F6E\u6587\u4EF6\u7C7B\u578B\uFF0C\u5982 yaml json").action(async o=>{await No(o)}),t.command("log [app] [env]").description("\u67E5\u770B\u65E5\u5FD7").action(async(o,s)=>{await Io(o,s)}),t.parse(process.argv)};var hd={app:N,pack:me,cli:jo};export{hd as default};