zephyr-agent
Version:
Zephyr plugin agent
142 lines (141 loc) • 5.72 kB
JavaScript
;
var __webpack_require__ = {};
(()=>{
__webpack_require__.d = (exports1, getters, values)=>{
var define = (defs, kind)=>{
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
[kind]: defs[key]
});
};
define(getters, "get");
define(values, "value");
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
__webpack_require__.r = (exports1)=>{
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
getGitProviderInfo: ()=>getGitProviderInfo
});
const index_js_namespaceObject = require("../errors/index.js");
const STANDARD_DOMAINS = {
'github.com': 'github',
'gitlab.com': 'gitlab',
'bitbucket.org': 'bitbucket',
'dev.azure.com': 'azure',
'ssh.dev.azure.com': 'azure',
'vs-ssh.visualstudio.com': 'azure'
};
function getGitProviderInfo(gitUrl) {
if (!gitUrl) throw new index_js_namespaceObject.ZephyrError(index_js_namespaceObject.ZeErrors.ERR_GIT_REMOTE_ORIGIN);
const parsed = parseGitUrl(gitUrl);
const resource = parsed.resource.toLowerCase();
const provider = detectProvider(parsed, resource);
const isEnterprise = 'custom' === provider;
const owner = isEnterprise ? extractEnterpriseOwner(parsed) : extractStandardOwner(parsed, provider);
const project = extractProjectName(parsed, provider, isEnterprise);
return {
provider,
owner,
project,
isEnterprise
};
}
function parseGitUrl(gitUrl) {
let resource;
let pathname;
if (/^[a-z][a-z\d+.-]*:\/\//i.test(gitUrl)) try {
const url = new URL(gitUrl);
resource = url.hostname;
pathname = url.pathname;
} catch {
throw new index_js_namespaceObject.ZephyrError(index_js_namespaceObject.ZeErrors.ERR_GIT_REMOTE_ORIGIN);
}
else {
const scpRemote = /^(?:[^@/:]+@)?([^/:]+):(.+)$/.exec(gitUrl);
if (!scpRemote) throw new index_js_namespaceObject.ZephyrError(index_js_namespaceObject.ZeErrors.ERR_GIT_REMOTE_ORIGIN);
resource = scpRemote[1];
pathname = scpRemote[2];
}
const pathParts = pathname.split('/').filter(Boolean);
const name = pathParts.at(-1)?.replace(/\.git$/, '') ?? '';
if (!resource || !name) throw new index_js_namespaceObject.ZephyrError(index_js_namespaceObject.ZeErrors.ERR_GIT_REMOTE_ORIGIN);
return {
resource,
owner: pathParts.slice(0, -1).join('/'),
name,
pathname
};
}
function detectProvider(parsed, resource) {
const standardProvider = STANDARD_DOMAINS[resource];
if (standardProvider) return standardProvider;
if (resource.endsWith('.visualstudio.com')) return 'azure';
const pathParts = getPathParts(parsed);
if ('v3' === pathParts[0] && pathParts.length >= 4) return 'azure';
return 'custom';
}
function extractEnterpriseOwner(parsed) {
const domainParts = parsed.resource.split('.');
const baseDomain = domainParts.length > 2 ? domainParts.slice(1).join('.') : parsed.resource;
return baseDomain.replace(/\./g, '-').toLowerCase();
}
function extractStandardOwner(parsed, provider) {
if ('azure' === provider) return extractAzureOrganization(parsed);
const rawOwner = parsed.owner.toLowerCase();
if (('gitlab' === provider || 'bitbucket' === provider) && rawOwner.includes('/')) return rawOwner.split('/')[0];
return rawOwner;
}
function extractProjectName(parsed, provider, isEnterprise) {
if ('azure' === provider) return extractAzureRepoName(parsed);
if (isEnterprise && 'gitlab' === provider && parsed.pathname) {
const pathParts = parsed.pathname.split('/').filter(Boolean);
if (pathParts.length > 2) return pathParts[pathParts.length - 1].replace('.git', '').toLowerCase();
}
return parsed.name.toLowerCase();
}
function extractAzureOrganization(parsed) {
const pathParts = getPathParts(parsed);
if ('v3' === pathParts[0] && pathParts[1]) return pathParts[1].toLowerCase();
const resource = parsed.resource.toLowerCase();
if (resource.endsWith('.visualstudio.com')) return resource.replace(/\.visualstudio\.com$/, '').toLowerCase();
const organization = pathParts[0];
return (organization || parsed.owner).toLowerCase();
}
function extractAzureRepoName(parsed) {
const pathParts = getPathParts(parsed);
const gitSegmentIndex = pathParts.findIndex((part)=>'_git' === part.toLowerCase());
const repoName = gitSegmentIndex >= 0 ? pathParts[gitSegmentIndex + 1] : pathParts[pathParts.length - 1];
return sanitizeGitName(repoName || parsed.name);
}
function getPathParts(parsed) {
return parsed.pathname.split('/').filter(Boolean);
}
function sanitizeGitName(name) {
try {
return decodeURIComponent(name).replace(/\.git$/, '').toLowerCase();
} catch {
return name.replace(/\.git$/, '').toLowerCase();
}
}
exports.getGitProviderInfo = __webpack_exports__.getGitProviderInfo;
for(var __rspack_i in __webpack_exports__)if (-1 === [
"getGitProviderInfo"
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
Object.defineProperty(exports, '__esModule', {
value: true
});
//# sourceMappingURL=git-provider-utils.js.map