UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

181 lines (180 loc) 6.11 kB
/** * 获取项目组的详细信息以及项目组下所有项目。 * * 对应 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[]; }