Skip to content

Commit 3140a64

Browse files
author
Paul Howells
committed
APS-4600 Improved Open API URL duplication detection logic
1 parent 884422b commit 3140a64

1 file changed

Lines changed: 26 additions & 1 deletion

File tree

plugins/catalog-backend-module-bc-data-catalogue/src/BcDataCatalogueResourceFactory.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,32 @@ export class BcDataCatalogueResourceFactory {
712712
}
713713

714714
private normalizeOpenApiDefinitionUrl(url: string): string {
715-
return url.trim().toLowerCase();
715+
const trimmedUrl = url.trim();
716+
717+
try {
718+
const parsedUrl = new URL(trimmedUrl);
719+
const protocol =
720+
parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:'
721+
? 'http'
722+
: parsedUrl.protocol.replace(/:$/, '').toLowerCase();
723+
const host = parsedUrl.host.toLowerCase();
724+
const pathname =
725+
parsedUrl.pathname === '/'
726+
? ''
727+
: parsedUrl.pathname.replace(/\/+$/, '').toLowerCase();
728+
const sortedSearchParams = [...parsedUrl.searchParams.entries()].sort(
729+
([leftKey, leftValue], [rightKey, rightValue]) =>
730+
leftKey.localeCompare(rightKey) || leftValue.localeCompare(rightValue),
731+
);
732+
const searchParams = new URLSearchParams(sortedSearchParams);
733+
const queryString = searchParams.toString();
734+
735+
return `${protocol}://${host}${pathname}${
736+
queryString ? `?${queryString}` : ''
737+
}`;
738+
} catch {
739+
return trimmedUrl.toLowerCase();
740+
}
716741
}
717742

718743
private async tryReadDefinition(url: string): Promise<string | undefined> {

0 commit comments

Comments
 (0)