@giteeteam/apps-cli 0.8.17 → 0.8.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var oo=Object.create;var K=Object.defineProperty;var ro=Object.getOwnPropertyDescriptor;var no=Object.getOwnPropertyNames;var io=Object.getPrototypeOf,so=Object.prototype.hasOwnProperty;var ao=(e,t)=>()=>(e&&(t=e(e=0)),t);var po=(e,t)=>{for(var o in t)K(e,o,{get:t[o],enumerable:!0})},co=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of no(t))!so.call(e,n)&&n!==o&&K(e,n,{get:()=>t[n],enumerable:!(r=ro(t,n))||r.enumerable});return e};var s=(e,t,o)=>(o=e!=null?oo(io(e)):{},co(t||!e||!e.__esModule?K(o,"default",{value:e,enumerable:!0}):o,e));var je={};po(je,{default:()=>Eo});function Eo({environment:e,appKey:t,distOutputPath:o="dist"}){let r=e==="production",n=e==="development",i=f=>f?{filename:"js/[name].[chunkhash].min.js",path:$.default.resolve(o),publicPath:"./",library:t,libraryTarget:"umd"}:{filename:"main.js",path:$.default.resolve(o),publicPath:"/",library:t,libraryTarget:"umd"},p=({resourcePath:f},A,g)=>g===t||/\.global\.(css|less)$/.test(f)||/node_modules/.test(f)?g:`${g}__${(0,Ne.default)(f+g,{algorithm:"md5"}).slice(0,8)}`,a={loader:"@ecomfe/class-names-loader",options:{classNamesModule:require.resolve("classnames")}},c=r?Q.default.loader:"style-loader",m={loader:"postcss-loader",options:{postcssOptions:{plugins:[Le.default]}}},l={loader:"css-loader",options:{modules:{getLocalIdent:p},importLoaders:1}},u={loader:"less-loader",options:{lessOptions:{javascriptEnabled:!0,modifyVars:{...Ue,...ho,"ant-prefix":t}}}};return{mode:e,entry:"./src/index.tsx",output:i(r),devtool:r?!1:"source-map",resolve:{extensions:[".js",".ts",".jsx",".tsx",".css",".less"]},optimization:{minimize:r,minimizer:[new Ie.default,"..."]},plugins:[Po&&new go,new J.default.DefinePlugin({"process.env":JSON.stringify(process.env),"process.env.appKey":JSON.stringify(t)}),new Me.default({template:$.default.resolve("public/index.html"),filename:"index.html",inject:!0,appKey:t}),r&&new Q.default({filename:"[name].[contenthash].css",chunkFilename:"[name].[contenthash].chunk.css"}),n&&new J.default.HotModuleReplacementPlugin,n&&new De.default({overlay:!1}),r&&new $e.CleanWebpackPlugin].filter(Boolean),module:{rules:[{oneOf:[{test:/\.(js|mjs|jsx|ts|tsx)$/,exclude:/node_modules/,loader:"swc-loader",options:{sourceMaps:xo,jsc:{parser:{syntax:"typescript",tsx:!0},transform:{react:{runtime:"automatic",development:!r,refresh:!r}}},env:{targets:"chrome >= 72",mode:"usage",coreJs:"3.38"}}},{test:/\.css$/,use:[a,c,"css-loader",m]},{test:/\.less$/,use:[a,c,l,m,u]},{test:/\.(png|jpg|gif)$/i,use:[{loader:"url-loader",options:{name:"[name]_[hash].[ext]",limit:100*24}}]},{test:/\.svg$/i,use:["@svgr/webpack"]}]}]},externals:[{...bo()}]}}var $,Te,Ae,De,_e,Le,$e,Ie,Ne,Me,Q,J,go,yo,wo,Ue,ho,vo,bo,xo,Po,Fe=ao(()=>{"use strict";$=s(require("path")),Te=require("@ant-design/compatible"),Ae=require("@giteeteam/apps-team-theme"),De=s(require("@pmmmwh/react-refresh-webpack-plugin")),_e=require("antd"),Le=s(require("autoprefixer")),$e=require("clean-webpack-plugin"),Ie=s(require("css-minimizer-webpack-plugin")),Ne=s(require("hasha")),Me=s(require("html-webpack-plugin")),Q=s(require("mini-css-extract-plugin")),J=s(require("webpack")),go=require("webpack-bundle-analyzer").BundleAnalyzerPlugin,{defaultAlgorithm:yo,defaultSeed:wo}=_e.theme,Ue=yo({...wo,...Ae.themeConfig.token}),ho=(0,Te.convertLegacyToken)({...Ue}),vo=()=>e=>["window modules",e],bo=()=>{let e=vo();return{"react-dom/client":e("reactDOMClient"),"react-dom":e("reactDOM"),react:e("react")}},xo=process.env.GENERATE_SOURCEMAP==="true",Po=process.env.ANALYZER_PACKAGE==="true"});var An=require("dotenv/config"),le=s(require("chalk")),Yt=require("commander");var k="0.8.17";var Z=s(require("path"));var _=["manifest.yml","locales"],we=Buffer.from(process.env.ONE_AUTH_IV||"ABCDEFGHIJKLM_iv","utf-8"),he=Buffer.from(process.env.ONE_AUTH_SECRET_KEY||"ABCDEFGHIJKL_key","utf-8"),ve=process.env.ONE_AUTH_ALGORITHM||"aes-128-cbc";var U=s(require("chalk")),Xe=s(require("fs-extra"));var Pe=s(require("fs")),W=s(require("path")),Ee=s(require("@rollup/plugin-commonjs")),ke=require("rollup");var O=require("fs"),y=require("path"),be=require("esbuild"),lo={treeShaking:!0,format:"esm",loader:"tsx"};var uo=({source:e,dirPath:t,mode:o})=>{let r="";if(o==="development")try{return r=require.resolve(e+"/src/index.ts",{paths:[t]}),r}catch{}try{return r=require.resolve(e,{paths:[t]}),r}catch{}return r};function H({mode:e,...t}){return t={...lo,...t},{name:"esbuild",resolveId(o,r,n){if(!r)return o;let i=(0,y.dirname)(r),p;if((0,O.existsSync)(p=(0,y.resolve)(i,o,"index.ts")))return p;if((0,O.existsSync)(p=(0,y.resolve)(i,o,"index.tsx")))return p;if((0,O.existsSync)(p=(0,y.resolve)(i,o+".ts")))return p;if((0,O.existsSync)(p=(0,y.resolve)(i,o+".tsx")))return p;{let a=uo({source:o,dirPath:i,mode:e});if((0,O.existsSync)(a))return a;throw console.error({source:o,importer:r,options:n}),p=(0,y.relative)(".",(0,y.resolve)(r,o)),new Error(`ENOENT: ${p.replace(/\\/g,"/")}`)}},async transform(o,r){t.sourcefile=r,t.loader=r.endsWith(".json")?"json":t.loader;let{code:n,map:i}=await(0,be.transform)(o,t);return i?{code:n,map:i}:n}}}function fo(e,t,o="development"){let r=[(0,Ee.default)()];r.push(H({mode:o,sourcemap:o==="development",minify:o!=="development",target:"es2018",jsx:"transform",jsxFactory:"AppsUI.createElement",jsxFragment:"AppsUI.Fragment"}));let n={input:e,plugins:r},i={file:t,format:"es",sourcemap:o==="development"};return{inputOptions:n,outputOptions:i}}async function L(e){let{fileName:t,inputDir:o,outputDir:r,mode:n="development"}=e,i=W.default.join(o,`${t}.ts`);try{await Pe.default.promises.access(i)}catch{console.error(`${i} is not exist`);return}let p=W.default.join(r,`${t}.js`),{inputOptions:a,outputOptions:c}=fo(i,p,n);await(await(0,ke.rollup)(a)).write(c)}var Oe=s(require("ora")),d=async(e,t)=>{var r,n;let o=(0,Oe.default)(e.start).start();try{let i=await t();return o.succeed(e.succeed),i}catch(i){throw o.fail(`${e.error}: ${((n=(r=i==null?void 0:i.response)==null?void 0:r.data)==null?void 0:n.message)||i.message}`),i}};var Ce=s(require("path")),Se=require("@giteeteam/apps-manifest"),Re=s(require("fs-extra")),v=async()=>{let e=Ce.default.resolve("manifest.yml"),t=await Re.default.readFile(e);return new Se.Manifest(t.toString())};var Ge=s(require("path")),Be=s(require("webpack")),Ve=s(require("webpack-merge"));var I=async()=>(await Promise.resolve().then(()=>(Fe(),je))).default;var qe=async({appKey:e,webpackConfig:t})=>{let o=await I();return new Promise((r,n)=>{let i=o({environment:"production",appKey:e});if(t){let a=require(Ge.default.resolve(t));i=(0,Ve.default)(i,a)}(0,Be.default)(i).run((a,c)=>{if(a)return console.error(a),n(a);if(console.info(c==null?void 0:c.toString()),c!=null&&c.hasErrors())return n(new Error("build-ui-error"));r()})})};var ze=s(require("path")),Ke=s(require("archiver")),Y=s(require("fs-extra")),He=async(e,t)=>{let o=ze.default.resolve(t);return await Y.default.remove(o),new Promise((r,n)=>{let i=Y.default.createWriteStream(o),p=(0,Ke.default)("zip",{zlib:{level:9}});i.on("close",function(){r()}),p.on("warning",function(a){console.info(a),a.code==="ENOENT"||n(a)}),p.on("error",function(a){console.info(a),n(a)}),p.pipe(i),p.directory(e,!1),p.finalize()})};var We=async e=>{let{manifest:t,mode:o,outputDir:r,inputDir:n}=e,p=t.getFunctionFiles().map(async a=>{await L({inputDir:n,fileName:a,outputDir:r,mode:o})});await Promise.all(p)};var M=s(require("path")),Je=s(require("fs-extra"));var X=s(require("path")),Qe=s(require("fs-extra")),N=async(e,t)=>{for(let o of t)try{let r=X.default.resolve(o),n=X.default.join(e,o);await Qe.default.copy(r,n)}catch(r){if(r.code==="ENOENT"&&o==="locales")continue;throw r}};var Ye=async({outputDir:e,manifest:t,filesToCopy:o})=>{let{resources:r}=t;if(r)for(let{key:n,path:i}of r){let p=M.default.resolve(M.default.join("./",i)),a=M.default.join(e,n);await Je.default.copy(p,a)}await N(e,o)};var Ze=async({outputDir:e,inputDir:t,prod:o,filesToCopy:r,zip:n,ui:i,webpackConfig:p})=>{let a=await v(),{version:c,key:m}=a.app;if(!m){console.error("manifest app key is required");return}if(!c){console.error("manifest app version is required");return}console.info(`App key: ${U.default.bold.green(m)}`),console.info(`App version: ${U.default.bold.green(c)}
3
- `);let{pass:l,errors:u}=a.validate();if(!l){if(u!=null&&u.length){let{message:h,path:f}=u[0];console.error(`Manifest valid error: Path '${f}', ${h}`)}else console.error("Manifest valid error");return}if(await Xe.default.emptyDir(e),i&&await d({start:"start build ui",error:"build ui failed",succeed:"build ui success"},()=>qe({appKey:m,webpackConfig:p})),await d({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>We({outputDir:e,inputDir:t,manifest:a,mode:o?"production":"development"})),await d({start:"start package",error:"package failed",succeed:"package success"},()=>Ye({outputDir:e,manifest:a,filesToCopy:r})),n){let h=`${m}_${c}.zip`;await d({start:"start archive",error:"archive failed",succeed:"archive success"},()=>He(e,h)),console.info(`
4
- The output file of the build is ${U.default.bold.green(h)}`)}};var et=async e=>{let{input:t="functions",output:o="package",prod:r,dev:n,copy:i=[],zip:p,ui:a,webpack:c}=e;await Ze({outputDir:Z.default.resolve(o),inputDir:Z.default.resolve(t),prod:r??!n,filesToCopy:[..._,...i],zip:p,ui:!!a,webpackConfig:c}).catch(()=>{})};var lt=s(require("fs")),ut=s(require("chalk"));var tt=s(require("path")),ot=s(require("lowdb")),rt=s(require("lowdb/adapters/FileSync"));var ee,te=()=>{if(!ee){let e=tt.default.join(__dirname,"user.json"),t=new rt.default(e);ee=(0,ot.default)(t)}return ee},nt=()=>{let e=te(),t=e.get("version").value();(!t||t!==k)&&e.defaults({version:k,user:{}}).write()},oe=e=>{nt(),te().set("user",e).write()},C=()=>(nt(),te().get("user").value());var st=s(require("fs")),at=s(require("path")),pt=s(require("form-data"));var it=s(require("axios"));var P=async({url:e,method:t,data:o,headers:r})=>{let{domain:n,cookie:i}=C();return(await(0,it.default)({method:t,baseURL:n,url:e,data:o,headers:{...r,cookie:i}})).data};var ct=async(e,t)=>{let o=new pt.default;o.append("environmentKey",t),o.append("package",st.default.createReadStream(at.default.resolve(e))),await P({method:"POST",url:"/apps/api/v1/apps/deploy",data:o,headers:{...o.getHeaders()}})};var mt=s(require("chalk")),ko=mt.default.bold.red,w={error:e=>{console.info(ko(e))}};var ft=(r=>(r.DEVELOPMENT="development",r.STAGING="staging",r.PRODUCTION="production",r))(ft||{}),dt=async(e,t)=>{let{domain:o}=C(),{environment:r="development"}=t;if(!Object.values(ft).includes(r)){w.error("Only support development, staging, production environment.");return}if(!o){w.error("Please login in first!");return}if(!lt.default.existsSync(e)){w.error(`File:${e} is not exist`);return}console.info(`Deploying to ${ut.default.bold.green(o)}`),await d({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>ct(e,r)).catch(()=>{})};var S=s(require("path")),R=s(require("fs-extra")),se=s(require("inquirer"));var gt=s(require("readline")),yt=require("chalk"),wt=s(require("execa")),Oo=e=>{if(!yt.supportsColor){e.write("\r");return}gt.default.cursorTo(e,0)},Co=(e,t)=>{let o=Math.min(Math.max(e/t,0),1),r=` ${e}/${t}`,n=Math.max(0,process.stderr.columns-r.length-3),i=Math.min(t,n),p=Math.round(i*o),a="#".repeat(p),c="-".repeat(i-p);Oo(process.stderr),process.stderr.write(`[${a}${c}]${r}`)},So=(e,t,o,r)=>new Promise((n,i)=>{var a;let p=(0,wt.default)(e,t,{cwd:o,stdio:["inherit","inherit","pipe"],env:r});(a=p.stderr)==null||a.on("data",c=>{let m=c.toString();if(/warning/.test(m))return;let l=m.match(/\[.*] (\d+)\/(\d+)/);if(l){Co(parseFloat(l[1]),parseFloat(l[2]));return}process.stderr.write(c)}),p.on("close",c=>{if(c!==0){i(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),ht={executeCommand:So};var re=s(require("fs-extra")),ne=s(require("simple-git")),vt=async e=>{await(0,ne.default)(e).init()},bt=async(e,t)=>{await re.default.pathExists(t)||await re.default.mkdir(t),await(0,ne.default)(t).clone(e,t)};var j=s(require("fs-extra")),xt="https://github.com/moriahq/apps-template.git",ie=(o=>(o.micro="micro",o.uikit="uikit",o))(ie||{}),Pt=async(e,t)=>{if(!await j.default.pathExists(e))return;let o=await j.default.readFile(e,{encoding:"utf-8"});await j.default.writeFile(e,o.replace(/{{(\w+)}}/g,(r,n)=>typeof t[n]=="string"?t[n]:r))};var To=async()=>(await se.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:o=>!!o}))["App Name"],Ao=async()=>(await se.default.createPromptModule()({type:"input",name:"App key",message:"Please enter a valid app key",validate:o=>/^[a-z][a-z0-9_]*$/.test(o)?!0:(console.info(""),console.info("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"],Do=async(e,t)=>{await d({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>bt(e,t))},_o=async e=>{await d({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>ht.executeCommand("yarn",["install"],e))},Et=async e=>{let{cwd:t}=e,o="micro",r=await To(),n=await Ao(),i=S.default.join(t,n);if(await R.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await Do(xt,i),await R.default.copy(S.default.join(i,o),i),await Promise.all(Object.values(ie).map(a=>R.default.remove(S.default.join(i,a)))),await R.default.remove(S.default.join(i,"./.git"));let p=["./manifest.yml","./package.json","./webpack.config.js","./public/index.html","./src/App.tsx","./src/index.tsx","./static/App.tsx","./static/index.tsx"];await Promise.all(p.map(a=>Pt(S.default.join(i,a),{appName:r,appKey:n}))),await _o(i),await vt(i),console.info("Project init success!"),console.info("Project path:"+i)};var kt=async()=>{let e=process.cwd();await Et({cwd:e})};var F=s(require("inquirer"));var ae=s(require("axios")),Ot=async({baseUrl:e,username:t,password:o})=>{var r;try{return{cookie:(r=(await(0,ae.default)({method:"POST",url:`${e}/api/gateway/login`,data:{username:t,password:o}})).headers)==null?void 0:r["set-cookie"]}}catch(n){return console.error("Login error:",n==null?void 0:n.message),{cookie:""}}},Ct=async e=>{try{return await(0,ae.default)({method:"GET",url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var St=e=>{try{return new URL(e).origin}catch{return e}};var Rt=s(require("crypto"));var Tt=e=>{try{let t=Rt.default.createCipheriv(ve,he,we),o=t.update(e,"utf8","base64");return o+=t.final("base64"),o.toString()}catch(t){return console.error(`Encryption error: ${t}`),null}};var Lo=async()=>(await F.default.createPromptModule()({type:"input",name:"Domain",message:"Please enter the domain address",validate:o=>{try{return new URL(o),!0}catch{return"Please enter a valid domain name"}}})).Domain,$o=async()=>(await F.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:o=>!!o})).Username,Io=async()=>(await F.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:o=>!!o})).Password,At=async({domain:e,username:t,password:o})=>{if(e||(e=await Lo()),e=St(e),await Ct(e)){t||(t=await $o()),o||(o=await Io());let{cookie:n}=await Ot({baseUrl:e,username:t,password:Tt(o)||o});n?(oe({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else oe({domain:e}),console.info("Login success!")};var Dt=async e=>{await At(e)};var me=s(require("path"));var zt=s(require("path")),V=s(require("chalk")),Kt=s(require("debug")),ce=s(require("fs-extra"));var _t=async()=>{var t;return((t=(await P({method:"GET",url:"/apps/api/v1/config"}).catch(o=>{var r,n;console.info(`getRuntimeConfig error ${((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)}`)})).data)==null?void 0:t.runtime)||{}};var G=require("child_process"),T=class{constructor(t,o){this.imageName=t,this.containerName=o}async downloadImage(){console.info(`Downloading image(${this.imageName}) ...`),await this.execPromise(`docker pull ${this.imageName}`),console.info(`Download image(${this.imageName}) success!`)}async runContainer({port:t,env:o,volume:r=[]}){await this.removeContainer();let n=Object.keys(o).filter(a=>o[a]!==void 0).map(a=>`-e ${a}=${o[a]}`).join(" "),i=r==null?void 0:r.map(a=>`-v ${a}`).join(" "),p=`docker run -d -p ${t}:${t} ${n} ${i} --name ${this.containerName} ${this.imageName}`;await this.execPromise(p)}async removeContainer(){await this.execPromise(`docker rm -f ${this.containerName}`).catch(()=>{})}logs(){let t=(0,G.spawn)("docker",["logs","-f",this.containerName]);t.stdout.on("data",o=>{console.info(`${o}`)}),t.stderr.on("data",o=>{console.info(`${o}`)})}execPromise(t){return new Promise((o,r)=>{(0,G.exec)(t,(n,i,p)=>{if(n)return r(n);o({stdout:i,stderr:p})})})}};var Lt=s(require("localtunnel"));var $t=async({appKey:e,runtimeHost:t,resources:o,resourcePort:r})=>{o!=null&&o.length&&o.forEach(n=>{n.path=`http://127.0.0.1:${r}`}),await P({method:"POST",url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:o,runtimeHost:t}}).catch(n=>{var i,p;console.info(`addTunnel error ${((p=(i=n==null?void 0:n.response)==null?void 0:i.data)==null?void 0:p.message)||(n==null?void 0:n.message)}`)})},It=async e=>{await P({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Nt=async e=>{var t,o;try{return(await(0,Lt.default)({port:e,host:((t=process.env)==null?void 0:t.TUNNEL_HOST)==="OFFICIAL"?void 0:((o=process.env)==null?void 0:o.TUNNEL_HOST)||"http://tunnel.gitee.work:1777"})).url}catch(r){return console.info("runTunnel error",r==null?void 0:r.message),""}};var pe=s(require("path")),Mt=s(require("cors")),Ut=s(require("express")),jt=s(require("webpack")),Ft=s(require("webpack-dev-middleware")),Gt=require("webpack-merge");var B=async({appKey:e,webpackConfig:t})=>{let r=(await I())({environment:"development",appKey:e});if(t){let c=require(pe.default.resolve(t));r=(0,Gt.merge)(r,c)}let n=(0,jt.default)(r),i=(0,Ut.default)(),p=Number(process.env.UI_PORT)||8e3,a=(0,Ft.default)(n);i.use((0,Mt.default)()),i.use(a),i.get("*",(c,m)=>{var l,u;(u=n.outputFileSystem)==null||u.readFile(pe.default.join(((l=r.output)==null?void 0:l.path)||"","index.html"),(h,f)=>{if(h||!f){m.sendStatus(404);return}m.send(f.toString())})}),i.listen(p,"0.0.0.0",()=>{console.info(`The React app is listening on port ${p}!
5
- `)})};var Vt=s(require("chokidar"));var Bt=(e,t,o)=>{for(let r of e)L({inputDir:t,outputDir:o,fileName:r,mode:"development"})},qt=async e=>{let{inputDir:t,outputDir:o}=e,n=(await v()).getFunctionFiles();Bt(n,t,o);let i,p=Vt.default.watch(t);console.info(`watch: ${t}`),p.on("change",a=>{clearTimeout(i),i=setTimeout(()=>{console.info(`${a} has change`),Bt(n,t,o)},1e3)})};var No=(0,Kt.default)("cli:tunnel"),Mo=async()=>{let e=await _t(),t=process.env.RUNTIME_IMAGE||e.image||"docker-hub.gitee.work/gitee-prod/proxima-apps-runtime-server:4.4.0-alpha-86",o=Number(process.env.CONTAINER_PORT)||8455,r=process.env.CONTAINER_NAME||"cli-dev-apps-runtime-server",n=process.env.PULL_IMAGE!=="false",i={PORT:o,APPS_DIR:"/usr/src/app/apps",LRU_TTL:1,FS_MODE:"local",DEBUG:process.env.DEBUG||"runtime*",LOG_LEVEL:process.env.LOG_LEVEL,APPS_DEFAULT_LOCALE:process.env.APPS_DEFAULT_LOCALE||"zh-CN",PARSE_PUBLIC_SERVER_URL:process.env.PARSE_PUBLIC_SERVER_URL||e.parsePublicServerUrl,PARSE_SERVER_MASTER_KEY:process.env.PARSE_SERVER_MASTER_KEY||e.parseServerMasterKey,PROXIMA_CORE_URL:process.env.PROXIMA_CORE_URL||e.proximaCoreUrl,APPS_SERVER_URL:process.env.APPS_SERVER_URL||e.appsServerUrl,APPS_PARSE_SERVER_URL:process.env.APPS_PARSE_SERVER_URL||e.appsParseServerUrl,PGSQL_CLIENT_HOST:process.env.PGSQL_CLIENT_HOST,PGSQL_CLIENT_PORT:process.env.PGSQL_CLIENT_PORT,PGSQL_CLIENT_USER:process.env.PGSQL_CLIENT_USER,PGSQL_CLIENT_PASSWORD:process.env.PGSQL_CLIENT_PASSWORD,APPS_RUNTIME_IOREDIS_OPTIONS:process.env.APPS_RUNTIME_IOREDIS_OPTIONS?`'${process.env.APPS_RUNTIME_IOREDIS_OPTIONS}'`:void 0};return{runtimeImage:t,containerPort:o,containerName:r,containerEnv:i,pullImage:n}},Ht=async e=>{var de,ge,ye;let{inputDir:t,outputDir:o,server:r,filesToCopy:n,resourcePort:i,ui:p,webpackConfig:a,noProxy:c}=e;await ce.default.emptyDir(o);let m=await v(),l=m.app.key,u=m.app.version,h=m.getFunctionFiles(),f=m.resources||[];if(!l){w.error("appKey is required!");return}if(!u){w.error("version is required!");return}console.info(`App key: ${V.default.bold.green(l)}`),console.info(`App version: ${V.default.bold.green(u)}
6
- `);let{domain:A}=C();if(!A){w.error("Please login in first!");return}console.info(`Tunneling to ${V.default.bold.green(A)}`);let g=[],q=async E=>{E instanceof Error&&console.error(E);try{await Promise.all(g.map(x=>x()))}catch(x){console.error("other error:",x)}process.exit()};process.on("SIGINT",q),process.on("uncaughtException",q),process.on("unhandledRejection",q),p&&B({appKey:l,webpackConfig:a});let Xt=`${`/${l}/development/${u}`}/server-side`,ue=zt.default.join(o,Xt);await N(ue,n),await qt({inputDir:t,outputDir:ue}),g.push(()=>ce.default.remove(o));let z="",fe;if(r&&h.length>0){let{runtimeImage:E,containerPort:x,containerEnv:Zt,containerName:eo,pullImage:to}=await Mo();fe=x;let D=new T(E,eo);to&&await D.downloadImage(),await D.runContainer({port:x,env:Zt,volume:[`${o}:/usr/src/app/apps`]}),g.push(()=>D.removeContainer()),z=await d({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>Nt(x)),No("runtimeHost",z),D.logs()}if(c){console.info(`\u4EE3\u7406\u5173\u95ED \u274C\uFF1A\u8BF7\u628A\u8BF7\u6C42\u6307\u5411localhost:${fe}`);return}if(await $t({appKey:l,runtimeHost:z,resources:f,resourcePort:i}),g.push(()=>It(l)),r&&((ye=(ge=(de=m.getManifest())==null?void 0:de.modules)==null?void 0:ge.webtrigger)!=null&&ye.length)){console.info("You can use this url for test:");let E=`${A}/apps/api/v1/:tenant/apps/${l}/environments/development/webtriggers/:webtriggerKey`;console.info(`POST ${E}`)}};var Wt=async e=>{let{copy:t=[],input:o="functions",output:r="cache",server:n=!0,resourcePort:i,ui:p,webpack:a,proxy:c}=e;await Ht({outputDir:me.default.resolve(r),inputDir:me.default.resolve(o),filesToCopy:[..._,...t],server:n,resourcePort:Number(i)||8e3,ui:!!p,webpackConfig:a,noProxy:!c})};var Uo=async({webpackConfig:e})=>{let t=await v(),{key:o}=t.app;if(!o){w.error("manifest app key is required");return}B({appKey:o,webpackConfig:e})},Qt=Uo;var Jt=async e=>{let{webpack:t}=e;await Qt({webpackConfig:t})};var jo=`v${k}`;console.info(`GiteeTeam Apps Cli ${le.default.bold.green(jo)}`);console.info(`Node.js ${le.default.bold.green(process.version)}
7
- `);var b=new Yt.Command;b.version(k,"-v -V --vers").description("Giteeteam Apps Cli");b.command("build").option("--prod","build in production").option("--dev","build in development").option("--no-zip","no archive").option("-c --copy [letters...]","copy files").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir").option("--ui","build ui").option("-w --webpack [file]","build ui webpack config file").action(et);b.command("init").action(kt);b.command("login").option("--domain [domain]","login domain").option("-u --username [username]","login username").option("-p --password [password]","login user password").action(Dt);b.command("tunnel").option("-c --copy [letters...]","copy files").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir,default cache").option("--no-server","no server").option("--resourcePort [number]","resource port").option("--ui","build ui").option("-w --webpack [file]","build ui webpack config file").option("--no-proxy","no proxy").action(Wt);b.command("deploy [filename]").option("-e --environment [environment]","app environment").action(dt);b.command("ui-dev").option("-w --webpack [file]","build ui webpack config file").action(Jt);b.parse(process.argv);
2
+ "use strict";var no=Object.create;var W=Object.defineProperty;var io=Object.getOwnPropertyDescriptor;var so=Object.getOwnPropertyNames;var ao=Object.getPrototypeOf,po=Object.prototype.hasOwnProperty;var co=(e,t)=>()=>(e&&(t=e(e=0)),t);var mo=(e,t)=>{for(var o in t)W(e,o,{get:t[o],enumerable:!0})},lo=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of so(t))!po.call(e,n)&&n!==o&&W(e,n,{get:()=>t[n],enumerable:!(r=io(t,n))||r.enumerable});return e};var s=(e,t,o)=>(o=e!=null?no(ao(e)):{},lo(t||!e||!e.__esModule?W(o,"default",{value:e,enumerable:!0}):o,e));var Ge={};mo(Ge,{default:()=>ko});function ko({environment:e,appKey:t,distOutputPath:o="dist"}){let r=e==="production",n=e==="development",i=f=>f?{filename:"js/[name].[chunkhash].min.js",path:M.default.resolve(o),publicPath:"./",library:t,libraryTarget:"umd"}:{filename:"main.js",path:M.default.resolve(o),publicPath:"/",library:t,libraryTarget:"umd"},p=({resourcePath:f},fe,y)=>y===t||/\.global\.(css|less)$/.test(f)||/node_modules/.test(f)?y:`${y}__${(0,Ue.default)(f+y,{algorithm:"md5"}).slice(0,8)}`,a={loader:"@ecomfe/class-names-loader",options:{classNamesModule:require.resolve("classnames")}},c=r?Y.default.loader:"style-loader",m={loader:"postcss-loader",options:{postcssOptions:{plugins:[Me.default]}}},l={loader:"css-loader",options:{modules:{getLocalIdent:p},importLoaders:1}},u={loader:"less-loader",options:{lessOptions:{javascriptEnabled:!0,modifyVars:{...Fe,...bo,"ant-prefix":t}}}};return{mode:e,entry:"./src/index.tsx",output:i(r),devtool:r?!1:"source-map",resolve:{extensions:[".js",".ts",".jsx",".tsx",".css",".less"]},optimization:{minimize:r,minimizer:[new Ne.default,"..."]},plugins:[Oo&&new wo,new X.default.DefinePlugin({"process.env":JSON.stringify(process.env),"process.env.appKey":JSON.stringify(t)}),new je.default({template:M.default.resolve("public/index.html"),filename:"index.html",inject:!0,appKey:t}),r&&new Y.default({filename:"[name].[contenthash].css",chunkFilename:"[name].[contenthash].chunk.css"}),n&&new X.default.HotModuleReplacementPlugin,n&&new Le.default({overlay:!1}),r&&new Ie.CleanWebpackPlugin].filter(Boolean),module:{rules:[{oneOf:[{test:/\.(js|mjs|jsx|ts|tsx)$/,exclude:/node_modules/,loader:"swc-loader",options:{sourceMaps:Eo,jsc:{parser:{syntax:"typescript",tsx:!0},transform:{react:{runtime:"automatic",development:!r,refresh:!r}}},env:{targets:"chrome >= 72",mode:"usage",coreJs:"3.38"}}},{test:/\.css$/,use:[a,c,"css-loader",m]},{test:/\.less$/,use:[a,c,l,m,u]},{test:/\.(png|jpg|gif)$/i,use:[{loader:"url-loader",options:{name:"[name]_[hash].[ext]",limit:100*24}}]},{test:/\.svg$/i,use:["@svgr/webpack"]}]}]},externals:[{...Po()}]}}var M,Ae,_e,Le,$e,Me,Ie,Ne,Ue,je,Y,X,wo,yo,vo,Fe,bo,xo,Po,Eo,Oo,Be=co(()=>{"use strict";M=s(require("path")),Ae=require("@ant-design/compatible"),_e=require("@giteeteam/apps-team-theme"),Le=s(require("@pmmmwh/react-refresh-webpack-plugin")),$e=require("antd"),Me=s(require("autoprefixer")),Ie=require("clean-webpack-plugin"),Ne=s(require("css-minimizer-webpack-plugin")),Ue=s(require("hasha")),je=s(require("html-webpack-plugin")),Y=s(require("mini-css-extract-plugin")),X=s(require("webpack")),wo=require("webpack-bundle-analyzer").BundleAnalyzerPlugin,{defaultAlgorithm:yo,defaultSeed:vo}=$e.theme,Fe=yo({...vo,..._e.themeConfig.token}),bo=(0,Ae.convertLegacyToken)({...Fe}),xo=()=>e=>["window modules",e],Po=()=>{let e=xo();return{"react-dom/client":e("reactDOMClient"),"react-dom":e("reactDOM"),react:e("react")}},Eo=process.env.GENERATE_SOURCEMAP==="true",Oo=process.env.ANALYZER_PACKAGE==="true"});var Ln=require("dotenv/config"),ue=s(require("chalk")),Zt=require("commander");var k="0.8.18";var te=s(require("path"));var L=["manifest.yml","locales"],ve=Buffer.from(process.env.ONE_AUTH_IV||"ABCDEFGHIJKLM_iv","utf-8"),be=Buffer.from(process.env.ONE_AUTH_SECRET_KEY||"ABCDEFGHIJKL_key","utf-8"),xe=process.env.ONE_AUTH_ALGORITHM||"aes-128-cbc";var j=s(require("chalk")),et=s(require("fs-extra"));var Oe=s(require("fs")),J=s(require("path")),ke=s(require("@rollup/plugin-commonjs")),Te=require("rollup");var T=require("fs"),h=require("path"),Pe=require("esbuild"),fo={treeShaking:!0,format:"esm",loader:"tsx"};var go=({source:e,dirPath:t,mode:o})=>{let r="";if(o==="development")try{return r=require.resolve(e+"/src/index.ts",{paths:[t]}),r}catch{}try{return r=require.resolve(e,{paths:[t]}),r}catch{}return r};function Q({mode:e,...t}){return t={...fo,...t},{name:"esbuild",resolveId(o,r,n){if(!r)return o;let i=(0,h.dirname)(r),p;if((0,T.existsSync)(p=(0,h.resolve)(i,o,"index.ts")))return p;if((0,T.existsSync)(p=(0,h.resolve)(i,o,"index.tsx")))return p;if((0,T.existsSync)(p=(0,h.resolve)(i,o+".ts")))return p;if((0,T.existsSync)(p=(0,h.resolve)(i,o+".tsx")))return p;{let a=go({source:o,dirPath:i,mode:e});if((0,T.existsSync)(a))return a;throw console.error({source:o,importer:r,options:n}),p=(0,h.relative)(".",(0,h.resolve)(r,o)),new Error(`ENOENT: ${p.replace(/\\/g,"/")}`)}},async transform(o,r){t.sourcefile=r,t.loader=r.endsWith(".json")?"json":t.loader;let{code:n,map:i}=await(0,Pe.transform)(o,t);return i?{code:n,map:i}:n}}}function ho(e,t,o="development"){let r=[(0,ke.default)()];r.push(Q({mode:o,sourcemap:o==="development",minify:o!=="development",target:"es2018",jsx:"transform",jsxFactory:"AppsUI.createElement",jsxFragment:"AppsUI.Fragment"}));let n={input:e,plugins:r},i={file:t,format:"es",sourcemap:o==="development"};return{inputOptions:n,outputOptions:i}}async function $(e){let{fileName:t,inputDir:o,outputDir:r,mode:n="development"}=e,i=J.default.join(o,`${t}.ts`);try{await Oe.default.promises.access(i)}catch{console.error(`${i} is not exist`);return}let p=J.default.join(r,`${t}.js`),{inputOptions:a,outputOptions:c}=ho(i,p,n);await(await(0,Te.rollup)(a)).write(c)}var Se=s(require("ora")),d=async(e,t)=>{var r,n;let o=(0,Se.default)(e.start).start();try{let i=await t();return o.succeed(e.succeed),i}catch(i){throw o.fail(`${e.error}: ${((n=(r=i==null?void 0:i.response)==null?void 0:r.data)==null?void 0:n.message)||i.message}`),i}};var Ce=s(require("path")),De=require("@giteeteam/apps-manifest"),Re=s(require("fs-extra")),b=async()=>{let e=Ce.default.resolve("manifest.yml"),t=await Re.default.readFile(e);return new De.Manifest(t.toString())};var Ve=s(require("path")),He=s(require("webpack")),qe=s(require("webpack-merge"));var I=async()=>(await Promise.resolve().then(()=>(Be(),Ge))).default;var ze=async({appKey:e,webpackConfig:t})=>{let o=await I();return new Promise((r,n)=>{let i=o({environment:"production",appKey:e});if(t){let a=require(Ve.default.resolve(t));i=(0,qe.default)(i,a)}(0,He.default)(i).run((a,c)=>{if(a)return console.error(a),n(a);if(console.info(c==null?void 0:c.toString()),c!=null&&c.hasErrors())return n(new Error("build-ui-error"));r()})})};var Ke=s(require("path")),We=s(require("archiver")),Z=s(require("fs-extra")),Qe=async(e,t)=>{let o=Ke.default.resolve(t);return await Z.default.remove(o),new Promise((r,n)=>{let i=Z.default.createWriteStream(o),p=(0,We.default)("zip",{zlib:{level:9}});i.on("close",function(){r()}),p.on("warning",function(a){console.info(a),a.code==="ENOENT"||n(a)}),p.on("error",function(a){console.info(a),n(a)}),p.pipe(i),p.directory(e,!1),p.finalize()})};var Je=async e=>{let{manifest:t,mode:o,outputDir:r,inputDir:n}=e,p=t.getFunctionFiles().map(async a=>{await $({inputDir:n,fileName:a,outputDir:r,mode:o})});await Promise.all(p)};var U=s(require("path")),Xe=s(require("fs-extra"));var ee=s(require("path")),Ye=s(require("fs-extra")),N=async(e,t)=>{for(let o of t)try{let r=ee.default.resolve(o),n=ee.default.join(e,o);await Ye.default.copy(r,n)}catch(r){if(r.code==="ENOENT"&&o==="locales")continue;throw r}};var Ze=async({outputDir:e,manifest:t,filesToCopy:o})=>{let{resources:r}=t;if(r)for(let{key:n,path:i}of r){let p=U.default.resolve(U.default.join("./",i)),a=U.default.join(e,n);await Xe.default.copy(p,a)}await N(e,o)};var tt=async({outputDir:e,inputDir:t,prod:o,filesToCopy:r,zip:n,ui:i,webpackConfig:p})=>{let a=await b(),{version:c,key:m}=a.app;if(!m){console.error("manifest app key is required");return}if(!c){console.error("manifest app version is required");return}console.info(`App key: ${j.default.bold.green(m)}`),console.info(`App version: ${j.default.bold.green(c)}
3
+ `);let{pass:l,errors:u}=a.validate();if(!l){if(u!=null&&u.length){let{message:g,path:f}=u[0];console.error(`Manifest valid error: Path '${f}', ${g}`)}else console.error("Manifest valid error");return}if(await et.default.emptyDir(e),i&&await d({start:"start build ui",error:"build ui failed",succeed:"build ui success"},()=>ze({appKey:m,webpackConfig:p})),await d({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>Je({outputDir:e,inputDir:t,manifest:a,mode:o?"production":"development"})),await d({start:"start package",error:"package failed",succeed:"package success"},()=>Ze({outputDir:e,manifest:a,filesToCopy:r})),n){let g=`${m}_${c}.zip`;await d({start:"start archive",error:"archive failed",succeed:"archive success"},()=>Qe(e,g)),console.info(`
4
+ The output file of the build is ${j.default.bold.green(g)}`)}};var ot=async e=>{let{input:t="functions",output:o="package",prod:r,dev:n,copy:i=[],zip:p,ui:a,webpack:c}=e;await tt({outputDir:te.default.resolve(o),inputDir:te.default.resolve(t),prod:r??!n,filesToCopy:[...L,...i],zip:p,ui:!!a,webpackConfig:c}).catch(()=>{})};var ft=s(require("fs")),dt=s(require("chalk"));var rt=s(require("path")),nt=s(require("lowdb")),it=s(require("lowdb/adapters/FileSync"));var oe,re=()=>{if(!oe){let e=rt.default.join(__dirname,"user.json"),t=new it.default(e);oe=(0,nt.default)(t)}return oe},st=()=>{let e=re(),t=e.get("version").value();(!t||t!==k)&&e.defaults({version:k,user:{}}).write()},ne=e=>{st(),re().set("user",e).write()},S=()=>(st(),re().get("user").value());var pt=s(require("fs")),ct=s(require("path")),mt=s(require("form-data"));var at=s(require("axios"));var v={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE"},E=async({url:e,method:t,data:o,headers:r})=>{let{domain:n,cookie:i}=S();return(await(0,at.default)({method:t,baseURL:n,url:e,data:o,headers:{...r,cookie:i}})).data};var lt=async(e,t)=>{let o=new mt.default;o.append("environmentKey",t),o.append("package",pt.default.createReadStream(ct.default.resolve(e))),await E({method:v.POST,url:"/apps/api/v1/apps/deploy",data:o,headers:{...o.getHeaders()}})};var ut=s(require("chalk")),To=ut.default.bold.red,w={error:e=>{console.info(To(e))}};var gt=(r=>(r.DEVELOPMENT="development",r.STAGING="staging",r.PRODUCTION="production",r))(gt||{}),ht=async(e,t)=>{let{domain:o}=S(),{environment:r="development"}=t;if(!Object.values(gt).includes(r)){w.error("Only support development, staging, production environment.");return}if(!o){w.error("Please login in first!");return}if(!ft.default.existsSync(e)){w.error(`File:${e} is not exist`);return}console.info(`Deploying to ${dt.default.bold.green(o)}`),await d({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>lt(e,r)).catch(()=>{})};var C=s(require("path")),D=s(require("fs-extra")),pe=s(require("inquirer"));var wt=s(require("readline")),yt=require("chalk"),vt=s(require("execa")),So=e=>{if(!yt.supportsColor){e.write("\r");return}wt.default.cursorTo(e,0)},Co=(e,t)=>{let o=Math.min(Math.max(e/t,0),1),r=` ${e}/${t}`,n=Math.max(0,process.stderr.columns-r.length-3),i=Math.min(t,n),p=Math.round(i*o),a="#".repeat(p),c="-".repeat(i-p);So(process.stderr),process.stderr.write(`[${a}${c}]${r}`)},Do=(e,t,o,r)=>new Promise((n,i)=>{var a;let p=(0,vt.default)(e,t,{cwd:o,stdio:["inherit","inherit","pipe"],env:r});(a=p.stderr)==null||a.on("data",c=>{let m=c.toString();if(/warning/.test(m))return;let l=m.match(/\[.*] (\d+)\/(\d+)/);if(l){Co(parseFloat(l[1]),parseFloat(l[2]));return}process.stderr.write(c)}),p.on("close",c=>{if(c!==0){i(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),bt={executeCommand:Do};var ie=s(require("fs-extra")),se=s(require("simple-git")),xt=async e=>{await(0,se.default)(e).init()},Pt=async(e,t)=>{await ie.default.pathExists(t)||await ie.default.mkdir(t),await(0,se.default)(t).clone(e,t)};var F=s(require("fs-extra")),Et="https://github.com/moriahq/apps-template.git",ae=(o=>(o.micro="micro",o.uikit="uikit",o))(ae||{}),Ot=async(e,t)=>{if(!await F.default.pathExists(e))return;let o=await F.default.readFile(e,{encoding:"utf-8"});await F.default.writeFile(e,o.replace(/{{(\w+)}}/g,(r,n)=>typeof t[n]=="string"?t[n]:r))};var Ao=async()=>(await pe.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:o=>!!o}))["App Name"],_o=async()=>(await pe.default.createPromptModule()({type:"input",name:"App key",message:"Please enter a valid app key",validate:o=>/^[a-z][a-z0-9_]*$/.test(o)?!0:(console.info(""),console.info("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"],Lo=async(e,t)=>{await d({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>Pt(e,t))},$o=async e=>{await d({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>bt.executeCommand("yarn",["install"],e))},kt=async e=>{let{cwd:t}=e,o="micro",r=await Ao(),n=await _o(),i=C.default.join(t,n);if(await D.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await Lo(Et,i),await D.default.copy(C.default.join(i,o),i),await Promise.all(Object.values(ae).map(a=>D.default.remove(C.default.join(i,a)))),await D.default.remove(C.default.join(i,"./.git"));let p=["./manifest.yml","./package.json","./webpack.config.js","./public/index.html","./src/App.tsx","./src/index.tsx","./static/App.tsx","./static/index.tsx"];await Promise.all(p.map(a=>Ot(C.default.join(i,a),{appName:r,appKey:n}))),await $o(i),await xt(i),console.info("Project init success!"),console.info("Project path:"+i)};var Tt=async()=>{let e=process.cwd();await kt({cwd:e})};var G=s(require("inquirer"));var ce=s(require("axios"));var St=async({baseUrl:e,username:t,password:o})=>{var r;try{return{cookie:(r=(await(0,ce.default)({method:v.POST,url:`${e}/api/gateway/login`,data:{username:t,password:o}})).headers)==null?void 0:r["set-cookie"]}}catch(n){return console.error("Login error:",n==null?void 0:n.message),{cookie:""}}},Ct=async e=>{try{return await(0,ce.default)({method:v.GET,url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var Dt=e=>{try{return new URL(e).origin}catch{return e}};var Rt=s(require("crypto"));var At=e=>{try{let t=Rt.default.createCipheriv(xe,be,ve),o=t.update(e,"utf8","base64");return o+=t.final("base64"),o.toString()}catch(t){return console.error(`Encryption error: ${t}`),null}};var Mo=async()=>(await G.default.createPromptModule()({type:"input",name:"Domain",message:"Please enter the domain address",validate:o=>{try{return new URL(o),!0}catch{return"Please enter a valid domain name"}}})).Domain,Io=async()=>(await G.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:o=>!!o})).Username,No=async()=>(await G.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:o=>!!o})).Password,_t=async({domain:e,username:t,password:o})=>{if(e||(e=await Mo()),e=Dt(e),await Ct(e)){t||(t=await Io()),o||(o=await No());let{cookie:n}=await St({baseUrl:e,username:t,password:At(o)||o});n?(ne({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else ne({domain:e}),console.info("Login success!")};var Lt=async e=>{await _t(e)};var q=s(require("path"));var Kt=s(require("path")),H=s(require("chalk")),Wt=s(require("debug")),le=s(require("fs-extra"));var $t=async()=>{var t;return((t=(await E({method:v.GET,url:"/apps/api/v1/config"}).catch(o=>{var r,n;console.info(`getRuntimeConfig error ${((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)}`)})).data)==null?void 0:t.runtime)||{}};var B=require("child_process"),R=class{constructor(t,o){this.imageName=t,this.containerName=o}async downloadImage(){console.info(`Downloading image(${this.imageName}) ...`),await this.execPromise(`docker pull ${this.imageName}`),console.info(`Download image(${this.imageName}) success!`)}async runContainer({port:t,env:o,volume:r=[]}){await this.removeContainer();let n=Object.keys(o).filter(a=>o[a]!==void 0).map(a=>`-e ${a}=${o[a]}`).join(" "),i=r==null?void 0:r.map(a=>`-v ${a}`).join(" "),p=`docker run -d -p ${t}:${t} ${n} ${i} --name ${this.containerName} ${this.imageName}`;await this.execPromise(p)}async removeContainer(){await this.execPromise(`docker rm -f ${this.containerName}`).catch(()=>{})}logs(){let t=(0,B.spawn)("docker",["logs","-f",this.containerName]);t.stdout.on("data",o=>{console.info(`${o}`)}),t.stderr.on("data",o=>{console.info(`${o}`)})}execPromise(t){return new Promise((o,r)=>{(0,B.exec)(t,(n,i,p)=>{if(n)return r(n);o({stdout:i,stderr:p})})})}};var Mt=s(require("localtunnel"));var It=async({appKey:e,runtimeHost:t,resources:o,resourcePort:r})=>{o!=null&&o.length&&o.forEach(n=>{n.path=`http://127.0.0.1:${r}`}),await E({method:v.POST,url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:o,runtimeHost:t}}).catch(n=>{var i,p;console.info(`addTunnel error ${((p=(i=n==null?void 0:n.response)==null?void 0:i.data)==null?void 0:p.message)||(n==null?void 0:n.message)}`)})},Nt=async e=>{await E({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Ut=async e=>{var t,o;try{return(await(0,Mt.default)({port:e,host:((t=process.env)==null?void 0:t.TUNNEL_HOST)==="OFFICIAL"?void 0:((o=process.env)==null?void 0:o.TUNNEL_HOST)||"http://tunnel.gitee.work:1777"})).url}catch(r){return console.info("runTunnel error",r==null?void 0:r.message),""}};var me=s(require("path")),jt=s(require("cors")),Ft=s(require("express")),Gt=s(require("webpack")),Bt=s(require("webpack-dev-middleware")),Vt=require("webpack-merge");var V=async({appKey:e,webpackConfig:t})=>{let r=(await I())({environment:"development",appKey:e});if(t){let c=require(me.default.resolve(t));r=(0,Vt.merge)(r,c)}let n=(0,Gt.default)(r),i=(0,Ft.default)(),p=Number(process.env.UI_PORT)||8e3,a=(0,Bt.default)(n);i.use((0,jt.default)()),i.use(a),i.get("*",(c,m)=>{var l,u;(u=n.outputFileSystem)==null||u.readFile(me.default.join(((l=r.output)==null?void 0:l.path)||"","index.html"),(g,f)=>{if(g||!f){m.sendStatus(404);return}m.send(f.toString())})}),i.listen(p,"0.0.0.0",()=>{console.info(`The React app is listening on port ${p}!
5
+ `)})};var qt=s(require("chokidar"));var Ht=(e,t,o)=>{for(let r of e)$({inputDir:t,outputDir:o,fileName:r,mode:"development"})},zt=async e=>{let{inputDir:t,outputDir:o,watchFilePaths:r}=e,i=(await b()).getFunctionFiles();Ht(i,t,o);let p,a=[t,...r],c=qt.default.watch(a);console.info(`watch: ${a.join(", ")}`),c.on("change",m=>{clearTimeout(p),p=setTimeout(()=>{console.info(`${m} has change`),Ht(i,t,o)},1e3)})};var Uo=(0,Wt.default)("cli:tunnel"),jo=async()=>{let e=await $t(),t=process.env.RUNTIME_IMAGE||e.image||"docker-hub.gitee.work/gitee-prod/proxima-apps-runtime-server:4.4.0-alpha-86",o=Number(process.env.CONTAINER_PORT)||8455,r=process.env.CONTAINER_NAME||"cli-dev-apps-runtime-server",n=process.env.PULL_IMAGE!=="false",i={PORT:o,APPS_DIR:"/usr/src/app/apps",LRU_TTL:1,FS_MODE:"local",DEBUG:process.env.DEBUG||"runtime*",LOG_LEVEL:process.env.LOG_LEVEL,APPS_DEFAULT_LOCALE:process.env.APPS_DEFAULT_LOCALE||"zh-CN",PARSE_PUBLIC_SERVER_URL:process.env.PARSE_PUBLIC_SERVER_URL||e.parsePublicServerUrl,PARSE_SERVER_MASTER_KEY:process.env.PARSE_SERVER_MASTER_KEY||e.parseServerMasterKey,PROXIMA_CORE_URL:process.env.PROXIMA_CORE_URL||e.proximaCoreUrl,APPS_SERVER_URL:process.env.APPS_SERVER_URL||e.appsServerUrl,APPS_PARSE_SERVER_URL:process.env.APPS_PARSE_SERVER_URL||e.appsParseServerUrl,PGSQL_CLIENT_HOST:process.env.PGSQL_CLIENT_HOST,PGSQL_CLIENT_PORT:process.env.PGSQL_CLIENT_PORT,PGSQL_CLIENT_USER:process.env.PGSQL_CLIENT_USER,PGSQL_CLIENT_PASSWORD:process.env.PGSQL_CLIENT_PASSWORD,APPS_RUNTIME_IOREDIS_OPTIONS:process.env.APPS_RUNTIME_IOREDIS_OPTIONS?`'${process.env.APPS_RUNTIME_IOREDIS_OPTIONS}'`:void 0};return{runtimeImage:t,containerPort:o,containerName:r,containerEnv:i,pullImage:n}},Qt=async e=>{var he,we,ye;let{inputDir:t,outputDir:o,server:r,filesToCopy:n,resourcePort:i,ui:p,webpackConfig:a,noProxy:c,watchFilePaths:m=[]}=e;await le.default.emptyDir(o);let l=await b(),u=l.app.key,g=l.app.version,f=l.getFunctionFiles(),fe=l.resources||[];if(!u){w.error("appKey is required!");return}if(!g){w.error("version is required!");return}console.info(`App key: ${H.default.bold.green(u)}`),console.info(`App version: ${H.default.bold.green(g)}
6
+ `);let{domain:y}=S();if(!y){w.error("Please login in first!");return}console.info(`Tunneling to ${H.default.bold.green(y)}`);let A=[],z=async O=>{O instanceof Error&&console.error(O);try{await Promise.all(A.map(P=>P()))}catch(P){console.error("other error:",P)}process.exit()};process.on("SIGINT",z),process.on("uncaughtException",z),process.on("unhandledRejection",z),p&&V({appKey:u,webpackConfig:a});let eo=`${`/${u}/development/${g}`}/server-side`,de=Kt.default.join(o,eo);await N(de,n),await zt({inputDir:t,outputDir:de,watchFilePaths:m}),A.push(()=>le.default.remove(o));let K="",ge;if(r&&f.length>0){let{runtimeImage:O,containerPort:P,containerEnv:to,containerName:oo,pullImage:ro}=await jo();ge=P;let _=new R(O,oo);ro&&await _.downloadImage(),await _.runContainer({port:P,env:to,volume:[`${o}:/usr/src/app/apps`]}),A.push(()=>_.removeContainer()),c||(K=await d({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>Ut(P)),Uo("runtimeHost",K)),_.logs()}if(c){console.info(`\u4EE3\u7406\u5173\u95ED \u274C\uFF1A\u8BF7\u628A\u8BF7\u6C42\u6307\u5411localhost:${ge}`);return}if(await It({appKey:u,runtimeHost:K,resources:fe,resourcePort:i}),A.push(()=>Nt(u)),r&&((ye=(we=(he=l.getManifest())==null?void 0:he.modules)==null?void 0:we.webtrigger)!=null&&ye.length)){console.info("You can use this url for test:");let O=`${y}/apps/api/v1/:tenant/apps/${u}/environments/development/webtriggers/:webtriggerKey`;console.info(`POST ${O}`)}};var Jt=async e=>{let{copy:t=[],input:o="functions",output:r="cache",server:n=!0,resourcePort:i,ui:p,webpack:a,proxy:c,watch:m=[]}=e;await Qt({outputDir:q.default.resolve(r),inputDir:q.default.resolve(o),filesToCopy:[...L,...t],server:n,resourcePort:Number(i)||8e3,ui:!!p,webpackConfig:a,noProxy:!c,watchFilePaths:m.map(l=>q.default.resolve(l))})};var Fo=async({webpackConfig:e})=>{let t=await b(),{key:o}=t.app;if(!o){w.error("manifest app key is required");return}V({appKey:o,webpackConfig:e})},Yt=Fo;var Xt=async e=>{let{webpack:t}=e;await Yt({webpackConfig:t})};var Go=`v${k}`;console.info(`GiteeTeam Apps Cli ${ue.default.bold.green(Go)}`);console.info(`Node.js ${ue.default.bold.green(process.version)}
7
+ `);var x=new Zt.Command;x.version(k,"-v -V --vers").description("Giteeteam Apps Cli");x.command("build").option("--prod","build in production").option("--dev","build in development").option("--no-zip","no archive").option("-c --copy [letters...]","copy files").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir").option("--ui","build ui").option("-w --webpack [file]","build ui webpack config file").action(ot);x.command("init").action(Tt);x.command("login").option("--domain [domain]","login domain").option("-u --username [username]","login username").option("-p --password [password]","login user password").action(Lt);x.command("tunnel").option("-c --copy [letters...]","copy files").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir,default cache").option("--no-server","no server").option("--resourcePort [number]","resource port").option("--ui","build ui").option("-w --webpack [file]","build ui webpack config file").option("--no-proxy","no proxy").option("-w --watch [paths...]","watch files change").action(Jt);x.command("deploy [filename]").option("-e --environment [environment]","app environment").action(ht);x.command("ui-dev").option("-w --webpack [file]","build ui webpack config file").action(Xt);x.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giteeteam/apps-cli",
3
- "version": "0.8.17",
3
+ "version": "0.8.18",
4
4
  "description": "Giteeteam Apps cli",
5
5
  "keywords": [
6
6
  "typescript",
@@ -20,8 +20,6 @@
20
20
  "lint": "npx eslint .",
21
21
  "type-check": "tsc --pretty --noEmit",
22
22
  "precommit": "pnpm i && lint-staged && pnpm type-check",
23
- "prepublishOnly": "pnpm build",
24
- "prepublish": "pnpm build",
25
23
  "publish:alpha": "npm publish --tag alpha",
26
24
  "prepack": "pnpm build",
27
25
  "unlink": "yarn unlink",
@@ -40,12 +38,14 @@
40
38
  "registry": "https://registry.npmjs.org/"
41
39
  },
42
40
  "dependencies": {
41
+ "@ant-design/compatible": "^5.1.2",
43
42
  "@giteeteam/apps-manifest": "0.8.7",
43
+ "@giteeteam/apps-team-theme": "^0.2.0",
44
44
  "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
45
45
  "@rollup/plugin-commonjs": "^22.0.0",
46
46
  "archiver": "^5.3.1",
47
47
  "autoprefixer": "^10.4.20",
48
- "axios": "^1.7.8",
48
+ "axios": "^1.13.6",
49
49
  "chalk": "^4.1.2",
50
50
  "chokidar": "^3.5.3",
51
51
  "clean-webpack-plugin": "^4.0.0",
@@ -56,7 +56,7 @@
56
56
  "dotenv": "^16.3.1",
57
57
  "esbuild": "^0.18.11",
58
58
  "execa": "5.1.1",
59
- "express": "4.18.3",
59
+ "express": "4.21.2",
60
60
  "form-data": "^4.0.0",
61
61
  "fs-extra": "^11.2.0",
62
62
  "hasha": "^5.2.2",
@@ -69,22 +69,22 @@
69
69
  "rollup": "^3.29.4",
70
70
  "simple-git": "^3.19.1",
71
71
  "webpack": "^5.88.1",
72
- "webpack-bundle-analyzer": "^4.9.0",
72
+ "webpack-bundle-analyzer": "^5.2.0",
73
73
  "webpack-dev-middleware": "^6.1.1",
74
74
  "webpack-merge": "^6.0.1"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@types/archiver": "^5.3.1",
78
78
  "@types/cors": "^2.8.17",
79
- "@types/debug": "^4.1.8",
79
+ "@types/debug": "^4.1.12",
80
80
  "@types/express": "^4.17.17",
81
81
  "@types/fs-extra": "^11.0.4",
82
82
  "@types/inquirer": "^8.2.9",
83
83
  "@types/localtunnel": "2.0.1",
84
84
  "@types/lowdb": "1.0.11",
85
- "@types/node": "^16.18.124",
85
+ "@types/node": "^20",
86
86
  "esbuild-node-tsc": "^2.0.5",
87
- "typescript": "^5.7.2"
87
+ "typescript": "^5.9.3"
88
88
  },
89
89
  "peerDependencies": {
90
90
  "@ant-design/compatible": "^5.1.1",
File without changes