Skip to content

Deprecate and remove parseUrl and refactor getSanitizedUrlString #15767

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?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions