summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMathMan05 <mathmanrm@gmail.com>2025-11-26 00:06:05 -0600
committerMathMan05 <mathmanrm@gmail.com>2025-11-26 00:06:05 -0600
commitb1fc5dc305442a4e8a4dcf1403f09e72e1eb93a0 (patch)
tree503753ed25dc08f3760ad1659bb310c20123f09d /src
parentget rid of sleep() (diff)
downloadserver-ts-b1fc5dc305442a4e8a4dcf1403f09e72e1eb93a0.tar.xz
make normalize URL normal
Diffstat (limited to 'src')
-rw-r--r--src/util/util/Url.ts (renamed from src/util/util/extensions/Url.ts)19
-rw-r--r--src/util/util/extensions/Url.test.ts37
-rw-r--r--src/util/util/extensions/index.ts1
-rw-r--r--src/util/util/index.ts3
4 files changed, 2 insertions, 58 deletions
diff --git a/src/util/util/extensions/Url.ts b/src/util/util/Url.ts

index c0f07b37..808bdeaa 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 <https://www.gnu.org/licenses/>. */ -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 37afd0a2..00000000 --- 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 afd6c0b3..b7dcf4d5 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 11c4899c..920c330d 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";