@giteeteam/apps-cli 0.5.0-alpha.1 → 0.5.0-alpha.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";require("dotenv/config");var e=require("commander"),t=require("fs-extra"),a=require("path"),r=require("archiver"),o=require("rollup"),s=require("fs"),i=require("esbuild"),n=require("@rollup/plugin-node-resolve"),c=require("@rollup/plugin-commonjs"),u=require("ora"),l=require("@giteeteam/apps-manifest"),p=require("inquirer"),d=require("simple-git"),m=require("chalk"),f=require("readline"),w=require("execa"),v=require("child_process"),y=require("axios"),g=require("localtunnel"),h=require("lowdb"),E=require("lowdb/adapters/FileSync"),P=require("chokidar"),D=require("crypto"),S=require("base64url");function $(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=$(t),R=$(a),x=$(r),T=$(s),j=$(c),k=$(u),q=$(p),L=$(d),O=$(f),N=$(w),C=$(v),I=$(y),b=$(g),A=$(h),F=$(E),M=$(P),U=$(D),G=$(S),V="0.5.0-alpha.1";const z={treeShaking:!0,format:"esm",loader:"tsx"};var B;function Q(e,t,r=B.DEV){const o=[n.nodeResolve(),j.default()];var c;o.push((c={sourcemap:r===B.DEV,minify:r!==B.DEV,target:"es2018",jsx:"transform",jsxFactory:"AppsUI.createElement",jsxFragment:"AppsUI.Fragment"},c={...z,...c},{name:"esbuild",resolveId(e,t,r){if(!t||[".ts",".tsx",".js",".jsx",".mjs"].some((t=>e.endsWith(t))))return e;const o=a.dirname(t);let i;if(s.existsSync(i=a.resolve(o,e,"index.ts")))return i;if(s.existsSync(i=a.resolve(o,e,"index.tsx")))return i;if(s.existsSync(i=a.resolve(o,e+".ts")))return i;if(s.existsSync(i=a.resolve(o,e+".tsx")))return i;throw console.error({source:e,importer:t,options:r}),i=a.relative(".",a.resolve(t,e)),new Error(`ENOENT: ${i.replace(/\\/g,"/")}`)},async transform(e,t){c.sourcefile=t;const{code:a,map:r}=await i.transform(e,c);return r?{code:a,map:r}:a}}));return{inputOptions:{input:e,plugins:o},outputOptions:{file:t,format:"es",sourcemap:r===B.DEV}}}async function K(e){const{fileName:t,inputDir:a,outputDir:r,mode:s=B.DEV}=e,i=R.default.join(a,`${t}.ts`);try{await T.default.promises.access(i)}catch(e){return void console.error(`${i} is not exist`)}const n=R.default.join(r,`${t}.js`),{inputOptions:c,outputOptions:u}=Q(i,n,s),l=await o.rollup(c);await l.write(u)}!function(e){e.DEV="development",e.PROD="production"}(B||(B={}));const H=async(e,t)=>{const a=k.default(e.start).start();try{await t()}catch(t){throw console.error(t.message),a.fail(e.error),t}a.succeed(e.succeed)},W=async()=>{const e=R.default.resolve("manifest.yml"),t=await _.default.readFile(e);return new l.Manifest(t.toString())};var J=async({outputDir:e,inputDir:t,prod:a,copyFiles:r,zip:o})=>{const s=await W(),{version:i,key:n}=s.app;if(n)if(i){if(await _.default.emptyDir(e),await H({start:"start bundle",error:"bundle failed",succeed:"bundle success"},(()=>(async e=>{const{manifest:t,mode:a,outputDir:r,inputDir:o}=e,s=t.getFunctionFiles().map((async e=>{await K({inputDir:o,fileName:e,outputDir:r,mode:a})}));await Promise.all(s)})({outputDir:e,inputDir:t,manifest:s,mode:a?B.PROD:B.DEV}))),await H({start:"start package",error:"package failed",succeed:"package success"},(()=>(async({outputDir:e,manifest:t,copyFiles:a})=>{const{resources:r}=t;if(r)for(const{key:t,path:a}of r){const r=R.default.resolve(R.default.join("./",a)),o=R.default.join(e,t);await _.default.copy(r,o)}for(const t of a){const a=R.default.resolve(t),r=R.default.join(e,t);await _.default.copy(a,r)}})({outputDir:e,manifest:s,copyFiles:r}))),o){const t=`${n}_${i}.zip`;await H({start:"start archive",error:"archive failed",succeed:"archive success"},(()=>(async(e,t)=>{const a=R.default.resolve(t);return await _.default.remove(a),new Promise(((t,r)=>{const o=_.default.createWriteStream(a),s=x.default("zip",{zlib:{level:9}});o.on("close",(function(){t()})),s.on("warning",(function(e){console.log(e),"ENOENT"===e.code||r(e)})),s.on("error",(function(e){console.log(e),r(e)})),s.pipe(o),s.directory(e,!1),s.finalize()}))})(e,t)))}}else console.error("manifest app version is required");else console.error("manifest app key is required")};const Y=["manifest.yml"];var X;!function(e){e.micro="micro",e.uikit="uikit"}(X||(X={}));const Z=(e,t)=>{const a=Math.min(Math.max(e/t,0),1),r=` ${e}/${t}`,o=Math.max(0,process.stderr.columns-r.length-3),s=Math.min(t,o),i=Math.round(s*a),n="#".repeat(i),c="-".repeat(s-i);var u;u=process.stderr,m.supportsColor?O.default.cursorTo(u,0):u.write("\r"),process.stderr.write(`[${n}${c}]${r}`)},ee=(e,t,a,r)=>new Promise(((o,s)=>{var i;const n=N.default(e,t,{cwd:a,stdio:["inherit","inherit","pipe"],env:r});null===(i=n.stderr)||void 0===i||i.on("data",(e=>{const t=e.toString();if(/warning/.test(t))return;const a=t.match(/\[.*] (\d+)\/(\d+)/);a?Z(parseFloat(a[1]),parseFloat(a[2])):process.stderr.write(e)})),n.on("close",(a=>{0===a?o():s(new Error(`command failed: ${e} ${t.join(" ")}`))}))})),te=async(e,t)=>{await H({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},(()=>(async(e,t)=>{await _.default.pathExists(t)||await _.default.mkdir(t);const a=L.default(t);await a.clone(e,t)})(e,t)))};var ae=async e=>{const{cwd:t}=e,a=await(async()=>{const e=q.default.createPromptModule();return(await e({type:"input",name:"App Name",message:"Please enter an app name",validate:e=>!!e}))["App Name"]})(),r=await(async()=>{const e=q.default.createPromptModule();return(await e({type:"input",name:"App key",message:"Please enter a valid app key",validate:e=>!!/^[a-z][a-z0-9_]*$/.test(e)||(console.log(""),console.log("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"]})(),o=R.default.join(t,r);if(await _.default.pathExists(o))return void console.error(`Project path already exists: ${o}`);await te("https://github.com/moriahq/apps-template.git",o),await _.default.copy(R.default.join(o,"micro"),o),await Promise.all(Object.values(X).map((e=>_.default.remove(R.default.join(o,e))))),await _.default.remove(R.default.join(o,"./.git"));await Promise.all(["./manifest.yml","./package.json","./webpack.config.js","./public/index.html","./src/App.tsx","./src/index.tsx"].map((e=>(async(e,t)=>{if(!await _.default.pathExists(e))return;const a=await _.default.readFile(e,{encoding:"utf-8"});await _.default.writeFile(e,a.replace(/{{(\w+)}}/g,((e,a)=>"string"==typeof t[a]?t[a]:e)))})(R.default.join(o,e),{appName:a,appKey:r})))),await(async e=>{await H({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},(()=>ee("yarn",["install"],e)))})(o),await(async e=>{const t=L.default(e);await t.init()})(o),console.log("Project init success!"),console.log("Project path:"+o)};class re{constructor(e){this.imageName=e}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:e,env:t,name:a,volume:r=[]}){await this.removeContainer(a);const o=`docker run -d -p ${e}:${e} ${Object.keys(t).map((e=>`-e ${e}=${t[e]}`)).join(" ")} ${null==r?void 0:r.map((e=>`-v ${e}`)).join(" ")} --name ${a} ${this.imageName}`;await this.execPromise(o)}async removeContainer(e){await this.execPromise(`docker rm -f ${e}`).catch((()=>{}))}execPromise(e){return new Promise(((t,a)=>{C.default.exec(e,((e,r,o)=>{if(e)return a(e);t({stdout:r,stderr:o})}))}))}}const oe=R.default.join(__dirname,"user.json"),se=new F.default(oe),ie=A.default(se);(()=>{const e=ie.get("version").value();e&&e===V||ie.defaults({version:V,user:{}}).write()})();const ne=e=>{ie.set("user",e).write()},ce=()=>ie.get("user").value(),ue=process.env.RESOURCES||"[]",le=(e,t,a)=>{for(const r of e)K({inputDir:t,outputDir:a,fileName:r,mode:B.DEV})};var pe;const de=process.env.RUNTIME_IMAGE||"docker-hub.gitee.work/gitee-prod/proxima-apps-runtime-server:latest",me=Number(null!==(pe=process.env.CONTAINER_PORT)&&void 0!==pe?pe:8455),fe="cli-dev-apps-runtime-server",we={PORT:me,APPS_DIR:"/usr/src/app/apps",LRU_TTL:1,DEBUG:"runtime*",FS_MODE:"local",PARSE_PUBLIC_SERVER_URL:process.env.PARSE_PUBLIC_SERVER_URL,PARSE_SERVER_MASTER_KEY:process.env.PARSE_SERVER_MASTER_KEY,PROXIMA_CORE_URL:process.env.PROXIMA_CORE_URL,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};var ve=async e=>{const{inputDir:t,outputDir:a,server:r}=e;await _.default.emptyDir(a);const o=await W(),s=o.app.key,i=o.app.version;if(!s)throw new Error("appKey is required!");if(!i)throw new Error("version is required!");const n=`/${s}/development/${i}`,c=`${n}/server-side`,u=R.default.join(a,c),l=new re(de);if(r&&(await l.downloadImage(),await l.runContainer({port:me,env:we,volume:[`${a}:/usr/src/app/apps`],name:fe})),process.on("SIGINT",(async()=>{await l.removeContainer(fe),await _.default.remove(a),await(async e=>{const{domain:t}=ce();await I.default({method:"DELETE",url:`${t}/apps/api/v1/apps/tunnel/${e}`}).catch((e=>{console.info("removeTunnel error",null==e?void 0:e.message)}))})(s),process.exit()})),await(async e=>{const t=R.default.resolve("manifest.yml"),a=R.default.join(e,"manifest.yml");await _.default.copy(t,a)})(u),await(async e=>{const{inputDir:t,outputDir:a}=e,r=(await W()).getFunctionFiles();let o;le(r,t,a);const s=M.default.watch(t);console.log(`watch: ${t}`),s.on("change",(e=>{clearTimeout(o),o=setTimeout((()=>{console.log(`${e} has change`),le(r,t,a)}),1e3)}))})({inputDir:t,outputDir:u}),r){const e=await(async(e,t)=>{try{const a=await b.default({port:e,subdomain:t.replace(/_/g,"-"),host:"http://tunnel.gitee.work:1777"});return console.info("tunnel url",a.url),a.url}catch(e){return console.info("runTunnel error",null==e?void 0:e.message),""}})(me,s);await(async(e,t)=>{const{domain:a}=ce();if(!a)throw new Error("Please login in first!");await I.default({method:"POST",url:`${a}/apps/api/v1/apps/tunnel/${e}`,data:{resources:JSON.parse(ue),runtimeHost:t}}).catch((e=>{console.info("addTunnel error",null==e?void 0:e.message)}))})(s,e),console.log("You can use this url for test:"),console.log(`POST http://localhost:${me}/v1/apps${n}/functions/:key`),console.log(`POST ${e}/v1/apps${n}/functions/:key`)}};const ye=Buffer.from("ABCDEFGHIJKLM_iv","utf-8"),ge=Buffer.from("ABCDEFGHIJKL_key","utf-8"),he=e=>{try{const t=U.default.createCipheriv("aes-128-cbc",ge,ye);let a=t.update(e,"utf8","base64");return a+=t.final("base64"),G.default.toBase64(a)}catch(e){return console.error(`Encryption error: ${e}`),null}};var Ee=async()=>{const e=await(async()=>{const e=q.default.createPromptModule();return(await e({type:"input",name:"Domain",message:"Please enter the domain address",validate:e=>!!e})).Domain})(),t=(e=>{const[,t]=e.split("//");return(e=>/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(e))(t)})(e);if(t)ne({domain:e,dev:t}),console.info("Login success!");else{const a=await(async()=>{const e=q.default.createPromptModule();return(await e({type:"input",name:"Username",message:"Please enter username",validate:e=>!!e})).Username})(),r=await(async()=>{const e=q.default.createPromptModule();return(await e({type:"password",name:"Password",message:"Please enter password",validate:e=>!!e})).Password})(),{cookie:o}=await(async({baseUrl:e,username:t,password:a})=>{var r;try{return{cookie:null===(r=(await I.default({method:"POST",url:`${e}/api/gateway/login`,data:{username:t,password:a}})).headers)||void 0===r?void 0:r["set-cookie"]}}catch(e){return console.error("Login error:",null==e?void 0:e.message),{cookie:""}}})({baseUrl:e,username:a,password:he(r)||r});o&&(ne({domain:e,username:a,cookie:o,dev:t}),console.info("Login success!"))}};const Pe=new e.Command;Pe.version(V).description("Giteeteam Apps Cli"),Pe.command("build").option("--prod","build in production").option("--no-zip","no archive").option("-c --copy [letters...]","copy files").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir").action((async e=>{const{input:t="src",output:a="dist",prod:r,copy:o=[],zip:s}=e;await J({outputDir:R.default.resolve(a),inputDir:R.default.resolve(t),prod:!!r,copyFiles:[...Y,...o],zip:s})})),Pe.command("init").action((async()=>{const e=process.cwd();await ae({cwd:e})})),Pe.command("tunnel").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir,default cache").option("--no-server","no server").action((async e=>{const{input:t="src",output:a="cache",server:r=!0}=e;await ve({outputDir:R.default.resolve(a),inputDir:R.default.resolve(t),server:r})})),Pe.command("login").option("-u --user [username]","login user").action((async()=>{await Ee()})),Pe.parse(process.argv);
2
+ "use strict";require("dotenv/config");var e=require("commander"),t=require("fs-extra"),a=require("path"),r=require("archiver"),o=require("rollup"),s=require("fs"),n=require("esbuild"),i=require("@rollup/plugin-node-resolve"),c=require("@rollup/plugin-commonjs"),u=require("ora"),l=require("@giteeteam/apps-manifest"),p=require("inquirer"),d=require("simple-git"),m=require("chalk"),f=require("readline"),v=require("execa"),w=require("child_process"),y=require("axios"),g=require("localtunnel"),h=require("lowdb"),E=require("lowdb/adapters/FileSync"),P=require("chokidar"),D=require("crypto"),S=require("base64url");function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var $=_(t),R=_(a),k=_(r),L=_(s),T=_(c),x=_(u),j=_(p),N=_(d),O=_(m),q=_(f),C=_(v),A=_(w),I=_(y),b=_(g),F=_(h),U=_(E),M=_(P),G=_(D),V=_(S),z="0.5.0-alpha.2";const B={treeShaking:!0,format:"esm",loader:"tsx"};var Q;function K(e,t,r=Q.DEV){const o=[i.nodeResolve(),T.default()];var c;o.push((c={sourcemap:r===Q.DEV,minify:r!==Q.DEV,target:"es2018",jsx:"transform",jsxFactory:"AppsUI.createElement",jsxFragment:"AppsUI.Fragment"},c={...B,...c},{name:"esbuild",resolveId(e,t,r){if(!t||[".ts",".tsx",".js",".jsx",".mjs"].some((t=>e.endsWith(t))))return e;const o=a.dirname(t);let n;if(s.existsSync(n=a.resolve(o,e,"index.ts")))return n;if(s.existsSync(n=a.resolve(o,e,"index.tsx")))return n;if(s.existsSync(n=a.resolve(o,e+".ts")))return n;if(s.existsSync(n=a.resolve(o,e+".tsx")))return n;throw console.error({source:e,importer:t,options:r}),n=a.relative(".",a.resolve(t,e)),new Error(`ENOENT: ${n.replace(/\\/g,"/")}`)},async transform(e,t){c.sourcefile=t;const{code:a,map:r}=await n.transform(e,c);return r?{code:a,map:r}:a}}));return{inputOptions:{input:e,plugins:o},outputOptions:{file:t,format:"es",sourcemap:r===Q.DEV}}}async function H(e){const{fileName:t,inputDir:a,outputDir:r,mode:s=Q.DEV}=e,n=R.default.join(a,`${t}.ts`);try{await L.default.promises.access(n)}catch(e){return void console.error(`${n} is not exist`)}const i=R.default.join(r,`${t}.js`),{inputOptions:c,outputOptions:u}=K(n,i,s),l=await o.rollup(c);await l.write(u)}!function(e){e.DEV="development",e.PROD="production"}(Q||(Q={}));const W=async(e,t)=>{const a=x.default(e.start).start();try{const r=await t();return a.succeed(e.succeed),r}catch(t){throw console.error(t.message),a.fail(e.error),t}},J=async()=>{const e=R.default.resolve("manifest.yml"),t=await $.default.readFile(e);return new l.Manifest(t.toString())};var Y=async({outputDir:e,inputDir:t,prod:a,copyFiles:r,zip:o})=>{const s=await J(),{version:n,key:i}=s.app;if(i)if(n){if(await $.default.emptyDir(e),await W({start:"start bundle",error:"bundle failed",succeed:"bundle success"},(()=>(async e=>{const{manifest:t,mode:a,outputDir:r,inputDir:o}=e,s=t.getFunctionFiles().map((async e=>{await H({inputDir:o,fileName:e,outputDir:r,mode:a})}));await Promise.all(s)})({outputDir:e,inputDir:t,manifest:s,mode:a?Q.PROD:Q.DEV}))),await W({start:"start package",error:"package failed",succeed:"package success"},(()=>(async({outputDir:e,manifest:t,copyFiles:a})=>{const{resources:r}=t;if(r)for(const{key:t,path:a}of r){const r=R.default.resolve(R.default.join("./",a)),o=R.default.join(e,t);await $.default.copy(r,o)}for(const t of a){const a=R.default.resolve(t),r=R.default.join(e,t);await $.default.copy(a,r)}})({outputDir:e,manifest:s,copyFiles:r}))),o){const t=`${i}_${n}.zip`;await W({start:"start archive",error:"archive failed",succeed:"archive success"},(()=>(async(e,t)=>{const a=R.default.resolve(t);return await $.default.remove(a),new Promise(((t,r)=>{const o=$.default.createWriteStream(a),s=k.default("zip",{zlib:{level:9}});o.on("close",(function(){t()})),s.on("warning",(function(e){console.log(e),"ENOENT"===e.code||r(e)})),s.on("error",(function(e){console.log(e),r(e)})),s.pipe(o),s.directory(e,!1),s.finalize()}))})(e,t)))}}else console.error("manifest app version is required");else console.error("manifest app key is required")};const X=["manifest.yml"];var Z;!function(e){e.micro="micro",e.uikit="uikit"}(Z||(Z={}));const ee=(e,t)=>{const a=Math.min(Math.max(e/t,0),1),r=` ${e}/${t}`,o=Math.max(0,process.stderr.columns-r.length-3),s=Math.min(t,o),n=Math.round(s*a),i="#".repeat(n),c="-".repeat(s-n);var u;u=process.stderr,m.supportsColor?q.default.cursorTo(u,0):u.write("\r"),process.stderr.write(`[${i}${c}]${r}`)},te=(e,t,a,r)=>new Promise(((o,s)=>{var n;const i=C.default(e,t,{cwd:a,stdio:["inherit","inherit","pipe"],env:r});null===(n=i.stderr)||void 0===n||n.on("data",(e=>{const t=e.toString();if(/warning/.test(t))return;const a=t.match(/\[.*] (\d+)\/(\d+)/);a?ee(parseFloat(a[1]),parseFloat(a[2])):process.stderr.write(e)})),i.on("close",(a=>{0===a?o():s(new Error(`command failed: ${e} ${t.join(" ")}`))}))})),ae=async(e,t)=>{await W({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},(()=>(async(e,t)=>{await $.default.pathExists(t)||await $.default.mkdir(t);const a=N.default(t);await a.clone(e,t)})(e,t)))};var re=async e=>{const{cwd:t}=e,a=await(async()=>{const e=j.default.createPromptModule();return(await e({type:"input",name:"App Name",message:"Please enter an app name",validate:e=>!!e}))["App Name"]})(),r=await(async()=>{const e=j.default.createPromptModule();return(await e({type:"input",name:"App key",message:"Please enter a valid app key",validate:e=>!!/^[a-z][a-z0-9_]*$/.test(e)||(console.log(""),console.log("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"]})(),o=R.default.join(t,r);if(await $.default.pathExists(o))return void console.error(`Project path already exists: ${o}`);await ae("https://github.com/moriahq/apps-template.git",o),await $.default.copy(R.default.join(o,"micro"),o),await Promise.all(Object.values(Z).map((e=>$.default.remove(R.default.join(o,e))))),await $.default.remove(R.default.join(o,"./.git"));await Promise.all(["./manifest.yml","./package.json","./webpack.config.js","./public/index.html","./src/App.tsx","./src/index.tsx"].map((e=>(async(e,t)=>{if(!await $.default.pathExists(e))return;const a=await $.default.readFile(e,{encoding:"utf-8"});await $.default.writeFile(e,a.replace(/{{(\w+)}}/g,((e,a)=>"string"==typeof t[a]?t[a]:e)))})(R.default.join(o,e),{appName:a,appKey:r})))),await(async e=>{await W({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},(()=>te("yarn",["install"],e)))})(o),await(async e=>{const t=N.default(e);await t.init()})(o),console.log("Project init success!"),console.log("Project path:"+o)};class oe{constructor(e){this.imageName=e}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:e,env:t,name:a,volume:r=[]}){await this.removeContainer(a);const o=`docker run -d -p ${e}:${e} ${Object.keys(t).map((e=>`-e ${e}=${t[e]}`)).join(" ")} ${null==r?void 0:r.map((e=>`-v ${e}`)).join(" ")} --name ${a} ${this.imageName}`;await this.execPromise(o)}async removeContainer(e){await this.execPromise(`docker rm -f ${e}`).catch((()=>{}))}execPromise(e){return new Promise(((t,a)=>{A.default.exec(e,((e,r,o)=>{if(e)return a(e);t({stdout:r,stderr:o})}))}))}}const se=R.default.join(__dirname,"user.json"),ne=new U.default(se),ie=F.default(ne);(()=>{const e=ie.get("version").value();e&&e===z||ie.defaults({version:z,user:{}}).write()})();const ce=e=>{ie.set("user",e).write()},ue=()=>ie.get("user").value(),le=process.env.RESOURCES||"[]",pe=O.default.bold.red;var de=e=>{console.info(pe(e))};const me=(e,t,a)=>{for(const r of e)H({inputDir:t,outputDir:a,fileName:r,mode:Q.DEV})};var fe=async e=>{const{inputDir:t,outputDir:a,server:r}=e;await $.default.emptyDir(a);const o=await J(),s=o.app.key,n=o.app.version,i=o.getFunctionFiles();if(!s)return void de("appKey is required!");if(!n)return void de("version is required!");const{domain:c}=ue();if(!c)return void de("Please login in first!");const u=[],l=`/${s}/development/${n}`,p=`${l}/server-side`,d=R.default.join(a,p);await(async e=>{const t=R.default.resolve("manifest.yml"),a=R.default.join(e,"manifest.yml");await $.default.copy(t,a)})(d),await(async e=>{const{inputDir:t,outputDir:a}=e,r=(await J()).getFunctionFiles();let o;me(r,t,a);const s=M.default.watch(t);console.info(`watch: ${t}`),s.on("change",(e=>{clearTimeout(o),o=setTimeout((()=>{console.info(`${e} has change`),me(r,t,a)}),1e3)}))})({inputDir:t,outputDir:d}),u.push((()=>$.default.remove(a)));let m="";if(r&&i.length>0){const{runtimeImage:e,containerPort:t,containerEnv:r,containerName:o}=(()=>{var e;const t=process.env.RUNTIME_IMAGE||"docker-hub.gitee.work/gitee-prod/proxima-apps-runtime-server:latest",a=Number(null!==(e=process.env.CONTAINER_PORT)&&void 0!==e?e:8455);return{runtimeImage:t,containerPort:a,containerName:"cli-dev-apps-runtime-server",containerEnv:{PORT:a,APPS_DIR:"/usr/src/app/apps",LRU_TTL:1,DEBUG:"runtime*",FS_MODE:"local",APPS_DEFAULT_LOCALE:process.env.APPS_DEFAULT_LOCALE||"zh-CN",PARSE_PUBLIC_SERVER_URL:process.env.PARSE_PUBLIC_SERVER_URL,PARSE_SERVER_MASTER_KEY:process.env.PARSE_SERVER_MASTER_KEY,PROXIMA_CORE_URL:process.env.PROXIMA_CORE_URL,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}}})(),n=new oe(e);await n.downloadImage(),await n.runContainer({port:t,env:r,volume:[`${a}:/usr/src/app/apps`],name:o}),u.push((()=>n.removeContainer(o))),m=await W({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},(()=>(async(e,t)=>{try{return(await b.default({port:e,subdomain:t.replace(/_/g,"-"),host:"http://tunnel.gitee.work:1777"})).url}catch(e){return console.info("runTunnel error",null==e?void 0:e.message),""}})(t,s))),console.log("You can use this url for test:");const i=`/v1/apps${l}/functions/:key`;console.log(`POST http://localhost:${t}${i}`),console.log(`POST ${m}${i}`)}await(async(e,t)=>{const{domain:a,cookie:r}=ue();await I.default({method:"POST",url:`${a}/apps/api/v1/apps/tunnel/${e}`,data:{resources:JSON.parse(le),runtimeHost:t},headers:{cookie:r}}).catch((e=>{console.error(`addTunnel error ${null==e?void 0:e.message}`)}))})(s,m),u.push((()=>(async e=>{const{domain:t,cookie:a}=ue();await I.default({method:"DELETE",url:`${t}/apps/api/v1/apps/tunnel/${e}`,headers:{cookie:a}}).catch((e=>{console.error("removeTunnel error",null==e?void 0:e.message)}))})(s))),process.on("SIGINT",(async()=>{await Promise.all(u.map((e=>e()))),process.exit()}))};const ve=Buffer.from("ABCDEFGHIJKLM_iv","utf-8"),we=Buffer.from("ABCDEFGHIJKL_key","utf-8"),ye=e=>{try{const t=G.default.createCipheriv("aes-128-cbc",we,ve);let a=t.update(e,"utf8","base64");return a+=t.final("base64"),V.default.toBase64(a)}catch(e){return console.error(`Encryption error: ${e}`),null}};var ge=async()=>{const e=await(async()=>{const e=j.default.createPromptModule();return(await e({type:"input",name:"Domain",message:"Please enter the domain address",validate:e=>!!e})).Domain})(),t=(e=>{const[,t]=e.split("//");return(e=>/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(e))(t)})(e);if(t)ce({domain:e,dev:t}),console.info("Login success!");else{const a=await(async()=>{const e=j.default.createPromptModule();return(await e({type:"input",name:"Username",message:"Please enter username",validate:e=>!!e})).Username})(),r=await(async()=>{const e=j.default.createPromptModule();return(await e({type:"password",name:"Password",message:"Please enter password",validate:e=>!!e})).Password})(),{cookie:o}=await(async({baseUrl:e,username:t,password:a})=>{var r;try{return{cookie:null===(r=(await I.default({method:"POST",url:`${e}/api/gateway/login`,data:{username:t,password:a}})).headers)||void 0===r?void 0:r["set-cookie"]}}catch(e){return console.error("Login error:",null==e?void 0:e.message),{cookie:""}}})({baseUrl:e,username:a,password:ye(r)||r});o&&(ce({domain:e,username:a,cookie:o,dev:t}),console.info("Login success!"))}};const he=new e.Command;he.version(z).description("Giteeteam Apps Cli"),he.command("build").option("--prod","build in production").option("--no-zip","no archive").option("-c --copy [letters...]","copy files").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir").action((async e=>{const{input:t="src",output:a="dist",prod:r,copy:o=[],zip:s}=e;await Y({outputDir:R.default.resolve(a),inputDir:R.default.resolve(t),prod:!!r,copyFiles:[...X,...o],zip:s})})),he.command("init").action((async()=>{const e=process.cwd();await re({cwd:e})})),he.command("tunnel").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir,default cache").option("--no-server","no server").action((async e=>{const{input:t="src",output:a="cache",server:r=!0}=e;await fe({outputDir:R.default.resolve(a),inputDir:R.default.resolve(t),server:r})})),he.command("login").option("-u --user [username]","login user").action((async()=>{await ge()})),he.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giteeteam/apps-cli",
3
- "version": "0.5.0-alpha.1",
3
+ "version": "0.5.0-alpha.2",
4
4
  "description": "Giteeteam Apps cli",
5
5
  "keywords": [
6
6
  "typescript",