@giteeteam/apps-cli 1.0.0-alpha.0 → 1.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8 -8
- package/package.json +2 -3
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var cr=Object.create;var ie=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var lr=Object.getOwnPropertyNames;var mr=Object.getPrototypeOf,ur=Object.prototype.hasOwnProperty;var fr=(e,t)=>()=>(e&&(t=e(e=0)),t);var dr=(e,t)=>{for(var r in t)ie(e,r,{get:t[r],enumerable:!0})},gr=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of lr(t))!ur.call(e,n)&&n!==r&&ie(e,n,{get:()=>t[n],enumerable:!(o=pr(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?cr(mr(e)):{},gr(t||!e||!e.__esModule?ie(r,"default",{value:e,enumerable:!0}):r,e));var
|
|
3
|
-
`);let{pass:l,errors:u}=i.validate();if(!l){if(u!=null&&u.length){let{message:f,path:
|
|
4
|
-
The output file of the build is ${H.default.bold.green(f)}`)}};var it=async e=>{let{input:t="functions",output:r="package",prod:o,dev:n,copy:s=[],zip:a,ui:i,rspack:p}=e;await st({outputDir:me.default.resolve(r),inputDir:me.default.resolve(t),prod:o??!n,filesToCopy:[...G,...s],zip:a,ui:!!i,rspackConfig:p}).catch(()=>{})};var yt=c(require("fs")),wt=c(require("chalk"));var at=c(require("path")),ct=c(require("lowdb")),pt=c(require("lowdb/adapters/FileSync"));var ue,fe=()=>{if(!ue){let e=at.default.join(__dirname,"user.json"),t=new pt.default(e);ue=(0,ct.default)(t)}return ue},lt=()=>{let e=fe(),t=e.get("version").value();(!t||t!==x)&&e.defaults({version:x,user:{}}).write()},de=e=>{lt(),fe().set("user",e).write()},L=()=>(lt(),fe().get("user").value());var ut=c(require("fs")),ft=c(require("path")),dt=c(require("form-data"));var mt=c(require("axios"));var b={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE"},D=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:s}=L();return(await(0,mt.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:s}})).data};var gt=async(e,t)=>{let r=new dt.default;r.append("environmentKey",t),r.append("package",ut.default.createReadStream(ft.default.resolve(e))),await D({method:b.POST,url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})};var ht=c(require("chalk")),Or=ht.default.bold.red,g={error:e=>{console.info(Or(e))}};var vt=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(vt||{}),bt=async(e,t)=>{let{domain:r}=L(),{environment:o="development"}=t;if(!Object.values(vt).includes(o)){g.error("Only support development, staging, production environment.");return}if(!r){g.error("Please login in first!");return}if(!yt.default.existsSync(e)){g.error(`File:${e} is not exist`);return}console.info(`Deploying to ${wt.default.bold.green(r)}`),await d({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>gt(e,o)).catch(()=>{})};var N=c(require("path")),F=c(require("fs-extra")),we=c(require("inquirer"));var kt=c(require("readline")),Pt=require("chalk"),xt=c(require("execa")),Tr=e=>{if(!Pt.supportsColor){e.write("\r");return}kt.default.cursorTo(e,0)},Sr=(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),a=Math.round(s*r),i="#".repeat(a),p="-".repeat(s-a);Tr(process.stderr),process.stderr.write(`[${i}${p}]${o}`)},Cr=(e,t,r,o)=>new Promise((n,s)=>{var i;let a=(0,xt.default)(e,t,{cwd:r,stdio:["inherit","inherit","pipe"],env:o});(i=a.stderr)==null||i.on("data",p=>{let m=p.toString();if(/warning/.test(m))return;let l=m.match(/\[.*] (\d+)\/(\d+)/);if(l){Sr(parseFloat(l[1]),parseFloat(l[2]));return}process.stderr.write(p)}),a.on("close",p=>{if(p!==0){s(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),Et={executeCommand:Cr};var ge=c(require("fs-extra")),he=c(require("simple-git")),Ot=async e=>{await(0,he.default)(e).init()},J=async(e,t,r)=>{await ge.default.pathExists(t)||await ge.default.mkdir(t);let o=(0,he.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 k=c(require("path")),R=c(require("fs-extra"));var W=c(require("fs-extra")),Tt=process.env.APPS_TEMPLATE_REPO||"https://github.com/moriahq/apps-template.git",ye=(r=>(r.micro="micro",r.uikit="uikit",r))(ye||{}),Q=async(e,t)=>{if(!await W.default.pathExists(e))return;let r=await W.default.readFile(e,{encoding:"utf-8"});await W.default.writeFile(e,r.replace(/{{(\w+)}}/g,(o,n)=>typeof t[n]=="string"?t[n]:o))};var Rr=async()=>{let e=[k.default.resolve(__dirname,"templates/skill"),k.default.resolve(__dirname,"../templates/skill")];for(let t of e)if(await R.default.pathExists(t))return t;return""},St=async(e,t)=>{let r=await R.default.readdir(e,{withFileTypes:!0});return(await Promise.all(r.map(async n=>{let s=k.default.join(e,n.name);return n.isDirectory()?St(s,t):n.isFile()?[k.default.relative(t,s)]:[]}))).flat()},$=async(e,t)=>{let{appName:r,appKey:o,overwrite:n=!1}=t,s=await Rr();if(!s||!await R.default.pathExists(s))throw new Error(`skill templates not found: ${s}`);let a=await St(s,s);for(let i of a){let p=k.default.join(s,i),m=i==="SKILL.md"||i.startsWith("skill/")?i:k.default.join("skill",i),l=k.default.join(e,m);!n&&await R.default.pathExists(l)||(await R.default.ensureDir(k.default.dirname(l)),await R.default.copy(p,l),l.endsWith(".md")&&await Q(l,{appName:r,appKey:o}))}};var Ar=async()=>(await we.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],jr=async()=>(await we.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"],_r=()=>{if(Number(x.split(".")[0])>=1)return"v1"},Lr=async(e,t)=>{let r=_r();if(!r){await d({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>J(e,t));return}try{await d({start:`Start clone repository (branch: ${r})`,error:"Clone repository failed!",succeed:"Clone repository success!"},()=>J(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!"},()=>J(e,t))}},$r=async e=>{await d({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>Et.executeCommand("pnpm",["install"],e))},Ct=async e=>{let{cwd:t}=e,r="micro",o=await Ar(),n=await jr(),s=N.default.join(t,n);if(await F.default.pathExists(s)){console.error(`Project path already exists: ${s}`);return}await Lr(Tt,s),await F.default.copy(N.default.join(s,r),s),await Promise.all(Object.values(ye).map(i=>F.default.remove(N.default.join(s,i)))),await F.default.remove(N.default.join(s,"./.git"));let a=["./manifest.yml","./package.json","./rspack.config.js","./public/index.html","./src/App.tsx","./src/index.tsx","./static/App.tsx","./static/index.tsx","./SKILL.md"];await Promise.all(a.map(i=>Q(N.default.join(s,i),{appName:o,appKey:n}))),await $(s,{appName:o,appKey:n}),await $r(s),await Ot(s),console.info("Project init success!"),console.info("Project path:"+s)};var Dt=async()=>{let e=process.cwd();await Ct({cwd:e})};var Y=c(require("inquirer"));var ve=c(require("axios"));var Rt=async({baseUrl:e,username:t,password:r})=>{var o;try{return{cookie:(o=(await(0,ve.default)({method:b.POST,url:`${e}/api/gateway/login`,data:{username:t,password:r}})).headers)==null?void 0:o["set-cookie"]}}catch(n){return console.error("Login error:",n==null?void 0:n.message),{cookie:""}}},At=async e=>{try{return await(0,ve.default)({method:b.GET,url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var jt=e=>{try{return new URL(e).origin}catch{return e}};var _t=c(require("crypto"));var Lt=e=>{try{let t=_t.default.createCipheriv(Ae,Re,De),r=t.update(e,"utf8","base64");return r+=t.final("base64"),r.toString()}catch(t){return console.error(`Encryption error: ${t}`),null}};var Nr=async()=>(await Y.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,Ir=async()=>(await Y.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,Fr=async()=>(await Y.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 Nr()),e=jt(e),await At(e)){t||(t=await Ir()),r||(r=await Fr());let{cookie:n}=await Rt({baseUrl:e,username:t,password:Lt(r)||r});n?(de({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else de({domain:e}),console.info("Login success!")};var Nt=async e=>{await $t(e)};var X=c(require("path")),Z=c(require("fs-extra"));var Mr=async e=>{var i,p,m,l;let t=X.default.join(e,"manifest.yml"),r=X.default.basename(e),o=r;if(!await Z.default.pathExists(t))return{appName:r,appKey:o};let n=await Z.default.readFile(t,"utf8"),s=((p=(i=n.match(/^\s*name:\s*(.+)\s*$/m))==null?void 0:i[1])==null?void 0:p.trim())||r,a=((l=(m=n.match(/^\s*key:\s*(.+)\s*$/m))==null?void 0:m[1])==null?void 0:l.trim())||o;return{appName:s,appKey:a}},It=async e=>{let t=X.default.resolve(e||process.cwd());if(!await Z.default.pathExists(t)){g.error(`project path not found: ${t}`);return}let{appName:r,appKey:o}=await Mr(t);await $(t,{appName:r,appKey:o,overwrite:!0}),console.info("sync-skill finished."),console.info(`Project path: ${t}`)};var oe=c(require("path"));var Qt=c(require("path")),re=c(require("chalk")),Yt=c(require("debug")),ke=c(require("fs-extra"));var Ft=async()=>{var t;return((t=(await D({method:b.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 ee=require("child_process"),M=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(i=>r[i]!==void 0).map(i=>`-e ${i}=${r[i]}`).join(" "),s=o==null?void 0:o.map(i=>`-v ${i}`).join(" "),a=`docker run -d -p ${t}:${t} ${n} ${s} --name ${this.containerName} ${this.imageName}`;await this.execPromise(a)}async removeContainer(){await this.execPromise(`docker rm -f ${this.containerName}`).catch(()=>{})}logs(){let t=(0,ee.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,ee.exec)(t,(n,s,a)=>{if(n)return o(n);r({stdout:s,stderr:a})})})}};var Mt=c(require("localtunnel"));var Ut=async({appKey:e,runtimeHost:t,resources:r,resourcePort:o})=>{r!=null&&r.length&&r.forEach(n=>{n.path=`http://127.0.0.1:${o}`}),await D({method:b.POST,url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:r,runtimeHost:t}}).catch(n=>{var s,a;console.info(`addTunnel error ${((a=(s=n==null?void 0:n.response)==null?void 0:s.data)==null?void 0:a.message)||(n==null?void 0:n.message)}`)})},Bt=async e=>{await D({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Gt=async e=>{var t,r;try{return(await(0,Mt.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 be=c(require("path")),Kt=require("@rspack/core"),qt=require("@rspack/dev-middleware"),Vt=c(require("cors")),zt=c(require("express"));var te=async({appKey:e,rspackConfig:t})=>{let o=(await q())({environment:"development",appKey:e});if(t){let p=require(be.default.resolve(t));o=I(o,p)}let n=(0,Kt.rspack)(o),s=(0,zt.default)(),a=Number(process.env.UI_PORT)||8e3,i=(0,qt.devMiddleware)(n);s.use((0,Vt.default)()),s.use(i),s.get("*",(p,m)=>{var l,u;(u=n.outputFileSystem)==null||u.readFile(be.default.join(((l=o.output)==null?void 0:l.path)||"","index.html"),(f,P)=>{if(f||!P){m.sendStatus(404);return}m.send(P.toString())})}),s.listen(a,"0.0.0.0",()=>{console.info(`The React app is listening on port ${a}!
|
|
5
|
-
`)})};var Jt=c(require("chokidar"));var
|
|
6
|
-
`);let{domain:U}=
|
|
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(
|
|
8
|
-
`),!s&&!a&&!i&&!p&&!
|
|
9
|
-
`);var
|
|
2
|
+
"use strict";var cr=Object.create;var ie=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var lr=Object.getOwnPropertyNames;var mr=Object.getPrototypeOf,ur=Object.prototype.hasOwnProperty;var fr=(e,t)=>()=>(e&&(t=e(e=0)),t);var dr=(e,t)=>{for(var r in t)ie(e,r,{get:t[r],enumerable:!0})},gr=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of lr(t))!ur.call(e,n)&&n!==r&&ie(e,n,{get:()=>t[n],enumerable:!(o=pr(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?cr(mr(e)):{},gr(t||!e||!e.__esModule?ie(r,"default",{value:e,enumerable:!0}):r,e));var qe={};dr(qe,{default:()=>Pr});function Pr({environment:e,appKey:t,distOutputPath:r="dist"}){let o=e==="production",n=e==="development",s=kr(),a=Be.default.existsSync(C.default.resolve("locales")),i=T=>T?{filename:"js/[name].[chunkhash].min.js",path:C.default.resolve(r),publicPath:"./",library:{type:"umd",name:t},clean:!0}:{filename:"main.js",path:C.default.resolve(r),publicPath:"/",library:{type:"umd",name:t}},p=({resourcePath:T},U,w)=>w===t||/\.global\.(css|less)$/.test(T)||/node_modules/.test(T)?w:`${w}__${(0,Ve.default)(`${T}${w}`,{algorithm:"md5"}).slice(0,8)}`,m={loader:"@ecomfe/class-names-loader",options:{classNamesModule:require.resolve("classnames")}},l=o?_.rspack.CssExtractRspackPlugin.loader:"style-loader",u={loader:"postcss-loader",options:{postcssOptions:{plugins:[Ke.default]}}},f={loader:"css-loader",options:{modules:{getLocalIdent:p},importLoaders:1}},y={loader:"less-loader",options:{lessOptions:{javascriptEnabled:!0,modifyVars:{"ant-prefix":t}}}};return{mode:e,entry:"./src/index.tsx",output:i(o),devtool:o?!1:"source-map",resolve:{alias:{"@":C.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:C.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 Ge.default({overlay:!1})].filter(Boolean),module:{rules:[{oneOf:[{test:/\.(js|mjs|jsx|ts|tsx)$/,exclude:/node_modules/,loader:"builtin:swc-loader",options:{sourceMaps:br,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&&a&&{test:/locales/,loader:s,include:[C.default.resolve("locales")]},{test:/\.css$/,use:[m,l,"css-loader",u]},{test:/\.less$/,use:[m,l,f,u,y]},{test:/\.(png|jpg|gif)$/i,type:"asset",parser:{dataUrlCondition:{maxSize:2400}},generator:{filename:"[name]_[hash][ext]"}},{test:/\.svg$/i,use:["@svgr/webpack"]}]}]}}}var Be,C,_,Ge,Ke,Ve,br,kr,He=fr(()=>{"use strict";Be=c(require("fs")),C=c(require("path")),_=require("@rspack/core"),Ge=c(require("@rspack/plugin-react-refresh")),Ke=c(require("autoprefixer")),Ve=c(require("hasha")),br=process.env.GENERATE_SOURCEMAP==="true",kr=()=>{try{return require.resolve("@alienfast/i18next-loader")}catch{return null}}});var ts=require("dotenv/config"),xe=c(require("chalk")),or=require("commander");var E="1.0.0-alpha.3";var me=c(require("path"));var G=["manifest.yml","locales"],De=Buffer.from(process.env.ONE_AUTH_IV||"ABCDEFGHIJKLM_iv","utf-8"),Re=Buffer.from(process.env.ONE_AUTH_SECRET_KEY||"ABCDEFGHIJKL_key","utf-8"),je=process.env.ONE_AUTH_ALGORITHM||"aes-128-cbc";var z=c(require("chalk")),nt=c(require("fs-extra"));var Ae=c(require("fs")),ce=c(require("path")),$e=c(require("@rollup/plugin-commonjs")),Ne=require("rollup");var L=require("fs"),v=require("path"),Le=require("esbuild"),yr={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 ae({mode:e,...t}){return t={...yr,...t},{name:"esbuild",resolveId(r,o,n){if(!o)return r;let s=(0,v.dirname)(o),a;if((0,L.existsSync)(a=(0,v.resolve)(s,r,"index.ts")))return a;if((0,L.existsSync)(a=(0,v.resolve)(s,r,"index.tsx")))return a;if((0,L.existsSync)(a=(0,v.resolve)(s,r+".ts")))return a;if((0,L.existsSync)(a=(0,v.resolve)(s,r+".tsx")))return a;{let i=wr({source:r,dirPath:s,mode:e});if((0,L.existsSync)(i))return i;throw console.error({source:r,importer:o,options:n}),a=(0,v.relative)(".",(0,v.resolve)(o,r)),new Error(`ENOENT: ${a.replace(/\\/g,"/")}`)}},async transform(r,o){t.sourcefile=o,t.loader=o.endsWith(".json")?"json":t.loader;let{code:n,map:s}=await(0,Le.transform)(r,t);return s?{code:n,map:s}:n}}}function vr(e,t,r="development"){let o=[(0,$e.default)()];o.push(ae({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 K(e){let{fileName:t,inputDir:r,outputDir:o,mode:n="development"}=e,s=ce.default.join(r,`${t}.ts`);try{await Ae.default.promises.access(s)}catch{console.error(`${s} is not exist`);return}let a=ce.default.join(o,`${t}.js`),{inputOptions:i,outputOptions:p}=vr(s,a,n);await(await(0,Ne.rollup)(i)).write(p)}var Ie=c(require("ora")),d=async(e,t)=>{var o,n;let r=(0,Ie.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 Fe=c(require("path")),Me=require("@giteeteam/apps-manifest"),Ue=c(require("fs-extra")),O=async()=>{let e=Fe.default.resolve("manifest.yml"),t=await Ue.default.readFile(e);return new Me.Manifest(t.toString())};var Je=c(require("path")),We=require("@rspack/core");var V=async()=>(await Promise.resolve().then(()=>(He(),qe))).default;var ze=e=>Object.prototype.toString.call(e)==="[object Object]",I=(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?I(r[o],n):n;return r}return t};var Qe=async({appKey:e,rspackConfig:t})=>{let r=await V();return new Promise((o,n)=>{let s=r({environment:"production",appKey:e});if(t){let i=require(Je.default.resolve(t));s=I(s,i)}(0,We.rspack)(s).run((i,p)=>{if(i)return console.error(i),n(i);if(console.info(p==null?void 0:p.toString()),p!=null&&p.hasErrors())return n(new Error("build-ui-error"));o()})})};var Ye=c(require("path")),Xe=c(require("archiver")),pe=c(require("fs-extra")),Ze=async(e,t)=>{let r=Ye.default.resolve(t);return await pe.default.remove(r),new Promise((o,n)=>{let s=pe.default.createWriteStream(r),a=(0,Xe.default)("zip",{zlib:{level:9}});s.on("close",function(){o()}),a.on("warning",function(i){console.info(i),i.code==="ENOENT"||n(i)}),a.on("error",function(i){console.info(i),n(i)}),a.pipe(s),a.directory(e,!1),a.finalize()})};var et=async e=>{let{manifest:t,mode:r,outputDir:o,inputDir:n}=e,a=t.getFunctionFiles().map(async i=>{await K({inputDir:n,fileName:i,outputDir:o,mode:r})});await Promise.all(a)};var H=c(require("path")),rt=c(require("fs-extra"));var le=c(require("path")),tt=c(require("fs-extra")),q=async(e,t)=>{for(let r of t)try{let o=le.default.resolve(r),n=le.default.join(e,r);await tt.default.copy(o,n)}catch(o){if(o.code==="ENOENT"&&r==="locales")continue;throw o}};var ot=async({outputDir:e,manifest:t,filesToCopy:r})=>{let{resources:o}=t;if(o)for(let{key:n,path:s}of o){let a=H.default.resolve(H.default.join("./",s)),i=H.default.join(e,n);await rt.default.copy(a,i)}await q(e,r)};var st=async({outputDir:e,inputDir:t,prod:r,filesToCopy:o,zip:n,ui:s,rspackConfig:a})=>{let i=await O(),{version:p,key:m}=i.app;if(!m){console.error("manifest app key is required");return}if(!p){console.error("manifest app version is required");return}console.info(`App key: ${z.default.bold.green(m)}`),console.info(`App version: ${z.default.bold.green(p)}
|
|
3
|
+
`);let{pass:l,errors:u}=i.validate();if(!l){if(u!=null&&u.length){let{message:f,path:y}=u[0];console.error(`Manifest valid error: Path '${y}', ${f}`)}else console.error("Manifest valid error");return}if(await nt.default.emptyDir(e),s&&await d({start:"start build ui",error:"build ui failed",succeed:"build ui success"},()=>Qe({appKey:m,rspackConfig:a})),await d({start:"start bundle",error:"bundle failed",succeed:"bundle success"},()=>et({outputDir:e,inputDir:t,manifest:i,mode:r?"production":"development"})),await d({start:"start package",error:"package failed",succeed:"package success"},()=>ot({outputDir:e,manifest:i,filesToCopy:o})),n){let f=`${m}_${p}.zip`;await d({start:"start archive",error:"archive failed",succeed:"archive success"},()=>Ze(e,f)),console.info(`
|
|
4
|
+
The output file of the build is ${z.default.bold.green(f)}`)}};var it=async e=>{let{input:t="functions",output:r="package",prod:o,dev:n,copy:s=[],zip:a,ui:i,rspack:p}=e;await st({outputDir:me.default.resolve(r),inputDir:me.default.resolve(t),prod:o??!n,filesToCopy:[...G,...s],zip:a,ui:!!i,rspackConfig:p}).catch(()=>{})};var yt=c(require("fs")),wt=c(require("chalk"));var at=c(require("path")),ct=c(require("lowdb")),pt=c(require("lowdb/adapters/FileSync"));var ue,fe=()=>{if(!ue){let e=at.default.join(__dirname,"user.json"),t=new pt.default(e);ue=(0,ct.default)(t)}return ue},lt=()=>{let e=fe(),t=e.get("version").value();(!t||t!==E)&&e.defaults({version:E,user:{}}).write()},de=e=>{lt(),fe().set("user",e).write()},A=()=>(lt(),fe().get("user").value());var ut=c(require("fs")),ft=c(require("path")),dt=c(require("form-data"));var mt=c(require("axios"));var k={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE"},D=async({url:e,method:t,data:r,headers:o})=>{let{domain:n,cookie:s}=A();return(await(0,mt.default)({method:t,baseURL:n,url:e,data:r,headers:{...o,cookie:s}})).data};var gt=async(e,t)=>{let r=new dt.default;r.append("environmentKey",t),r.append("package",ut.default.createReadStream(ft.default.resolve(e))),await D({method:k.POST,url:"/apps/api/v1/apps/deploy",data:r,headers:{...r.getHeaders()}})};var ht=c(require("chalk")),xr=ht.default.bold.red,g={error:e=>{console.info(xr(e))}};var vt=(o=>(o.DEVELOPMENT="development",o.STAGING="staging",o.PRODUCTION="production",o))(vt||{}),bt=async(e,t)=>{let{domain:r}=A(),{environment:o="development"}=t;if(!Object.values(vt).includes(o)){g.error("Only support development, staging, production environment.");return}if(!r){g.error("Please login in first!");return}if(!yt.default.existsSync(e)){g.error(`File:${e} is not exist`);return}console.info(`Deploying to ${wt.default.bold.green(r)}`),await d({start:"start deploy",error:"deploy failed",succeed:"deploy success"},()=>gt(e,o)).catch(()=>{})};var N=c(require("path")),F=c(require("fs-extra")),we=c(require("inquirer"));var kt=c(require("readline")),Pt=require("chalk"),xt=c(require("execa")),Er=e=>{if(!Pt.supportsColor){e.write("\r");return}kt.default.cursorTo(e,0)},Or=(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),a=Math.round(s*r),i="#".repeat(a),p="-".repeat(s-a);Er(process.stderr),process.stderr.write(`[${i}${p}]${o}`)},Tr=(e,t,r,o)=>new Promise((n,s)=>{var i;let a=(0,xt.default)(e,t,{cwd:r,stdio:["inherit","inherit","pipe"],env:o});(i=a.stderr)==null||i.on("data",p=>{let m=p.toString();if(/warning/.test(m))return;let l=m.match(/\[.*] (\d+)\/(\d+)/);if(l){Or(parseFloat(l[1]),parseFloat(l[2]));return}process.stderr.write(p)}),a.on("close",p=>{if(p!==0){s(new Error(`command failed: ${e} ${t.join(" ")}`));return}n()})}),Et={executeCommand:Tr};var ge=c(require("fs-extra")),he=c(require("simple-git")),Ot=async e=>{await(0,he.default)(e).init()},J=async(e,t,r)=>{await ge.default.pathExists(t)||await ge.default.mkdir(t);let o=(0,he.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 P=c(require("path")),R=c(require("fs-extra"));var W=c(require("fs-extra")),Tt=process.env.APPS_TEMPLATE_REPO||"https://github.com/moriahq/apps-template.git",ye=(r=>(r.micro="micro",r.uikit="uikit",r))(ye||{}),Q=async(e,t)=>{if(!await W.default.pathExists(e))return;let r=await W.default.readFile(e,{encoding:"utf-8"});await W.default.writeFile(e,r.replace(/{{(\w+)}}/g,(o,n)=>typeof t[n]=="string"?t[n]:o))};var Cr=async()=>{let e=[P.default.resolve(__dirname,"templates/skill"),P.default.resolve(__dirname,"../templates/skill")];for(let t of e)if(await R.default.pathExists(t))return t;return""},St=async(e,t)=>{let r=await R.default.readdir(e,{withFileTypes:!0});return(await Promise.all(r.map(async n=>{let s=P.default.join(e,n.name);return n.isDirectory()?St(s,t):n.isFile()?[P.default.relative(t,s)]:[]}))).flat()},$=async(e,t)=>{let{appName:r,appKey:o,overwrite:n=!1}=t,s=await Cr();if(!s||!await R.default.pathExists(s))throw new Error(`skill templates not found: ${s}`);let a=await St(s,s);for(let i of a){let p=P.default.join(s,i),m=i==="SKILL.md"||i.startsWith("skill/")?i:P.default.join("skill",i),l=P.default.join(e,m);!n&&await R.default.pathExists(l)||(await R.default.ensureDir(P.default.dirname(l)),await R.default.copy(p,l),l.endsWith(".md")&&await Q(l,{appName:r,appKey:o}))}};var Dr=async()=>(await we.default.createPromptModule()({type:"input",name:"App Name",message:"Please enter an app name",validate:r=>!!r}))["App Name"],Rr=async()=>(await we.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=()=>{if(Number(E.split(".")[0])>=1)return"v1"},Lr=async(e,t)=>{let r=jr();if(!r){await d({start:"Start clone repository",error:"Clone repository failed!",succeed:"Clone repository success!"},()=>J(e,t));return}try{await d({start:`Start clone repository (branch: ${r})`,error:"Clone repository failed!",succeed:"Clone repository success!"},()=>J(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!"},()=>J(e,t))}},_r=async e=>{await d({start:"Start install dependencies",error:"Install dependencies failed!",succeed:"Install dependencies success!"},()=>Et.executeCommand("pnpm",["install"],e))},Ct=async e=>{let{cwd:t}=e,r="micro",o=await Dr(),n=await Rr(),s=N.default.join(t,n);if(await F.default.pathExists(s)){console.error(`Project path already exists: ${s}`);return}await Lr(Tt,s),await F.default.copy(N.default.join(s,r),s),await Promise.all(Object.values(ye).map(i=>F.default.remove(N.default.join(s,i)))),await F.default.remove(N.default.join(s,"./.git"));let a=["./manifest.yml","./package.json","./rspack.config.js","./public/index.html","./src/App.tsx","./src/index.tsx","./static/App.tsx","./static/index.tsx","./SKILL.md"];await Promise.all(a.map(i=>Q(N.default.join(s,i),{appName:o,appKey:n}))),await $(s,{appName:o,appKey:n}),await _r(s),await Ot(s),console.info("Project init success!"),console.info("Project path:"+s)};var Dt=async()=>{let e=process.cwd();await Ct({cwd:e})};var Y=c(require("inquirer"));var ve=c(require("axios"));var Rt=async({baseUrl:e,username:t,password:r})=>{var o;try{return{cookie:(o=(await(0,ve.default)({method:k.POST,url:`${e}/api/gateway/login`,data:{username:t,password:r}})).headers)==null?void 0:o["set-cookie"]}}catch(n){return console.error("Login error:",n==null?void 0:n.message),{cookie:""}}},jt=async e=>{try{return await(0,ve.default)({method:k.GET,url:`${e}/apps/api/v1/tenants`}),!1}catch{return!0}};var Lt=e=>{try{return new URL(e).origin}catch{return e}};var _t=c(require("crypto"));var At=e=>{try{let t=_t.default.createCipheriv(je,Re,De),r=t.update(e,"utf8","base64");return r+=t.final("base64"),r.toString()}catch(t){return console.error(`Encryption error: ${t}`),null}};var Ar=async()=>(await Y.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,$r=async()=>(await Y.default.createPromptModule()({type:"input",name:"Username",message:"Please enter username",validate:r=>!!r})).Username,Nr=async()=>(await Y.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 Ar()),e=Lt(e),await jt(e)){t||(t=await $r()),r||(r=await Nr());let{cookie:n}=await Rt({baseUrl:e,username:t,password:At(r)||r});n?(de({domain:e,username:t,cookie:n}),console.info("Login success!")):console.error("Login failed!")}else de({domain:e}),console.info("Login success!")};var Nt=async e=>{await $t(e)};var X=c(require("path")),Z=c(require("fs-extra"));var Ir=async e=>{var i,p,m,l;let t=X.default.join(e,"manifest.yml"),r=X.default.basename(e),o=r;if(!await Z.default.pathExists(t))return{appName:r,appKey:o};let n=await Z.default.readFile(t,"utf8"),s=((p=(i=n.match(/^\s*name:\s*(.+)\s*$/m))==null?void 0:i[1])==null?void 0:p.trim())||r,a=((l=(m=n.match(/^\s*key:\s*(.+)\s*$/m))==null?void 0:m[1])==null?void 0:l.trim())||o;return{appName:s,appKey:a}},It=async e=>{let t=X.default.resolve(e||process.cwd());if(!await Z.default.pathExists(t)){g.error(`project path not found: ${t}`);return}let{appName:r,appKey:o}=await Ir(t);await $(t,{appName:r,appKey:o,overwrite:!0}),console.info("sync-skill finished."),console.info(`Project path: ${t}`)};var oe=c(require("path"));var Qt=c(require("path")),re=c(require("chalk")),Yt=c(require("debug")),ke=c(require("fs-extra"));var Ft=async()=>{var t;return((t=(await D({method:k.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 ee=require("child_process"),M=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(i=>r[i]!==void 0).map(i=>`-e ${i}=${r[i]}`).join(" "),s=o==null?void 0:o.map(i=>`-v ${i}`).join(" "),a=`docker run -d -p ${t}:${t} ${n} ${s} --name ${this.containerName} ${this.imageName}`;await this.execPromise(a)}async removeContainer(){await this.execPromise(`docker rm -f ${this.containerName}`).catch(()=>{})}logs(){let t=(0,ee.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,ee.exec)(t,(n,s,a)=>{if(n)return o(n);r({stdout:s,stderr:a})})})}};var Mt=c(require("localtunnel"));var Ut=async({appKey:e,runtimeHost:t,resources:r,resourcePort:o})=>{r!=null&&r.length&&r.forEach(n=>{n.path=`http://127.0.0.1:${o}`}),await D({method:k.POST,url:`/apps/api/v1/apps/tunnel/${e}`,data:{resources:r,runtimeHost:t}}).catch(n=>{var s,a;console.info(`addTunnel error ${((a=(s=n==null?void 0:n.response)==null?void 0:s.data)==null?void 0:a.message)||(n==null?void 0:n.message)}`)})},Bt=async e=>{await D({method:"DELETE",url:`/apps/api/v1/apps/tunnel/${e}`}).catch(()=>{})},Gt=async e=>{var t,r;try{return(await(0,Mt.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 be=c(require("path")),Kt=require("@rspack/core"),Vt=require("@rspack/dev-middleware"),qt=c(require("cors")),Ht=c(require("express"));var te=async({appKey:e,rspackConfig:t})=>{let o=(await V())({environment:"development",appKey:e});if(t){let p=require(be.default.resolve(t));o=I(o,p)}let n=(0,Kt.rspack)(o),s=(0,Ht.default)(),a=Number(process.env.UI_PORT)||8e3,i=(0,Vt.devMiddleware)(n);s.use((0,qt.default)()),s.use(i),s.get("*",(p,m)=>{var l,u;(u=n.outputFileSystem)==null||u.readFile(be.default.join(((l=o.output)==null?void 0:l.path)||"","index.html"),(f,y)=>{if(f||!y){m.sendStatus(404);return}m.send(y.toString())})}),s.listen(a,"0.0.0.0",()=>{console.info(`The React app is listening on port ${a}!
|
|
5
|
+
`)})};var Jt=c(require("chokidar"));var zt=(e,t,r)=>{for(let o of e)K({inputDir:t,outputDir:r,fileName:o,mode:"development"})},Wt=async e=>{let{inputDir:t,outputDir:r,watchFilePaths:o}=e,s=(await O()).getFunctionFiles();zt(s,t,r);let a,i=[t,...o],p=Jt.default.watch(i);console.info(`watch: ${i.join(", ")}`),p.on("change",m=>{clearTimeout(a),a=setTimeout(()=>{console.info(`${m} has change`),zt(s,t,r)},1e3)})};var Fr=(0,Yt.default)("cli:tunnel"),Mr=async()=>{let e=await Ft(),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}},Xt=async e=>{var Te,Se,Ce;let{inputDir:t,outputDir:r,server:o,filesToCopy:n,resourcePort:s,ui:a,rspackConfig:i,noProxy:p,watchFilePaths:m=[]}=e;await ke.default.emptyDir(r);let l=await O(),u=l.app.key,f=l.app.version,y=l.getFunctionFiles(),T=l.resources||[];if(!u){g.error("appKey is required!");return}if(!f){g.error("version is required!");return}console.info(`App key: ${re.default.bold.green(u)}`),console.info(`App version: ${re.default.bold.green(f)}
|
|
6
|
+
`);let{domain:U}=A();if(!U){g.error("Please login in first!");return}console.info(`Tunneling to ${re.default.bold.green(U)}`);let w=[],ne=async j=>{j instanceof Error&&console.error(j);try{await Promise.all(w.map(S=>S()))}catch(S){console.error("other error:",S)}process.exit()};process.on("SIGINT",ne),process.on("uncaughtException",ne),process.on("unhandledRejection",ne),a&&te({appKey:u,rspackConfig:i});let nr=`${`/${u}/development/${f}`}/server-side`,Ee=Qt.default.join(r,nr);await q(Ee,n),await Wt({inputDir:t,outputDir:Ee,watchFilePaths:m}),w.push(()=>ke.default.remove(r));let se="",Oe;if(o&&y.length>0){let{runtimeImage:j,containerPort:S,containerEnv:sr,containerName:ir,pullImage:ar}=await Mr();Oe=S;let B=new M(j,ir);ar&&await B.downloadImage(),await B.runContainer({port:S,env:sr,volume:[`${r}:/usr/src/app/apps`]}),w.push(()=>B.removeContainer()),p||(se=await d({start:"start tunnel",error:"tunnel failed",succeed:"tunnel success"},()=>Gt(S)),Fr("runtimeHost",se)),B.logs()}if(p){console.info(`\u4EE3\u7406\u5173\u95ED \u274C\uFF1A\u8BF7\u628A\u8BF7\u6C42\u6307\u5411localhost:${Oe}`);return}if(await Ut({appKey:u,runtimeHost:se,resources:T,resourcePort:s}),w.push(()=>Bt(u)),o&&((Ce=(Se=(Te=l.getManifest())==null?void 0:Te.modules)==null?void 0:Se.webtrigger)!=null&&Ce.length)){console.info("You can use this url for test:");let j=`${U}/apps/api/v1/:tenant/apps/${u}/environments/development/webtriggers/:webtriggerKey`;console.info(`POST ${j}`)}};var Zt=async e=>{let{copy:t=[],input:r="functions",output:o="cache",server:n=!0,resourcePort:s,ui:a,rspack:i,proxy:p,watch:m=[]}=e;await Xt({outputDir:oe.default.resolve(o),inputDir:oe.default.resolve(r),filesToCopy:[...G,...t],server:n,resourcePort:Number(s)||8e3,ui:!!a,rspackConfig:i,noProxy:!p,watchFilePaths:m.map(l=>oe.default.resolve(l))})};var Ur=async({rspackConfig:e})=>{let t=await O(),{key:r}=t.app;if(!r){g.error("manifest app key is required");return}te({appKey:r,rspackConfig:e})},er=Ur;var tr=async e=>{let{rspack:t}=e;await er({rspackConfig:t})};var x=c(require("path")),h=c(require("fs-extra"));var Br=["@ant-design/compatible","@giteeteam/apps-team-theme","webpack","webpack-cli","webpack-dev-server","webpack-merge","webpack-bundle-analyzer"],Gr={"@rspack/core":"^2.0.0","@rspack/plugin-react-refresh":"^1.4.2",deepmerge:"^4.3.1"},Kr=["webpack.config.js","webpack.config.cjs","webpack.config.mjs","webpack.config.ts"],Pe=e=>Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r))),Vr=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=Pe(t)),r},qr=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 Br)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(Gr))e.dependencies[o]||(e.dependencies[o]=n,r=!0);return e.dependencies&&typeof e.dependencies=="object"&&(e.dependencies=Pe(e.dependencies)),e.devDependencies&&typeof e.devDependencies=="object"&&(e.devDependencies=Pe(e.devDependencies)),r},Hr=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=x.default.join(e,"yarn.lock");return await h.default.pathExists(t)?(await h.default.remove(t),!0):!1},Jr=async e=>{let t=!1;for(let r of Kr){let o=x.default.join(e,r);if(!await h.default.pathExists(o))continue;let n=r.replace(/^webpack\.config/,"rspack.config"),s=x.default.join(e,n);await h.default.pathExists(s)||(await h.default.move(o,s),t=!0);let a=await h.default.readFile(s,"utf8"),i=a.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");i!==a&&(await h.default.writeFile(s,i),t=!0)}return t},Wr=async e=>{var i,p,m,l;let t=x.default.join(e,"manifest.yml"),r=x.default.basename(e),o=r;if(!await h.default.pathExists(t))return{appName:r,appKey:o};let n=await h.default.readFile(t,"utf8"),s=((p=(i=n.match(/^\s*name:\s*(.+)\s*$/m))==null?void 0:i[1])==null?void 0:p.trim())||r,a=((l=(m=n.match(/^\s*key:\s*(.+)\s*$/m))==null?void 0:m[1])==null?void 0:l.trim())||o;return{appName:s,appKey:a}},rr=async e=>{let t=x.default.resolve(e||process.cwd()),r=x.default.join(t,"package.json");if(!await h.default.pathExists(r)){g.error(`package.json not found in ${t}`);return}let o=await h.default.readFile(r,"utf8"),n=JSON.parse(o),s=qr(n),a=Vr(n),i=Hr(n),p=await zr(t),m=await Jr(t),{appName:l,appKey:u}=await Wr(t),f=await h.default.pathExists(x.default.join(t,"SKILL.md"));await $(t,{appName:l,appKey:u});let y=!f;if((s||a||i)&&await h.default.writeFile(r,`${JSON.stringify(n,null,2)}
|
|
8
|
+
`),!s&&!a&&!i&&!p&&!m&&!y){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 Qr=`v${E}`;console.info(`GiteeTeam Apps Cli ${xe.default.bold.green(Qr)}`);console.info(`Node.js ${xe.default.bold.green(process.version)}
|
|
9
|
+
`);var b=new or.Command;b.version(E,"-v -V --vers").description("Giteeteam Apps Cli");b.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(it);b.command("init").action(Dt);b.command("sync-skill [projectPath]").description("sync builtin skill files to project").action(It);b.command("upgrade-v1 [projectPath]").description("upgrade webpack project to rspack").action(rr);b.command("login").option("--domain [domain]","login domain").option("-u --username [username]","login username").option("-p --password [password]","login user password").action(Nt);b.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(Zt);b.command("deploy [filename]").option("-e --environment [environment]","app environment").action(bt);b.command("ui-dev").option("-r --rspack [file]","build ui rspack config file").action(tr);b.parse(process.argv);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@giteeteam/apps-cli",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.3",
|
|
4
4
|
"description": "Giteeteam Apps cli",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@rspack/core": "^2.0.0",
|
|
44
44
|
"@rspack/dev-middleware": "^2.0.1",
|
|
45
45
|
"@rspack/plugin-react-refresh": "^1.4.2",
|
|
46
|
-
"@rollup/plugin-commonjs": "^
|
|
46
|
+
"@rollup/plugin-commonjs": "^29.0.2",
|
|
47
47
|
"archiver": "^5.3.1",
|
|
48
48
|
"autoprefixer": "^10.4.20",
|
|
49
49
|
"axios": "^1.13.6",
|
|
@@ -64,7 +64,6 @@
|
|
|
64
64
|
"lowdb": "1.0.0",
|
|
65
65
|
"ora": "^5.4.1",
|
|
66
66
|
"rollup": "^3.29.4",
|
|
67
|
-
"rspack-bundle-analyzer": "^1.2.1",
|
|
68
67
|
"simple-git": "^3.19.1"
|
|
69
68
|
},
|
|
70
69
|
"devDependencies": {
|