Skip to content

Deprecate and remove parseUrl and refactor getSanitizedUrlString #15767

Open
1 of 2 issues completed
Open
Improvement
1 of 2 issues completed
@AbhiPrasad

Description

@AbhiPrasad

Description

Now that we support ES2020 (aka not IE11 anymore) and Node.js 18+, we can get rid of parseUrl in favor of a method that just uses the built-in URL object. This will save us some bundle size (given we can remove that regex), and we get performance benefits from using native code.

export function parseUrl(url: string): PartialURL {

Instead of just blanket replacing parseUrl, we'll slowly convert all it's usages to using a new helper, which looks something like so:

/**
 * Parses string to a URL object
 *
 * @param url - The URL to parse
 * @returns The parsed URL object or undefined if the URL is invalid
 */
export function parseStringToURL(url: string): URL | undefined {
  try {
    // Node 20+, Chrome 120+, Firefox 115+, Safari 17+
    if ('canParse' in URL) {
      // Use `canParse` to short-circuit the URL constructor if it's not a valid URL
      // This is faster than trying to construct the URL and catching the error
      return (URL as unknown as URLwithCanParse).canParse(url) ? new URL(url) : undefined;
    }
  } catch {
    // empty body
  }

  return undefined;
}

With that, we can also refactor getSanitizedUrlString, which should provide some performance benefits.

export function getSanitizedUrlString(url: PartialURL): string {

Reminder list:

  • Can we remove extractQueryParamsFromUrl?

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions