@giteeteam/apps-cli 2.2.0-alpha.1 → 2.2.0

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