t-comm
Version:
专业、稳定、纯粹的工具库
430 lines (423 loc) • 13.5 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _regeneratorRuntime = require('@babel/runtime/regenerator');
var tslib_es6 = require('../tslib.es6-0d92ef81.js');
var tgit_helper = require('./helper.js');
var tgit_project = require('./project.js');
require('axios');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
/**
* 获取tGit上某分支生命周期
* @param {object} options 输入配置
* @param {string} options.projectName 项目名称
* @param {string} options.branchName 分支名称
* @param {string} options.privateToken 密钥
* @returns {Promise<object>} 请求Promise
* @example
*
* getBranchLifeCycle({
* projectName: 't-comm',
* branchName: 'master',
* privateToken: 'xxxxx',
* }).then((resp) => {
*
* })
*/
function getBranchLifeCycle(_ref) {
var projectName = _ref.projectName,
branchName = _ref.branchName,
privateToken = _ref.privateToken,
_ref$baseUrl = _ref.baseUrl,
baseUrl = _ref$baseUrl === void 0 ? tgit_helper.T_GIT_BASE_URL : _ref$baseUrl;
return new Promise(function (resolve, reject) {
if (!projectName || !branchName) {
return;
}
var url = "/api/v3/projects/".concat(encodeURIComponent(projectName), "/tloc/branch/lifecycle");
url = tgit_helper.resolveBaseUrl(baseUrl || '', url);
tgit_helper.instance({
url: url,
method: 'GET',
params: {
branch_name: branchName
},
headers: {
'PRIVATE-TOKEN': privateToken
}
}).then(function (res) {
resolve(res.data);
})["catch"](function (err) {
reject(err);
});
});
}
/**
* 获取默认分支
* @param {object} options 输入配置
* @param {string} options.projectName 项目名称
* @param {string} options.privateToken 密钥
* @returns {Promise<string>} 请求Promise
* @example
*
* getProjectDefaultBranch({
* projectName: 't-comm',
* privateToken: 'xxxxx',
* }).then((branch) => {
* console.log('branch: ', branch)
* })
*/
function getProjectDefaultBranch(_ref2) {
var projectName = _ref2.projectName,
privateToken = _ref2.privateToken,
_ref2$baseUrl = _ref2.baseUrl,
baseUrl = _ref2$baseUrl === void 0 ? tgit_helper.T_GIT_BASE_URL : _ref2$baseUrl;
return tslib_es6.__awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
var detail, getMainBranch, branch;
return _regeneratorRuntime__default["default"].wrap(function (_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
getMainBranch = function _getMainBranch() {
return detail.default_branch || '';
};
_context.next = 1;
return tgit_project.getOneProjectDetail({
projectName: projectName,
privateToken: privateToken,
baseUrl: baseUrl
});
case 1:
detail = _context.sent;
branch = getMainBranch();
return _context.abrupt("return", branch);
case 2:
case "end":
return _context.stop();
}
}, _callee);
}));
}
/**
* 获取仓库的分支列表
* @param {object} options 输入配置
* @param {string} options.projectName 项目名称
* @param {string} options.privateToken 密钥
* @param {string} options.baseUrl baseUrl
* @returns {Promise<Array<object>>} 请求Promise
* @example
*
* getBranchesByProjectName({
* projectName: 't-comm',
* privateToken: 'xxxxx',
* }).then((resp) => {
*
* })
*/
function getBranchesByProjectName(_ref3) {
var projectName = _ref3.projectName,
privateToken = _ref3.privateToken,
_ref3$baseUrl = _ref3.baseUrl,
baseUrl = _ref3$baseUrl === void 0 ? tgit_helper.T_GIT_BASE_URL : _ref3$baseUrl;
return new Promise(function (resolve, reject) {
if (!projectName) {
reject('No ProjectName');
return;
}
tgit_helper.instance({
url: tgit_helper.resolveBaseUrl(baseUrl, "/api/v3/projects/".concat(encodeURIComponent(projectName), "/repository/branches")),
method: 'GET',
params: {
per_page: 100
},
headers: {
'PRIVATE-TOKEN': privateToken
}
}).then(function (res) {
resolve(res.data);
})["catch"](function (err) {
reject(err);
});
});
}
/**
* 获取分支详情
* @param {object} options 输入配置
* @param {string} options.projectName 项目名称
* @param {string} options.branchName 分支名称
* @param {string} options.privateToken 密钥
* @returns {Promise<object>} 请求Promise
* @example
*
* getOneBranchDetail({
* projectName: 't-comm',
* branchName: 'master',
* privateToken: 'xxxxx',
* }).then((resp) => {
*
* })
*/
function getOneBranchDetail(_ref4) {
var projectName = _ref4.projectName,
branchName = _ref4.branchName,
privateToken = _ref4.privateToken,
baseUrl = _ref4.baseUrl;
return new Promise(function (resolve, reject) {
if (!projectName || !branchName) {
return;
}
var url = "/api/v3/projects/".concat(encodeURIComponent(projectName), "/repository/branches/").concat(encodeURIComponent(branchName));
url = tgit_helper.resolveBaseUrl(baseUrl, url);
tgit_helper.instance({
url: url,
method: 'GET',
headers: {
'PRIVATE-TOKEN': privateToken
}
}).then(function (res) {
resolve(res.data);
})["catch"](function (err) {
reject(err);
});
});
}
/**
* 合并分支:将分支或者 commit 合并到指定分支
*
* 对应工蜂 API:PUT /api/v3/projects/:id/repository/branches/merge
*
* @param {object} options 输入配置
* @param {number | string} options.id 项目 ID 或 项目全路径 project_full_path
* @param {string} options.sourceObjectId 源分支名或者 commit
* @param {string} options.targetBranch 目标分支名
* @param {number} [options.sourceProjectId] 源项目 ID,默认为 id 的值
* @param {'merge' | 'rebase' | 'squash'} [options.mergeType] 合并方式,默认为普通合并 merge
* @param {string} [options.commitMessage] 合并点提交信息(mergeType=rebase 时必填)
* @param {string} options.privateToken 密钥
* @param {string} [options.baseUrl] baseUrl
* @returns {Promise<unknown>} 请求 Promise
* @example
*
* mergeBranches({
* id: 12345,
* sourceObjectId: 'feature/xxx',
* targetBranch: 'master',
* mergeType: 'merge',
* privateToken: 'xxxxx',
* }).then((resp) => {
*
* })
*/
function mergeBranches(_ref5) {
var id = _ref5.id,
sourceObjectId = _ref5.sourceObjectId,
targetBranch = _ref5.targetBranch,
sourceProjectId = _ref5.sourceProjectId,
mergeType = _ref5.mergeType,
commitMessage = _ref5.commitMessage,
privateToken = _ref5.privateToken,
baseUrl = _ref5.baseUrl;
return new Promise(function (resolve, reject) {
if (id === undefined || id === null || id === '' || !sourceObjectId || !targetBranch) {
reject(new Error('id, sourceObjectId, targetBranch is required'));
return;
}
var encodedId = typeof id === 'string' ? encodeURIComponent(id) : id;
var url = "/api/v3/projects/".concat(encodedId, "/repository/branches/merge");
url = tgit_helper.resolveBaseUrl(baseUrl, url);
var data = {
source_object_id: sourceObjectId,
target_branch: targetBranch
};
if (sourceProjectId !== undefined) {
data.source_project_id = sourceProjectId;
}
if (mergeType !== undefined) {
data.merge_type = mergeType;
}
if (commitMessage !== undefined) {
data.commit_message = commitMessage;
}
tgit_helper.instance({
url: url,
method: 'PUT',
data: data,
headers: {
'PRIVATE-TOKEN': privateToken
}
}).then(function (res) {
resolve(res.data);
})["catch"](function (err) {
reject(err);
});
});
}
/**
* 创建新分支
*
* 对应工蜂 API:POST /api/v3/projects/:id/repository/branches
*
* @param {object} options 输入配置
* @param {string | number} options.projectName 项目名称或项目 ID
* @param {string} options.branchName 新分支名
* @param {string} options.ref 基于哪个分支/commit/tag 创建
* @param {string} options.privateToken 密钥
* @param {string} [options.baseUrl] baseUrl
* @returns {Promise<{ name: string } & Record<string, unknown>>} 新建分支信息
* @example
*
* createBranch({
* projectName: 'group/sub/repo',
* branchName: 'feature/x',
* ref: 'master',
* privateToken: 'xxxxx',
* }).then((resp) => {
*
* })
*/
function createBranch(_ref6) {
var projectName = _ref6.projectName,
branchName = _ref6.branchName,
ref = _ref6.ref,
privateToken = _ref6.privateToken,
baseUrl = _ref6.baseUrl;
return new Promise(function (resolve, reject) {
if (!projectName || !branchName || !ref) {
reject(new Error('projectName, branchName, ref is required'));
return;
}
// 清洗 ref:去除首尾空白和尾部斜杠,防止工蜂 404
var cleanRef = ref.trim().replace(/\/+$/, '');
var url = tgit_helper.resolveBaseUrl(baseUrl, "/api/v3/projects/".concat(tgit_helper.encodeProject(projectName), "/repository/branches"));
tgit_helper.instance({
url: url,
method: 'POST',
data: {
branch_name: branchName,
ref: cleanRef
},
headers: {
'PRIVATE-TOKEN': privateToken
}
}).then(function (res) {
resolve(res.data);
})["catch"](function (err) {
reject(err);
});
});
}
/**
* 删除分支
*
* 对应工蜂 API:DELETE /api/v3/projects/:id/repository/branches/:branch
*
* @param {object} options 输入配置
* @param {string | number} options.projectName 项目名称或项目 ID
* @param {string} options.branchName 要删除的分支名
* @param {string} options.privateToken 密钥
* @param {string} [options.baseUrl] baseUrl
* @returns {Promise<unknown>} 请求 Promise
* @example
*
* deleteBranch({
* projectName: 'group/sub/repo',
* branchName: 'feature/x',
* privateToken: 'xxxxx',
* }).then((resp) => {
*
* })
*/
function deleteBranch(_ref7) {
var projectName = _ref7.projectName,
branchName = _ref7.branchName,
privateToken = _ref7.privateToken,
baseUrl = _ref7.baseUrl;
return new Promise(function (resolve, reject) {
if (!projectName || !branchName) {
reject(new Error('projectName, branchName is required'));
return;
}
var url = tgit_helper.resolveBaseUrl(baseUrl, "/api/v3/projects/".concat(tgit_helper.encodeProject(projectName), "/repository/branches/").concat(encodeURIComponent(branchName)));
tgit_helper.instance({
url: url,
method: 'DELETE',
headers: {
'PRIVATE-TOKEN': privateToken
}
}).then(function (res) {
resolve(res.data);
})["catch"](function (err) {
reject(err);
});
});
}
/**
* 修改分支
*
* 编辑给定项目的某个分支。注意:如果项目内已存在 Mainline 分支,则不允许将其他分支设置成 Mainline 类别。
*
* 对应工蜂 API:PUT /api/v3/projects/:id/repository/branches/:branch
*
* @param {object} options 输入配置
* @param {string | number} options.projectName 项目 ID 或项目全路径 project_full_path
* @param {string} options.branchName 分支名
* @param {string} [options.description] 分支描述
* @param {string} [options.branchType] 分支类别,比如 Mainline、Feature、Others 等
* @param {string} options.privateToken 密钥
* @param {string} [options.baseUrl] baseUrl
* @returns {Promise<{ name: string } & Record<string, unknown>>} 修改后的分支信息
* @example
*
* editBranch({
* projectName: 'group/sub/repo',
* branchName: 'feature/x',
* branchType: 'Feature',
* description: 'feature 分支',
* privateToken: 'xxxxx',
* }).then((resp) => {
*
* })
*/
function editBranch(_ref8) {
var projectName = _ref8.projectName,
branchName = _ref8.branchName,
description = _ref8.description,
branchType = _ref8.branchType,
privateToken = _ref8.privateToken,
baseUrl = _ref8.baseUrl;
return new Promise(function (resolve, reject) {
if (!projectName || !branchName) {
reject(new Error('projectName, branchName is required'));
return;
}
var url = tgit_helper.resolveBaseUrl(baseUrl, "/api/v3/projects/".concat(tgit_helper.encodeProject(projectName), "/repository/branches/").concat(encodeURIComponent(branchName)));
var data = {
branch: branchName
};
if (description !== undefined) {
data.description = description;
}
if (branchType !== undefined) {
data.branch_type = branchType;
}
tgit_helper.instance({
url: url,
method: 'PUT',
data: data,
headers: {
'PRIVATE-TOKEN': privateToken
}
}).then(function (res) {
resolve(res.data);
})["catch"](function (err) {
reject(err);
});
});
}
exports.createBranch = createBranch;
exports.deleteBranch = deleteBranch;
exports.editBranch = editBranch;
exports.getBranchLifeCycle = getBranchLifeCycle;
exports.getBranchesByProjectName = getBranchesByProjectName;
exports.getOneBranchDetail = getOneBranchDetail;
exports.getProjectDefaultBranch = getProjectDefaultBranch;
exports.mergeBranches = mergeBranches;