mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 07:14:47 -05:00
28 lines
897 B
TypeScript
28 lines
897 B
TypeScript
// 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;
|
|
}
|