UNPKG

@backstage/integration

Version:

Helpers for managing integrations towards external systems

61 lines (58 loc) 1.85 kB
import { basicIntegrations, isValidUrl } from '../helpers.esm.js'; import { AzureUrl } from './AzureUrl.esm.js'; import { readAzureIntegrationConfigs } from './config.esm.js'; class AzureIntegration { constructor(integrationConfig) { this.integrationConfig = integrationConfig; } static factory = ({ config }) => { const configs = readAzureIntegrationConfigs( config.getOptionalConfigArray("integrations.azure") ?? [] ); return basicIntegrations( configs.map((c) => new AzureIntegration(c)), (i) => i.config.host ); }; get type() { return "azure"; } get title() { return this.integrationConfig.host; } get config() { return this.integrationConfig; } /* * Azure repo URLs on the form with a `path` query param are treated specially. * * Example base URL: https://dev.azure.com/organization/project/_git/repository?path=%2Fcatalog-info.yaml */ resolveUrl(options) { const { url, base } = options; if (isValidUrl(url)) { return url; } try { const azureUrl = AzureUrl.fromRepoUrl(base); const newUrl = new URL(base); const mockBaseUrl = new URL(`https://a.com${azureUrl.getPath() ?? ""}`); const updatedPath = new URL(url, mockBaseUrl).pathname; newUrl.searchParams.set("path", updatedPath); if (options.lineNumber) { newUrl.searchParams.set("line", String(options.lineNumber)); newUrl.searchParams.set("lineEnd", String(options.lineNumber + 1)); newUrl.searchParams.set("lineStartColumn", "1"); newUrl.searchParams.set("lineEndColumn", "1"); } return newUrl.toString(); } catch { return new URL(url, base).toString(); } } resolveEditUrl(url) { return url; } } export { AzureIntegration }; //# sourceMappingURL=AzureIntegration.esm.js.map