t-comm
Version:
专业、稳定、纯粹的工具库
477 lines (476 loc) • 16.8 kB
TypeScript
/**
* 获取仓库详情
* @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>;