@giteeteam/apps-cli 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.js +8 -8
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var lr=Object.create;var se=Object.defineProperty;var mr=Object.getOwnPropertyDescriptor;var ur=Object.getOwnPropertyNames;var fr=Object.getPrototypeOf,dr=Object.prototype.hasOwnProperty;var gr=(e,t)=>()=>(e&&(t=e(e=0)),t);var yr=(e,t)=>{for(var r in t)se(e,r,{get:t[r],enumerable:!0})},hr=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ur(t))!dr.call(e,n)&&n!==r&&se(e,n,{get:()=>t[n],enumerable:!(o=mr(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?lr(fr(e)):{},hr(t||!e||!e.__esModule?se(r,"default",{value:e,enumerable:!0}):r,e));var Be={};yr(Be,{default:()=>Er});function Er({environment:e,appKey:t,distOutputPath:r="dist"}){let o=e==="production",n=e==="development",s=Pr(),i=Ue.default.existsSync(D.default.resolve("locales")),a=
|
|
3
|
-
`);let{pass:m,errors:
|
|
4
|
-
The output file of the build is ${V.default.bold.green(g)}`)}};var nt=async e=>{let{input:t="functions",output:r="package",prod:o,dev:n,copy:s=[],zip:i,ui:a,rspack:p}=e;await ot({outputDir:le.default.resolve(r),inputDir:le.default.resolve(t),prod:o??!n,filesToCopy:[...F,...s],zip:i,ui:!!a,rspackConfig:p}).catch(()=>{})};var gt=c(require("fs")),yt=c(require("path")),H=c(require("chalk"));var st=c(require("path")),it=c(require("lowdb")),at=c(require("lowdb/adapters/FileSync"));var me,ue=()=>{if(!me){let e=st.default.join(__dirname,"user.json"),t=new at.default(e);me=(0,it.default)(t)}return me},ct=()=>{let e=ue(),t=e.get("version").value();(!t||t!==x)&&e.defaults({version:x,user:{}}).write()},fe=e=>{ct(),ue().set("user",e).write()},E=()=>(ct(),ue().get("user").value());var lt=c(require("fs")),mt=c(require("path")),ut=c(require("form-data"));var pt=c(require("axios"));var w={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE"},O=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:s}=E();return(await(0,pt.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:s}})).data};var ft=async(e,t)=>{let r=new ut.default;return r.append("environmentKey",t),r.append("package",lt.default.createReadStream(mt.default.resolve(e))),O({method:w.POST,url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})},q=async({tenants:e,environmentKey:t,appKey:r,versionKey:o})=>O({method:w.POST,url:"/apps/api/v1/apps/install/batch",data:{tenants:e,environmentKey:t,appKey:r,versionKey:o,subscriptionSource:"manual"}});var dt=c(require("chalk")),Or=dt.default.bold.red,f={error:e=>{console.info(Or(e))}};var J=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(J||{}),Sr=e=>e?(Array.isArray(e)?e:[e]).flatMap(r=>r.split(",")).map(r=>r.trim()).filter(Boolean):[],Tr=e=>{let t=yt.default.basename(e,".zip"),r=t.lastIndexOf("_");return r<=0||r===t.length-1?null:{appKey:t.slice(0,r),versionKey:t.slice(r+1)}},ht=async(e,t)=>{let{domain:r}=E(),{environment:o="development",subscribe:n,appKey:s,versionKey:i}=t,a=Sr(n);if(!Object.values(J).includes(o)){f.error("Only support development, staging, production environment.");return}if(!r){f.error("Please login in first!");return}if(!gt.default.existsSync(e)){f.error(`File:${e} is not exist`);return}if(console.info(`Deploying to ${H.default.bold.green(r)}`),await u({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>ft(e,o)).catch(()=>{}),a.length===0)return;let p=Tr(e),l=s||(p==null?void 0:p.appKey),m=i||(p==null?void 0:p.versionKey);if(!l||!m){f.error("subscribe needs appKey and versionKey. please pass --app-key and --version-key, or use zip name <appKey>_<versionKey>.zip");return}console.info(`Subscribing app ${H.default.bold.green(l)}:${H.default.bold.green(m)}`),await u({start:"start subscribe",error:"subscribe failed",succeed:"subscribe success"},()=>q({tenants:a,environmentKey:o,appKey:l,versionKey:m})).catch(()=>{})};var C=c(require("path")),L=c(require("fs-extra")),Y=c(require("inquirer"));var vt=c(require("readline")),bt=require("chalk"),wt=c(require("execa")),Dr=e=>{if(!bt.supportsColor){e.write("\r");return}vt.default.cursorTo(e,0)},Cr=(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),s=Math.min(t,n),i=Math.round(s*r),a="#".repeat(i),p="-".repeat(s-i);Dr(process.stderr),process.stderr.write(`[${a}${p}]${o}`)},Rr=(e,t,r,o)=>new Promise((n,s)=>{var a;let i=(0,wt.default)(e,t,{cwd:r,stdio:["inherit","inherit","pipe"],env:o});(a=i.stderr)==null||a.on("data",p=>{let l=p.toString();if(/warning/.test(l))return;let m=l.match(/\[.*] (\d+)\/(\d+)/);if(m){Cr(parseFloat(m[1]),parseFloat(m[2]));return}process.stderr.write(p)}),i.on("close",p=>{if(p!==0){s(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),N={executeCommand:Rr};var de=c(require("fs-extra")),ge=c(require("simple-git")),kt=async e=>{await(0,ge.default)(e).init()},W=async(e,t,r)=>{await de.default.pathExists(t)||await de.default.mkdir(t);let o=(0,ge.default)(t),n=[];r!=null&&r.branch&&n.push("--branch",r.branch),r!=null&&r.singleBranch&&n.push("--single-branch"),await o.clone(e,t,n)};var Q=c(require("fs-extra")),xt=process.env.APPS_TEMPLATE_REPO||"https://github.com/moriahq/apps-template.git",ye=(r=>(r.micro="micro",r.uikit="uikit",r))(ye||{}),Pt=async(e,t)=>{if(!await Q.default.pathExists(e))return;let r=await Q.default.readFile(e,{encoding:"utf-8"});await Q.default.writeFile(e,r.replace(/{{(\w+)}}/g,(o,n)=>typeof t[n]=="string"?t[n]:o))};var _r=async()=>(await Y.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],Lr=async()=>(await Y.default.createPromptModule()({type:"input",name:"App key",message:"Please enter a valid app key",validate:r=>/^[a-z][a-z0-9_]*$/.test(r)?!0:(console.info(""),console.info("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"],jr=async()=>(await Y.default.createPromptModule()({type:"confirm",name:"Init Skill",message:"Initialize Gitee Team app skill?",default:!0}))["Init Skill"],$r=()=>{if(Number(x.split(".")[0])>=1)return"v1"},Nr=async(e,t)=>{let r=$r();if(!r){await u({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>W(e,t));return}try{await u({start:`Start clone repository (branch: ${r})`,error:"Clone repository failed!",succeed:"Clone repository success!"},()=>W(e,t,{branch:r,singleBranch:!0}))}catch{console.info(`Template branch '${r}' not found, fallback to default branch.`),await u({start:"Start clone repository (default branch)",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>W(e,t))}},Ir=async e=>{await u({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>N.executeCommand("pnpm",["install"],e))},Mr=async e=>{await u({start:"Start initialize skill",error:"Initialize skill failed!",succeed:"Initialize skill success!"},()=>N.executeCommand("npx",["-y","skills","add","moriahq/giteeteam-skills"],e))},Et=async e=>{let{cwd:t}=e,r="micro",o=await _r(),n=await Lr(),s=await jr(),i=C.default.join(t,n);if(await L.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await Nr(xt,i),await L.default.copy(C.default.join(i,r),i),await Promise.all(Object.values(ye).map(p=>L.default.remove(C.default.join(i,p)))),await L.default.remove(C.default.join(i,"./.git")),await L.default.remove(C.default.join(i,"./SKILL.md"));let a=["./manifest.yml","./package.json","./rspack.config.js","./public/index.html","./src/App.tsx","./src/index.tsx","./static/App.tsx","./static/index.tsx"];await Promise.all(a.map(p=>Pt(C.default.join(i,p),{appName:o,appKey:n}))),await Ir(i),await kt(i),s&&await Mr(i),console.info("Project init success!"),console.info("Project path:"+i)};var Ot=async()=>{let e=process.cwd();await Et({cwd:e})};var X=c(require("inquirer"));var he=c(require("axios"));var St=["/api/gateway/login","/login"],Ur=e=>{var o;let t=(o=e==null?void 0:e.response)==null?void 0:o.status,r=e==null?void 0:e.code;return[404,405,502,503,504].includes(t)||["ECONNREFUSED","ENOTFOUND","ECONNABORTED"].includes(r)},Tt=async({baseUrl:e,username:t,password:r})=>{var n;let o;for(let s of St)try{let i=await(0,he.default)({method:w.POST,url:`${e}${s}`,data:{username:t,password:r}});return console.info(`Login endpoint: ${s}`),{cookie:(n=i.headers)==null?void 0:n["set-cookie"]}}catch(i){if(o=i,!Ur(i))return console.error(`Login error (${s}):`,i==null?void 0:i.message),{cookie:""}}return console.error(`Login error: all endpoints failed (${St.join(", ")})`,(o==null?void 0:o.message)||""),{cookie:""}},Dt=async e=>{try{return await(0,he.default)({method:w.GET,url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var Ct=e=>{try{return new URL(e).origin}catch{return e}};var Rt=c(require("crypto"));var At=e=>{try{let t=Rt.default.createCipheriv(Ce,De,Te),r=t.update(e,"utf8","base64");return r+=t.final("base64"),r.toString()}catch(t){return console.error(`Encryption error: ${t}`),null}};var Fr=async()=>(await X.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,Kr=async()=>(await X.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,Gr=async()=>(await X.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:r=>!!r})).Password,_t=async({domain:e,username:t,password:r})=>{if(e||(e=await Fr()),e=Ct(e),await Dt(e)){t||(t=await Kr()),r||(r=await Gr());let{cookie:n}=await Tt({baseUrl:e,username:t,password:At(r)||r});n?(fe({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else fe({domain:e}),console.info("Login success!")};var Lt=async e=>{await _t(e)};var jt=c(require("chalk"));var Br=e=>e?(Array.isArray(e)?e:[e]).flatMap(r=>r.split(",")).map(r=>r.trim()).filter(Boolean):[],$t=async(e,t,r)=>{let{domain:o}=E(),{environment:n="development",tenants:s}=r,i=Br(s);if(!o){f.error("Please login in first!");return}if(!Object.values(J).includes(n)){f.error("Only support development, staging, production environment.");return}if(!e||!t){f.error("Please provide appKey and versionKey.");return}if(i.length===0){f.error("Please provide subscribe tenants by -t/--tenants.");return}console.info(`Subscribing to ${jt.default.bold.green(o)}`),await u({start:"start subscribe",error:"subscribe failed",succeed:"subscribe success"},()=>q({tenants:i,environmentKey:n,appKey:e,versionKey:t})).catch(()=>{})};var Nt=c(require("path")),It=c(require("fs-extra"));var Mt=async e=>{let t=Nt.default.resolve(e||process.cwd());if(!await It.default.pathExists(t)){f.error(`project path not found: ${t}`);return}await u({start:"Start sync skill",error:"Sync skill failed!",succeed:"Sync skill success!"},()=>N.executeCommand("npx",["-y","skills","add","moriahq/giteeteam-skills"],t)),console.info("sync-skill finished."),console.info(`Project path: ${t}`)};var re=c(require("path"));var Xt=c(require("path")),te=c(require("chalk")),Zt=c(require("debug")),be=c(require("fs-extra"));var Ut=async()=>{var t;return((t=(await O({method:w.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 Z=require("child_process"),I=class{constructor(t,r){this.imageName=t,this.containerName=r}async downloadImage(){console.info(`Downloading image(${this.imageName}) ...`),await this.execPromise(`docker pull ${this.imageName}`),console.info(`Download image(${this.imageName}) success!`)}async runContainer({port:t,env:r,volume:o=[]}){await this.removeContainer();let n=Object.keys(r).filter(a=>r[a]!==void 0).map(a=>`-e ${a}=${r[a]}`).join(" "),s=o==null?void 0:o.map(a=>`-v ${a}`).join(" "),i=`docker run -d -p ${t}:${t} ${n} ${s} --name ${this.containerName} ${this.imageName}`;await this.execPromise(i)}async removeContainer(){await this.execPromise(`docker rm -f ${this.containerName}`).catch(()=>{})}logs(){let t=(0,Z.spawn)("docker",["logs","-f",this.containerName]);t.stdout.on("data",r=>{console.info(`${r}`)}),t.stderr.on("data",r=>{console.info(`${r}`)})}execPromise(t){return new Promise((r,o)=>{(0,Z.exec)(t,(n,s,i)=>{if(n)return o(n);r({stdout:s,stderr:i})})})}};var Ft=c(require("localtunnel"));var Kt=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 O({method:w.POST,url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:r,runtimeHost:t}}).catch(n=>{var s,i;console.info(`addTunnel error ${((i=(s=n==null?void 0:n.response)==null?void 0:s.data)==null?void 0:i.message)||(n==null?void 0:n.message)}`)})},Gt=async e=>{await O({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Bt=async e=>{var t,r;try{return(await(0,Ft.default)({port:e,host:((t=process.env)==null?void 0:t.TUNNEL_HOST)==="OFFICIAL"?void 0:((r=process.env)==null?void 0:r.TUNNEL_HOST)||"http://tunnel.gitee.work:1777"})).url}catch(o){return console.info("runTunnel error",o==null?void 0:o.message),""}};var ve=c(require("path")),zt=require("@rspack/core"),Vt=require("@rspack/dev-middleware"),qt=c(require("cors")),Ht=c(require("express")),Jt=require("http-proxy-middleware");function zr(e,t){var o;let r=(o=t==null?void 0:t.devServer)==null?void 0:o.proxy;if(!(!Array.isArray(r)||r.length===0))for(let n of r){if(!n||!n.target)continue;let s=n.context&&!n.pathFilter?{...n,pathFilter:n.context}:n;e.use((0,Jt.createProxyMiddleware)(s))}}var ee=async({appKey:e,rspackConfig:t})=>{let o=(await G())({environment:"development",appKey:e});if(t){let p=require(ve.default.resolve(t));o=$(o,p)}let n=(0,zt.rspack)(o),s=(0,Ht.default)(),i=Number(process.env.UI_PORT)||8e3,a=(0,Vt.devMiddleware)(n);s.use((0,qt.default)()),zr(s,o),s.use(a),s.get("*",(p,l)=>{var m,d;(d=n.outputFileSystem)==null||d.readFile(ve.default.join(((m=o.output)==null?void 0:m.path)||"","index.html"),(g,k)=>{if(g||!k){l.sendStatus(404);return}l.send(k.toString())})}),s.listen(i,"0.0.0.0",()=>{console.info(`The React app is listening on port ${i}!
|
|
5
|
-
`)})};var Qt=c(require("chokidar"));var Wt=(e,t,r)=>{for(let o of e)
|
|
6
|
-
`);let{domain:
|
|
7
|
-
`).replace(/import\s+\{\s*merge\s*\}\s+from\s+['"]webpack-merge['"];?/g,"import merge from 'deepmerge';").replace(/const\s+\{\s*merge\s*\}\s*=\s*require\((['"])webpack-merge\1\);?/g,"const merge = require('deepmerge');").replace(/(['"])webpack-merge\1/g,"$1deepmerge$1").replace(/^.*(rspack-bundle-analyzer|webpack-bundle-analyzer).*\n?/gm,"").replace(/^.*ANALYZER_PACKAGE.*\n?/gm,"").replace(/(['"])webpack\1/g,"$1@rspack/core$1");a!==i&&(await y.default.writeFile(s,a),t=!0)}return t},nr=async e=>{let t=j.default.resolve(e||process.cwd()),r=j.default.join(t,"package.json");if(!await y.default.pathExists(r)){
|
|
8
|
-
`),!s&&!i&&!a&&!p&&!l){console.info("Nothing to upgrade. Project already uses rspack settings.");return}console.info("upgrade-v1 finished."),console.info(`Project path: ${t}`),console.info("Please run: pnpm install")};var
|
|
9
|
-
`);var h=new sr.Command;h.version(
|
|
2
|
+
"use strict";var lr=Object.create;var se=Object.defineProperty;var mr=Object.getOwnPropertyDescriptor;var ur=Object.getOwnPropertyNames;var fr=Object.getPrototypeOf,dr=Object.prototype.hasOwnProperty;var gr=(e,t)=>()=>(e&&(t=e(e=0)),t);var yr=(e,t)=>{for(var r in t)se(e,r,{get:t[r],enumerable:!0})},hr=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ur(t))!dr.call(e,n)&&n!==r&&se(e,n,{get:()=>t[n],enumerable:!(o=mr(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?lr(fr(e)):{},hr(t||!e||!e.__esModule?se(r,"default",{value:e,enumerable:!0}):r,e));var Be={};yr(Be,{default:()=>Er});function Er({environment:e,appKey:t,distOutputPath:r="dist"}){let o=e==="production",n=e==="development",s=Pr(),i=Ue.default.existsSync(D.default.resolve("locales")),a=T=>T?{filename:"js/[name].[chunkhash].min.js",path:D.default.resolve(r),publicPath:"./",library:{type:"umd",name:t},clean:!0}:{filename:"main.js",path:D.default.resolve(r),publicPath:"/",library:{type:"umd",name:t}},p=({resourcePath:T},I,v)=>v===t||/\.global\.(css|less)$/.test(T)||/node_modules/.test(T)?v:`${v}__${(0,Ge.default)(`${T}${v}`,{algorithm:"md5"}).slice(0,8)}`,l={loader:"@ecomfe/class-names-loader",options:{classNamesModule:require.resolve("classnames")}},m=o?_.rspack.CssExtractRspackPlugin.loader:"style-loader",f={loader:"postcss-loader",options:{postcssOptions:{plugins:[Ke.default]}}},g={loader:"css-loader",options:{modules:{getLocalIdent:p},importLoaders:1}},x={loader:"less-loader",options:{lessOptions:{javascriptEnabled:!0,modifyVars:{"ant-prefix":t}}}};return{mode:e,entry:"./src/index.tsx",output:a(o),devtool:o?!1:"source-map",resolve:{alias:{"@":D.default.join(process.cwd(),"src/")},extensions:[".js",".ts",".jsx",".tsx",".css",".less"]},optimization:{minimize:o},plugins:[new _.rspack.DefinePlugin({"process.env":JSON.stringify(process.env),"process.env.appKey":JSON.stringify(t)}),new _.rspack.HtmlRspackPlugin({template:D.default.resolve("public/index.html"),filename:"index.html",inject:!0,appKey:t}),o&&new _.rspack.CssExtractRspackPlugin({filename:"[name].[contenthash].css",chunkFilename:"[name].[contenthash].chunk.css"}),n&&new _.rspack.HotModuleReplacementPlugin,n&&new Fe.default({overlay:!1})].filter(Boolean),module:{rules:[{oneOf:[{test:/\.(js|mjs|jsx|ts|tsx)$/,exclude:/node_modules/,loader:"builtin:swc-loader",options:{sourceMaps:kr,jsc:{parser:{syntax:"typescript",tsx:!0},transform:{react:{runtime:"automatic",development:!o,refresh:!o}}},env:{targets:"chrome >= 72",mode:"usage",coreJs:"3.38"}},type:"javascript/auto"},s&&i&&{test:/locales/,loader:s,include:[D.default.resolve("locales")]},{test:/\.css$/,use:[l,m,"css-loader",f]},{test:/\.less$/,use:[l,m,g,f,x]},{test:/\.(png|jpg|gif)$/i,type:"asset",parser:{dataUrlCondition:{maxSize:2400}},generator:{filename:"[name]_[hash][ext]"}},{test:/\.svg$/i,use:["@svgr/webpack"]}]}]}}}var Ue,D,_,Fe,Ke,Ge,kr,Pr,Ve=gr(()=>{"use strict";Ue=c(require("fs")),D=c(require("path")),_=require("@rspack/core"),Fe=c(require("@rspack/plugin-react-refresh")),Ke=c(require("autoprefixer")),Ge=c(require("hasha")),kr=process.env.GENERATE_SOURCEMAP==="true",Pr=()=>{try{return require.resolve("@alienfast/i18next-loader")}catch{return null}}});var cs=require("dotenv/config"),xe=c(require("chalk")),sr=require("commander");var k="2.0.1";var le=c(require("path"));var U=["manifest.yml","locales"],Se=Buffer.from(process.env.ONE_AUTH_IV||"ABCDEFGHIJKLM_iv","utf-8"),De=Buffer.from(process.env.ONE_AUTH_SECRET_KEY||"ABCDEFGHIJKL_key","utf-8"),Ce=process.env.ONE_AUTH_ALGORITHM||"aes-128-cbc";var V=c(require("chalk")),rt=c(require("fs-extra"));var _e=c(require("fs")),ae=c(require("path")),Le=c(require("@rollup/plugin-commonjs")),je=require("rollup");var A=require("fs"),b=require("path"),Re=require("esbuild"),br={treeShaking:!0,format:"esm",loader:"tsx"};var wr=({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 ie({mode:e,...t}){return t={...br,...t},{name:"esbuild",resolveId(r,o,n){if(!o)return r;let s=(0,b.dirname)(o),i;if((0,A.existsSync)(i=(0,b.resolve)(s,r,"index.ts")))return i;if((0,A.existsSync)(i=(0,b.resolve)(s,r,"index.tsx")))return i;if((0,A.existsSync)(i=(0,b.resolve)(s,r+".ts")))return i;if((0,A.existsSync)(i=(0,b.resolve)(s,r+".tsx")))return i;{let a=wr({source:r,dirPath:s,mode:e});if((0,A.existsSync)(a))return a;throw console.error({source:r,importer:o,options:n}),i=(0,b.relative)(".",(0,b.resolve)(o,r)),new Error(`ENOENT: ${i.replace(/\\/g,"/")}`)}},async transform(r,o){t.sourcefile=o,t.loader=o.endsWith(".json")?"json":t.loader;let{code:n,map:s}=await(0,Re.transform)(r,t);return s?{code:n,map:s}:n}}}function xr(e,t,r="development"){let o=[(0,Le.default)()];o.push(ie({mode:r,sourcemap:r==="development",minify:r!=="development",target:"es2018",jsx:"transform",jsxFactory:"AppsUI.createElement",jsxFragment:"AppsUI.Fragment"}));let n={input:e,plugins:o},s={file:t,format:"es",sourcemap:r==="development"};return{inputOptions:n,outputOptions:s}}async function F(e){let{fileName:t,inputDir:r,outputDir:o,mode:n="development"}=e,s=ae.default.join(r,`${t}.ts`);try{await _e.default.promises.access(s)}catch{console.error(`${s} is not exist`);return}let i=ae.default.join(o,`${t}.js`),{inputOptions:a,outputOptions:p}=xr(s,i,n);await(await(0,je.rollup)(a)).write(p)}var $e=c(require("ora")),d=async(e,t)=>{var o,n;let r=(0,$e.default)(e.start).start();try{let s=await t();return r.succeed(e.succeed),s}catch(s){throw r.fail(`${e.error}: ${((n=(o=s==null?void 0:s.response)==null?void 0:o.data)==null?void 0:n.message)||s.message}`),s}};var Ne=c(require("path")),Ie=require("@giteeteam/apps-manifest"),Me=c(require("fs-extra")),P=async()=>{let e=Ne.default.resolve("manifest.yml"),t=await Me.default.readFile(e);return new Ie.Manifest(t.toString())};var qe=c(require("path")),He=require("@rspack/core");var K=async()=>(await Promise.resolve().then(()=>(Ve(),Be))).default;var ze=e=>Object.prototype.toString.call(e)==="[object Object]",$=(e,t)=>{if(t===void 0)return e;if(Array.isArray(e)&&Array.isArray(t))return[...e,...t];if(ze(e)&&ze(t)){let r={...e};for(let[o,n]of Object.entries(t))r[o]=o in r?$(r[o],n):n;return r}return t};var Je=async({appKey:e,rspackConfig:t})=>{let r=await K();return new Promise((o,n)=>{let s=r({environment:"production",appKey:e});if(t){let a=require(qe.default.resolve(t));s=$(s,a)}(0,He.rspack)(s).run((a,p)=>{if(a)return console.error(a),n(a);if(console.info(p==null?void 0:p.toString()),p!=null&&p.hasErrors())return n(new Error("build-ui-error"));o()})})};var We=c(require("path")),Qe=c(require("archiver")),ce=c(require("fs-extra")),Ye=async(e,t)=>{let r=We.default.resolve(t);return await ce.default.remove(r),new Promise((o,n)=>{let s=ce.default.createWriteStream(r),i=(0,Qe.default)("zip",{zlib:{level:9}});s.on("close",function(){o()}),i.on("warning",function(a){console.info(a),a.code==="ENOENT"||n(a)}),i.on("error",function(a){console.info(a),n(a)}),i.pipe(s),i.directory(e,!1),i.finalize()})};var Xe=async e=>{let{manifest:t,mode:r,outputDir:o,inputDir:n}=e,i=t.getFunctionFiles().map(async a=>{await F({inputDir:n,fileName:a,outputDir:o,mode:r})});await Promise.all(i)};var B=c(require("path")),et=c(require("fs-extra"));var pe=c(require("path")),Ze=c(require("fs-extra")),G=async(e,t)=>{for(let r of t)try{let o=pe.default.resolve(r),n=pe.default.join(e,r);await Ze.default.copy(o,n)}catch(o){if(o.code==="ENOENT"&&r==="locales")continue;throw o}};var tt=async({outputDir:e,manifest:t,filesToCopy:r})=>{let{resources:o}=t;if(o)for(let{key:n,path:s}of o){let i=B.default.resolve(B.default.join("./",s)),a=B.default.join(e,n);await et.default.copy(i,a)}await G(e,r)};var ot=async({outputDir:e,inputDir:t,prod:r,filesToCopy:o,zip:n,ui:s,rspackConfig:i})=>{let a=await P(),{version:p,key:l}=a.app;if(!l){console.error("manifest app key is required");return}if(!p){console.error("manifest app version is required");return}console.info(`App key: ${V.default.bold.green(l)}`),console.info(`App version: ${V.default.bold.green(p)}
|
|
3
|
+
`);let{pass:m,errors:f}=a.validate();if(!m){if(f!=null&&f.length){let{message:g,path:x}=f[0];console.error(`Manifest valid error: Path '${x}', ${g}`)}else console.error("Manifest valid error");return}if(await rt.default.emptyDir(e),s&&await d({start:"start build ui",error:"build ui failed",succeed:"build ui success"},()=>Je({appKey:l,rspackConfig:i})),await d({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>Xe({outputDir:e,inputDir:t,manifest:a,mode:r?"production":"development"})),await d({start:"start package",error:"package failed",succeed:"package success"},()=>tt({outputDir:e,manifest:a,filesToCopy:o})),n){let g=`${l}_${p}.zip`;await d({start:"start archive",error:"archive failed",succeed:"archive success"},()=>Ye(e,g)),console.info(`
|
|
4
|
+
The output file of the build is ${V.default.bold.green(g)}`)}};var nt=async e=>{let{input:t="functions",output:r="package",prod:o,dev:n,copy:s=[],zip:i,ui:a,rspack:p}=e;await ot({outputDir:le.default.resolve(r),inputDir:le.default.resolve(t),prod:o??!n,filesToCopy:[...U,...s],zip:i,ui:!!a,rspackConfig:p}).catch(()=>{})};var gt=c(require("fs")),yt=c(require("path")),q=c(require("chalk"));var st=c(require("path")),it=c(require("lowdb")),at=c(require("lowdb/adapters/FileSync"));var me,ue=()=>{if(!me){let e=st.default.join(__dirname,"user.json"),t=new at.default(e);me=(0,it.default)(t)}return me},ct=()=>{let e=ue(),t=e.get("version").value();(!t||t!==k)&&e.defaults({version:k,user:{}}).write()},fe=e=>{ct(),ue().set("user",e).write()},E=()=>(ct(),ue().get("user").value());var lt=c(require("fs")),mt=c(require("path")),ut=c(require("form-data"));var pt=c(require("axios"));var w={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE"},O=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:s}=E();return(await(0,pt.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:s}})).data};var ft=async(e,t)=>{let r=new ut.default;return r.append("environmentKey",t),r.append("package",lt.default.createReadStream(mt.default.resolve(e))),O({method:w.POST,url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})},z=async({tenants:e,environmentKey:t,appKey:r,versionKey:o})=>O({method:w.POST,url:"/apps/api/v1/apps/install/batch",data:{tenants:e,environmentKey:t,appKey:r,versionKey:o,subscriptionSource:"manual"}});var dt=c(require("chalk")),Or=dt.default.bold.red,u={error:e=>{console.info(Or(e))}};var H=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(H||{}),Tr=e=>e?(Array.isArray(e)?e:[e]).flatMap(r=>r.split(",")).map(r=>r.trim()).filter(Boolean):[],Sr=e=>{let t=yt.default.basename(e,".zip"),r=t.lastIndexOf("_");return r<=0||r===t.length-1?null:{appKey:t.slice(0,r),versionKey:t.slice(r+1)}},ht=async(e,t)=>{let{domain:r}=E(),{environment:o="development",subscribe:n,appKey:s,versionKey:i}=t,a=Tr(n);if(!Object.values(H).includes(o)){u.error("Only support development, staging, production environment.");return}if(!r){u.error("Please login in first!");return}if(!gt.default.existsSync(e)){u.error(`File:${e} is not exist`);return}if(console.info(`Deploying to ${q.default.bold.green(r)}`),await d({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>ft(e,o)).catch(()=>{}),a.length===0)return;let p=Sr(e),l=s||(p==null?void 0:p.appKey),m=i||(p==null?void 0:p.versionKey);if(!l||!m){u.error("subscribe needs appKey and versionKey. please pass --app-key and --version-key, or use zip name <appKey>_<versionKey>.zip");return}console.info(`Subscribing app ${q.default.bold.green(l)}:${q.default.bold.green(m)}`),await d({start:"start subscribe",error:"subscribe failed",succeed:"subscribe success"},()=>z({tenants:a,environmentKey:o,appKey:l,versionKey:m})).catch(()=>{})};var C=c(require("path")),L=c(require("fs-extra")),Y=c(require("inquirer"));var vt=c(require("readline")),bt=require("chalk"),wt=c(require("execa")),Dr=e=>{if(!bt.supportsColor){e.write("\r");return}vt.default.cursorTo(e,0)},Cr=(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),s=Math.min(t,n),i=Math.round(s*r),a="#".repeat(i),p="-".repeat(s-i);Dr(process.stderr),process.stderr.write(`[${a}${p}]${o}`)},Rr=(e,t,r,o)=>new Promise((n,s)=>{var a;let i=(0,wt.default)(e,t,{cwd:r,stdio:["inherit","inherit","pipe"],env:o});(a=i.stderr)==null||a.on("data",p=>{let l=p.toString();if(/warning/.test(l))return;let m=l.match(/\[.*] (\d+)\/(\d+)/);if(m){Cr(parseFloat(m[1]),parseFloat(m[2]));return}process.stderr.write(p)}),i.on("close",p=>{if(p!==0){s(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),J={executeCommand:Rr};var de=c(require("fs-extra")),ge=c(require("simple-git")),xt=async e=>{await(0,ge.default)(e).init()},W=async(e,t,r)=>{await de.default.pathExists(t)||await de.default.mkdir(t);let o=(0,ge.default)(t),n=[];r!=null&&r.branch&&n.push("--branch",r.branch),r!=null&&r.singleBranch&&n.push("--single-branch"),await o.clone(e,t,n)};var Q=c(require("fs-extra")),kt=process.env.APPS_TEMPLATE_REPO||"https://github.com/moriahq/apps-template.git",ye=(r=>(r.micro="micro",r.uikit="uikit",r))(ye||{}),Pt=async(e,t)=>{if(!await Q.default.pathExists(e))return;let r=await Q.default.readFile(e,{encoding:"utf-8"});await Q.default.writeFile(e,r.replace(/{{(\w+)}}/g,(o,n)=>typeof t[n]=="string"?t[n]:o))};var _r=async()=>(await Y.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],Lr=async()=>(await Y.default.createPromptModule()({type:"input",name:"App key",message:"Please enter a valid app key",validate:r=>/^[a-z][a-z0-9_]*$/.test(r)?!0:(console.info(""),console.info("only supports letters, numbers, underscores and starts with letters"),!1)}))["App key"],jr=async()=>(await Y.default.createPromptModule()({type:"confirm",name:"Init Skill",message:"Initialize Gitee Team app skill?",default:!0}))["Init Skill"],$r=()=>{if(Number(k.split(".")[0])>=1)return"v1"},Nr=async(e,t)=>{let r=$r();if(!r){await d({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>W(e,t));return}try{await d({start:`Start clone repository (branch: ${r})`,error:"Clone repository failed!",succeed:"Clone repository success!"},()=>W(e,t,{branch:r,singleBranch:!0}))}catch{console.info(`Template branch '${r}' not found, fallback to default branch.`),await d({start:"Start clone repository (default branch)",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>W(e,t))}},Ir=async e=>{await d({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>J.executeCommand("pnpm",["install"],e))},Et=async e=>{let{cwd:t}=e,r="micro",o=await _r(),n=await Lr(),s=await jr(),i=C.default.join(t,n);if(await L.default.pathExists(i)){console.error(`Project path already exists: ${i}`);return}await Nr(kt,i),await L.default.copy(C.default.join(i,r),i),await Promise.all(Object.values(ye).map(p=>L.default.remove(C.default.join(i,p)))),await L.default.remove(C.default.join(i,"./.git")),await L.default.remove(C.default.join(i,"./SKILL.md"));let a=["./manifest.yml","./package.json","./rspack.config.js","./public/index.html","./src/App.tsx","./src/index.tsx","./static/App.tsx","./static/index.tsx"];await Promise.all(a.map(p=>Pt(C.default.join(i,p),{appName:o,appKey:n}))),await Ir(i),await xt(i),console.info("Project init success!"),console.info("Project path:"+i),s&&(console.info("To initialize skill, run:"),console.info(`cd ${i} && npx skills add moriahq/giteeteam-skills`))};var Ot=async()=>{let e=process.cwd();await Et({cwd:e})};var X=c(require("inquirer"));var he=c(require("axios"));var Tt=["/api/gateway/login","/login"],Mr=e=>{var o;let t=(o=e==null?void 0:e.response)==null?void 0:o.status,r=e==null?void 0:e.code;return[404,405,502,503,504].includes(t)||["ECONNREFUSED","ENOTFOUND","ECONNABORTED"].includes(r)},St=async({baseUrl:e,username:t,password:r})=>{var n;let o;for(let s of Tt)try{let i=await(0,he.default)({method:w.POST,url:`${e}${s}`,data:{username:t,password:r}});return console.info(`Login endpoint: ${s}`),{cookie:(n=i.headers)==null?void 0:n["set-cookie"]}}catch(i){if(o=i,!Mr(i))return console.error(`Login error (${s}):`,i==null?void 0:i.message),{cookie:""}}return console.error(`Login error: all endpoints failed (${Tt.join(", ")})`,(o==null?void 0:o.message)||""),{cookie:""}},Dt=async e=>{try{return await(0,he.default)({method:w.GET,url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var Ct=e=>{try{return new URL(e).origin}catch{return e}};var Rt=c(require("crypto"));var At=e=>{try{let t=Rt.default.createCipheriv(Ce,De,Se),r=t.update(e,"utf8","base64");return r+=t.final("base64"),r.toString()}catch(t){return console.error(`Encryption error: ${t}`),null}};var Ur=async()=>(await X.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,Fr=async()=>(await X.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,Kr=async()=>(await X.default.createPromptModule()({type:"password",name:"Password",message:"Please enter password",validate:r=>!!r})).Password,_t=async({domain:e,username:t,password:r})=>{if(e||(e=await Ur()),e=Ct(e),await Dt(e)){t||(t=await Fr()),r||(r=await Kr());let{cookie:n}=await St({baseUrl:e,username:t,password:At(r)||r});n?(fe({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else fe({domain:e}),console.info("Login success!")};var Lt=async e=>{await _t(e)};var jt=c(require("chalk"));var Gr=e=>e?(Array.isArray(e)?e:[e]).flatMap(r=>r.split(",")).map(r=>r.trim()).filter(Boolean):[],$t=async(e,t,r)=>{let{domain:o}=E(),{environment:n="development",tenants:s}=r,i=Gr(s);if(!o){u.error("Please login in first!");return}if(!Object.values(H).includes(n)){u.error("Only support development, staging, production environment.");return}if(!e||!t){u.error("Please provide appKey and versionKey.");return}if(i.length===0){u.error("Please provide subscribe tenants by -t/--tenants.");return}console.info(`Subscribing to ${jt.default.bold.green(o)}`),await d({start:"start subscribe",error:"subscribe failed",succeed:"subscribe success"},()=>z({tenants:i,environmentKey:n,appKey:e,versionKey:t})).catch(()=>{})};var Nt=c(require("path")),It=c(require("fs-extra"));var Mt=async e=>{let t=Nt.default.resolve(e||process.cwd());if(!await It.default.pathExists(t)){u.error(`project path not found: ${t}`);return}await J.executeCommand("npx",["skills","add","moriahq/giteeteam-skills"],t),console.info("sync-skill finished."),console.info(`Project path: ${t}`)};var re=c(require("path"));var Xt=c(require("path")),te=c(require("chalk")),Zt=c(require("debug")),be=c(require("fs-extra"));var Ut=async()=>{var t;return((t=(await O({method:w.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 Z=require("child_process"),N=class{constructor(t,r){this.imageName=t,this.containerName=r}async downloadImage(){console.info(`Downloading image(${this.imageName}) ...`),await this.execPromise(`docker pull ${this.imageName}`),console.info(`Download image(${this.imageName}) success!`)}async runContainer({port:t,env:r,volume:o=[]}){await this.removeContainer();let n=Object.keys(r).filter(a=>r[a]!==void 0).map(a=>`-e ${a}=${r[a]}`).join(" "),s=o==null?void 0:o.map(a=>`-v ${a}`).join(" "),i=`docker run -d -p ${t}:${t} ${n} ${s} --name ${this.containerName} ${this.imageName}`;await this.execPromise(i)}async removeContainer(){await this.execPromise(`docker rm -f ${this.containerName}`).catch(()=>{})}logs(){let t=(0,Z.spawn)("docker",["logs","-f",this.containerName]);t.stdout.on("data",r=>{console.info(`${r}`)}),t.stderr.on("data",r=>{console.info(`${r}`)})}execPromise(t){return new Promise((r,o)=>{(0,Z.exec)(t,(n,s,i)=>{if(n)return o(n);r({stdout:s,stderr:i})})})}};var Ft=c(require("localtunnel"));var Kt=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 O({method:w.POST,url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:r,runtimeHost:t}}).catch(n=>{var s,i;console.info(`addTunnel error ${((i=(s=n==null?void 0:n.response)==null?void 0:s.data)==null?void 0:i.message)||(n==null?void 0:n.message)}`)})},Gt=async e=>{await O({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Bt=async e=>{var t,r;try{return(await(0,Ft.default)({port:e,host:((t=process.env)==null?void 0:t.TUNNEL_HOST)==="OFFICIAL"?void 0:((r=process.env)==null?void 0:r.TUNNEL_HOST)||"http://tunnel.gitee.work:1777"})).url}catch(o){return console.info("runTunnel error",o==null?void 0:o.message),""}};var ve=c(require("path")),Vt=require("@rspack/core"),zt=require("@rspack/dev-middleware"),qt=c(require("cors")),Ht=c(require("express")),Jt=require("http-proxy-middleware");function Br(e,t){var o;let r=(o=t==null?void 0:t.devServer)==null?void 0:o.proxy;if(!(!Array.isArray(r)||r.length===0))for(let n of r){if(!n||!n.target)continue;let s=n.context&&!n.pathFilter?{...n,pathFilter:n.context}:n;e.use((0,Jt.createProxyMiddleware)(s))}}var ee=async({appKey:e,rspackConfig:t})=>{let o=(await K())({environment:"development",appKey:e});if(t){let p=require(ve.default.resolve(t));o=$(o,p)}let n=(0,Vt.rspack)(o),s=(0,Ht.default)(),i=Number(process.env.UI_PORT)||8e3,a=(0,zt.devMiddleware)(n);s.use((0,qt.default)()),Br(s,o),s.use(a),s.get("*",(p,l)=>{var m,f;(f=n.outputFileSystem)==null||f.readFile(ve.default.join(((m=o.output)==null?void 0:m.path)||"","index.html"),(g,x)=>{if(g||!x){l.sendStatus(404);return}l.send(x.toString())})}),s.listen(i,"0.0.0.0",()=>{console.info(`The React app is listening on port ${i}!
|
|
5
|
+
`)})};var Qt=c(require("chokidar"));var Wt=(e,t,r)=>{for(let o of e)F({inputDir:t,outputDir:r,fileName:o,mode:"development"})},Yt=async e=>{let{inputDir:t,outputDir:r,watchFilePaths:o}=e,s=(await P()).getFunctionFiles();Wt(s,t,r);let i,a=[t,...o],p=Qt.default.watch(a);console.info(`watch: ${a.join(", ")}`),p.on("change",l=>{clearTimeout(i),i=setTimeout(()=>{console.info(`${l} has change`),Wt(s,t,r)},1e3)})};var Vr=(0,Zt.default)("cli:tunnel"),zr=async()=>{let e=await Ut(),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=process.env.CONTAINER_NAME||"cli-dev-apps-runtime-server",n=process.env.PULL_IMAGE!=="false",s={PORT:r,APPS_DIR:"/usr/src/app/apps",LRU_TTL:1,FS_MODE:"local",DEBUG:process.env.DEBUG||"runtime*",LOG_LEVEL:process.env.LOG_LEVEL,APPS_DEFAULT_LOCALE:process.env.APPS_DEFAULT_LOCALE||"zh-CN",PARSE_PUBLIC_SERVER_URL:process.env.PARSE_PUBLIC_SERVER_URL||e.parsePublicServerUrl,PARSE_SERVER_MASTER_KEY:process.env.PARSE_SERVER_MASTER_KEY||e.parseServerMasterKey,PROXIMA_CORE_URL:process.env.PROXIMA_CORE_URL||e.proximaCoreUrl,APPS_SERVER_URL:process.env.APPS_SERVER_URL||e.appsServerUrl,APPS_PARSE_SERVER_URL:process.env.APPS_PARSE_SERVER_URL||e.appsParseServerUrl,PGSQL_CLIENT_HOST:process.env.PGSQL_CLIENT_HOST,PGSQL_CLIENT_PORT:process.env.PGSQL_CLIENT_PORT,PGSQL_CLIENT_USER:process.env.PGSQL_CLIENT_USER,PGSQL_CLIENT_PASSWORD:process.env.PGSQL_CLIENT_PASSWORD,APPS_RUNTIME_IOREDIS_OPTIONS:process.env.APPS_RUNTIME_IOREDIS_OPTIONS?`'${process.env.APPS_RUNTIME_IOREDIS_OPTIONS}'`:void 0};return{runtimeImage:t,containerPort:r,containerName:o,containerEnv:s,pullImage:n}},er=async e=>{var Ee,Oe,Te;let{inputDir:t,outputDir:r,server:o,filesToCopy:n,resourcePort:s,ui:i,rspackConfig:a,noProxy:p,watchFilePaths:l=[]}=e;await be.default.emptyDir(r);let m=await P(),f=m.app.key,g=m.app.version,x=m.getFunctionFiles(),T=m.resources||[];if(!f){u.error("appKey is required!");return}if(!g){u.error("version is required!");return}console.info(`App key: ${te.default.bold.green(f)}`),console.info(`App version: ${te.default.bold.green(g)}
|
|
6
|
+
`);let{domain:I}=E();if(!I){u.error("Please login in first!");return}console.info(`Tunneling to ${te.default.bold.green(I)}`);let v=[],oe=async R=>{R instanceof Error&&console.error(R);try{await Promise.all(v.map(S=>S()))}catch(S){console.error("other error:",S)}process.exit()};process.on("SIGINT",oe),process.on("uncaughtException",oe),process.on("unhandledRejection",oe),i&&ee({appKey:f,rspackConfig:a});let ir=`${`/${f}/development/${g}`}/server-side`,ke=Xt.default.join(r,ir);await G(ke,n),await Yt({inputDir:t,outputDir:ke,watchFilePaths:l}),v.push(()=>be.default.remove(r));let ne="",Pe;if(o&&x.length>0){let{runtimeImage:R,containerPort:S,containerEnv:ar,containerName:cr,pullImage:pr}=await zr();Pe=S;let M=new N(R,cr);pr&&await M.downloadImage(),await M.runContainer({port:S,env:ar,volume:[`${r}:/usr/src/app/apps`]}),v.push(()=>M.removeContainer()),p||(ne=await d({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>Bt(S)),Vr("runtimeHost",ne)),M.logs()}if(p){console.info(`\u4EE3\u7406\u5173\u95ED \u274C\uFF1A\u8BF7\u628A\u8BF7\u6C42\u6307\u5411localhost:${Pe}`);return}if(await Kt({appKey:f,runtimeHost:ne,resources:T,resourcePort:s}),v.push(()=>Gt(f)),o&&((Te=(Oe=(Ee=m.getManifest())==null?void 0:Ee.modules)==null?void 0:Oe.webtrigger)!=null&&Te.length)){console.info("You can use this url for test:");let R=`${I}/apps/api/v1/:tenant/apps/${f}/environments/development/webtriggers/:webtriggerKey`;console.info(`POST ${R}`)}};var tr=async e=>{let{copy:t=[],input:r="functions",output:o="cache",server:n=!0,resourcePort:s,ui:i,rspack:a,proxy:p,watch:l=[]}=e;await er({outputDir:re.default.resolve(o),inputDir:re.default.resolve(r),filesToCopy:[...U,...t],server:n,resourcePort:Number(s)||8e3,ui:!!i,rspackConfig:a,noProxy:!p,watchFilePaths:l.map(m=>re.default.resolve(m))})};var qr=async({rspackConfig:e})=>{let t=await P(),{key:r}=t.app;if(!r){u.error("manifest app key is required");return}ee({appKey:r,rspackConfig:e})},rr=qr;var or=async e=>{let{rspack:t}=e;await rr({rspackConfig:t})};var j=c(require("path")),y=c(require("fs-extra"));var Hr=["@ant-design/compatible","@giteeteam/apps-team-theme","webpack","webpack-cli","webpack-dev-server","webpack-merge","webpack-bundle-analyzer"],Jr={"@rspack/core":"^2.0.0","@rspack/plugin-react-refresh":"^1.4.2",deepmerge:"^4.3.1"},Wr=["webpack.config.js","webpack.config.cjs","webpack.config.mjs","webpack.config.ts"],we=e=>Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r))),Qr=e=>{let t=e.peerDependencies;if(!t||typeof t!="object")return!1;let r=!1;for(let o of["@ant-design/compatible","@giteeteam/apps-team-theme"])o in t&&(delete t[o],r=!0);return r&&(e.peerDependencies=we(t)),r},Yr=e=>{let t=["dependencies","devDependencies"],r=!1;for(let o of t){let n=e[o];if(!(!n||typeof n!="object"))for(let s of Hr)s in n&&(delete n[s],r=!0)}(!e.dependencies||typeof e.dependencies!="object")&&(e.dependencies={},r=!0);for(let[o,n]of Object.entries(Jr))e.dependencies[o]||(e.dependencies[o]=n,r=!0);return e.dependencies&&typeof e.dependencies=="object"&&(e.dependencies=we(e.dependencies)),e.devDependencies&&typeof e.devDependencies=="object"&&(e.devDependencies=we(e.devDependencies)),r},Xr=e=>{if(!e.scripts||typeof e.scripts!="object")return!1;let t=!1;for(let[r,o]of Object.entries(e.scripts)){let n=o;n=n.replace(/\byarn\b/g,"pnpm"),n=n.replace(/\bwebpack-dev-server\b/g,"rspack serve"),n=n.replace(/\bwebpack serve\b/g,"rspack serve"),n=n.replace(/\bwebpack\b/g,"rspack"),n=n.replace(/--webpack\b/g,"--rspack"),n=n.replace(/(^|\s)-w(\s+)/g,"$1-r$2"),n=n.replace(/webpack\.config\.(js|cjs|mjs|ts)\b/g,"rspack.config.$1"),n!==o&&(e.scripts[r]=n,t=!0)}return t},Zr=async e=>{let t=j.default.join(e,"yarn.lock");return await y.default.pathExists(t)?(await y.default.remove(t),!0):!1},eo=async e=>{let t=!1;for(let r of Wr){let o=j.default.join(e,r);if(!await y.default.pathExists(o))continue;let n=r.replace(/^webpack\.config/,"rspack.config"),s=j.default.join(e,n);await y.default.pathExists(s)||(await y.default.move(o,s),t=!0);let i=await y.default.readFile(s,"utf8"),a=i.replace(/webpack配置/g,"rspack\u914D\u7F6E").replace(/import\s+\{\s*themeConfig\s*\}\s+from\s+['"]@giteeteam\/apps-team-theme['"];?\n?/g,"").replace(/import\s+\{\s*convertLegacyToken\s*\}\s+from\s+['"]@ant-design\/compatible['"];?\n?/g,"").replace(/const\s+mapToken\s*=\s*defaultAlgorithm\(\{\s*\.\.\.defaultSeed\s*,\s*\.\.\.themeConfig\.token\s*\}\);?/g,"const mapToken = defaultAlgorithm({ ...defaultSeed });").replace(/const\s+v4Token\s*=\s*convertLegacyToken\(\{\s*\.\.\.mapToken\s*\}\);?\n?/g,"").replace(/\n([ \t]*)\.\.\.v4Token,\n/g,`
|
|
7
|
+
`).replace(/import\s+\{\s*merge\s*\}\s+from\s+['"]webpack-merge['"];?/g,"import merge from 'deepmerge';").replace(/const\s+\{\s*merge\s*\}\s*=\s*require\((['"])webpack-merge\1\);?/g,"const merge = require('deepmerge');").replace(/(['"])webpack-merge\1/g,"$1deepmerge$1").replace(/^.*(rspack-bundle-analyzer|webpack-bundle-analyzer).*\n?/gm,"").replace(/^.*ANALYZER_PACKAGE.*\n?/gm,"").replace(/(['"])webpack\1/g,"$1@rspack/core$1");a!==i&&(await y.default.writeFile(s,a),t=!0)}return t},nr=async e=>{let t=j.default.resolve(e||process.cwd()),r=j.default.join(t,"package.json");if(!await y.default.pathExists(r)){u.error(`package.json not found in ${t}`);return}let o=await y.default.readFile(r,"utf8"),n=JSON.parse(o),s=Yr(n),i=Qr(n),a=Xr(n),p=await Zr(t),l=await eo(t);if((s||i||a)&&await y.default.writeFile(r,`${JSON.stringify(n,null,2)}
|
|
8
|
+
`),!s&&!i&&!a&&!p&&!l){console.info("Nothing to upgrade. Project already uses rspack settings.");return}console.info("upgrade-v1 finished."),console.info(`Project path: ${t}`),console.info("Please run: pnpm install")};var to=`v${k}`;console.info(`GiteeTeam Apps Cli ${xe.default.bold.green(to)}`);console.info(`Node.js ${xe.default.bold.green(process.version)}
|
|
9
|
+
`);var h=new sr.Command;h.version(k,"-v -V --vers").description("Giteeteam Apps Cli");h.command("build").option("--prod","build in production").option("--dev","build in development").option("--no-zip","no archive").option("-c --copy [letters...]","copy files").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir").option("--ui","build ui").option("-r --rspack [file]","build ui rspack config file").action(nt);h.command("init").action(Ot);h.command("sync-skill [projectPath]").description("sync builtin skill files to project").action(Mt);h.command("upgrade-v1 [projectPath]").description("upgrade webpack project to rspack").action(nr);h.command("login").option("--domain [domain]","login domain").option("-u --username [username]","login username").option("-p --password [password]","login user password").action(Lt);h.command("tunnel").option("-c --copy [letters...]","copy files").option("-i --input [dir]","input dir").option("-o --output [dir]","output dir,default cache").option("--no-server","no server").option("--resourcePort [number]","resource port").option("--ui","build ui").option("-r --rspack [file]","build ui rspack config file").option("--no-proxy","no proxy").option("-w --watch [paths...]","watch files change").action(tr);h.command("deploy [filename]").option("-e --environment [environment]","app environment").option("-s --subscribe [tenants...]","subscribe tenants after deploy").option("--app-key [appKey]","app key used for subscribe").option("--version-key [versionKey]","version key used for subscribe").action(ht);h.command("subscribe <appKey> <versionKey>").option("-t --tenants [tenants...]","subscribe tenants, support comma split").option("-e --environment [environment]","app environment").action($t);h.command("ui-dev").option("-r --rspack [file]","build ui rspack config file").action(or);h.parse(process.argv);
|