@giteeteam/apps-cli 0.8.10 → 0.8.11-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +4 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var tr=Object.create;var V=Object.defineProperty;var rr=Object.getOwnPropertyDescriptor;var or=Object.getOwnPropertyNames;var nr=Object.getPrototypeOf,ir=Object.prototype.hasOwnProperty;var sr=(e,t)=>()=>(e&&(t=e(e=0)),t);var ar=(e,t)=>{for(var r in t)V(e,r,{get:t[r],enumerable:!0})},pr=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of or(t))!ir.call(e,n)&&n!==r&&V(e,n,{get:()=>t[n],enumerable:!(o=rr(t,n))||o.enumerable});return e};var s=(e,t,r)=>(r=e!=null?tr(nr(e)):{},pr(t||!e||!e.__esModule?V(r,"default",{value:e,enumerable:!0}):r,e));var Ie={};ar(Ie,{default:()=>xr});function xr({environment:e,appKey:t,distOutputPath:r="dist"}){let o=e==="production",n=e==="development",i=l=>l?{filename:"js/[name].[chunkhash].min.js",path:$.default.resolve(r),publicPath:"./",library:t,libraryTarget:"umd"}:{filename:"main.js",path:$.default.resolve(r),publicPath:"/",library:t,libraryTarget:"umd"},p=({resourcePath:l},C,h)=>h===t||/\.global\.(css|less)$/.test(l)||/node_modules/.test(l)?h:`${h}__${(0,_e.default)(l+h,{algorithm:"md5"}).slice(0,8)}`,a={loader:"@ecomfe/class-names-loader",options:{classNamesModule:require.resolve("classnames")}},c=o?K.default.loader:"style-loader",m={loader:"postcss-loader",options:{postcssOptions:{plugins:[De.default]}}},u={loader:"css-loader",options:{modules:{getLocalIdent:p},importLoaders:1}},d={loader:"less-loader",options:{lessOptions:{javascriptEnabled:!0,modifyVars:{...$e,...wr,"ant-prefix":t}}}};return{mode:e,entry:"./src/index.tsx",output:i(o),devtool:o?!1:"source-map",resolve:{extensions:[".js",".ts",".jsx",".tsx",".css",".less"]},optimization:{minimize:o,minimizer:[new Te.default,"..."]},plugins:[br&&new fr,new W.default.DefinePlugin({"process.env":JSON.stringify(process.env),"process.env.appKey":JSON.stringify(t)}),new Le.default({template:$.default.resolve("public/index.html"),filename:"index.html",inject:!0,appKey:t}),o&&new K.default({filename:"[name].[contenthash].css",chunkFilename:"[name].[contenthash].chunk.css"}),n&&new W.default.HotModuleReplacementPlugin,n&&new Ce.default({overlay:!1}),o&&new Ae.CleanWebpackPlugin].filter(Boolean),module:{rules:[{oneOf:[{test:/\.(js|mjs|jsx|ts|tsx)$/,exclude:/node_modules/,loader:"swc-loader",options:{sourceMaps:vr,jsc:{parser:{syntax:"typescript",tsx:!0},transform:{react:{runtime:"automatic",development:!o,refresh:!o}}},env:{targets:"chrome >= 72",mode:"usage",coreJs:"3.38"}}},{test:/\.css$/,use:[a,c,"css-loader",m]},{test:/\.less$/,use:[a,c,u,m,d]},{test:/\.(png|jpg|gif)$/i,use:[{loader:"url-loader",options:{name:"[name]_[hash].[ext]",limit:100*24}}]},{test:/\.svg$/i,use:["@svgr/webpack"]}]}]},externals:[{...hr()}]}}var $,Oe,Se,Ce,Re,De,Ae,Te,_e,Le,K,W,fr,dr,gr,$e,wr,yr,hr,vr,br,Me=sr(()=>{"use strict";$=s(require("path")),Oe=require("@ant-design/compatible"),Se=require("@giteeteam/apps-team-theme"),Ce=s(require("@pmmmwh/react-refresh-webpack-plugin")),Re=require("antd"),De=s(require("autoprefixer")),Ae=require("clean-webpack-plugin"),Te=s(require("css-minimizer-webpack-plugin")),_e=s(require("hasha")),Le=s(require("html-webpack-plugin")),K=s(require("mini-css-extract-plugin")),W=s(require("webpack")),fr=require("webpack-bundle-analyzer").BundleAnalyzerPlugin,{defaultAlgorithm:dr,defaultSeed:gr}=Re.theme,$e=dr({...gr,...Se.themeConfig.token}),wr=(0,Oe.convertLegacyToken)({...$e}),yr=()=>e=>["window modules",e],hr=()=>{let e=yr();return{"react-dom":e("reactDOM"),react:e("react")}},vr=process.env.GENERATE_SOURCEMAP==="true",br=process.env.ANALYZER_PACKAGE==="true"});var Dn=require("dotenv/config"),pe=s(require("chalk")),Qt=require("commander");var E="0.8.10";var Q=s(require("path"));var _=["manifest.yml","locales"],fe=Buffer.from(process.env.ONE_AUTH_IV||"ABCDEFGHIJKLM_iv","utf-8"),de=Buffer.from(process.env.ONE_AUTH_SECRET_KEY||"ABCDEFGHIJKL_key","utf-8"),ge=process.env.ONE_AUTH_ALGORITHM||"aes-128-cbc";var He=s(require("chalk")),Je=s(require("fs-extra"));var he=s(require("fs")),z=s(require("path")),ve=s(require("@rollup/plugin-commonjs")),be=require("rollup");var k=require("fs"),g=require("path"),we=require("esbuild"),mr={treeShaking:!0,format:"esm",loader:"tsx"};var lr=({source:e,dirPath:t,mode:r})=>{let o="";if(r==="development")try{return o=require.resolve(e+"/src/index.ts",{paths:[t]}),o}catch{}try{return o=require.resolve(e,{paths:[t]}),o}catch{}return o};function q({mode:e,...t}){return t={...mr,...t},{name:"esbuild",resolveId(r,o,n){if(!o)return r;let i=(0,g.dirname)(o),p;if((0,k.existsSync)(p=(0,g.resolve)(i,r,"index.ts")))return p;if((0,k.existsSync)(p=(0,g.resolve)(i,r,"index.tsx")))return p;if((0,k.existsSync)(p=(0,g.resolve)(i,r+".ts")))return p;if((0,k.existsSync)(p=(0,g.resolve)(i,r+".tsx")))return p;{let a=lr({source:r,dirPath:i,mode:e});if((0,k.existsSync)(a))return a;throw console.error({source:r,importer:o,options:n}),p=(0,g.relative)(".",(0,g.resolve)(o,r)),new Error(`ENOENT: ${p.replace(/\\/g,"/")}`)}},async transform(r,o){t.sourcefile=o,t.loader=o.endsWith(".json")?"json":t.loader;let{code:n,map:i}=await(0,we.transform)(r,t);return i?{code:n,map:i}:n}}}function ur(e,t,r="development"){let o=[(0,ve.default)()];o.push(q({mode:r,sourcemap:r==="development",minify:r!=="development",target:"es2018",jsx:"transform",jsxFactory:"AppsUI.createElement",jsxFragment:"AppsUI.Fragment"}));let n={input:e,plugins:o},i={file:t,format:"es",sourcemap:r==="development"};return{inputOptions:n,outputOptions:i}}async function L(e){let{fileName:t,inputDir:r,outputDir:o,mode:n="development"}=e,i=z.default.join(r,`${t}.ts`);try{await he.default.promises.access(i)}catch{console.error(`${i} is not exist`);return}let p=z.default.join(o,`${t}.js`),{inputOptions:a,outputOptions:c}=ur(i,p,n);await(await(0,be.rollup)(a)).write(c)}var xe=s(require("ora")),f=async(e,t)=>{var o,n;let r=(0,xe.default)(e.start).start();try{let i=await t();return r.succeed(e.succeed),i}catch(i){throw r.fail(`${e.error}: ${((n=(o=i==null?void 0:i.response)==null?void 0:o.data)==null?void 0:n.message)||i.message}`),i}};var Pe=s(require("path")),Ee=require("@giteeteam/apps-manifest"),ke=s(require("fs-extra")),v=async()=>{let e=Pe.default.resolve("manifest.yml"),t=await ke.default.readFile(e);return new Ee.Manifest(t.toString())};var Ne=s(require("path")),Ue=s(require("webpack")),je=s(require("webpack-merge"));var I=async()=>(await Promise.resolve().then(()=>(Me(),Ie))).default;var Fe=async({appKey:e,webpackConfig:t})=>{let r=await I();return new Promise((o,n)=>{let i=r({environment:"production",appKey:e});if(t){let a=require(Ne.default.resolve(t));i=(0,je.default)(i,a)}(0,Ue.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"));o()})})};var Be=s(require("path")),Ge=s(require("archiver")),H=s(require("fs-extra")),Ve=async(e,t)=>{let r=Be.default.resolve(t);return await H.default.remove(r),new Promise((o,n)=>{let i=H.default.createWriteStream(r),p=(0,Ge.default)("zip",{zlib:{level:9}});i.on("close",function(){o()}),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 qe=async e=>{let{manifest:t,mode:r,outputDir:o,inputDir:n}=e,p=t.getFunctionFiles().map(async a=>{await L({inputDir:n,fileName:a,outputDir:o,mode:r})});await Promise.all(p)};var N=s(require("path")),Ke=s(require("fs-extra"));var J=s(require("path")),ze=s(require("fs-extra")),M=async(e,t)=>{for(let r of t)try{let o=J.default.resolve(r),n=J.default.join(e,r);await ze.default.copy(o,n)}catch(o){if(o.code==="ENOENT"&&r==="locales")continue;throw o}};var We=async({outputDir:e,manifest:t,filesToCopy:r})=>{let{resources:o}=t;if(o)for(let{key:n,path:i}of o){let p=N.default.resolve(N.default.join("./",i)),a=N.default.join(e,n);await Ke.default.copy(p,a)}await M(e,r)};var Qe=async({outputDir:e,inputDir:t,prod:r,filesToCopy:o,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}let{pass:u,errors:d}=a.validate();if(!u){if(d!=null&&d.length){let{message:y,path:l}=d[0];console.error(`Manifest valid error: Path '${l}', ${y}`)}else console.error("Manifest valid error");return}if(await Je.default.emptyDir(e),i&&await f({start:"start build ui",error:"build ui failed",succeed:"build ui success"},()=>Fe({appKey:m,webpackConfig:p})),await f({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>qe({outputDir:e,inputDir:t,manifest:a,mode:r?"production":"development"})),await f({start:"start package",error:"package failed",succeed:"package success"},()=>We({outputDir:e,manifest:a,filesToCopy:o})),n){let y=`${m}_${c}.zip`;await f({start:"start archive",error:"archive failed",succeed:"archive success"},()=>Ve(e,y)),console.info(`output file ${He.default.bold.green(y)}`)}};var Ye=async e=>{let{input:t="functions",output:r="package",prod:o,dev:n,copy:i=[],zip:p,ui:a,webpack:c}=e;await Qe({outputDir:Q.default.resolve(r),inputDir:Q.default.resolve(t),prod:o??!n,filesToCopy:[..._,...i],zip:p,ui:!!a,webpackConfig:c}).catch(()=>{})};var pt=s(require("fs")),ct=s(require("chalk"));var Xe=s(require("path")),Ze=s(require("lowdb")),et=s(require("lowdb/adapters/FileSync"));var Y,X=()=>{if(!Y){let e=Xe.default.join(__dirname,"user.json"),t=new et.default(e);Y=(0,Ze.default)(t)}return Y},tt=()=>{let e=X(),t=e.get("version").value();(!t||t!==E)&&e.defaults({version:E,user:{}}).write()},Z=e=>{tt(),X().set("user",e).write()},O=()=>(tt(),X().get("user").value());var ot=s(require("fs")),nt=s(require("path")),it=s(require("form-data"));var rt=s(require("axios"));var x=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:i}=O();return(await(0,rt.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:i}})).data};var st=async(e,t)=>{let r=new it.default;r.append("environmentKey",t),r.append("package",ot.default.createReadStream(nt.default.resolve(e))),await x({method:"POST",url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})};var at=s(require("chalk")),Pr=at.default.bold.red,w={error:e=>{console.info(Pr(e))}};var mt=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(mt||{}),lt=async(e,t)=>{let{domain:r}=O(),{environment:o="development"}=t;if(!Object.values(mt).includes(o)){w.error("Only support development, staging, production environment.");return}if(!r){w.error("Please login in first!");return}if(!pt.default.existsSync(e)){w.error(`File:${e} is not exist`);return}console.info(`Deploying to ${ct.default.bold.green(r)}`),await f({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>st(e,o)).catch(()=>{})};var S=s(require("path")),R=s(require("fs-extra")),oe=s(require("inquirer"));var ut=s(require("readline")),ft=require("chalk"),dt=s(require("execa")),Er=e=>{if(!ft.supportsColor){e.write("\r");return}ut.default.cursorTo(e,0)},kr=(e,t)=>{let r=Math.min(Math.max(e/t,0),1),o=` ${e}/${t}`,n=Math.max(0,process.stderr.columns-o.length-3),i=Math.min(t,n),p=Math.round(i*r),a="#".repeat(p),c="-".repeat(i-p);Er(process.stderr),process.stderr.write(`[${a}${c}]${o}`)},Or=(e,t,r,o)=>new Promise((n,i)=>{var a;let p=(0,dt.default)(e,t,{cwd:r,stdio:["inherit","inherit","pipe"],env:o});(a=p.stderr)==null||a.on("data",c=>{let m=c.toString();if(/warning/.test(m))return;let u=m.match(/\[.*] (\d+)\/(\d+)/);if(u){kr(parseFloat(u[1]),parseFloat(u[2]));return}process.stderr.write(c)}),p.on("close",c=>{if(c!==0){i(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),gt={executeCommand:Or};var ee=s(require("fs-extra")),te=s(require("simple-git")),wt=async e=>{await(0,te.default)(e).init()},yt=async(e,t)=>{await ee.default.pathExists(t)||await ee.default.mkdir(t),await(0,te.default)(t).clone(e,t)};var U=s(require("fs-extra")),ht="https://github.com/moriahq/apps-template.git",re=(r=>(r.micro="micro",r.uikit="uikit",r))(re||{}),vt=async(e,t)=>{if(!await U.default.pathExists(e))return;let r=await U.default.readFile(e,{encoding:"utf-8"});await U.default.writeFile(e,r.replace(/{{(\w+)}}/g,(o,n)=>typeof t[n]=="string"?t[n]:o))};var Cr=async()=>(await oe.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],Rr=async()=>(await oe.default.createPromptModule()({type:"input",name:"App key",message:"Please enter a valid app key",validate:r=>/^[a-z][a-z0-9_]*$/.test(r)?!0:(console.info(""),console.info("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"],Dr=async(e,t)=>{await f({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>yt(e,t))},Ar=async e=>{await f({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>gt.executeCommand("yarn",["install"],e))},bt=async e=>{let{cwd:t}=e,r="micro",o=await Cr(),n=await Rr(),i=S.default.join(t,n);if(await R.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await Dr(ht,i),await R.default.copy(S.default.join(i,r),i),await Promise.all(Object.values(re).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=>vt(S.default.join(i,a),{appName:o,appKey:n}))),await Ar(i),await wt(i),console.info("Project init success!"),console.info("Project path:"+i)};var xt=async()=>{let e=process.cwd();await bt({cwd:e})};var j=s(require("inquirer"));var ne=s(require("axios")),Pt=async({baseUrl:e,username:t,password:r})=>{var o;try{return{cookie:(o=(await(0,ne.default)({method:"POST",url:`${e}/api/gateway/login`,data:{username:t,password:r}})).headers)==null?void 0:o["set-cookie"]}}catch(n){return console.error("Login error:",n==null?void 0:n.message),{cookie:""}}},Et=async e=>{try{return await(0,ne.default)({method:"GET",url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var kt=e=>{try{return new URL(e).origin}catch{return e}};var Ot=s(require("crypto")),St=s(require("base64url"));var Ct=e=>{try{let t=Ot.default.createCipheriv(ge,de,fe),r=t.update(e,"utf8","base64");return r+=t.final("base64"),St.default.toBase64(r)}catch(t){return console.error(`Encryption error: ${t}`),null}};var Tr=async()=>(await j.default.createPromptModule()({type:"input",name:"Domain",message:"Please enter the domain address",validate:r=>{try{return new URL(r),!0}catch{return"Please enter a valid domain name"}}})).Domain,_r=async()=>(await j.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,Lr=async()=>(await j.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:r=>!!r})).Password,Rt=async({domain:e,username:t,password:r})=>{if(e||(e=await Tr()),e=kt(e),await Et(e)){t||(t=await _r()),r||(r=await Lr());let{cookie:n}=await Pt({baseUrl:e,username:t,password:Ct(r)||r});n?(Z({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else Z({domain:e}),console.info("Login success!")};var Dt=async e=>{await Rt(e)};var ae=s(require("path"));var Vt=s(require("path")),qt=s(require("chalk")),zt=s(require("debug")),se=s(require("fs-extra"));var At=async()=>{var t;return((t=(await x({method:"GET",url:"/apps/api/v1/config"}).catch(r=>{var o,n;console.info(`getRuntimeConfig error ${((n=(o=r==null?void 0:r.response)==null?void 0:o.data)==null?void 0:n.message)||(r==null?void 0:r.message)}`)})).data)==null?void 0:t.runtime)||{}};var F=require("child_process"),D=class{constructor(t,r){this.imageName=t,this.containerName=r}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:r,volume:o=[]}){await this.removeContainer();let n=Object.keys(r).filter(a=>r[a]!==void 0).map(a=>`-e ${a}=${r[a]}`).join(" "),i=o==null?void 0:o.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,F.spawn)("docker",["logs","-f",this.containerName]);t.stdout.on("data",r=>{console.info(`${r}`)}),t.stderr.on("data",r=>{console.info(`${r}`)})}execPromise(t){return new Promise((r,o)=>{(0,F.exec)(t,(n,i,p)=>{if(n)return o(n);r({stdout:i,stderr:p})})})}};var Tt=s(require("localtunnel"));var _t=async({appKey:e,runtimeHost:t,resources:r,resourcePort:o})=>{r!=null&&r.length&&r.forEach(n=>{n.path=`http://127.0.0.1:${o}`}),await x({method:"POST",url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:r,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)}`)})},Lt=async e=>{await x({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},$t=async e=>{try{return(await(0,Tt.default)({port:e,host:"http://tunnel.gitee.work:1777"})).url}catch(t){return console.info("runTunnel error",t==null?void 0:t.message),""}};var ie=s(require("path")),It=s(require("cors")),Mt=s(require("express")),Nt=s(require("webpack")),Ut=s(require("webpack-dev-middleware")),jt=require("webpack-merge");var B=async({appKey:e,webpackConfig:t})=>{let o=(await I())({environment:"development",appKey:e});if(t){let c=require(ie.default.resolve(t));o=(0,jt.merge)(o,c)}let n=(0,Nt.default)(o),i=(0,Mt.default)(),p=Number(process.env.UI_PORT)||8e3,a=(0,Ut.default)(n);i.use((0,It.default)()),i.use(a),i.get("*",(c,m)=>{var u,d;(d=n.outputFileSystem)==null||d.readFile(ie.default.join(((u=o.output)==null?void 0:u.path)||"","index.html"),(y,l)=>{if(y||!l){m.sendStatus(404);return}m.send(l.toString())})}),i.listen(p,"0.0.0.0",()=>{console.info(`The React app is listening on port ${p}!
3
- `)})};var Bt=s(require("chokidar"));var Ft=(e,t,r)=>{for(let o of e)L({inputDir:t,outputDir:r,fileName:o,mode:"development"})},Gt=async e=>{let{inputDir:t,outputDir:r}=e,n=(await v()).getFunctionFiles();Ft(n,t,r);let i,p=Bt.default.watch(t);console.info(`watch: ${t}`),p.on("change",a=>{clearTimeout(i),i=setTimeout(()=>{console.info(`${a} has change`),Ft(n,t,r)},1e3)})};var $r=(0,zt.default)("cli:tunnel"),Ir=async()=>{let e=await At(),t=process.env.RUNTIME_IMAGE||e.image||"docker-hub.gitee.work/gitee-prod/proxima-apps-runtime-server:4.4.0-alpha-86",r=Number(process.env.CONTAINER_PORT)||8455,o="cli-dev-apps-runtime-server",n=process.env.PULL_IMAGE!=="false",i={PORT:r,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:r,containerName:o,containerEnv:i,pullImage:n}},Kt=async e=>{var me,le,ue;let{inputDir:t,outputDir:r,server:o,filesToCopy:n,resourcePort:i,ui:p,webpackConfig:a}=e;await se.default.emptyDir(r);let c=await v(),m=c.app.key,u=c.app.version,d=c.getFunctionFiles(),y=c.resources||[];if(!m){w.error("appKey is required!");return}if(!u){w.error("version is required!");return}let{domain:l}=O();if(!l){w.error("Please login in first!");return}console.info(`Tunneling to ${qt.default.bold.green(l)}`);let C=[],h=async P=>{P instanceof Error&&console.error(P),await Promise.all(C.map(A=>A())),process.exit()};process.on("SIGINT",h),process.on("uncaughtException",h),process.on("unhandledRejection",h),p&&B({appKey:m,webpackConfig:a});let Yt=`${`/${m}/development/${u}`}/server-side`,ce=Vt.default.join(r,Yt);await M(ce,n),await Gt({inputDir:t,outputDir:ce}),C.push(()=>se.default.remove(r));let G="";if(o&&d.length>0){let{runtimeImage:P,containerPort:A,containerEnv:Xt,containerName:Zt,pullImage:er}=await Ir(),T=new D(P,Zt);er&&await T.downloadImage(),await T.runContainer({port:A,env:Xt,volume:[`${r}:/usr/src/app/apps`]}),C.push(()=>T.removeContainer()),G=await f({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>$t(A)),$r("runtimeHost",G),T.logs()}if(await _t({appKey:m,runtimeHost:G,resources:y,resourcePort:i}),C.push(()=>Lt(m)),o&&((ue=(le=(me=c.getManifest())==null?void 0:me.modules)==null?void 0:le.webtrigger)!=null&&ue.length)){console.info("You can use this url for test:");let P=`${l}/apps/api/v1/:tenant/apps/${m}/environments/development/webtriggers/:webtriggerKey`;console.info(`POST ${P}`)}};var Wt=async e=>{let{copy:t=[],input:r="functions",output:o="cache",server:n=!0,resourcePort:i,ui:p,webpack:a}=e;await Kt({outputDir:ae.default.resolve(o),inputDir:ae.default.resolve(r),filesToCopy:[..._,...t],server:n,resourcePort:Number(i)||8e3,ui:!!p,webpackConfig:a})};var Mr=async({webpackConfig:e})=>{let t=await v(),{key:r}=t.app;if(!r){w.error("manifest app key is required");return}B({appKey:r,webpackConfig:e})},Ht=Mr;var Jt=async e=>{let{webpack:t}=e;await Ht({webpackConfig:t})};var Nr=`v${E}`;console.info(`GiteeTeam Apps Cli ${pe.default.bold.green(Nr)}`);console.info(`Node.js ${pe.default.bold.green(process.version)}
4
- `);var b=new Qt.Command;b.version(E,"-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(Ye);b.command("init").action(xt);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").action(Wt);b.command("deploy [filename]").option("-e --environment [environment]","app environment").action(lt);b.command("ui-dev").option("-w --webpack [file]","build ui webpack config file").action(Jt);b.parse(process.argv);
2
+ "use strict";var to=Object.create;var q=Object.defineProperty;var oo=Object.getOwnPropertyDescriptor;var ro=Object.getOwnPropertyNames;var no=Object.getPrototypeOf,io=Object.prototype.hasOwnProperty;var so=(e,t)=>()=>(e&&(t=e(e=0)),t);var ao=(e,t)=>{for(var o in t)q(e,o,{get:t[o],enumerable:!0})},po=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ro(t))!io.call(e,n)&&n!==o&&q(e,n,{get:()=>t[n],enumerable:!(r=oo(t,n))||r.enumerable});return e};var s=(e,t,o)=>(o=e!=null?to(no(e)):{},po(t||!e||!e.__esModule?q(o,"default",{value:e,enumerable:!0}):o,e));var Me={};ao(Me,{default:()=>Po});function Po({environment:e,appKey:t,distOutputPath:o="dist"}){let r=e==="production",n=e==="development",i=l=>l?{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:l},C,h)=>h===t||/\.global\.(css|less)$/.test(l)||/node_modules/.test(l)?h:`${h}__${(0,Le.default)(l+h,{algorithm:"md5"}).slice(0,8)}`,a={loader:"@ecomfe/class-names-loader",options:{classNamesModule:require.resolve("classnames")}},c=r?W.default.loader:"style-loader",m={loader:"postcss-loader",options:{postcssOptions:{plugins:[De.default]}}},u={loader:"css-loader",options:{modules:{getLocalIdent:p},importLoaders:1}},d={loader:"less-loader",options:{lessOptions:{javascriptEnabled:!0,modifyVars:{...Ie,...yo,"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 _e.default,"..."]},plugins:[xo&&new fo,new H.default.DefinePlugin({"process.env":JSON.stringify(process.env),"process.env.appKey":JSON.stringify(t)}),new $e.default({template:$.default.resolve("public/index.html"),filename:"index.html",inject:!0,appKey:t}),r&&new W.default({filename:"[name].[contenthash].css",chunkFilename:"[name].[contenthash].chunk.css"}),n&&new H.default.HotModuleReplacementPlugin,n&&new Re.default({overlay:!1}),r&&new Te.CleanWebpackPlugin].filter(Boolean),module:{rules:[{oneOf:[{test:/\.(js|mjs|jsx|ts|tsx)$/,exclude:/node_modules/,loader:"swc-loader",options:{sourceMaps:bo,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,u,m,d]},{test:/\.(png|jpg|gif)$/i,use:[{loader:"url-loader",options:{name:"[name]_[hash].[ext]",limit:100*24}}]},{test:/\.svg$/i,use:["@svgr/webpack"]}]}]},externals:[{...vo()}]}}var $,Se,Ce,Re,Ae,De,Te,_e,Le,$e,W,H,fo,go,wo,Ie,yo,ho,vo,bo,xo,Ne=so(()=>{"use strict";$=s(require("path")),Se=require("@ant-design/compatible"),Ce=require("@giteeteam/apps-team-theme"),Re=s(require("@pmmmwh/react-refresh-webpack-plugin")),Ae=require("antd"),De=s(require("autoprefixer")),Te=require("clean-webpack-plugin"),_e=s(require("css-minimizer-webpack-plugin")),Le=s(require("hasha")),$e=s(require("html-webpack-plugin")),W=s(require("mini-css-extract-plugin")),H=s(require("webpack")),fo=require("webpack-bundle-analyzer").BundleAnalyzerPlugin,{defaultAlgorithm:go,defaultSeed:wo}=Ae.theme,Ie=go({...wo,...Ce.themeConfig.token}),yo=(0,Se.convertLegacyToken)({...Ie}),ho=()=>e=>["window modules",e],vo=()=>{let e=ho();return{"react-dom":e("reactDOM"),react:e("react")}},bo=process.env.GENERATE_SOURCEMAP==="true",xo=process.env.ANALYZER_PACKAGE==="true"});var An=require("dotenv/config"),ce=s(require("chalk")),Qt=require("commander");var E="0.8.11-alpha.1";var Y=s(require("path"));var _=["manifest.yml","locales"],de=Buffer.from(process.env.ONE_AUTH_IV||"ABCDEFGHIJKLM_iv","utf-8"),ge=Buffer.from(process.env.ONE_AUTH_SECRET_KEY||"ABCDEFGHIJKL_key","utf-8"),we=process.env.ONE_AUTH_ALGORITHM||"aes-128-cbc";var U=s(require("chalk")),Je=s(require("fs-extra"));var ve=s(require("fs")),K=s(require("path")),be=s(require("@rollup/plugin-commonjs")),xe=require("rollup");var k=require("fs"),g=require("path"),ye=require("esbuild"),mo={treeShaking:!0,format:"esm",loader:"tsx"};var lo=({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 z({mode:e,...t}){return t={...mo,...t},{name:"esbuild",resolveId(o,r,n){if(!r)return o;let i=(0,g.dirname)(r),p;if((0,k.existsSync)(p=(0,g.resolve)(i,o,"index.ts")))return p;if((0,k.existsSync)(p=(0,g.resolve)(i,o,"index.tsx")))return p;if((0,k.existsSync)(p=(0,g.resolve)(i,o+".ts")))return p;if((0,k.existsSync)(p=(0,g.resolve)(i,o+".tsx")))return p;{let a=lo({source:o,dirPath:i,mode:e});if((0,k.existsSync)(a))return a;throw console.error({source:o,importer:r,options:n}),p=(0,g.relative)(".",(0,g.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,ye.transform)(o,t);return i?{code:n,map:i}:n}}}function uo(e,t,o="development"){let r=[(0,be.default)()];r.push(z({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=K.default.join(o,`${t}.ts`);try{await ve.default.promises.access(i)}catch{console.error(`${i} is not exist`);return}let p=K.default.join(r,`${t}.js`),{inputOptions:a,outputOptions:c}=uo(i,p,n);await(await(0,xe.rollup)(a)).write(c)}var Pe=s(require("ora")),f=async(e,t)=>{var r,n;let o=(0,Pe.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 Ee=s(require("path")),ke=require("@giteeteam/apps-manifest"),Oe=s(require("fs-extra")),v=async()=>{let e=Ee.default.resolve("manifest.yml"),t=await Oe.default.readFile(e);return new ke.Manifest(t.toString())};var Ue=s(require("path")),je=s(require("webpack")),Fe=s(require("webpack-merge"));var I=async()=>(await Promise.resolve().then(()=>(Ne(),Me))).default;var Be=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(Ue.default.resolve(t));i=(0,Fe.default)(i,a)}(0,je.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 Ge=s(require("path")),Ve=s(require("archiver")),J=s(require("fs-extra")),qe=async(e,t)=>{let o=Ge.default.resolve(t);return await J.default.remove(o),new Promise((r,n)=>{let i=J.default.createWriteStream(o),p=(0,Ve.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 ze=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 N=s(require("path")),We=s(require("fs-extra"));var Q=s(require("path")),Ke=s(require("fs-extra")),M=async(e,t)=>{for(let o of t)try{let r=Q.default.resolve(o),n=Q.default.join(e,o);await Ke.default.copy(r,n)}catch(r){if(r.code==="ENOENT"&&o==="locales")continue;throw r}};var He=async({outputDir:e,manifest:t,filesToCopy:o})=>{let{resources:r}=t;if(r)for(let{key:n,path:i}of r){let p=N.default.resolve(N.default.join("./",i)),a=N.default.join(e,n);await We.default.copy(p,a)}await M(e,o)};var Qe=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)}`);let{pass:u,errors:d}=a.validate();if(!u){if(d!=null&&d.length){let{message:y,path:l}=d[0];console.error(`Manifest valid error: Path '${l}', ${y}`)}else console.error("Manifest valid error");return}if(await Je.default.emptyDir(e),i&&await f({start:"start build ui",error:"build ui failed",succeed:"build ui success"},()=>Be({appKey:m,webpackConfig:p})),await f({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>ze({outputDir:e,inputDir:t,manifest:a,mode:o?"production":"development"})),await f({start:"start package",error:"package failed",succeed:"package success"},()=>He({outputDir:e,manifest:a,filesToCopy:r})),n){let y=`${m}_${c}.zip`;await f({start:"start archive",error:"archive failed",succeed:"archive success"},()=>qe(e,y)),console.info(`
3
+ The output file of the build is ${U.default.bold.green(y)}`)}};var Ye=async e=>{let{input:t="functions",output:o="package",prod:r,dev:n,copy:i=[],zip:p,ui:a,webpack:c}=e;await Qe({outputDir:Y.default.resolve(o),inputDir:Y.default.resolve(t),prod:r??!n,filesToCopy:[..._,...i],zip:p,ui:!!a,webpackConfig:c}).catch(()=>{})};var pt=s(require("fs")),ct=s(require("chalk"));var Xe=s(require("path")),Ze=s(require("lowdb")),et=s(require("lowdb/adapters/FileSync"));var X,Z=()=>{if(!X){let e=Xe.default.join(__dirname,"user.json"),t=new et.default(e);X=(0,Ze.default)(t)}return X},tt=()=>{let e=Z(),t=e.get("version").value();(!t||t!==E)&&e.defaults({version:E,user:{}}).write()},ee=e=>{tt(),Z().set("user",e).write()},O=()=>(tt(),Z().get("user").value());var rt=s(require("fs")),nt=s(require("path")),it=s(require("form-data"));var ot=s(require("axios"));var x=async({url:e,method:t,data:o,headers:r})=>{let{domain:n,cookie:i}=O();return(await(0,ot.default)({method:t,baseURL:n,url:e,data:o,headers:{...r,cookie:i}})).data};var st=async(e,t)=>{let o=new it.default;o.append("environmentKey",t),o.append("package",rt.default.createReadStream(nt.default.resolve(e))),await x({method:"POST",url:"/apps/api/v1/apps/deploy",data:o,headers:{...o.getHeaders()}})};var at=s(require("chalk")),Eo=at.default.bold.red,w={error:e=>{console.info(Eo(e))}};var mt=(r=>(r.DEVELOPMENT="development",r.STAGING="staging",r.PRODUCTION="production",r))(mt||{}),lt=async(e,t)=>{let{domain:o}=O(),{environment:r="development"}=t;if(!Object.values(mt).includes(r)){w.error("Only support development, staging, production environment.");return}if(!o){w.error("Please login in first!");return}if(!pt.default.existsSync(e)){w.error(`File:${e} is not exist`);return}console.info(`Deploying to ${ct.default.bold.green(o)}`),await f({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>st(e,r)).catch(()=>{})};var S=s(require("path")),R=s(require("fs-extra")),ne=s(require("inquirer"));var ut=s(require("readline")),ft=require("chalk"),dt=s(require("execa")),ko=e=>{if(!ft.supportsColor){e.write("\r");return}ut.default.cursorTo(e,0)},Oo=(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);ko(process.stderr),process.stderr.write(`[${a}${c}]${r}`)},So=(e,t,o,r)=>new Promise((n,i)=>{var a;let p=(0,dt.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 u=m.match(/\[.*] (\d+)\/(\d+)/);if(u){Oo(parseFloat(u[1]),parseFloat(u[2]));return}process.stderr.write(c)}),p.on("close",c=>{if(c!==0){i(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),gt={executeCommand:So};var te=s(require("fs-extra")),oe=s(require("simple-git")),wt=async e=>{await(0,oe.default)(e).init()},yt=async(e,t)=>{await te.default.pathExists(t)||await te.default.mkdir(t),await(0,oe.default)(t).clone(e,t)};var j=s(require("fs-extra")),ht="https://github.com/moriahq/apps-template.git",re=(o=>(o.micro="micro",o.uikit="uikit",o))(re||{}),vt=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 Ro=async()=>(await ne.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:o=>!!o}))["App Name"],Ao=async()=>(await ne.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 f({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>yt(e,t))},To=async e=>{await f({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>gt.executeCommand("yarn",["install"],e))},bt=async e=>{let{cwd:t}=e,o="micro",r=await Ro(),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(ht,i),await R.default.copy(S.default.join(i,o),i),await Promise.all(Object.values(re).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=>vt(S.default.join(i,a),{appName:r,appKey:n}))),await To(i),await wt(i),console.info("Project init success!"),console.info("Project path:"+i)};var xt=async()=>{let e=process.cwd();await bt({cwd:e})};var F=s(require("inquirer"));var ie=s(require("axios")),Pt=async({baseUrl:e,username:t,password:o})=>{var r;try{return{cookie:(r=(await(0,ie.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:""}}},Et=async e=>{try{return await(0,ie.default)({method:"GET",url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var kt=e=>{try{return new URL(e).origin}catch{return e}};var Ot=s(require("crypto")),St=s(require("base64url"));var Ct=e=>{try{let t=Ot.default.createCipheriv(we,ge,de),o=t.update(e,"utf8","base64");return o+=t.final("base64"),St.default.toBase64(o)}catch(t){return console.error(`Encryption error: ${t}`),null}};var _o=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,Lo=async()=>(await F.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:o=>!!o})).Username,$o=async()=>(await F.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:o=>!!o})).Password,Rt=async({domain:e,username:t,password:o})=>{if(e||(e=await _o()),e=kt(e),await Et(e)){t||(t=await Lo()),o||(o=await $o());let{cookie:n}=await Pt({baseUrl:e,username:t,password:Ct(o)||o});n?(ee({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else ee({domain:e}),console.info("Login success!")};var At=async e=>{await Rt(e)};var pe=s(require("path"));var Vt=s(require("path")),qt=s(require("chalk")),zt=s(require("debug")),ae=s(require("fs-extra"));var Dt=async()=>{var t;return((t=(await x({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 B=require("child_process"),A=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 Tt=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 x({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)}`)})},Lt=async e=>{await x({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},$t=async e=>{try{return(await(0,Tt.default)({port:e,host:"http://tunnel.gitee.work:1777"})).url}catch(t){return console.info("runTunnel error",t==null?void 0:t.message),""}};var se=s(require("path")),It=s(require("cors")),Mt=s(require("express")),Nt=s(require("webpack")),Ut=s(require("webpack-dev-middleware")),jt=require("webpack-merge");var G=async({appKey:e,webpackConfig:t})=>{let r=(await I())({environment:"development",appKey:e});if(t){let c=require(se.default.resolve(t));r=(0,jt.merge)(r,c)}let n=(0,Nt.default)(r),i=(0,Mt.default)(),p=Number(process.env.UI_PORT)||8e3,a=(0,Ut.default)(n);i.use((0,It.default)()),i.use(a),i.get("*",(c,m)=>{var u,d;(d=n.outputFileSystem)==null||d.readFile(se.default.join(((u=r.output)==null?void 0:u.path)||"","index.html"),(y,l)=>{if(y||!l){m.sendStatus(404);return}m.send(l.toString())})}),i.listen(p,"0.0.0.0",()=>{console.info(`The React app is listening on port ${p}!
4
+ `)})};var Bt=s(require("chokidar"));var Ft=(e,t,o)=>{for(let r of e)L({inputDir:t,outputDir:o,fileName:r,mode:"development"})},Gt=async e=>{let{inputDir:t,outputDir:o}=e,n=(await v()).getFunctionFiles();Ft(n,t,o);let i,p=Bt.default.watch(t);console.info(`watch: ${t}`),p.on("change",a=>{clearTimeout(i),i=setTimeout(()=>{console.info(`${a} has change`),Ft(n,t,o)},1e3)})};var Io=(0,zt.default)("cli:tunnel"),Mo=async()=>{let e=await Dt(),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="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}},Kt=async e=>{var le,ue,fe;let{inputDir:t,outputDir:o,server:r,filesToCopy:n,resourcePort:i,ui:p,webpackConfig:a}=e;await ae.default.emptyDir(o);let c=await v(),m=c.app.key,u=c.app.version,d=c.getFunctionFiles(),y=c.resources||[];if(!m){w.error("appKey is required!");return}if(!u){w.error("version is required!");return}let{domain:l}=O();if(!l){w.error("Please login in first!");return}console.info(`Tunneling to ${qt.default.bold.green(l)}`);let C=[],h=async P=>{P instanceof Error&&console.error(P),await Promise.all(C.map(D=>D())),process.exit()};process.on("SIGINT",h),process.on("uncaughtException",h),process.on("unhandledRejection",h),p&&G({appKey:m,webpackConfig:a});let Yt=`${`/${m}/development/${u}`}/server-side`,me=Vt.default.join(o,Yt);await M(me,n),await Gt({inputDir:t,outputDir:me}),C.push(()=>ae.default.remove(o));let V="";if(r&&d.length>0){let{runtimeImage:P,containerPort:D,containerEnv:Xt,containerName:Zt,pullImage:eo}=await Mo(),T=new A(P,Zt);eo&&await T.downloadImage(),await T.runContainer({port:D,env:Xt,volume:[`${o}:/usr/src/app/apps`]}),C.push(()=>T.removeContainer()),V=await f({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>$t(D)),Io("runtimeHost",V),T.logs()}if(await _t({appKey:m,runtimeHost:V,resources:y,resourcePort:i}),C.push(()=>Lt(m)),r&&((fe=(ue=(le=c.getManifest())==null?void 0:le.modules)==null?void 0:ue.webtrigger)!=null&&fe.length)){console.info("You can use this url for test:");let P=`${l}/apps/api/v1/:tenant/apps/${m}/environments/development/webtriggers/:webtriggerKey`;console.info(`POST ${P}`)}};var Wt=async e=>{let{copy:t=[],input:o="functions",output:r="cache",server:n=!0,resourcePort:i,ui:p,webpack:a}=e;await Kt({outputDir:pe.default.resolve(r),inputDir:pe.default.resolve(o),filesToCopy:[..._,...t],server:n,resourcePort:Number(i)||8e3,ui:!!p,webpackConfig:a})};var No=async({webpackConfig:e})=>{let t=await v(),{key:o}=t.app;if(!o){w.error("manifest app key is required");return}G({appKey:o,webpackConfig:e})},Ht=No;var Jt=async e=>{let{webpack:t}=e;await Ht({webpackConfig:t})};var Uo=`v${E}`;console.info(`GiteeTeam Apps Cli ${ce.default.bold.green(Uo)}`);console.info(`Node.js ${ce.default.bold.green(process.version)}
5
+ `);var b=new Qt.Command;b.version(E,"-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(Ye);b.command("init").action(xt);b.command("login").option("--domain [domain]","login domain").option("-u --username [username]","login username").option("-p --password [password]","login user password").action(At);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").action(Wt);b.command("deploy [filename]").option("-e --environment [environment]","app environment").action(lt);b.command("ui-dev").option("-w --webpack [file]","build ui webpack config file").action(Jt);b.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giteeteam/apps-cli",
3
- "version": "0.8.10",
3
+ "version": "0.8.11-alpha.1",
4
4
  "description": "Giteeteam Apps cli",
5
5
  "keywords": [
6
6
  "typescript",