@giteeteam/apps-cli 0.7.1 → 0.7.2

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 +1 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var wt=Object.create;var oe=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var xt=Object.getPrototypeOf,Et=Object.prototype.hasOwnProperty;var bt=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Pt(t))!Et.call(e,n)&&n!==r&&oe(e,n,{get:()=>t[n],enumerable:!(o=vt(t,n))||o.enumerable});return e};var a=(e,t,r)=>(r=e!=null?wt(xt(e)):{},bt(t||!e||!e.__esModule?oe(r,"default",{value:e,enumerable:!0}):r,e));var Po=require("dotenv/config"),ft=require("commander");var E="0.7.1";var B=a(require("path"));var S=["manifest.yml","locales"];var Pe=a(require("fs-extra"));var ie=a(require("fs-extra")),A=a(require("path"));var I=a(require("path")),ne=a(require("fs-extra")),L=async(e,t)=>{for(let r of t)try{let o=I.default.resolve(r),n=I.default.join(e,r);await ne.default.copy(o,n)}catch(o){if(o.code==="ENOENT"&&r==="locales")continue;throw o}};var se=async({outputDir:e,manifest:t,filesToCopy:r})=>{let{resources:o}=t;if(o)for(let{key:n,path:i}of o){let s=A.default.resolve(A.default.join("./",i)),p=A.default.join(e,n);await ie.default.copy(s,p)}await L(e,r)};var ae=a(require("path")),pe=a(require("archiver")),M=a(require("fs-extra")),ce=async(e,t)=>{let r=ae.default.resolve(t);return await M.default.remove(r),new Promise((o,n)=>{let i=M.default.createWriteStream(r),s=(0,pe.default)("zip",{zlib:{level:9}});i.on("close",function(){o()}),s.on("warning",function(p){console.log(p),p.code==="ENOENT"||n(p)}),s.on("error",function(p){console.log(p),n(p)}),s.pipe(i),s.directory(e,!1),s.finalize()})};var ue=require("rollup"),j=a(require("path")),de=a(require("fs"));var y=require("fs"),l=require("path"),me=require("esbuild"),Dt={treeShaking:!0,format:"esm",loader:"tsx"};var Rt=({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 F({mode:e,...t}){return t={...Dt,...t},{name:"esbuild",resolveId(r,o,n){if(!o)return r;let i=(0,l.dirname)(o),s;if((0,y.existsSync)(s=(0,l.resolve)(i,r,"index.ts")))return s;if((0,y.existsSync)(s=(0,l.resolve)(i,r,"index.tsx")))return s;if((0,y.existsSync)(s=(0,l.resolve)(i,r+".ts")))return s;if((0,y.existsSync)(s=(0,l.resolve)(i,r+".tsx")))return s;{let p=Rt({source:r,dirPath:i,mode:e});if((0,y.existsSync)(p))return p;throw console.error({source:r,importer:o,options:n}),s=(0,l.relative)(".",(0,l.resolve)(o,r)),new Error(`ENOENT: ${s.replace(/\\/g,"/")}`)}},async transform(r,o){t.sourcefile=o,t.loader=o.endsWith(".json")?"json":t.loader;let{code:n,map:i}=await(0,me.transform)(r,t);return i?{code:n,map:i}:n}}}var fe=a(require("@rollup/plugin-commonjs"));function St(e,t,r="development"){let o=[(0,fe.default)()];o.push(F({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 T(e){let{fileName:t,inputDir:r,outputDir:o,mode:n="development"}=e,i=j.default.join(r,`${t}.ts`);try{await de.default.promises.access(i)}catch{console.error(`${i} is not exist`);return}let s=j.default.join(o,`${t}.js`),{inputOptions:p,outputOptions:c}=St(i,s,n);await(await(0,ue.rollup)(p)).write(c)}var ge=async e=>{let{manifest:t,mode:r,outputDir:o,inputDir:n}=e,s=t.getFunctionFiles().map(async p=>{await T({inputDir:n,fileName:p,outputDir:o,mode:r})});await Promise.all(s)};var ye=a(require("ora")),m=async(e,t)=>{var o,n;let r=(0,ye.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 he=a(require("fs-extra")),we=require("@giteeteam/apps-manifest"),ve=a(require("path")),h=async()=>{let e=ve.default.resolve("manifest.yml"),t=await he.default.readFile(e);return new we.Manifest(t.toString())};var xe=async({outputDir:e,inputDir:t,prod:r,filesToCopy:o,zip:n})=>{let i=await h(),{version:s,key:p}=i.app;if(!p){console.error("manifest app key is required");return}if(!s){console.error("manifest app version is required");return}if(await Pe.default.emptyDir(e),await m({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>ge({outputDir:e,inputDir:t,manifest:i,mode:r?"production":"development"})),await m({start:"start package",error:"package failed",succeed:"package success"},()=>se({outputDir:e,manifest:i,filesToCopy:o})),n){let c=`${p}_${s}.zip`;await m({start:"start archive",error:"archive failed",succeed:"archive success"},()=>ce(e,c))}};var Ee=async e=>{let{input:t="functions",output:r="package",prod:o,dev:n,copy:i=[],zip:s}=e;await xe({outputDir:B.default.resolve(r),inputDir:B.default.resolve(t),prod:o??!n,filesToCopy:[...S,...i],zip:s})};var K=a(require("inquirer")),b=a(require("fs-extra")),w=a(require("path"));var V=a(require("simple-git")),G=a(require("fs-extra")),be=async e=>{await(0,V.default)(e).init()},Oe=async(e,t)=>{await G.default.pathExists(t)||await G.default.mkdir(t),await(0,V.default)(t).clone(e,t)};var _=a(require("fs-extra")),De="https://github.com/moriahq/apps-template.git",q=(r=>(r.micro="micro",r.uikit="uikit",r))(q||{}),Re=async(e,t)=>{if(!await _.default.pathExists(e))return;let r=await _.default.readFile(e,{encoding:"utf-8"});await _.default.writeFile(e,r.replace(/{{(\w+)}}/g,(o,n)=>typeof t[n]=="string"?t[n]:o))};var Se=require("chalk"),Le=a(require("readline")),Ae=a(require("execa")),At=e=>{if(!Se.supportsColor){e.write("\r");return}Le.default.cursorTo(e,0)},Tt=(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),s=Math.round(i*r),p="#".repeat(s),c="-".repeat(i-s);At(process.stderr),process.stderr.write(`[${p}${c}]${o}`)},_t=(e,t,r,o)=>new Promise((n,i)=>{var p;let s=(0,Ae.default)(e,t,{cwd:r,stdio:["inherit","inherit","pipe"],env:o});(p=s.stderr)==null||p.on("data",c=>{let P=c.toString();if(/warning/.test(P))return;let g=P.match(/\[.*] (\d+)\/(\d+)/);if(g){Tt(parseFloat(g[1]),parseFloat(g[2]));return}process.stderr.write(c)}),s.on("close",c=>{if(c!==0){i(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),Te={executeCommand:_t};var kt=async()=>(await K.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],$t=async()=>(await K.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.log(""),console.log("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"],Ct=async(e,t)=>{await m({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>Oe(e,t))},Ut=async e=>{await m({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>Te.executeCommand("yarn",["install"],e))},_e=async e=>{let{cwd:t}=e,r="micro",o=await kt(),n=await $t(),i=w.default.join(t,n);if(await b.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await Ct(De,i),await b.default.copy(w.default.join(i,r),i),await Promise.all(Object.values(q).map(p=>b.default.remove(w.default.join(i,p)))),await b.default.remove(w.default.join(i,"./.git"));let s=["./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(s.map(p=>Re(w.default.join(i,p),{appName:o,appKey:n}))),await Ut(i),await be(i),console.log("Project init success!"),console.log("Project path:"+i)};var ke=async()=>{let e=process.cwd();await _e({cwd:e})};var k=a(require("inquirer"));var z=a(require("axios")),$e=async({baseUrl:e,username:t,password:r})=>{var o;try{return{cookie:(o=(await(0,z.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:""}}},Ce=async e=>{try{return await(0,z.default)({method:"GET",url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var Ue=a(require("path")),Ne=a(require("lowdb")),Ie=a(require("lowdb/adapters/FileSync"));var W,H=()=>{if(!W){let e=Ue.default.join(__dirname,"user.json"),t=new Ie.default(e);W=(0,Ne.default)(t)}return W},Me=()=>{let e=H(),t=e.get("version").value();(!t||t!==E)&&e.defaults({version:E,user:{}}).write()},Q=e=>{Me(),H().set("user",e).write()},v=()=>(Me(),H().get("user").value());var Fe=e=>{try{return new URL(e).origin}catch{return e}};var je=a(require("crypto")),Be=a(require("base64url")),Nt=Buffer.from("ABCDEFGHIJKLM_iv","utf-8"),It=Buffer.from("ABCDEFGHIJKL_key","utf-8"),Mt="aes-128-cbc";var Ge=e=>{try{let t=je.default.createCipheriv(Mt,It,Nt),r=t.update(e,"utf8","base64");return r+=t.final("base64"),Be.default.toBase64(r)}catch(t){return console.error(`Encryption error: ${t}`),null}};var Ft=async()=>(await k.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,jt=async()=>(await k.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,Bt=async()=>(await k.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:r=>!!r})).Password,Ve=async({domain:e,username:t,password:r})=>{if(e||(e=await Ft()),e=Fe(e),await Ce(e)){t||(t=await jt()),r||(r=await Bt());let{cookie:n}=await $e({baseUrl:e,username:t,password:Ge(r)||r});n?(Q({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else Q({domain:e}),console.info("Login success!")};var qe=async e=>{await Ve(e)};var X=a(require("path"));var tt=a(require("path")),rt=a(require("chalk")),J=a(require("fs-extra")),ot=a(require("debug"));var Ke=a(require("axios"));var d=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:i}=v();return(await(0,Ke.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:i}})).data};var ze=async()=>{var t;return((t=(await d({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 $=require("child_process"),O=class{constructor(t,r){this.imageName=t,this.containerName=r}async downloadImage(){console.log(`Downloading image(${this.imageName}) ...`),await this.execPromise(`docker pull ${this.imageName}`),console.log(`Download image(${this.imageName}) success!`)}async runContainer({port:t,env:r,volume:o=[]}){await this.removeContainer();let n=Object.keys(r).map(p=>`-e ${p}=${r[p]}`).join(" "),i=o==null?void 0:o.map(p=>`-v ${p}`).join(" "),s=`docker run -d -p ${t}:${t} ${n} ${i} --name ${this.containerName} ${this.imageName}`;await this.execPromise(s)}async removeContainer(){await this.execPromise(`docker rm -f ${this.containerName}`).catch(()=>{})}logs(){let t=(0,$.spawn)("docker",["logs","-f",this.containerName]);t.stdout.on("data",r=>{console.log(`${r}`)}),t.stderr.on("data",r=>{console.log(`${r}`)})}execPromise(t){return new Promise((r,o)=>{(0,$.exec)(t,(n,i,s)=>{if(n)return o(n);r({stdout:i,stderr:s})})})}};var We=a(require("localtunnel"));var He=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 d({method:"POST",url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:r,runtimeHost:t}}).catch(n=>{var i,s;console.info(`addTunnel error ${((s=(i=n==null?void 0:n.response)==null?void 0:i.data)==null?void 0:s.message)||(n==null?void 0:n.message)}`)})},Qe=async e=>{await d({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Je=async e=>{try{return(await(0,We.default)({port:e,host:"http://tunnel.gitee.work:1777"})).url}catch(t){return console.info("runTunnel error",t==null?void 0:t.message),""}};var Xe=a(require("chalk")),Gt=Xe.default.bold.red,u={error:e=>{console.info(Gt(e))}};var Ze=a(require("chokidar"));var Ye=(e,t,r)=>{for(let o of e)T({inputDir:t,outputDir:r,fileName:o,mode:"development"})},et=async e=>{let{inputDir:t,outputDir:r}=e,n=(await h()).getFunctionFiles();Ye(n,t,r);let i,s=Ze.default.watch(t);console.info(`watch: ${t}`),s.on("change",p=>{clearTimeout(i),i=setTimeout(()=>{console.info(`${p} has change`),Ye(n,t,r)},1e3)})};var Vt=(0,ot.default)("cli:tunnel"),qt=async()=>{let e=await ze(),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={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};return{runtimeImage:t,containerPort:r,containerName:o,containerEnv:n}},nt=async e=>{var Z,ee,te;let{inputDir:t,outputDir:r,server:o,filesToCopy:n,resourcePort:i}=e;await J.default.emptyDir(r);let s=await h(),p=s.app.key,c=s.app.version,P=s.getFunctionFiles(),g=s.resources||[];if(!p){u.error("appKey is required!");return}if(!c){u.error("version is required!");return}let{domain:C}=v();if(!C){u.error("Please login in first!");return}console.info(`Tunneling to ${rt.default.bold.green(C)}`);let D=[],U=async()=>{await Promise.all(D.map(x=>x())),process.exit()};process.on("SIGINT",U),process.on("uncaughtException",U),process.on("unhandledRejection",U);let gt=`${`/${p}/development/${c}`}/server-side`,Y=tt.default.join(r,gt);await L(Y,n),await et({inputDir:t,outputDir:Y}),D.push(()=>J.default.remove(r));let N="";if(o&&P.length>0){let{runtimeImage:x,containerPort:re,containerEnv:yt,containerName:ht}=await qt(),R=new O(x,ht);await R.downloadImage(),await R.runContainer({port:re,env:yt,volume:[`${r}:/usr/src/app/apps`]}),D.push(()=>R.removeContainer()),N=await m({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>Je(re)),Vt("runtimeHost",N),R.logs()}if(await He({appKey:p,runtimeHost:N,resources:g,resourcePort:i}),D.push(()=>Qe(p)),o&&((te=(ee=(Z=s.getManifest())==null?void 0:Z.modules)==null?void 0:ee.webtrigger)!=null&&te.length)){console.log("You can use this url for test:");let x=`${C}/apps/api/v1/:tenant/apps/${p}/environments/development/webtriggers/:webtriggerKey`;console.log(`POST ${x}`)}};var it=async e=>{let{copy:t=[],input:r="functions",output:o="cache",server:n=!0,resourcePort:i}=e;await nt({outputDir:X.default.resolve(o),inputDir:X.default.resolve(r),filesToCopy:[...S,...t],server:n,resourcePort:Number(i)||8e3})};var mt=a(require("fs")),lt=a(require("chalk"));var st=a(require("fs")),at=a(require("path")),pt=a(require("form-data"));var ct=async(e,t)=>{let r=new pt.default;r.append("environmentKey",t),r.append("package",st.default.createReadStream(at.default.resolve(e))),await d({method:"POST",url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})};var ut=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(ut||{}),dt=async(e,t)=>{let{domain:r}=v(),{environment:o="development"}=t;if(!Object.values(ut).includes(o)){u.error("Only support development, staging, production environment.");return}if(!r){u.error("Please login in first!");return}if(!mt.default.existsSync(e)){u.error(`File:${e} is not exist`);return}console.info(`Deploying to ${lt.default.bold.green(r)}`),await m({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>ct(e,o)).catch(()=>{})};var f=new ft.Command;f.version(E,"-v -V --vers").description("Giteeteam Apps Cli");f.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").action(Ee);f.command("init").action(ke);f.command("login").option("--domain [domain]","login domain").option("-u --username [username]","login username").option("-p --password [password]","login user password").action(qe);f.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").action(it);f.command("deploy [filename]").option("-e --environment [environment]","app environment").action(dt);f.parse(process.argv);
2
+ "use strict";var wt=Object.create;var oe=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var xt=Object.getPrototypeOf,Et=Object.prototype.hasOwnProperty;var bt=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Pt(t))!Et.call(e,n)&&n!==r&&oe(e,n,{get:()=>t[n],enumerable:!(o=vt(t,n))||o.enumerable});return e};var a=(e,t,r)=>(r=e!=null?wt(xt(e)):{},bt(t||!e||!e.__esModule?oe(r,"default",{value:e,enumerable:!0}):r,e));var Po=require("dotenv/config"),ft=require("commander");var E="0.7.2";var G=a(require("path"));var L=["manifest.yml","locales"];var Pe=a(require("fs-extra"));var ie=a(require("fs-extra")),T=a(require("path"));var M=a(require("path")),ne=a(require("fs-extra")),A=async(e,t)=>{for(let r of t)try{let o=M.default.resolve(r),n=M.default.join(e,r);await ne.default.copy(o,n)}catch(o){if(o.code==="ENOENT"&&r==="locales")continue;throw o}};var se=async({outputDir:e,manifest:t,filesToCopy:r})=>{let{resources:o}=t;if(o)for(let{key:n,path:i}of o){let s=T.default.resolve(T.default.join("./",i)),p=T.default.join(e,n);await ie.default.copy(s,p)}await A(e,r)};var ae=a(require("path")),pe=a(require("archiver")),F=a(require("fs-extra")),ce=async(e,t)=>{let r=ae.default.resolve(t);return await F.default.remove(r),new Promise((o,n)=>{let i=F.default.createWriteStream(r),s=(0,pe.default)("zip",{zlib:{level:9}});i.on("close",function(){o()}),s.on("warning",function(p){console.log(p),p.code==="ENOENT"||n(p)}),s.on("error",function(p){console.log(p),n(p)}),s.pipe(i),s.directory(e,!1),s.finalize()})};var ue=require("rollup"),B=a(require("path")),de=a(require("fs"));var h=require("fs"),l=require("path"),me=require("esbuild"),Dt={treeShaking:!0,format:"esm",loader:"tsx"};var Rt=({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 j({mode:e,...t}){return t={...Dt,...t},{name:"esbuild",resolveId(r,o,n){if(!o)return r;let i=(0,l.dirname)(o),s;if((0,h.existsSync)(s=(0,l.resolve)(i,r,"index.ts")))return s;if((0,h.existsSync)(s=(0,l.resolve)(i,r,"index.tsx")))return s;if((0,h.existsSync)(s=(0,l.resolve)(i,r+".ts")))return s;if((0,h.existsSync)(s=(0,l.resolve)(i,r+".tsx")))return s;{let p=Rt({source:r,dirPath:i,mode:e});if((0,h.existsSync)(p))return p;throw console.error({source:r,importer:o,options:n}),s=(0,l.relative)(".",(0,l.resolve)(o,r)),new Error(`ENOENT: ${s.replace(/\\/g,"/")}`)}},async transform(r,o){t.sourcefile=o,t.loader=o.endsWith(".json")?"json":t.loader;let{code:n,map:i}=await(0,me.transform)(r,t);return i?{code:n,map:i}:n}}}var fe=a(require("@rollup/plugin-commonjs"));function St(e,t,r="development"){let o=[(0,fe.default)()];o.push(j({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 _(e){let{fileName:t,inputDir:r,outputDir:o,mode:n="development"}=e,i=B.default.join(r,`${t}.ts`);try{await de.default.promises.access(i)}catch{console.error(`${i} is not exist`);return}let s=B.default.join(o,`${t}.js`),{inputOptions:p,outputOptions:c}=St(i,s,n);await(await(0,ue.rollup)(p)).write(c)}var ge=async e=>{let{manifest:t,mode:r,outputDir:o,inputDir:n}=e,s=t.getFunctionFiles().map(async p=>{await _({inputDir:n,fileName:p,outputDir:o,mode:r})});await Promise.all(s)};var ye=a(require("ora")),m=async(e,t)=>{var o,n;let r=(0,ye.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 he=a(require("fs-extra")),we=require("@giteeteam/apps-manifest"),ve=a(require("path")),w=async()=>{let e=ve.default.resolve("manifest.yml"),t=await he.default.readFile(e);return new we.Manifest(t.toString())};var xe=async({outputDir:e,inputDir:t,prod:r,filesToCopy:o,zip:n})=>{let i=await w(),{version:s,key:p}=i.app;if(!p){console.error("manifest app key is required");return}if(!s){console.error("manifest app version is required");return}if(await Pe.default.emptyDir(e),await m({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>ge({outputDir:e,inputDir:t,manifest:i,mode:r?"production":"development"})),await m({start:"start package",error:"package failed",succeed:"package success"},()=>se({outputDir:e,manifest:i,filesToCopy:o})),n){let c=`${p}_${s}.zip`;await m({start:"start archive",error:"archive failed",succeed:"archive success"},()=>ce(e,c))}};var Ee=async e=>{let{input:t="functions",output:r="package",prod:o,dev:n,copy:i=[],zip:s}=e;await xe({outputDir:G.default.resolve(r),inputDir:G.default.resolve(t),prod:o??!n,filesToCopy:[...L,...i],zip:s})};var z=a(require("inquirer")),b=a(require("fs-extra")),v=a(require("path"));var q=a(require("simple-git")),V=a(require("fs-extra")),be=async e=>{await(0,q.default)(e).init()},Oe=async(e,t)=>{await V.default.pathExists(t)||await V.default.mkdir(t),await(0,q.default)(t).clone(e,t)};var k=a(require("fs-extra")),De="https://github.com/moriahq/apps-template.git",K=(r=>(r.micro="micro",r.uikit="uikit",r))(K||{}),Re=async(e,t)=>{if(!await k.default.pathExists(e))return;let r=await k.default.readFile(e,{encoding:"utf-8"});await k.default.writeFile(e,r.replace(/{{(\w+)}}/g,(o,n)=>typeof t[n]=="string"?t[n]:o))};var Se=require("chalk"),Le=a(require("readline")),Ae=a(require("execa")),At=e=>{if(!Se.supportsColor){e.write("\r");return}Le.default.cursorTo(e,0)},Tt=(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),s=Math.round(i*r),p="#".repeat(s),c="-".repeat(i-s);At(process.stderr),process.stderr.write(`[${p}${c}]${o}`)},_t=(e,t,r,o)=>new Promise((n,i)=>{var p;let s=(0,Ae.default)(e,t,{cwd:r,stdio:["inherit","inherit","pipe"],env:o});(p=s.stderr)==null||p.on("data",c=>{let x=c.toString();if(/warning/.test(x))return;let g=x.match(/\[.*] (\d+)\/(\d+)/);if(g){Tt(parseFloat(g[1]),parseFloat(g[2]));return}process.stderr.write(c)}),s.on("close",c=>{if(c!==0){i(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),Te={executeCommand:_t};var kt=async()=>(await z.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],$t=async()=>(await z.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.log(""),console.log("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"],Ct=async(e,t)=>{await m({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>Oe(e,t))},Ut=async e=>{await m({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>Te.executeCommand("yarn",["install"],e))},_e=async e=>{let{cwd:t}=e,r="micro",o=await kt(),n=await $t(),i=v.default.join(t,n);if(await b.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await Ct(De,i),await b.default.copy(v.default.join(i,r),i),await Promise.all(Object.values(K).map(p=>b.default.remove(v.default.join(i,p)))),await b.default.remove(v.default.join(i,"./.git"));let s=["./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(s.map(p=>Re(v.default.join(i,p),{appName:o,appKey:n}))),await Ut(i),await be(i),console.log("Project init success!"),console.log("Project path:"+i)};var ke=async()=>{let e=process.cwd();await _e({cwd:e})};var $=a(require("inquirer"));var W=a(require("axios")),$e=async({baseUrl:e,username:t,password:r})=>{var o;try{return{cookie:(o=(await(0,W.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:""}}},Ce=async e=>{try{return await(0,W.default)({method:"GET",url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var Ue=a(require("path")),Ne=a(require("lowdb")),Ie=a(require("lowdb/adapters/FileSync"));var H,Q=()=>{if(!H){let e=Ue.default.join(__dirname,"user.json"),t=new Ie.default(e);H=(0,Ne.default)(t)}return H},Me=()=>{let e=Q(),t=e.get("version").value();(!t||t!==E)&&e.defaults({version:E,user:{}}).write()},J=e=>{Me(),Q().set("user",e).write()},P=()=>(Me(),Q().get("user").value());var Fe=e=>{try{return new URL(e).origin}catch{return e}};var je=a(require("crypto")),Be=a(require("base64url")),Nt=Buffer.from("ABCDEFGHIJKLM_iv","utf-8"),It=Buffer.from("ABCDEFGHIJKL_key","utf-8"),Mt="aes-128-cbc";var Ge=e=>{try{let t=je.default.createCipheriv(Mt,It,Nt),r=t.update(e,"utf8","base64");return r+=t.final("base64"),Be.default.toBase64(r)}catch(t){return console.error(`Encryption error: ${t}`),null}};var Ft=async()=>(await $.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,jt=async()=>(await $.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,Bt=async()=>(await $.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:r=>!!r})).Password,Ve=async({domain:e,username:t,password:r})=>{if(e||(e=await Ft()),e=Fe(e),await Ce(e)){t||(t=await jt()),r||(r=await Bt());let{cookie:n}=await $e({baseUrl:e,username:t,password:Ge(r)||r});n?(J({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else J({domain:e}),console.info("Login success!")};var qe=async e=>{await Ve(e)};var Y=a(require("path"));var tt=a(require("path")),rt=a(require("chalk")),X=a(require("fs-extra")),ot=a(require("debug"));var Ke=a(require("axios"));var d=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:i}=P();return(await(0,Ke.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:i}})).data};var ze=async()=>{var t;return((t=(await d({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 C=require("child_process"),O=class{constructor(t,r){this.imageName=t,this.containerName=r}async downloadImage(){console.log(`Downloading image(${this.imageName}) ...`),await this.execPromise(`docker pull ${this.imageName}`),console.log(`Download image(${this.imageName}) success!`)}async runContainer({port:t,env:r,volume:o=[]}){await this.removeContainer();let n=Object.keys(r).map(p=>`-e ${p}=${r[p]}`).join(" "),i=o==null?void 0:o.map(p=>`-v ${p}`).join(" "),s=`docker run -d -p ${t}:${t} ${n} ${i} --name ${this.containerName} ${this.imageName}`;await this.execPromise(s)}async removeContainer(){await this.execPromise(`docker rm -f ${this.containerName}`).catch(()=>{})}logs(){let t=(0,C.spawn)("docker",["logs","-f",this.containerName]);t.stdout.on("data",r=>{console.log(`${r}`)}),t.stderr.on("data",r=>{console.log(`${r}`)})}execPromise(t){return new Promise((r,o)=>{(0,C.exec)(t,(n,i,s)=>{if(n)return o(n);r({stdout:i,stderr:s})})})}};var We=a(require("localtunnel"));var He=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 d({method:"POST",url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:r,runtimeHost:t}}).catch(n=>{var i,s;console.info(`addTunnel error ${((s=(i=n==null?void 0:n.response)==null?void 0:i.data)==null?void 0:s.message)||(n==null?void 0:n.message)}`)})},Qe=async e=>{await d({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Je=async e=>{try{return(await(0,We.default)({port:e,host:"http://tunnel.gitee.work:1777"})).url}catch(t){return console.info("runTunnel error",t==null?void 0:t.message),""}};var Xe=a(require("chalk")),Gt=Xe.default.bold.red,u={error:e=>{console.info(Gt(e))}};var Ze=a(require("chokidar"));var Ye=(e,t,r)=>{for(let o of e)_({inputDir:t,outputDir:r,fileName:o,mode:"development"})},et=async e=>{let{inputDir:t,outputDir:r}=e,n=(await w()).getFunctionFiles();Ye(n,t,r);let i,s=Ze.default.watch(t);console.info(`watch: ${t}`),s.on("change",p=>{clearTimeout(i),i=setTimeout(()=>{console.info(`${p} has change`),Ye(n,t,r)},1e3)})};var Vt=(0,ot.default)("cli:tunnel"),qt=async()=>{let e=await ze(),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={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};return{runtimeImage:t,containerPort:r,containerName:o,containerEnv:n}},nt=async e=>{var ee,te,re;let{inputDir:t,outputDir:r,server:o,filesToCopy:n,resourcePort:i}=e;await X.default.emptyDir(r);let s=await w(),p=s.app.key,c=s.app.version,x=s.getFunctionFiles(),g=s.resources||[];if(!p){u.error("appKey is required!");return}if(!c){u.error("version is required!");return}let{domain:U}=P();if(!U){u.error("Please login in first!");return}console.info(`Tunneling to ${rt.default.bold.green(U)}`);let D=[],N=async y=>{y instanceof Error&&console.error(y),await Promise.all(D.map(R=>R())),process.exit()};process.on("SIGINT",N),process.on("uncaughtException",N),process.on("unhandledRejection",N);let gt=`${`/${p}/development/${c}`}/server-side`,Z=tt.default.join(r,gt);await A(Z,n),await et({inputDir:t,outputDir:Z}),D.push(()=>X.default.remove(r));let I="";if(o&&x.length>0){let{runtimeImage:y,containerPort:R,containerEnv:yt,containerName:ht}=await qt(),S=new O(y,ht);await S.downloadImage(),await S.runContainer({port:R,env:yt,volume:[`${r}:/usr/src/app/apps`]}),D.push(()=>S.removeContainer()),I=await m({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>Je(R)),Vt("runtimeHost",I),S.logs()}if(await He({appKey:p,runtimeHost:I,resources:g,resourcePort:i}),D.push(()=>Qe(p)),o&&((re=(te=(ee=s.getManifest())==null?void 0:ee.modules)==null?void 0:te.webtrigger)!=null&&re.length)){console.log("You can use this url for test:");let y=`${U}/apps/api/v1/:tenant/apps/${p}/environments/development/webtriggers/:webtriggerKey`;console.log(`POST ${y}`)}};var it=async e=>{let{copy:t=[],input:r="functions",output:o="cache",server:n=!0,resourcePort:i}=e;await nt({outputDir:Y.default.resolve(o),inputDir:Y.default.resolve(r),filesToCopy:[...L,...t],server:n,resourcePort:Number(i)||8e3})};var mt=a(require("fs")),lt=a(require("chalk"));var st=a(require("fs")),at=a(require("path")),pt=a(require("form-data"));var ct=async(e,t)=>{let r=new pt.default;r.append("environmentKey",t),r.append("package",st.default.createReadStream(at.default.resolve(e))),await d({method:"POST",url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})};var ut=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(ut||{}),dt=async(e,t)=>{let{domain:r}=P(),{environment:o="development"}=t;if(!Object.values(ut).includes(o)){u.error("Only support development, staging, production environment.");return}if(!r){u.error("Please login in first!");return}if(!mt.default.existsSync(e)){u.error(`File:${e} is not exist`);return}console.info(`Deploying to ${lt.default.bold.green(r)}`),await m({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>ct(e,o)).catch(()=>{})};var f=new ft.Command;f.version(E,"-v -V --vers").description("Giteeteam Apps Cli");f.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").action(Ee);f.command("init").action(ke);f.command("login").option("--domain [domain]","login domain").option("-u --username [username]","login username").option("-p --password [password]","login user password").action(qe);f.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").action(it);f.command("deploy [filename]").option("-e --environment [environment]","app environment").action(dt);f.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giteeteam/apps-cli",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
4
4
  "description": "Giteeteam Apps cli",
5
5
  "keywords": [
6
6
  "typescript",