From b1fc5dc305442a4e8a4dcf1403f09e72e1eb93a0 Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Wed, 26 Nov 2025 00:06:05 -0600 Subject: [PATCH] make normalize URL normal --- src/util/util/{extensions => }/Url.ts | 19 -------------- src/util/util/extensions/Url.test.ts | 37 --------------------------- src/util/util/extensions/index.ts | 1 - src/util/util/index.ts | 3 ++- 4 files changed, 2 insertions(+), 58 deletions(-) rename src/util/util/{extensions => }/Url.ts (79%) delete mode 100644 src/util/util/extensions/Url.test.ts diff --git a/src/util/util/extensions/Url.ts b/src/util/util/Url.ts similarity index 79% rename from src/util/util/extensions/Url.ts rename to src/util/util/Url.ts index c0f07b374..808bdeaa9 100644 --- a/src/util/util/extensions/Url.ts +++ b/src/util/util/Url.ts @@ -16,19 +16,6 @@ along with this program. If not, see . */ -declare module "url" { - interface URL { - normalize(): string; - } -} - -/** - * Normalize a URL by: - * - Removing trailing slashes (except root path) - * - Sorting query params alphabetically - * - Removing empty query strings - * - Removing fragments - */ export function normalizeUrl(input: string): string { try { const u = new URL(input); @@ -52,9 +39,3 @@ export function normalizeUrl(input: string): string { return input; } } - -// register extensions -if (!URL.prototype.normalize) - URL.prototype.normalize = function () { - return normalizeUrl(this.toString()); - }; diff --git a/src/util/util/extensions/Url.test.ts b/src/util/util/extensions/Url.test.ts deleted file mode 100644 index 37afd0a28..000000000 --- a/src/util/util/extensions/Url.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import moduleAlias from "module-alias"; -moduleAlias(); -import './Url'; -import { describe, it } from 'node:test'; -import assert from 'node:assert/strict'; - -describe("URL extensions", () => { - - it("normalize", async () => { - const tests: [string, string][] = [ - ["http://example.com", "http://example.com/"], - ["http://example.com/", "http://example.com/"], - ["http://example.com/path/", "http://example.com/path"], - ["http://example.com/path//", "http://example.com/path/"], - ["http://example.com/path?b=2&a=1", "http://example.com/path?a=1&b=2"], - ["http://example.com/path?b=2&a=1&", "http://example.com/path?a=1&b=2"], - ["http://example.com/path?", "http://example.com/path"], - ["http://example.com/path#fragment", "http://example.com/path"], - ["http://example.com/path/?b=2&a=1#fragment", "http://example.com/path?a=1&b=2"], - ["ftp://example.com/resource/", "ftp://example.com/resource"], - ["https://example.com/resource?z=3&y=2&x=1", "https://example.com/resource?x=1&y=2&z=3"], - ["https://example.com/resource?z=3&y=2&x=1#", "https://example.com/resource?x=1&y=2&z=3"], - ["https://example.com/resource?z=3&y=2&x=1#section", "https://example.com/resource?x=1&y=2&z=3"], - ["https://example.com/resource/?z=3&y=2&x=1#section", "https://example.com/resource?x=1&y=2&z=3"], - ["https://example.com/resource//?z=3&y=2&x=1#section", "https://example.com/resource/?x=1&y=2&z=3"], - ["https://example.com/", "https://example.com/"], - ["https://example.com", "https://example.com/"], - ]; - for (const [input, expected] of tests) { - assert.doesNotThrow(() => new URL(input), `URL("${input}") should not throw`); - const url = new URL(input); - const normalized = url.normalize(); - assert.strictEqual(normalized, expected, `normalize("${input}") = "${normalized}", expected "${expected}"`); - } - }); - -}); \ No newline at end of file diff --git a/src/util/util/extensions/index.ts b/src/util/util/extensions/index.ts index afd6c0b35..b7dcf4d53 100644 --- a/src/util/util/extensions/index.ts +++ b/src/util/util/extensions/index.ts @@ -1,3 +1,2 @@ export * from "./Array"; -export * from "./Url"; export * from "./String"; diff --git a/src/util/util/index.ts b/src/util/util/index.ts index 11c4899cc..920c330db 100644 --- a/src/util/util/index.ts +++ b/src/util/util/index.ts @@ -48,4 +48,5 @@ export * from "./Application"; export * from "./NameValidation"; export * from "../../schemas/HelperTypes"; export * from "./extensions"; -export * from "./Random"; \ No newline at end of file +export * from "./Random"; +export * from "./Url";