UNPKG

@candriajs/git-neko-kit

Version:

Github, Gitee, GitCode API封装库

1 lines 12 kB
import{FailedToRemoveCollaboratorMsg as e,GitHubClient as t,MissingRepoOwnerOrNameMsg as n,MissingUserNameParamMsg as r,OrgNotFoundMsg as i,OrgOrRepoNotFoundMsg as a,OrgOrUserNotFoundMsg as o,PermissionDeniedMsg as s,ProxyType as c,RemoveCollaboratorSuccessMsg as l,RepoNotFoundMsg as u,RepoOrPermissionDeniedMsg as d,UserNotFoundMsg as f,format_date as p,get_base_url as m,get_langage_color as h,get_remote_repo_default_branch as g}from"./client-sGV7POG-.mjs";import{isEmpty as _,tryit as v}from"radash";var y=class extends t{constructor(e){super(e),this.userToken=e.userToken,this.api_url=e.api_url,this.base_url=e.base_url}async get_org_repos_list(e){if(!e.org)throw Error(i);try{this.setRequestConfig({token:this.userToken});let{org:t,...n}=e,r={};n?.type&&(r.type=n.type),n?.sort&&(r.sort=n.sort),n?.direction&&(r.direction=n.direction),n?.per_page&&(r.per_page=n.per_page.toString()),n?.page&&(r.page=n.page.toString());let a=`/orgs/${t}/repos`,o=await this.get(a,r);switch(o.statusCode){case 404:throw Error(i);case 401:throw Error(d)}if(o.data){let e=await Promise.all(o.data.map(async e=>({id:e.id,name:e.name,full_name:e.full_name,owner:{id:e.owner.id,login:e.owner.login,name:_(e.owner.name)?null:e.owner.name,avatar_url:e.owner.avatar_url,type:e.owner.type,html_url:e.owner.html_url},public:!e.private,private:e.private,visibility:e.private?`private`:`public`,fork:e.fork,archived:e.archived,disabled:e.disabled,html_url:e.html_url,description:e.description,stargazers_count:e.stargazers_count,watchers_count:e.watchers_count,language:e.language,forks_count:e.forks_count,open_issues_count:e.open_issues_count,default_branch:e.default_branch,created_at:this.format?await p(e.created_at):e.created_at,updated_at:this.format?await p(e.updated_at):e.updated_at,pushed_at:this.format?await p(e.pushed_at):e.pushed_at})));o.data=e}return o}catch(e){throw Error(`[GitHub] 获取组织仓库列表失败: ${e.message}`)}}async get_user_repos_list_by_token(e){try{this.setRequestConfig({token:this.userToken});let{...t}=e,n={};!e?.visibility&&!e?.affiliation&&t?.type&&(n.type=t.type),t?.visibility&&(n.visibility=t.visibility),t?.affiliation&&(n.affiliation=t.affiliation),t?.sort&&(n.sort=t.sort),t?.direction&&(n.direction=t.direction),t?.per_page&&(n.per_page=t.per_page.toString()),t?.page&&(n.page=t.page.toString());let r=`/uses/repos`,i=await this.get(r,n);if(i.statusCode===401)throw Error(d);if(i.data){let e=await Promise.all(i.data.map(async e=>({id:e.id,name:e.name,full_name:e.full_name,owner:{id:e.owner.id,login:e.owner.login,name:_(e.owner.name)?null:e.owner.name,avatar_url:e.owner.avatar_url,type:e.owner.type,html_url:e.owner.html_url},public:!e.private,private:e.private,visibility:e.private?`private`:`public`,fork:e.fork,archived:e.archived,disabled:e.disabled,html_url:e.html_url,description:e.description,stargazers_count:e.stargazers_count,watchers_count:e.watchers_count,language:e.language,forks_count:e.forks_count,open_issues_count:e.open_issues_count,default_branch:e.default_branch,created_at:this.format?await p(e.created_at):e.created_at,updated_at:this.format?await p(e.updated_at):e.updated_at,pushed_at:this.format?await p(e.pushed_at):e.pushed_at})));i.data=e}return i}catch(e){throw Error(`[GitHub] 获取授权用户仓库列表失败: ${e.message}`)}}async get_user_repos_list(e){try{if(!e.username)throw Error(r);this.setRequestConfig({token:this.userToken});let{username:t,...n}=e,i={};n?.type&&(i.type=n.type),n?.sort&&(i.sort=n.sort),n?.direction&&(i.direction=n.direction),n?.per_page&&(i.per_page=n.per_page.toString()),n?.page&&(i.page=n.page.toString());let a=`/users/${t}/repos`,o=await this.get(a,i);switch(o.statusCode){case 404:throw Error(f);case 401:throw Error(d)}if(o.data){let e=await Promise.all(o.data.map(async e=>({id:e.id,name:e.name,full_name:e.full_name,owner:{id:e.owner.id,login:e.owner.login,name:_(e.owner.name)?null:e.owner.name,avatar_url:e.owner.avatar_url,type:e.owner.type,html_url:e.owner.html_url},public:!e.private,private:e.private,visibility:e.private?`private`:`public`,fork:e.fork,archived:e.archived,disabled:e.disabled,html_url:e.html_url,description:e.description,stargazers_count:e.stargazers_count,watchers_count:e.watchers_count,language:e.language,forks_count:e.forks_count,open_issues_count:e.open_issues_count,default_branch:e.default_branch,created_at:this.format?await p(e.created_at):e.created_at,updated_at:this.format?await p(e.updated_at):e.updated_at,pushed_at:this.format?await p(e.pushed_at):e.pushed_at})));o.data=e}return o}catch(e){throw Error(`[GitHub] 获取用户仓库列表失败: ${e.message}`)}}async get_repo_info(e){if(!e.owner||!e.repo)throw Error(n);try{this.setRequestConfig({token:this.userToken});let{owner:t,repo:n}=e,r=await this.get(`/repos/${t}/${n}`);switch(r.statusCode){case 401:throw Error(d);case 404:throw Error(o)}if(r.data){let e={id:r.data.id,name:r.data.name,full_name:r.data.full_name,owner:{id:r.data.owner.id,login:r.data.owner.login,name:_(r.data.owner.name)?null:r.data.owner.name,avatar_url:r.data.owner.avatar_url,type:r.data.owner.type,html_url:r.data.owner.html_url},public:!r.data.private,private:r.data.private,visibility:r.data.private?`private`:`public`,fork:r.data.fork,archived:r.data.archived,disabled:r.data.disabled,html_url:r.data.html_url,description:r.data.description,stargazers_count:r.data.stargazers_count,watchers_count:r.data.watchers_count,language:r.data.language,forks_count:r.data.forks_count,open_issues_count:r.data.open_issues_count,default_branch:r.data.default_branch,created_at:this.format?await p(r.data.created_at):r.data.created_at,updated_at:this.format?await p(r.data.updated_at):r.data.updated_at,pushed_at:this.format?await p(r.data.pushed_at):r.data.pushed_at};r.data=e}return r}catch(e){throw Error(`[GitHub] 获取仓库信息失败: ${e.message}`)}}async get_repo_languages_list(e){if(!e.owner||!e.repo)throw Error(n);try{this.setRequestConfig({token:this.userToken});let{owner:t,repo:n}=e,r=await this.get(`/repos/${t}/${n}/languages`);switch(r.statusCode){case 401:throw Error(d);case 404:throw Error(u)}if(r.data){let e=Object.entries(r.data),t=e.reduce((e,[,t])=>e+t,0),n=e.map(([e,n])=>({language:e,color:h(e.toLowerCase()),percent:Number((n/t*100).toFixed(2)),bytes:n})),i={languages:n};r.data=i}return r}catch(e){throw Error(`[GitHub] 获取仓库语言列表失败: ${e.message}`)}}async create_org_repo(e){try{let{org:t,...n}=e;if(!t||!e.name)throw Error(a);let r={};r.name=n.name,n.description&&(r.description=n.description.toString()),n.homepage&&(r.homepage=n.homepage.toString()),n.visibility&&(r.private=n.visibility.toString()),n.has_wiki&&(r.has_wiki=n.has_wiki),n.auto_init&&(r.auto_init=n.auto_init);let i=await this.post(`/orgs/${t}/repos`,r);if(i.statusCode===401)throw Error(d);if(i.data){let e={id:i.data.id,name:i.data.name,full_name:i.data.full_name,owner:{id:i.data.owner.id,login:i.data.owner.login,name:_(i.data.owner.name)?null:i.data.owner.name,avatar_url:i.data.owner.avatar_url,type:i.data.owner.type,html_url:i.data.owner.html_url},public:!i.data.private,private:i.data.private,visibility:i.data.private?`private`:`public`,fork:i.data.fork,archived:i.data.archived,disabled:i.data.disabled,html_url:i.data.html_url,description:i.data.description,stargazers_count:i.data.stargazers_count,watchers_count:i.data.watchers_count,language:i.data.language,forks_count:i.data.forks_count,open_issues_count:i.data.open_issues_count,default_branch:i.data.default_branch,created_at:this.format?await p(i.data.created_at):i.data.created_at,updated_at:this.format?await p(i.data.updated_at):i.data.updated_at,pushed_at:this.format?await p(i.data.pushed_at):i.data.pushed_at};i.data=e}return i}catch(e){throw Error(`[GitHub] 创建组织仓库失败: ${e.message}`)}}async create_user_repo(e){try{let{owner:t,...r}=e;if(!t||!e.name)throw Error(n);let i={};i.name=r.name,r.description&&(i.description=r.description.toString()),r.homepage&&(i.homepage=r.homepage.toString()),r.visibility===`private`&&(i.private=!0),r.has_wiki&&(i.has_wiki=r.has_wiki),r.auto_init&&(i.auto_init=r.auto_init);let a=await this.post(`/user/repos`,i);if(a.statusCode===401)throw Error(d);if(a.data){let e={id:a.data.id,name:a.data.name,full_name:a.data.full_name,owner:{id:a.data.owner.id,login:a.data.owner.login,name:_(a.data.owner.name)?null:a.data.owner.name,avatar_url:a.data.owner.avatar_url,type:a.data.owner.type,html_url:a.data.owner.html_url},public:!a.data.private,private:a.data.private,visibility:a.data.private?`private`:`public`,fork:a.data.fork,archived:a.data.archived,disabled:a.data.disabled,html_url:a.data.html_url,description:a.data.description,stargazers_count:a.data.stargazers_count,watchers_count:a.data.watchers_count,language:a.data.language,forks_count:a.data.forks_count,open_issues_count:a.data.open_issues_count,default_branch:a.data.default_branch,created_at:this.format?await p(a.data.created_at):a.data.created_at,updated_at:this.format?await p(a.data.updated_at):a.data.updated_at,pushed_at:this.format?await p(a.data.pushed_at):a.data.pushed_at};a.data=e}return a}catch(e){throw Error(`[GitHub] 创建用户仓库失败: ${e.message}`)}}async create_repo(e){return this.create_user_repo(e)}async get_collaborators_list(e){if(!e.owner||!e.repo)throw Error(n);try{this.setRequestConfig({token:this.userToken});let{owner:t,repo:n}=e,{...r}=e,i={};r.affiliation&&(i.milestone=r.affiliation.toString()),r.permission&&(i.permission=r.permission.toString()),r.per_page&&(i.per_page=r.per_page.toString()),r.page&&(i.page=r.page.toString());let a=await this.get(`/repos/${t}/${n}/collaborators`,i);if(a.data){let e=await Promise.all(a.data.map(e=>({id:e.id,login:e.login,avatar_url:e.avatar_url,email:e.email,name:_(e.name)?null:e.owner.name,permissions:e.permissions===`triage`||e.permissions===`maintain`?`admin`:e.permissions})));a.data=e}return a}catch(e){throw Error(`[GitHub] 获取仓库协作者列表失败: ${e.message}`)}}async add_collaborator(e){if(!e.owner||!e.repo)throw Error(n);try{this.setRequestConfig({token:this.userToken});let{owner:t,repo:n,username:r,permission:i}=e,a={};i===`pull`?a.permission=`pull`:i===`push`?a.permission=`push`:i===`admin`?a.permission=`admin`:a.permission=`pull`;let o=await this.put(`/repos/${t}/${n}/collaborators/${r}`,a);if(o.statusCode===404)throw Error(d);if(o.statusCode===422){let e=o.data.message;if(e&&e.includes(`is not a valid permission`))throw Error(s)}if(o.data){let e={id:o.data.inviter.id,login:o.data.inviter.login,name:_(o.data.inviter.name)?null:o.data.inviter.name,html_url:o.data.repository.html_url,permissions:o.data.permissions};o.data=e}return o}catch(e){throw Error(`[GitHub] 添加协作者失败: ${e.message}`)}}async remove_collaborator(t){if(!t.owner||!t.repo)throw Error(n);try{this.setRequestConfig({token:this.userToken});let{owner:n,repo:r,username:i}=t,a=await this.delete(`/repos/${n}/${r}/collaborators/${i}`);if(a.statusCode===404)throw Error(d);let o;return o=a.status&&a.statusCode===204?{success:!0,message:l(i)}:{success:!1,message:e(i)},a.data=o,a}catch(e){throw Error(`[GitHub] 移除协作者失败: ${e.message}`)}}async delete_collaborator(e){return this.remove_collaborator(e)}async get_repo_visibility(e){try{let{owner:t,repo:n}=e;return(await this.get_repo_info({owner:t,repo:n})).data.visibility}catch(e){throw Error(`[GitHub] 获取仓库可见性失败: ${e.message}`)}}async get_repo_default_branch(e){if(!e.owner||!e.repo)throw Error(n);try{let{owner:t,repo:n}=e,r=m(this.type,{proxyType:c.Original})+`/`+t+`/`+n,i,[a,o]=await v(g)(r);return i=a?(await this.get_repo_info({owner:t,repo:n})).data.default_branch:o,i}catch(e){throw Error(`[GitHub] 获取仓库默认分支失败: ${e.message}`)}}async get_repo_main_language(e){if(!e.owner||!e.repo)throw Error(n);try{let{owner:t,repo:n}=e;return(await this.get_repo_info({owner:t,repo:n})).data.language}catch(e){throw Error(`[GitHub] 获取仓库语言失败: ${e.message}`)}}};export{y as Repo};