UNPKG

gchcg-cli

Version:
1 lines 2.01 kB
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"),terminalLink=require("terminal-link"),GIT_ROOT_DIR=".git",GIT_TOKEN_FILE=".git_token";function getGroups(e,t){return axios.get(`http://10.96.105.158/gitlab/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://10.96.105.158/gitlab/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 i=path.resolve(r,".git"),s=path.resolve(i,".git_token");fse.ensureDirSync(i);let n=e?"":readFile(s);if(!n||e){log.warn("token创建地址:"+terminalLink("链接","http://10.96.105.158/gitlab/-/profile/personal_access_tokens"));const e=[{type:"password",name:"token",message:"请将token复制到这里",default:""}];for(;!n;)n=(await inquirer.prompt(e)).token;writeFile(s,n)}let o=[],a=spinnerStart("正在获取项目信息...");await sleep();try{const e=await getGroups(401,n);e.length&&o.push(...e)}catch(e){}try{const e=await getProjects(401,n);e.length&&o.push(...e)}catch(e){}if(0===o.length)return a.stop(!0),void t();const l=[...o.filter((e=>"group"===e.type))];let c=0;for(;c<l.length;){const e=l[c];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&&l.push(...t)}c++}a.stop(!0),log.success("项目信息获取成功"),t(o)}))};