@giteeteam/apps-cli 0.6.1 → 0.6.3
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 +1 -1
- package/package.json +2 -7
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var gt=Object.create;var re=Object.defineProperty;var yt=Object.getOwnPropertyDescriptor;var vt=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,wt=Object.prototype.hasOwnProperty;var Pt=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of vt(t))!wt.call(e,n)&&n!==r&&re(e,n,{get:()=>t[n],enumerable:!(o=yt(t,n))||o.enumerable});return e};var a=(e,t,r)=>(r=e!=null?gt(ht(e)):{},Pt(t||!e||!e.__esModule?re(r,"default",{value:e,enumerable:!0}):r,e));var wo=require("dotenv/config"),lt=require("commander");var x="0.6.1";var B=a(require("path"));var S=["manifest.yml","locales"];var we=a(require("fs-extra"));var ne=a(require("fs-extra")),T=a(require("path"));var N=a(require("path")),oe=a(require("fs-extra")),A=async(e,t)=>{for(let r of t)try{let o=N.default.resolve(r),n=N.default.join(e,r);await oe.default.copy(o,n)}catch(o){if(o.code==="ENOENT"&&r==="locales")continue;throw o}};var ie=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 ne.default.copy(s,p)}await A(e,r)};var se=a(require("path")),ae=a(require("archiver")),M=a(require("fs-extra")),pe=async(e,t)=>{let r=se.default.resolve(t);return await M.default.remove(r),new Promise((o,n)=>{let i=M.default.createWriteStream(r),s=(0,ae.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 me=require("rollup"),F=a(require("path")),le=a(require("fs"));var E=require("fs"),l=require("path"),ce=require("esbuild"),Et={treeShaking:!0,format:"esm",loader:"tsx"};function j(e){return e={...Et,...e},{name:"esbuild",resolveId(t,r,o){if(!r||[".ts",".tsx",".js",".jsx",".mjs",".json"].some(s=>t.endsWith(s)))return t;let n=(0,l.dirname)(r),i;if((0,E.existsSync)(i=(0,l.resolve)(n,t,"index.ts")))return i;if((0,E.existsSync)(i=(0,l.resolve)(n,t,"index.tsx")))return i;if((0,E.existsSync)(i=(0,l.resolve)(n,t+".ts")))return i;if((0,E.existsSync)(i=(0,l.resolve)(n,t+".tsx")))return i;throw console.error({source:t,importer:r,options:o}),i=(0,l.relative)(".",(0,l.resolve)(r,t)),new Error(`ENOENT: ${i.replace(/\\/g,"/")}`)},async transform(t,r){e.sourcefile=r,e.loader=r.endsWith(".json")?"json":e.loader;let{code:o,map:n}=await(0,ce.transform)(t,e);return n?{code:o,map:n}:o}}}var ue=require("@rollup/plugin-node-resolve"),de=a(require("@rollup/plugin-commonjs"));function Ot(e,t,r="development"){let o=[(0,ue.nodeResolve)(),(0,de.default)()];return o.push(j({sourcemap:r==="development",minify:r!=="development",target:"es2018",jsx:"transform",jsxFactory:"AppsUI.createElement",jsxFragment:"AppsUI.Fragment"})),{inputOptions:{input:e,plugins:o},outputOptions:{file:t,format:"es",sourcemap:r==="development"}}}async function L(e){let{fileName:t,inputDir:r,outputDir:o,mode:n="development"}=e,i=F.default.join(r,`${t}.ts`);try{await le.default.promises.access(i)}catch{console.error(`${i} is not exist`);return}let s=F.default.join(o,`${t}.js`),{inputOptions:p,outputOptions:c}=Ot(i,s,n);await(await(0,me.rollup)(p)).write(c)}var fe=async e=>{let{manifest:t,mode:r,outputDir:o,inputDir:n}=e,s=t.getFunctionFiles().map(async p=>{await L({inputDir:n,fileName:p,outputDir:o,mode:r})});await Promise.all(s)};var ge=a(require("ora")),m=async(e,t)=>{var o,n;let r=(0,ge.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 ye=a(require("fs-extra")),ve=require("@giteeteam/apps-manifest"),he=a(require("path")),y=async()=>{let e=he.default.resolve("manifest.yml"),t=await ye.default.readFile(e);return new ve.Manifest(t.toString())};var Pe=async({outputDir:e,inputDir:t,prod:r,filesToCopy:o,zip:n})=>{let i=await y(),{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 we.default.emptyDir(e),await m({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>fe({outputDir:e,inputDir:t,manifest:i,mode:r?"production":"development"})),await m({start:"start package",error:"package failed",succeed:"package success"},()=>ie({outputDir:e,manifest:i,filesToCopy:o})),n){let c=`${p}_${s}.zip`;await m({start:"start archive",error:"archive failed",succeed:"archive success"},()=>pe(e,c))}};var xe=async e=>{let{input:t="src",output:r="package",prod:o,dev:n,copy:i=[],zip:s}=e;await Pe({outputDir:B.default.resolve(r),inputDir:B.default.resolve(t),prod:o??!n,filesToCopy:[...S,...i],zip:s})};var K=a(require("inquirer")),O=a(require("fs-extra")),v=a(require("path"));var V=a(require("simple-git")),G=a(require("fs-extra")),Ee=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")),be="https://github.com/moriahq/apps-template.git",q=(r=>(r.micro="micro",r.uikit="uikit",r))(q||{}),De=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 Re=require("chalk"),Se=a(require("readline")),Ae=a(require("execa")),Rt=e=>{if(!Re.supportsColor){e.write("\r");return}Se.default.cursorTo(e,0)},St=(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);Rt(process.stderr),process.stderr.write(`[${p}${c}]${o}`)},At=(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 w=c.toString();if(/warning/.test(w))return;let g=w.match(/\[.*] (\d+)\/(\d+)/);if(g){St(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:At};var Tt=async()=>(await K.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],Lt=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"],_t=async(e,t)=>{await m({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>Oe(e,t))},kt=async e=>{await m({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>Te.executeCommand("yarn",["install"],e))},Le=async e=>{let{cwd:t}=e,r="micro",o=await Tt(),n=await Lt(),i=v.default.join(t,n);if(await O.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await _t(be,i),await O.default.copy(v.default.join(i,r),i),await Promise.all(Object.values(q).map(p=>O.default.remove(v.default.join(i,p)))),await O.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"];await Promise.all(s.map(p=>De(v.default.join(i,p),{appName:o,appKey:n}))),await kt(i),await Ee(i),console.log("Project init success!"),console.log("Project path:"+i)};var _e=async()=>{let e=process.cwd();await Le({cwd:e})};var C=a(require("inquirer"));var ke=a(require("axios")),Ce=async({baseUrl:e,username:t,password:r})=>{var o;try{return{cookie:(o=(await(0,ke.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:""}}};var $e=a(require("path")),Ue=a(require("lowdb")),Ie=a(require("lowdb/adapters/FileSync"));var Ct=$e.default.join(__dirname,"user.json"),$t=new Ie.default(Ct),k=(0,Ue.default)($t),Ne=()=>{let e=k.get("version").value();(!e||e!==x)&&k.defaults({version:x,user:{}}).write()},z=e=>{Ne(),k.set("user",e).write()},h=()=>(Ne(),k.get("user").value());var Me=a(require("validator/lib/isIP"));var je=e=>{let[,t]=e.split("//");return(0,Me.default)(t)},Fe=e=>{try{return new URL(e).origin}catch{return e}};var Be=a(require("crypto")),Ge=a(require("base64url")),Ut=Buffer.from("ABCDEFGHIJKLM_iv","utf-8"),It=Buffer.from("ABCDEFGHIJKL_key","utf-8"),Nt="aes-128-cbc";var Ve=e=>{try{let t=Be.default.createCipheriv(Nt,It,Ut),r=t.update(e,"utf8","base64");return r+=t.final("base64"),Ge.default.toBase64(r)}catch(t){return console.error(`Encryption error: ${t}`),null}};var Mt=async()=>(await C.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 C.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,Ft=async()=>(await C.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:r=>!!r})).Password,qe=async({domain:e,username:t,password:r})=>{e||(e=await Mt()),e=Fe(e);let o=je(e);if(o)z({domain:e,dev:o}),console.info("Login success!");else{t||(t=await jt()),r||(r=await Ft());let{cookie:n}=await Ce({baseUrl:e,username:t,password:Ve(r)||r});n&&(z({domain:e,username:t,cookie:n,dev:o}),console.info("Login success!"))}};var Ke=async e=>{await qe(e)};var H=a(require("path"));var rt=a(require("path")),W=a(require("fs-extra")),ot=a(require("debug"));var ze=a(require("axios"));var u=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:i}=h();return(await(0,ze.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:i}})).data};var We=async()=>{var t;return((t=(await u({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"),b=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 He=a(require("localtunnel"));var Qe=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 u({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)}`)})},Je=async e=>{await u({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Xe=async e=>{try{return(await(0,He.default)({port:e,host:"http://tunnel.gitee.work:1777"})).url}catch(t){return console.info("runTunnel error",t==null?void 0:t.message),""}};var Ye=a(require("chalk")),Bt=Ye.default.bold.red,d={error:e=>{console.info(Bt(e))}};var et=a(require("chokidar"));var Ze=(e,t,r)=>{for(let o of e)L({inputDir:t,outputDir:r,fileName:o,mode:"development"})},tt=async e=>{let{inputDir:t,outputDir:r}=e,n=(await y()).getFunctionFiles();Ze(n,t,r);let i,s=et.default.watch(t);console.info(`watch: ${t}`),s.on("change",p=>{clearTimeout(i),i=setTimeout(()=>{console.info(`${p} has change`),Ze(n,t,r)},1e3)})};var Gt=(0,ot.default)("cli:tunnel"),Vt=async()=>{let e=await We(),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 Y,Z,ee;let{inputDir:t,outputDir:r,server:o,filesToCopy:n,resourcePort:i}=e;await W.default.emptyDir(r);let s=await y(),p=s.app.key,c=s.app.version,w=s.getFunctionFiles(),g=s.resources||[];if(!p){d.error("appKey is required!");return}if(!c){d.error("version is required!");return}let{domain:J}=h();if(!J){d.error("Please login in first!");return}let D=[],U=async()=>{await Promise.all(D.map(P=>P())),process.exit()};process.on("SIGINT",U),process.on("uncaughtException",U),process.on("unhandledRejection",U);let ut=`${`/${p}/development/${c}`}/server-side`,X=rt.default.join(r,ut);await A(X,n),await tt({inputDir:t,outputDir:X}),D.push(()=>W.default.remove(r));let I="";if(o&&w.length>0){let{runtimeImage:P,containerPort:te,containerEnv:dt,containerName:ft}=await Vt(),R=new b(P,ft);await R.downloadImage(),await R.runContainer({port:te,env:dt,volume:[`${r}:/usr/src/app/apps`]}),D.push(()=>R.removeContainer()),I=await m({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>Xe(te)),Gt("runtimeHost",I),R.logs()}if(await Qe({appKey:p,runtimeHost:I,resources:g,resourcePort:i}),D.push(()=>Je(p)),o&&((ee=(Z=(Y=s.getManifest())==null?void 0:Y.modules)==null?void 0:Z.webtrigger)!=null&&ee.length)){console.log("You can use this url for test:");let P=`${J}/apps/api/v1/:tenant/apps/${p}/environments/development/webtriggers/:webtriggerKey`;console.log(`POST ${P}`)}};var it=async e=>{let{copy:t=[],input:r="src",output:o="cache",server:n=!0,resourcePort:i}=e;await nt({outputDir:H.default.resolve(o),inputDir:H.default.resolve(r),filesToCopy:[...S,...t],server:n,resourcePort:Number(i)||8e3})};var Q=a(require("fs")),st=a(require("path")),at=a(require("form-data"));var pt=async(e,t)=>{if(!Q.default.existsSync(e)){console.info(`file:${e} is not exist`);return}let r=new at.default;r.append("environmentKey",t),r.append("package",Q.default.createReadStream(st.default.resolve(e))),await u({method:"POST",url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})};var ct=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(ct||{}),mt=async(e,t)=>{let{domain:r}=h(),{environment:o="development"}=t;if(!Object.values(ct).includes(o)){d.error("Only support development, staging, production environment.");return}if(!r){d.error("Please login in first!");return}await m({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>pt(e,o)).catch(()=>{})};var f=new lt.Command;f.version(x,"-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(xe);f.command("init").action(_e);f.command("login").option("--domain [domain]","login domain").option("-u --username [username]","login username").option("-p --password [password]","login user password").action(Ke);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(mt);f.parse(process.argv);
|
|
2
|
+
"use strict";var yt=Object.create;var oe=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var xt=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of wt(t))!Pt.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?yt(ht(e)):{},xt(t||!e||!e.__esModule?oe(r,"default",{value:e,enumerable:!0}):r,e));var wo=require("dotenv/config"),ut=require("commander");var x="0.6.3";var F=a(require("path"));var S=["manifest.yml","locales"];var Pe=a(require("fs-extra"));var ie=a(require("fs-extra")),T=a(require("path"));var I=a(require("path")),ne=a(require("fs-extra")),A=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=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")),N=a(require("fs-extra")),ce=async(e,t)=>{let r=ae.default.resolve(t);return await N.default.remove(r),new Promise((o,n)=>{let i=N.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 le=require("rollup"),j=a(require("path")),ue=a(require("fs"));var E=require("fs"),l=require("path"),me=require("esbuild"),Ot={treeShaking:!0,format:"esm",loader:"tsx"};function M(e){return e={...Ot,...e},{name:"esbuild",resolveId(t,r,o){if(!r||[".ts",".tsx",".js",".jsx",".mjs",".json"].some(s=>t.endsWith(s)))return t;let n=(0,l.dirname)(r),i;if((0,E.existsSync)(i=(0,l.resolve)(n,t,"index.ts")))return i;if((0,E.existsSync)(i=(0,l.resolve)(n,t,"index.tsx")))return i;if((0,E.existsSync)(i=(0,l.resolve)(n,t+".ts")))return i;if((0,E.existsSync)(i=(0,l.resolve)(n,t+".tsx")))return i;throw console.error({source:t,importer:r,options:o}),i=(0,l.relative)(".",(0,l.resolve)(r,t)),new Error(`ENOENT: ${i.replace(/\\/g,"/")}`)},async transform(t,r){e.sourcefile=r,e.loader=r.endsWith(".json")?"json":e.loader;let{code:o,map:n}=await(0,me.transform)(t,e);return n?{code:o,map:n}:o}}}var de=require("@rollup/plugin-node-resolve"),fe=a(require("@rollup/plugin-commonjs"));function bt(e,t,r="development"){let o=[(0,de.nodeResolve)(),(0,fe.default)()];return o.push(M({sourcemap:r==="development",minify:r!=="development",target:"es2018",jsx:"transform",jsxFactory:"AppsUI.createElement",jsxFragment:"AppsUI.Fragment"})),{inputOptions:{input:e,plugins:o},outputOptions:{file:t,format:"es",sourcemap:r==="development"}}}async function L(e){let{fileName:t,inputDir:r,outputDir:o,mode:n="development"}=e,i=j.default.join(r,`${t}.ts`);try{await ue.default.promises.access(i)}catch{console.error(`${i} is not exist`);return}let s=j.default.join(o,`${t}.js`),{inputOptions:p,outputOptions:c}=bt(i,s,n);await(await(0,le.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 L({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 ve=a(require("fs-extra")),we=require("@giteeteam/apps-manifest"),he=a(require("path")),y=async()=>{let e=he.default.resolve("manifest.yml"),t=await ve.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 y(),{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="src",output:r="package",prod:o,dev:n,copy:i=[],zip:s}=e;await xe({outputDir:F.default.resolve(r),inputDir:F.default.resolve(t),prod:o??!n,filesToCopy:[...S,...i],zip:s})};var q=a(require("inquirer")),O=a(require("fs-extra")),v=a(require("path"));var G=a(require("simple-git")),B=a(require("fs-extra")),Oe=async e=>{await(0,G.default)(e).init()},be=async(e,t)=>{await B.default.pathExists(t)||await B.default.mkdir(t),await(0,G.default)(t).clone(e,t)};var _=a(require("fs-extra")),De="https://github.com/moriahq/apps-template.git",V=(r=>(r.micro="micro",r.uikit="uikit",r))(V||{}),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"),Ae=a(require("readline")),Te=a(require("execa")),St=e=>{if(!Se.supportsColor){e.write("\r");return}Ae.default.cursorTo(e,0)},At=(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);St(process.stderr),process.stderr.write(`[${p}${c}]${o}`)},Tt=(e,t,r,o)=>new Promise((n,i)=>{var p;let s=(0,Te.default)(e,t,{cwd:r,stdio:["inherit","inherit","pipe"],env:o});(p=s.stderr)==null||p.on("data",c=>{let h=c.toString();if(/warning/.test(h))return;let g=h.match(/\[.*] (\d+)\/(\d+)/);if(g){At(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()})}),Le={executeCommand:Tt};var Lt=async()=>(await q.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],_t=async()=>(await q.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"],kt=async(e,t)=>{await m({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>be(e,t))},Ct=async e=>{await m({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>Le.executeCommand("yarn",["install"],e))},_e=async e=>{let{cwd:t}=e,r="micro",o=await Lt(),n=await _t(),i=v.default.join(t,n);if(await O.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await kt(De,i),await O.default.copy(v.default.join(i,r),i),await Promise.all(Object.values(V).map(p=>O.default.remove(v.default.join(i,p)))),await O.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 Ct(i),await Oe(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 Ce=a(require("axios")),$e=async({baseUrl:e,username:t,password:r})=>{var o;try{return{cookie:(o=(await(0,Ce.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:""}}};var Ue=a(require("path")),Ie=a(require("lowdb")),Ne=a(require("lowdb/adapters/FileSync"));var K,z=()=>{if(!K){let e=Ue.default.join(__dirname,"user.json"),t=new Ne.default(e);K=(0,Ie.default)(t)}return K},Me=()=>{let e=z(),t=e.get("version").value();(!t||t!==x)&&e.defaults({version:x,user:{}}).write()},W=e=>{Me(),z().set("user",e).write()},w=()=>(Me(),z().get("user").value());var je=a(require("validator/lib/isIP"));var Fe=e=>{let[,t]=e.split("//");return(0,je.default)(t)},Be=e=>{try{return new URL(e).origin}catch{return e}};var Ge=a(require("crypto")),Ve=a(require("base64url")),$t=Buffer.from("ABCDEFGHIJKLM_iv","utf-8"),Ut=Buffer.from("ABCDEFGHIJKL_key","utf-8"),It="aes-128-cbc";var qe=e=>{try{let t=Ge.default.createCipheriv(It,Ut,$t),r=t.update(e,"utf8","base64");return r+=t.final("base64"),Ve.default.toBase64(r)}catch(t){return console.error(`Encryption error: ${t}`),null}};var Nt=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,Mt=async()=>(await k.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,jt=async()=>(await k.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:r=>!!r})).Password,Ke=async({domain:e,username:t,password:r})=>{e||(e=await Nt()),e=Be(e);let o=Fe(e);if(o)W({domain:e,dev:o}),console.info("Login success!");else{t||(t=await Mt()),r||(r=await jt());let{cookie:n}=await $e({baseUrl:e,username:t,password:qe(r)||r});n&&(W({domain:e,username:t,cookie:n,dev:o}),console.info("Login success!"))}};var ze=async e=>{await Ke(e)};var Q=a(require("path"));var ot=a(require("path")),H=a(require("fs-extra")),nt=a(require("debug"));var We=a(require("axios"));var u=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:i}=w();return(await(0,We.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:i}})).data};var He=async()=>{var t;return((t=(await u({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"),b=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 Qe=a(require("localtunnel"));var Je=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 u({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)}`)})},Xe=async e=>{await u({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Ye=async e=>{try{return(await(0,Qe.default)({port:e,host:"http://tunnel.gitee.work:1777"})).url}catch(t){return console.info("runTunnel error",t==null?void 0:t.message),""}};var Ze=a(require("chalk")),Ft=Ze.default.bold.red,d={error:e=>{console.info(Ft(e))}};var tt=a(require("chokidar"));var et=(e,t,r)=>{for(let o of e)L({inputDir:t,outputDir:r,fileName:o,mode:"development"})},rt=async e=>{let{inputDir:t,outputDir:r}=e,n=(await y()).getFunctionFiles();et(n,t,r);let i,s=tt.default.watch(t);console.info(`watch: ${t}`),s.on("change",p=>{clearTimeout(i),i=setTimeout(()=>{console.info(`${p} has change`),et(n,t,r)},1e3)})};var Bt=(0,nt.default)("cli:tunnel"),Gt=async()=>{let e=await He(),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}},it=async e=>{var Z,ee,te;let{inputDir:t,outputDir:r,server:o,filesToCopy:n,resourcePort:i}=e;await H.default.emptyDir(r);let s=await y(),p=s.app.key,c=s.app.version,h=s.getFunctionFiles(),g=s.resources||[];if(!p){d.error("appKey is required!");return}if(!c){d.error("version is required!");return}let{domain:X}=w();if(!X){d.error("Please login in first!");return}let D=[],$=async()=>{await Promise.all(D.map(P=>P())),process.exit()};process.on("SIGINT",$),process.on("uncaughtException",$),process.on("unhandledRejection",$);let dt=`${`/${p}/development/${c}`}/server-side`,Y=ot.default.join(r,dt);await A(Y,n),await rt({inputDir:t,outputDir:Y}),D.push(()=>H.default.remove(r));let U="";if(o&&h.length>0){let{runtimeImage:P,containerPort:re,containerEnv:ft,containerName:gt}=await Gt(),R=new b(P,gt);await R.downloadImage(),await R.runContainer({port:re,env:ft,volume:[`${r}:/usr/src/app/apps`]}),D.push(()=>R.removeContainer()),U=await m({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>Ye(re)),Bt("runtimeHost",U),R.logs()}if(await Je({appKey:p,runtimeHost:U,resources:g,resourcePort:i}),D.push(()=>Xe(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 P=`${X}/apps/api/v1/:tenant/apps/${p}/environments/development/webtriggers/:webtriggerKey`;console.log(`POST ${P}`)}};var st=async e=>{let{copy:t=[],input:r="src",output:o="cache",server:n=!0,resourcePort:i}=e;await it({outputDir:Q.default.resolve(o),inputDir:Q.default.resolve(r),filesToCopy:[...S,...t],server:n,resourcePort:Number(i)||8e3})};var J=a(require("fs")),at=a(require("path")),pt=a(require("form-data"));var ct=async(e,t)=>{if(!J.default.existsSync(e)){console.info(`file:${e} is not exist`);return}let r=new pt.default;r.append("environmentKey",t),r.append("package",J.default.createReadStream(at.default.resolve(e))),await u({method:"POST",url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})};var mt=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(mt||{}),lt=async(e,t)=>{let{domain:r}=w(),{environment:o="development"}=t;if(!Object.values(mt).includes(o)){d.error("Only support development, staging, production environment.");return}if(!r){d.error("Please login in first!");return}await m({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>ct(e,o)).catch(()=>{})};var f=new ut.Command;f.version(x,"-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(ze);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(st);f.command("deploy [filename]").option("-e --environment [environment]","app environment").action(lt);f.parse(process.argv);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@giteeteam/apps-cli",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "Giteeteam Apps cli",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
|
-
"build-back": "rm -rf dist && rollup -c rollup.config.ts --configPlugin typescript",
|
|
20
19
|
"build": "rm -rf dist && etsc",
|
|
21
20
|
"prepublish": "pnpm build",
|
|
22
21
|
"prepack": "pnpm build",
|
|
@@ -54,9 +53,6 @@
|
|
|
54
53
|
"validator": "^13.11.0"
|
|
55
54
|
},
|
|
56
55
|
"devDependencies": {
|
|
57
|
-
"@rollup/plugin-json": "^6.0.0",
|
|
58
|
-
"@rollup/plugin-terser": "^0.4.3",
|
|
59
|
-
"@rollup/plugin-typescript": "^11.1.2",
|
|
60
56
|
"@types/archiver": "^5.3.1",
|
|
61
57
|
"@types/debug": "^4.1.8",
|
|
62
58
|
"@types/fs-extra": "^11.0.4",
|
|
@@ -65,10 +61,9 @@
|
|
|
65
61
|
"@types/lowdb": "1.0.11",
|
|
66
62
|
"@types/validator": "^13.11.1",
|
|
67
63
|
"esbuild-node-tsc": "^2.0.5",
|
|
68
|
-
"rollup-plugin-typescript2": "^0.31.2",
|
|
69
64
|
"typescript": "^4.8.3"
|
|
70
65
|
},
|
|
71
66
|
"engines": {
|
|
72
|
-
"node": ">=
|
|
67
|
+
"node": ">=16"
|
|
73
68
|
}
|
|
74
69
|
}
|