@backstage/integration
Version:
Helpers for managing integrations towards external systems
61 lines (58 loc) • 1.85 kB
JavaScript
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