t-comm
Version:
专业、稳定、纯粹的工具库
181 lines (180 loc) • 6.11 kB
TypeScript
/**
* 获取项目组的详细信息以及项目组下所有项目。
*
* 对应 API: `GET /api/v3/groups/:id`
*
* @see https://code.tencent.com/help/api/group#获取项目组的详细信息以及项目组下所有项目
* @example
*
* fetchGroupDetail({
* groupId: 'pmd-mobile',
* privateToken: 'xxxxx',
* includeSubgroups: true,
* }).then((detail) => {
* console.log(detail.projects);
* console.log(detail.sub_projects);
* })
*/
export declare function fetchGroupDetail({ groupId, privateToken, baseUrl, includeSubgroups, }: {
/** 项目组 ID 或 项目组全路径 namespace_full_path */
groupId: string | number;
privateToken: string;
baseUrl?: string;
/** 是否包含 subgroup 项目,默认 false */
includeSubgroups?: boolean;
}): Promise<IGroupDetail>;
/**
* 获取 / 搜索项目组列表。
*
* 对应 API: `GET /api/v3/groups`
*
* @see https://code.tencent.com/help/api/group#获取项目组列表
* @example
*
* // 搜索名称包含 'pmd' 的项目组
* fetchGroups({
* privateToken: 'xxxxx',
* search: 'pmd',
* page: 1,
* perPage: 20,
* }).then((groups) => {
* console.log(groups.length);
* })
*/
export declare function fetchGroups({ privateToken, baseUrl, search, owned, minAccessLevel, createdByMe, excludeOrgGroup, page, perPage, }: {
privateToken: string;
baseUrl?: string;
/** 搜索关键字,按名称或路径匹配 */
search?: string;
/** 若为 true 则只返回 owner 为当前用户的 group */
owned?: boolean;
/** 指定最小访问级别 */
minAccessLevel?: number;
/** 仅当前用户创建 true / 仅非当前用户创建 false / 不传则不过滤 */
createdByMe?: boolean;
/** 排除组织架构授权 */
excludeOrgGroup?: boolean;
page?: number;
perPage?: number;
}): Promise<IGroupInfo[]>;
/**
* 分页获取全部项目组列表(自动翻页)。
*
* 基于 {@link fetchGroups} 封装,自动遍历所有分页。
* @example
*
* // 一次拿到当前 token 权限下的所有项目组
* fetchAllGroups({
* privateToken: 'xxxxx',
* }).then((groups) => {
* console.log(groups.length);
* })
*/
export declare function fetchAllGroups({ privateToken, baseUrl, search, owned, minAccessLevel, createdByMe, excludeOrgGroup, }: {
privateToken: string;
baseUrl?: string;
search?: string;
owned?: boolean;
minAccessLevel?: number;
createdByMe?: boolean;
excludeOrgGroup?: boolean;
}): Promise<IGroupInfo[]>;
/**
* 获取某个组下所有项目(通过 `GET /api/v3/groups/:id` 接口,速度更快)。
*
* 当 `includeSubgroups` 为 true 时,会同时返回子组下的项目(`sub_projects`)。
*
* 兼容旧调用方式:返回值既是数组,又带有 `projects` 属性。
* - 旧方式:`res.projects.map(item => ...)`
* - 新方式:`res.map(item => ...)`
* @example
*
* // 获取 pmd-mobile 组下(含子组)所有项目
* fetchAllProjectsInGroup({
* groupName: 'pmd-mobile',
* privateToken: 'xxxxx',
* includeSubgroups: true,
* }).then((res) => {
* res.forEach(p => console.log(p.path_with_namespace));
* })
*/
export declare function fetchAllProjectsInGroup({ groupName, privateToken, baseUrl, includeSubgroups, }: {
groupName: string;
privateToken: string;
baseUrl?: string;
includeSubgroups?: boolean;
}): Promise<any>;
export interface IGroupProject {
id: number;
name: string;
path_with_namespace: string;
archived: boolean;
last_activity_at: string;
[k: string]: any;
}
export interface IGroupProjectFilter {
/** 自定义过滤函数,返回 true 表示保留 */
filterFn?: (project: IGroupProject) => boolean;
/** 需要排除的路径前缀列表,如 ['pmd-mobile/test/'] */
excludePathPrefixes?: string[];
/** 是否过滤已归档仓库,默认 true(过滤掉已归档的) */
excludeArchived?: boolean;
/** 最后活跃时间不早于此日期(ISO 字符串或 Date),早于此时间的仓库将被过滤 */
lastActivityAfter?: string | Date;
}
/**
* 递归获取某个组(含所有子组)下的全部仓库列表,支持多种过滤条件。
*
* 通过 `GET /api/v3/groups/:id`(`include_subgroups=true`)一次性获取
* 组及子组下所有项目,避免逐页遍历 `/projects` 接口,速度更快。
*
* @param {object} options 输入配置
* @param {string} options.groupName 组名称或完整路径,如 'pmd-mobile'
* @param {string} options.privateToken 密钥
* @param {string} [options.baseUrl] 自定义 API 基础路径,如 https://git.woa.com
* @param {IGroupProjectFilter} [options.filter] 过滤配置
* @returns {Promise<Array<IGroupProject>>} 过滤后的仓库列表
* @example
*
* // 获取 pmd-mobile 组下所有仓库,排除 test 子组、归档仓库,以及前一天没有活跃的仓库
* const yesterday = new Date();
* yesterday.setDate(yesterday.getDate() - 1);
*
* const projects = await getGroupProjectsRecursive({
* groupName: 'pmd-mobile',
* privateToken: 'xxxxx',
* baseUrl: 'https://git.woa.com',
* filter: {
* excludePathPrefixes: ['pmd-mobile/test/'],
* excludeArchived: true,
* lastActivityAfter: yesterday,
* filterFn: (project) => !project.name.startsWith('deprecated-'),
* },
* });
*
* console.log(projects);
*/
export declare function getGroupProjectsRecursive({ groupName, privateToken, baseUrl, filter, }: {
groupName: string;
privateToken: string;
baseUrl?: string;
filter?: IGroupProjectFilter;
}): Promise<Array<IGroupProject>>;
/** 项目组基本信息(列表接口返回) */
export interface IGroupInfo {
id: number;
name: string;
path: string;
description: string;
avatar_url: string;
full_name: string;
full_path: string;
web_url: string;
parent_id: number | null;
[k: string]: any;
}
/** 项目组详情(含 projects / sub_projects) */
export interface IGroupDetail extends IGroupInfo {
projects: IGroupProject[];
sub_projects: IGroupProject[];
}