gchcg-cli-dev
Version:
gchcg cli dev
1 lines • 1.84 kB
JavaScript
const fse=require("fs-extra"),axios=require("axios"),inquirer=require("inquirer").default,{readFile:readFile,writeFile:writeFile,spinnerStart:spinnerStart,sleep:sleep}=require("./utils"),log=require("./log"),GIT_ROOT_DIR=".git",GIT_TOKEN_FILE=".git_token";function getGroups(e,t){return axios.get(`http://gitlab.szjoin.net/api/v4/groups/${e}/subgroups?access_token=${t}`,{timeout:3e4}).then((e=>(e.data.forEach((e=>{e.type="group",e.children=[]})),e.data.sort(((e,t)=>e.id>t.id?1:-1)))))}function getProjects(e,t){return axios.get(`http://gitlab.szjoin.net/api/v4/groups/${e}/projects?access_token=${t}`,{timeout:3e4}).then((e=>(e.data.forEach((e=>{e.type="project"})),e.data.sort(((e,t)=>e.id>t.id?1:-1)))))}module.exports=function(e){return new Promise((async t=>{let r=process.env.CLI_HOME_PATH;if(r||(r=path.resolve(userHome,DEFAULT_CLI_HOME)),fse.ensureDirSync(r),!fs.existsSync(r))throw new Error("用户主目录获取失败!");const s=path.resolve(r,".git"),i=path.resolve(s,".git_token");fse.ensureDirSync(s);let n=readFile(i);if(!n||e){const e=[{type:"password",name:"token",message:"请将token复制到这里",default:""}];n=(await inquirer.prompt(e)).token,writeFile(i,n)}let o=[],a=spinnerStart("正在获取项目信息...");await sleep();try{const e=await getGroups(300,n);e.length&&o.push(...e)}catch(e){}try{const e=await getProjects(300,n);e.length&&o.push(...e)}catch(e){}if(0===o.length)return a.stop(!0),void t();const c=[...o.filter((e=>"group"===e.type))];let p=0;for(;p<c.length;){const e=c[p];try{const t=await getGroups(e.id,n);t.length&&e.children.push(...t)}catch(e){}try{const t=await getProjects(e.id,n);t.length&&e.children.push(...t)}catch(e){}if(e.children.length){const t=e.children.filter((e=>"group"===e.type));t.length&&c.push(...t)}p++}a.stop(!0),log.success("项目信息获取成功"),t(o)}))};