summaryrefslogtreecommitdiff
path: root/tests/registry/jsr/@std/url/0.220.1/normalize.ts
blob: e8d728435bb8ffb3887c0ed988bec1f740edfd19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
// This module is browser compatible.

import { normalize as posixNormalize } from "jsr:@std/path@^0.220.1/posix/normalize";

/**
 * Normalize the `URL`, resolving `'..'` and `'.'` segments and multiple
 * `'/'`s into `'//'` after protocol and remaining into `'/'`.
 *
 * @example
 * ```ts
 * import { normalize } from "@std/url/normalize";
 *
 * console.log(normalize("https:///deno.land///std//assert//.//mod.ts").href);
 * // Outputs: "https://deno.land/std/path/mod.ts"
 *
 * console.log(normalize("https://deno.land/std/assert/../async/retry.ts").href);
 * // Outputs: "https://deno.land/std/async/retry.ts"
 * ```
 *
 * @param url to be normalized
 * @returns normalized URL
 */
export function normalize(url: string | URL): URL {
  url = new URL(url);
  url.pathname = posixNormalize(url.pathname);
  return url;
}