UNPKG

t-comm

Version:

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

477 lines (476 loc) 16.8 kB
/** * 获取仓库详情 * @param {object} options 输入配置 * @param {string} options.projectName 项目名称 * @param {string} options.privateToken 密钥 * @returns {Promise<object>} 请求Promise * @example * getOneProjectDetail({ * projectName: 't-comm', * privateToken: 'xxxxx', * }).then((resp) => { * * }) */ export declare function getOneProjectDetail({ projectName, privateToken, baseUrl, }: { projectName: string | number; privateToken: string; baseUrl?: string; }): Promise<unknown>; /** * 通过搜索获取一个项目信息 * @param {object} options 输入配置 * @param {string} options.search 搜索内容 * @param {string} options.page 起始页码 * @param {string} options.privateToken 密钥 * @returns {Promise<Array<object>>} 请求Promise * @example * * getOneProjectBySearch({ * search: 't-comm', * page: 1, * privateToken: 'xxxxx', * }).then((resp) => { * * }) */ export declare function getOneProjectBySearch({ search, privateToken, page, baseUrl, }: { search: string; privateToken: string; page?: number; baseUrl?: string; }): Promise<Array<object>>; /** * 获取某个token名下所有项目 * @param {string} privateToken 密钥 * @param {string} search 搜索内容 * @returns {Array<object>} 项目列表 * @example * * const projects = await getAllProjects('xxxxx'); * * console.log(projects) */ export declare function getAllProjects(privateToken: string, search?: string): Promise<Array<object>>; /** * 删除一个项目 * @param {object} options 输入配置 * @param {string} options.id 项目id * @param {string} options.privateToken 密钥 * @returns {Promise<Array<object>>} 请求Promise * @example * * deleteTGitProject({ * id: '123' * privateToken: 'xxxxx', * }).then((resp) => { * * }) */ export declare function deleteTGitProject({ id, privateToken, baseUrl, }: { id: number | string; privateToken: string; baseUrl?: string; }): Promise<Array<object>>; /** * 解析工蜂项目的路径或完整 URL,提取出标准的 `group/sub/repo` 形式路径 * * 支持的输入格式: * - 完整 URL: https://git.woa.com/pmd-mobile/pmd-h5/press-next * - 带 .git 后缀: https://git.woa.com/pmd-mobile/pmd-h5/press-next.git * - SSH 地址: git@git.woa.com:pmd-mobile/pmd-h5/press-next.git * - 纯路径: pmd-mobile/pmd-h5/press-next * - 带首尾斜杠的路径: /pmd-mobile/pmd-h5/press-next/ * * @param {string} pathOrUrl 项目路径或 URL * @returns {string} 标准化后的项目路径(如 pmd-mobile/pmd-h5/press-next) * @example * * parseProjectPath('https://git.woa.com/pmd-mobile/pmd-h5/press-next.git') * // => 'pmd-mobile/pmd-h5/press-next' */ export declare function parseProjectPath(pathOrUrl: string): string; /** 命名空间信息 */ export interface TGitNamespace { id: number; name: string; path: string; owner_id: number; description: string | null; created_at: string; updated_at: string; [k: string]: unknown; } /** 用户简要信息(owner / suggestion_reviewers / necessary_reviewers 等) */ export interface TGitUserBrief { id: number; username: string; name: string; state: string; web_url: string; avatar_url: string | null; [k: string]: unknown; } /** 仓库存储配置 */ export interface TGitConfigStorage { limit_lfs_file_size: number; limit_size: number; limit_file_size: number; limit_lfs_size: number; [k: string]: unknown; } /** 仓库保密配置 */ export interface TGitConfigConfidential { level: number; allow_ai_coding_tool: boolean; [k: string]: unknown; } /** 仓库统计信息 */ export interface TGitProjectStatistics { commit_count: number; repository_size: number; lfs_repository_size: number; [k: string]: unknown; } /** * 项目详情信息(对应工蜂 GET /api/v3/projects/:id 返回) * * 字段参考工蜂 OpenAPI 文档: * - 基础信息:id / name / path / path_with_namespace / default_branch / description ... * - 仓库地址:ssh_url_to_repo / http_url_to_repo / https_url_to_repo / web_url * - 可见性:public / public_visibility / visibility_level / archived * - 关联对象:namespace / owner / suggestion_reviewers / necessary_reviewers * - 评审配置:approver_rule / necessary_approver_rule / can_approve_by_creator ... * - 功能开关:issues_enabled / merge_requests_enabled / wiki_enabled / review_enabled ... * - 存储与统计:config_storage / statistics * * 同时保留索引签名 `[k: string]: unknown`,兼容工蜂未来扩展的字段。 */ export interface TGitProjectInfo { /** 项目 ID */ id: number; /** 项目描述 */ description: string | null; /** 是否为公开项目 */ public: boolean; /** 是否已归档 */ archived: boolean; /** 可见性级别(0 私有 / 10 内部 / 20 公开) */ visibility_level: number; /** 公开可见性细分 */ public_visibility: number; /** 命名空间 */ namespace: TGitNamespace; /** 项目所有者 */ owner: TGitUserBrief; /** 项目名称(如 test-01) */ name: string; /** 带命名空间的项目名称(如 git_user1/test-01) */ name_with_namespace: string; /** 项目路径(如 test-01) */ path: string; /** 带命名空间的项目路径(如 git_user1/test-01) */ path_with_namespace: string; /** 默认分支名 */ default_branch: string; /** 仓库 SSH 克隆地址 */ ssh_url_to_repo: string; /** 仓库 HTTP 克隆地址 */ http_url_to_repo: string; /** 仓库 HTTPS 克隆地址 */ https_url_to_repo: string; /** 项目 Web 访问地址 */ web_url: string; /** Tag 列表 */ tag_list: string[]; /** 是否启用 Issues */ issues_enabled: boolean; /** 是否启用 Merge Requests */ merge_requests_enabled: boolean; /** 是否启用 Wiki */ wiki_enabled: boolean; /** 是否启用 Snippets */ snippets_enabled: boolean; /** 是否启用代码评审 */ review_enabled: boolean; /** 是否允许 Fork */ fork_enabled: boolean; /** Tag 名称正则约束 */ tag_name_regex: string | null; /** 创建/推送 Tag 所需权限级别 */ tag_create_push_level: number; /** 创建时间 */ created_at: string; /** 最后活跃时间 */ last_activity_at: string; /** 创建者 ID */ creator_id: number; /** 项目头像地址 */ avatar_url: string | null; /** 关注数 */ watchs_count: number; /** 收藏数 */ stars_count: number; /** Fork 数 */ forks_count: number; /** 存储配置 */ config_storage: TGitConfigStorage; /** 保密配置 */ config_confidential: TGitConfigConfidential; /** Fork 来源(未 Fork 时为字符串提示) */ forked_from_project: TGitProjectInfo | string | null; /** 仓库统计 */ statistics: TGitProjectStatistics; /** 模板创建来源 ID */ created_from_id: number | null; /** 是否为模板仓库 */ template_repository: boolean; /** 建议评审人列表 */ suggestion_reviewers: TGitUserBrief[]; /** 必要评审人列表 */ necessary_reviewers: TGitUserBrief[]; /** 路径评审规则原始字符串 */ path_reviewer_rules: string; /** 评审通过规则(1=单人,>=2=多人,-1=全部) */ approver_rule: number; /** 必要评审通过规则 */ necessary_approver_rule: number; /** 是否开启 commit MR 检查 */ commit_mr_check: boolean; /** 是否开启评审检查 */ review_check: boolean; /** 创建者是否可以通过评审 */ can_approve_by_creator: boolean; /** 推送后是否自动创建评审 */ auto_create_review_after_push: boolean; /** 是否禁止修改规则 */ forbidden_modify_rule: boolean; /** 是否在评论中强制添加标签 */ force_add_labels_in_note: boolean; /** 是否开启已解决检查 */ resolved_check: boolean; /** 是否开启 push reset */ push_reset_enabled: boolean; /** MR 模板内容 */ merge_request_template: string | null; /** 文件 owner 路径规则 */ file_owner_path_rules: string; /** 是否允许跳过评审人 */ allow_skip_reviewer: boolean; /** 是否允许跳过 owner */ allow_skip_owner: boolean; /** 是否允许跳过 MR 检查 */ allow_skip_mr_check: boolean; /** 兼容工蜂未来扩展字段 */ [k: string]: unknown; } /** * 根据项目路径或 URL 获取项目信息(含 id / name / path_with_namespace) * * 本函数是 `parseProjectPath` + `getOneProjectDetail` 的便捷封装, * 支持与 `parseProjectPath` 相同的输入格式: * - 完整 URL: https://git.woa.com/pmd-mobile/pmd-h5/press-next * - 带 .git 后缀: https://git.woa.com/pmd-mobile/pmd-h5/press-next.git * - SSH 地址: git@git.woa.com:pmd-mobile/pmd-h5/press-next.git * - 纯路径: pmd-mobile/pmd-h5/press-next * * @param {object} options 输入配置 * @param {string} options.pathOrUrl 项目路径或 URL * @param {string} options.privateToken 密钥 * @param {string} [options.baseUrl] baseUrl * @returns {Promise<TGitProjectInfo>} 项目信息 * @example * * getProjectByPath({ * pathOrUrl: 'https://git.woa.com/pmd-mobile/pmd-h5/press-next', * privateToken: 'xxxxx', * }).then((info) => { * console.log(info.id, info.path_with_namespace); * }) */ export declare function getProjectByPath({ pathOrUrl, privateToken, baseUrl, }: { pathOrUrl: string; privateToken: string; baseUrl?: string; }): Promise<TGitProjectInfo>; /** * 创建项目时的请求参数(对应工蜂 POST /api/v3/projects) * * 字段参考工蜂 OpenAPI 文档: * - name 项目名(必填) * - path 项目版本库路径,默认 path = name * - fork_enabled 是否可被 fork,默认 false * - namespace_id 所属命名空间,默认用户命名空间 * - description 项目描述 * - visibility_level 可视范围,默认 0 * - create_from_id 模板项目 ID 或 项目全路径 */ export interface CreateTGitProjectParams { /** 项目名 */ name: string; /** 项目版本库路径,默认与 name 相同 */ path?: string; /** 是否可被 fork,默认 false */ fork_enabled?: boolean; /** 所属命名空间 ID */ namespace_id?: number; /** 项目描述 */ description?: string; /** 项目可视范围(0 私有 / 10 内部 / 20 公开),默认 0 */ visibility_level?: number; /** 模板项目 ID 或项目全路径 */ create_from_id?: number | string; /** 兼容工蜂未来扩展字段 */ [k: string]: unknown; } /** * 创建一个项目 * * 对应工蜂 OpenAPI:POST /api/v3/projects * * 注意:当 `namespace_id` 不为空时,需要用户拥有在指定命名空间中创建项目的权限。 * * @param {object} options 输入配置 * @param {CreateTGitProjectParams} options.data 创建项目的参数 * @param {string} options.privateToken 密钥 * @param {string} [options.baseUrl] baseUrl * @returns {Promise<TGitProjectInfo>} 新建项目的详情 * @example * * createProject({ * data: { * name: 'testapi', * description: '测试项目', * visibility_level: 0, * }, * privateToken: 'xxxxx', * }).then((info) => { * console.log(info.id, info.path_with_namespace); * }); */ export declare function createProject({ data, privateToken, baseUrl, }: { data: CreateTGitProjectParams; privateToken: string; baseUrl?: string; }): Promise<TGitProjectInfo>; /** AI 评审挑剔模式(ai_review_mode) */ export type TGitAiReviewMode = 0 | 1 | 2 | number; /** AI 评审需要响应的严重等级(intelligent_review_block_severity_level) */ export type TGitAiReviewBlockSeverityLevel = 0 | 1 | 2; /** AI 评审豁免方向规则项 */ export interface TGitAiReviewExemptionDirection { sourceBranchRegex: string; targetBranchRegex: string; } /** * 修改项目时的请求参数(对应工蜂 PUT /api/v3/projects/:id) * * 字段参考工蜂 OpenAPI 文档(均为可选): * - 基础信息:name / description / default_branch / fork_enabled / visibility_level * - 存储限制:limit_file_size / limit_lfs_file_size * - 功能开关:issues_enabled / merge_requests_enabled / wiki_enabled / review_enabled * - tag 规则:tag_name_regex / tag_create_push_level * - 模板:template_repository * - MR 跳过规则:allow_skip_reviewer / allow_skip_owner / allow_skip_mr_check * - 评审 / AI:review_approval_requires_reason / auto_intelligent_review_enabled ... * * 同时保留索引签名 `[k: string]: unknown`,兼容工蜂未来扩展。 */ export interface EditTGitProjectParams { /** 项目名 */ name?: string; /** 项目描述 */ description?: string; /** 项目默认分支 */ default_branch?: string; /** 项目是否可以被 fork,默认 false */ fork_enabled?: boolean; /** 项目可视范围 */ visibility_level?: number; /** 文件大小限制,单位 MB */ limit_file_size?: number; /** LFS 文件大小限制,单位 MB */ limit_lfs_file_size?: number; /** 议题配置 */ issues_enabled?: boolean; /** 合并请求配置 */ merge_requests_enabled?: boolean; /** 维基配置 */ wiki_enabled?: boolean; /** 评审配置 */ review_enabled?: boolean; /** 推送或创建 tag 规则 */ tag_name_regex?: string; /** * 推送或创建 tag 权限: * - 0 任何人不能推送或创建 tag * - 30 DEVELOPER 以上角色才能推送或创建 tag * - 40 MASTER 以上角色才能推送或创建 tag */ tag_create_push_level?: number; /** 项目是否设置为模板仓库,默认 false */ template_repository?: boolean; /** 允许使用 --skip-reviewer 在 MR 创建时跳过评审,默认 false */ allow_skip_reviewer?: boolean; /** 允许使用 --skip-owner 在 MR 创建时跳过文件评审,默认 false */ allow_skip_owner?: boolean; /** 紧急情况时允许绕过 MR 检查直接合并,默认 false */ allow_skip_mr_check?: boolean; /** 开启评审同意时必须填写理由,默认 false */ review_approval_requires_reason?: boolean; /** 开启 AI 自动评审,默认 false */ auto_intelligent_review_enabled?: boolean; /** 是否强制 MR 中所有 AI 评论必须被响应,默认 false */ force_intelligent_review_evaluation?: boolean; /** 开启 AI 描述生成,默认 false */ auto_intelligent_review_description_enabled?: boolean; /** 自定义过滤文件类型(正则方式) */ intelligent_review_exclude_path_rules?: string; /** 设置 AI 摘要输出语言(中英文),可选值:zh_CN, en */ intelligent_language?: 'zh_CN' | 'en' | string; /** AI 评审挑剔模式,默认 0 */ ai_review_mode?: TGitAiReviewMode; /** 仅响应命中自定义规则的 AI 评审意见,默认 false */ intelligent_review_only_block_custom_rules?: boolean; /** 仅响应一定严重程度 AI 评审意见,0 全部 / 1 一般和严重 / 2 严重,默认 0 */ intelligent_review_block_severity_level?: TGitAiReviewBlockSeverityLevel; /** 豁免分支方向正则表达式列表 */ intelligent_review_block_exemption_directions?: TGitAiReviewExemptionDirection[]; /** 是否启用豁免方向正则表达式,默认 false */ intelligent_review_block_exemption_directions_enabled?: boolean; /** 兼容工蜂未来扩展字段 */ [k: string]: unknown; } /** * 修改项目设置 * * 对应工蜂 OpenAPI:PUT /api/v3/projects/:id * * - 修改成功返回修改后的项目信息({@link TGitProjectInfo}) * - 参数错误返回 400 * * @param {object} options 输入配置 * @param {string | number} options.id 项目 ID 或项目全路径(如 `group/sub/repo`) * @param {EditTGitProjectParams} options.data 修改项目的参数 * @param {string} options.privateToken 密钥 * @param {string} [options.baseUrl] baseUrl * @returns {Promise<TGitProjectInfo>} 修改后的项目详情 * @example * * editProject({ * id: 32833, * data: { * name: 'testapp', * review_enabled: true, * }, * privateToken: 'xxxxx', * }).then((info) => { * console.log(info.name); * }); */ export declare function editProject({ id, data, privateToken, baseUrl, }: { id: number | string; data: EditTGitProjectParams; privateToken: string; baseUrl?: string; }): Promise<TGitProjectInfo>;