{
  "type": "module",
  "source": "doc/api/url.md",
  "modules": [
    {
      "textRaw": "URL",
      "name": "url",
      "introduced_in": "v0.10.0",
      "stability": 2,
      "stabilityText": "Stable",
      "desc": "<p><strong>Source Code:</strong> <a href=\"https://github.com/nodejs/node/blob/v16.11.0/lib/url.js\">lib/url.js</a></p>\n<p>The <code>url</code> module provides utilities for URL resolution and parsing. It can be\naccessed using:</p>\n<pre><code class=\"language-mjs\">import url from 'url';\n</code></pre>\n<pre><code class=\"language-cjs\">const url = require('url');\n</code></pre>",
      "modules": [
        {
          "textRaw": "URL strings and URL objects",
          "name": "url_strings_and_url_objects",
          "desc": "<p>A URL string is a structured string containing multiple meaningful components.\nWhen parsed, a URL object is returned containing properties for each of these\ncomponents.</p>\n<p>The <code>url</code> module provides two APIs for working with URLs: a legacy API that is\nNode.js specific, and a newer API that implements the same\n<a href=\"https://url.spec.whatwg.org/\">WHATWG URL Standard</a> used by web browsers.</p>\n<p>A comparison between the WHATWG and Legacy APIs is provided below. Above the URL\n<code>'https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash'</code>, properties\nof an object returned by the legacy <code>url.parse()</code> are shown. Below it are\nproperties of a WHATWG <code>URL</code> object.</p>\n<p>WHATWG URL's <code>origin</code> property includes <code>protocol</code> and <code>host</code>, but not\n<code>username</code> or <code>password</code>.</p>\n<pre><code class=\"language-text\">┌────────────────────────────────────────────────────────────────────────────────────────────────┐\n│                                              href                                              │\n├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤\n│ protocol │  │        auth         │          host          │           path            │ hash  │\n│          │  │                     ├─────────────────┬──────┼──────────┬────────────────┤       │\n│          │  │                     │    hostname     │ port │ pathname │     search     │       │\n│          │  │                     │                 │      │          ├─┬──────────────┤       │\n│          │  │                     │                 │      │          │ │    query     │       │\n\"  https:   //    user   :   pass   @ sub.example.com : 8080   /p/a/t/h  ?  query=string   #hash \"\n│          │  │          │          │    hostname     │ port │          │                │       │\n│          │  │          │          ├─────────────────┴──────┤          │                │       │\n│ protocol │  │ username │ password │          host          │          │                │       │\n├──────────┴──┼──────────┴──────────┼────────────────────────┤          │                │       │\n│   origin    │                     │         origin         │ pathname │     search     │ hash  │\n├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤\n│                                              href                                              │\n└────────────────────────────────────────────────────────────────────────────────────────────────┘\n(All spaces in the \"\" line should be ignored. They are purely for formatting.)\n</code></pre>\n<p>Parsing the URL string using the WHATWG API:</p>\n<pre><code class=\"language-js\">const myURL =\n  new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n</code></pre>\n<p>Parsing the URL string using the Legacy API:</p>\n<pre><code class=\"language-mjs\">import url from 'url';\nconst myURL =\n  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n</code></pre>\n<pre><code class=\"language-cjs\">const url = require('url');\nconst myURL =\n  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n</code></pre>",
          "modules": [
            {
              "textRaw": "Constructing a URL from component parts and getting the constructed string",
              "name": "constructing_a_url_from_component_parts_and_getting_the_constructed_string",
              "desc": "<p>It is possible to construct a WHATWG URL from component parts using either the\nproperty setters or a template literal string:</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org');\nmyURL.pathname = '/a/b/c';\nmyURL.search = '?d=e';\nmyURL.hash = '#fgh';\n</code></pre>\n<pre><code class=\"language-js\">const pathname = '/a/b/c';\nconst search = '?d=e';\nconst hash = '#fgh';\nconst myURL = new URL(`https://example.org${pathname}${search}${hash}`);\n</code></pre>\n<p>To get the constructed URL string, use the <code>href</code> property accessor:</p>\n<pre><code class=\"language-js\">console.log(myURL.href);\n</code></pre>",
              "type": "module",
              "displayName": "Constructing a URL from component parts and getting the constructed string"
            }
          ],
          "type": "module",
          "displayName": "URL strings and URL objects"
        },
        {
          "textRaw": "The WHATWG URL API",
          "name": "the_whatwg_url_api",
          "classes": [
            {
              "textRaw": "Class: `URL`",
              "type": "class",
              "name": "URL",
              "meta": {
                "added": [
                  "v7.0.0",
                  "v6.13.0"
                ],
                "changes": [
                  {
                    "version": "v10.0.0",
                    "pr-url": "https://github.com/nodejs/node/pull/18281",
                    "description": "The class is now available on the global object."
                  }
                ]
              },
              "desc": "<p>Browser-compatible <code>URL</code> class, implemented by following the WHATWG URL\nStandard. <a href=\"https://url.spec.whatwg.org/#example-url-parsing\">Examples of parsed URLs</a> may be found in the Standard itself.\nThe <code>URL</code> class is also available on the global object.</p>\n<p>In accordance with browser conventions, all properties of <code>URL</code> objects\nare implemented as getters and setters on the class prototype, rather than as\ndata properties on the object itself. Thus, unlike <a href=\"#url_legacy_urlobject\">legacy <code>urlObject</code></a>s,\nusing the <code>delete</code> keyword on any properties of <code>URL</code> objects (e.g. <code>delete myURL.protocol</code>, <code>delete myURL.pathname</code>, etc) has no effect but will still\nreturn <code>true</code>.</p>",
              "properties": [
                {
                  "textRaw": "`hash` {string}",
                  "type": "string",
                  "name": "hash",
                  "desc": "<p>Gets and sets the fragment portion of the URL.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org/foo#bar');\nconsole.log(myURL.hash);\n// Prints #bar\n\nmyURL.hash = 'baz';\nconsole.log(myURL.href);\n// Prints https://example.org/foo#baz\n</code></pre>\n<p>Invalid URL characters included in the value assigned to the <code>hash</code> property\nare <a href=\"#whatwg-percent-encoding\">percent-encoded</a>. The selection of which characters to\npercent-encode may vary somewhat from what the <a href=\"#url_url_parse_urlstring_parsequerystring_slashesdenotehost\"><code>url.parse()</code></a> and\n<a href=\"#url_url_format_urlobject\"><code>url.format()</code></a> methods would produce.</p>"
                },
                {
                  "textRaw": "`host` {string}",
                  "type": "string",
                  "name": "host",
                  "desc": "<p>Gets and sets the host portion of the URL.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org:81/foo');\nconsole.log(myURL.host);\n// Prints example.org:81\n\nmyURL.host = 'example.com:82';\nconsole.log(myURL.href);\n// Prints https://example.com:82/foo\n</code></pre>\n<p>Invalid host values assigned to the <code>host</code> property are ignored.</p>"
                },
                {
                  "textRaw": "`hostname` {string}",
                  "type": "string",
                  "name": "hostname",
                  "desc": "<p>Gets and sets the host name portion of the URL. The key difference between\n<code>url.host</code> and <code>url.hostname</code> is that <code>url.hostname</code> does <em>not</em> include the\nport.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org:81/foo');\nconsole.log(myURL.hostname);\n// Prints example.org\n\n// Setting the hostname does not change the port\nmyURL.hostname = 'example.com:82';\nconsole.log(myURL.href);\n// Prints https://example.com:81/foo\n\n// Use myURL.host to change the hostname and port\nmyURL.host = 'example.org:82';\nconsole.log(myURL.href);\n// Prints https://example.org:82/foo\n</code></pre>\n<p>Invalid host name values assigned to the <code>hostname</code> property are ignored.</p>"
                },
                {
                  "textRaw": "`href` {string}",
                  "type": "string",
                  "name": "href",
                  "desc": "<p>Gets and sets the serialized URL.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org/foo');\nconsole.log(myURL.href);\n// Prints https://example.org/foo\n\nmyURL.href = 'https://example.com/bar';\nconsole.log(myURL.href);\n// Prints https://example.com/bar\n</code></pre>\n<p>Getting the value of the <code>href</code> property is equivalent to calling\n<a href=\"#url_url_tostring\"><code>url.toString()</code></a>.</p>\n<p>Setting the value of this property to a new value is equivalent to creating a\nnew <code>URL</code> object using <a href=\"#url_new_url_input_base\"><code>new URL(value)</code></a>. Each of the <code>URL</code>\nobject's properties will be modified.</p>\n<p>If the value assigned to the <code>href</code> property is not a valid URL, a <code>TypeError</code>\nwill be thrown.</p>"
                },
                {
                  "textRaw": "`origin` {string}",
                  "type": "string",
                  "name": "origin",
                  "meta": {
                    "changes": [
                      {
                        "version": "v15.0.0",
                        "pr-url": "https://github.com/nodejs/node/pull/33325",
                        "description": "The scheme \"gopher\" is no longer special and `url.origin` now returns `'null'` for it."
                      }
                    ]
                  },
                  "desc": "<p>Gets the read-only serialization of the URL's origin.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org/foo/bar?baz');\nconsole.log(myURL.origin);\n// Prints https://example.org\n</code></pre>\n<pre><code class=\"language-js\">const idnURL = new URL('https://測試');\nconsole.log(idnURL.origin);\n// Prints https://xn--g6w251d\n\nconsole.log(idnURL.hostname);\n// Prints xn--g6w251d\n</code></pre>"
                },
                {
                  "textRaw": "`password` {string}",
                  "type": "string",
                  "name": "password",
                  "desc": "<p>Gets and sets the password portion of the URL.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://abc:xyz@example.com');\nconsole.log(myURL.password);\n// Prints xyz\n\nmyURL.password = '123';\nconsole.log(myURL.href);\n// Prints https://abc:123@example.com\n</code></pre>\n<p>Invalid URL characters included in the value assigned to the <code>password</code> property\nare <a href=\"#whatwg-percent-encoding\">percent-encoded</a>. The selection of which characters to\npercent-encode may vary somewhat from what the <a href=\"#url_url_parse_urlstring_parsequerystring_slashesdenotehost\"><code>url.parse()</code></a> and\n<a href=\"#url_url_format_urlobject\"><code>url.format()</code></a> methods would produce.</p>"
                },
                {
                  "textRaw": "`pathname` {string}",
                  "type": "string",
                  "name": "pathname",
                  "desc": "<p>Gets and sets the path portion of the URL.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org/abc/xyz?123');\nconsole.log(myURL.pathname);\n// Prints /abc/xyz\n\nmyURL.pathname = '/abcdef';\nconsole.log(myURL.href);\n// Prints https://example.org/abcdef?123\n</code></pre>\n<p>Invalid URL characters included in the value assigned to the <code>pathname</code>\nproperty are <a href=\"#whatwg-percent-encoding\">percent-encoded</a>. The selection of which characters\nto percent-encode may vary somewhat from what the <a href=\"#url_url_parse_urlstring_parsequerystring_slashesdenotehost\"><code>url.parse()</code></a> and\n<a href=\"#url_url_format_urlobject\"><code>url.format()</code></a> methods would produce.</p>"
                },
                {
                  "textRaw": "`port` {string}",
                  "type": "string",
                  "name": "port",
                  "meta": {
                    "changes": [
                      {
                        "version": "v15.0.0",
                        "pr-url": "https://github.com/nodejs/node/pull/33325",
                        "description": "The scheme \"gopher\" is no longer special."
                      }
                    ]
                  },
                  "desc": "<p>Gets and sets the port portion of the URL.</p>\n<p>The port value may be a number or a string containing a number in the range\n<code>0</code> to <code>65535</code> (inclusive). Setting the value to the default port of the\n<code>URL</code> objects given <code>protocol</code> will result in the <code>port</code> value becoming\nthe empty string (<code>''</code>).</p>\n<p>The port value can be an empty string in which case the port depends on\nthe protocol/scheme:</p>\n<table>\n<thead>\n<tr>\n<th>protocol</th>\n<th>port</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>\"ftp\"</td>\n<td>21</td>\n</tr>\n<tr>\n<td>\"file\"</td>\n<td></td>\n</tr>\n<tr>\n<td>\"http\"</td>\n<td>80</td>\n</tr>\n<tr>\n<td>\"https\"</td>\n<td>443</td>\n</tr>\n<tr>\n<td>\"ws\"</td>\n<td>80</td>\n</tr>\n<tr>\n<td>\"wss\"</td>\n<td>443</td>\n</tr>\n</tbody>\n</table>\n<p>Upon assigning a value to the port, the value will first be converted to a\nstring using <code>.toString()</code>.</p>\n<p>If that string is invalid but it begins with a number, the leading number is\nassigned to <code>port</code>.\nIf the number lies outside the range denoted above, it is ignored.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org:8888');\nconsole.log(myURL.port);\n// Prints 8888\n\n// Default ports are automatically transformed to the empty string\n// (HTTPS protocol's default port is 443)\nmyURL.port = '443';\nconsole.log(myURL.port);\n// Prints the empty string\nconsole.log(myURL.href);\n// Prints https://example.org/\n\nmyURL.port = 1234;\nconsole.log(myURL.port);\n// Prints 1234\nconsole.log(myURL.href);\n// Prints https://example.org:1234/\n\n// Completely invalid port strings are ignored\nmyURL.port = 'abcd';\nconsole.log(myURL.port);\n// Prints 1234\n\n// Leading numbers are treated as a port number\nmyURL.port = '5678abcd';\nconsole.log(myURL.port);\n// Prints 5678\n\n// Non-integers are truncated\nmyURL.port = 1234.5678;\nconsole.log(myURL.port);\n// Prints 1234\n\n// Out-of-range numbers which are not represented in scientific notation\n// will be ignored.\nmyURL.port = 1e10; // 10000000000, will be range-checked as described below\nconsole.log(myURL.port);\n// Prints 1234\n</code></pre>\n<p>Numbers which contain a decimal point,\nsuch as floating-point numbers or numbers in scientific notation,\nare not an exception to this rule.\nLeading numbers up to the decimal point will be set as the URL's port,\nassuming they are valid:</p>\n<pre><code class=\"language-js\">myURL.port = 4.567e21;\nconsole.log(myURL.port);\n// Prints 4 (because it is the leading number in the string '4.567e21')\n</code></pre>"
                },
                {
                  "textRaw": "`protocol` {string}",
                  "type": "string",
                  "name": "protocol",
                  "desc": "<p>Gets and sets the protocol portion of the URL.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org');\nconsole.log(myURL.protocol);\n// Prints https:\n\nmyURL.protocol = 'ftp';\nconsole.log(myURL.href);\n// Prints ftp://example.org/\n</code></pre>\n<p>Invalid URL protocol values assigned to the <code>protocol</code> property are ignored.</p>",
                  "modules": [
                    {
                      "textRaw": "Special schemes",
                      "name": "special_schemes",
                      "meta": {
                        "changes": [
                          {
                            "version": "v15.0.0",
                            "pr-url": "https://github.com/nodejs/node/pull/33325",
                            "description": "The scheme \"gopher\" is no longer special."
                          }
                        ]
                      },
                      "desc": "<p>The <a href=\"https://url.spec.whatwg.org/\">WHATWG URL Standard</a> considers a handful of URL protocol schemes to be\n<em>special</em> in terms of how they are parsed and serialized. When a URL is\nparsed using one of these special protocols, the <code>url.protocol</code> property\nmay be changed to another special protocol but cannot be changed to a\nnon-special protocol, and vice versa.</p>\n<p>For instance, changing from <code>http</code> to <code>https</code> works:</p>\n<pre><code class=\"language-js\">const u = new URL('http://example.org');\nu.protocol = 'https';\nconsole.log(u.href);\n// https://example.org\n</code></pre>\n<p>However, changing from <code>http</code> to a hypothetical <code>fish</code> protocol does not\nbecause the new protocol is not special.</p>\n<pre><code class=\"language-js\">const u = new URL('http://example.org');\nu.protocol = 'fish';\nconsole.log(u.href);\n// http://example.org\n</code></pre>\n<p>Likewise, changing from a non-special protocol to a special protocol is also\nnot permitted:</p>\n<pre><code class=\"language-js\">const u = new URL('fish://example.org');\nu.protocol = 'http';\nconsole.log(u.href);\n// fish://example.org\n</code></pre>\n<p>According to the WHATWG URL Standard, special protocol schemes are <code>ftp</code>,\n<code>file</code>, <code>http</code>, <code>https</code>, <code>ws</code>, and <code>wss</code>.</p>",
                      "type": "module",
                      "displayName": "Special schemes"
                    }
                  ]
                },
                {
                  "textRaw": "`search` {string}",
                  "type": "string",
                  "name": "search",
                  "desc": "<p>Gets and sets the serialized query portion of the URL.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org/abc?123');\nconsole.log(myURL.search);\n// Prints ?123\n\nmyURL.search = 'abc=xyz';\nconsole.log(myURL.href);\n// Prints https://example.org/abc?abc=xyz\n</code></pre>\n<p>Any invalid URL characters appearing in the value assigned the <code>search</code>\nproperty will be <a href=\"#whatwg-percent-encoding\">percent-encoded</a>. The selection of which\ncharacters to percent-encode may vary somewhat from what the <a href=\"#url_url_parse_urlstring_parsequerystring_slashesdenotehost\"><code>url.parse()</code></a>\nand <a href=\"#url_url_format_urlobject\"><code>url.format()</code></a> methods would produce.</p>"
                },
                {
                  "textRaw": "`searchParams` {URLSearchParams}",
                  "type": "URLSearchParams",
                  "name": "searchParams",
                  "desc": "<p>Gets the <a href=\"#url_class_urlsearchparams\"><code>URLSearchParams</code></a> object representing the query parameters of the\nURL. This property is read-only but the <code>URLSearchParams</code> object it provides\ncan be used to mutate the URL instance; to replace the entirety of query\nparameters of the URL, use the <a href=\"#url_url_search\"><code>url.search</code></a> setter. See\n<a href=\"#url_class_urlsearchparams\"><code>URLSearchParams</code></a> documentation for details.</p>\n<p>Use care when using <code>.searchParams</code> to modify the <code>URL</code> because,\nper the WHATWG specification, the <code>URLSearchParams</code> object uses\ndifferent rules to determine which characters to percent-encode. For\ninstance, the <code>URL</code> object will not percent encode the ASCII tilde (<code>~</code>)\ncharacter, while <code>URLSearchParams</code> will always encode it:</p>\n<pre><code class=\"language-js\">const myUrl = new URL('https://example.org/abc?foo=~bar');\n\nconsole.log(myUrl.search);  // prints ?foo=~bar\n\n// Modify the URL via searchParams...\nmyUrl.searchParams.sort();\n\nconsole.log(myUrl.search);  // prints ?foo=%7Ebar\n</code></pre>"
                },
                {
                  "textRaw": "`username` {string}",
                  "type": "string",
                  "name": "username",
                  "desc": "<p>Gets and sets the username portion of the URL.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://abc:xyz@example.com');\nconsole.log(myURL.username);\n// Prints abc\n\nmyURL.username = '123';\nconsole.log(myURL.href);\n// Prints https://123:xyz@example.com/\n</code></pre>\n<p>Any invalid URL characters appearing in the value assigned the <code>username</code>\nproperty will be <a href=\"#whatwg-percent-encoding\">percent-encoded</a>. The selection of which\ncharacters to percent-encode may vary somewhat from what the <a href=\"#url_url_parse_urlstring_parsequerystring_slashesdenotehost\"><code>url.parse()</code></a>\nand <a href=\"#url_url_format_urlobject\"><code>url.format()</code></a> methods would produce.</p>"
                }
              ],
              "methods": [
                {
                  "textRaw": "`url.toString()`",
                  "type": "method",
                  "name": "toString",
                  "signatures": [
                    {
                      "return": {
                        "textRaw": "Returns: {string}",
                        "name": "return",
                        "type": "string"
                      },
                      "params": []
                    }
                  ],
                  "desc": "<p>The <code>toString()</code> method on the <code>URL</code> object returns the serialized URL. The\nvalue returned is equivalent to that of <a href=\"#url_url_href\"><code>url.href</code></a> and <a href=\"#url_url_tojson\"><code>url.toJSON()</code></a>.</p>"
                },
                {
                  "textRaw": "`url.toJSON()`",
                  "type": "method",
                  "name": "toJSON",
                  "signatures": [
                    {
                      "return": {
                        "textRaw": "Returns: {string}",
                        "name": "return",
                        "type": "string"
                      },
                      "params": []
                    }
                  ],
                  "desc": "<p>The <code>toJSON()</code> method on the <code>URL</code> object returns the serialized URL. The\nvalue returned is equivalent to that of <a href=\"#url_url_href\"><code>url.href</code></a> and\n<a href=\"#url_url_tostring\"><code>url.toString()</code></a>.</p>\n<p>This method is automatically called when an <code>URL</code> object is serialized\nwith <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify\"><code>JSON.stringify()</code></a>.</p>\n<pre><code class=\"language-js\">const myURLs = [\n  new URL('https://www.example.com'),\n  new URL('https://test.example.org'),\n];\nconsole.log(JSON.stringify(myURLs));\n// Prints [\"https://www.example.com/\",\"https://test.example.org/\"]\n</code></pre>"
                },
                {
                  "textRaw": "`URL.createObjectURL(blob)`",
                  "type": "method",
                  "name": "createObjectURL",
                  "meta": {
                    "added": [
                      "v16.7.0"
                    ],
                    "changes": []
                  },
                  "stability": 1,
                  "stabilityText": "Experimental",
                  "signatures": [
                    {
                      "return": {
                        "textRaw": "Returns: {string}",
                        "name": "return",
                        "type": "string"
                      },
                      "params": [
                        {
                          "textRaw": "`blob` {Blob}",
                          "name": "blob",
                          "type": "Blob"
                        }
                      ]
                    }
                  ],
                  "desc": "<p>Creates a <code>'blob:nodedata:...'</code> URL string that represents the given <a href=\"buffer.html#buffer_class_blob\" class=\"type\">&lt;Blob&gt;</a>\nobject and can be used to retrieve the <code>Blob</code> later.</p>\n<pre><code class=\"language-js\">const {\n  Blob,\n  resolveObjectURL,\n} = require('buffer');\n\nconst blob = new Blob(['hello']);\nconst id = URL.createObjectURL(blob);\n\n// later...\n\nconst otherBlob = resolveObjectURL(id);\nconsole.log(otherBlob.size);\n</code></pre>\n<p>The data stored by the registered <a href=\"buffer.html#buffer_class_blob\" class=\"type\">&lt;Blob&gt;</a> will be retained in memory until\n<code>URL.revokeObjectURL()</code> is called to remove it.</p>\n<p><code>Blob</code> objects are registered within the current thread. If using Worker\nThreads, <code>Blob</code> objects registered within one Worker will not be available\nto other workers or the main thread.</p>"
                },
                {
                  "textRaw": "`URL.revokeObjectURL(id)`",
                  "type": "method",
                  "name": "revokeObjectURL",
                  "meta": {
                    "added": [
                      "v16.7.0"
                    ],
                    "changes": []
                  },
                  "stability": 1,
                  "stabilityText": "Experimental",
                  "signatures": [
                    {
                      "params": [
                        {
                          "textRaw": "`id` {string} A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`.",
                          "name": "id",
                          "type": "string",
                          "desc": "A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`."
                        }
                      ]
                    }
                  ],
                  "desc": "<p>Removes the stored <a href=\"buffer.html#buffer_class_blob\" class=\"type\">&lt;Blob&gt;</a> identified by the given ID.</p>"
                }
              ],
              "signatures": [
                {
                  "params": [
                    {
                      "textRaw": "`input` {string} The absolute or relative input URL to parse. If `input` is relative, then `base` is required. If `input` is absolute, the `base` is ignored.",
                      "name": "input",
                      "type": "string",
                      "desc": "The absolute or relative input URL to parse. If `input` is relative, then `base` is required. If `input` is absolute, the `base` is ignored."
                    },
                    {
                      "textRaw": "`base` {string|URL} The base URL to resolve against if the `input` is not absolute.",
                      "name": "base",
                      "type": "string|URL",
                      "desc": "The base URL to resolve against if the `input` is not absolute."
                    }
                  ],
                  "desc": "<p>Creates a new <code>URL</code> object by parsing the <code>input</code> relative to the <code>base</code>. If\n<code>base</code> is passed as a string, it will be parsed equivalent to <code>new URL(base)</code>.</p>\n<pre><code class=\"language-js\">const myURL = new URL('/foo', 'https://example.org/');\n// https://example.org/foo\n</code></pre>\n<p>The URL constructor is accessible as a property on the global object.\nIt can also be imported from the built-in url module:</p>\n<pre><code class=\"language-mjs\">import { URL } from 'url';\nconsole.log(URL === globalThis.URL); // Prints 'true'.\n</code></pre>\n<pre><code class=\"language-cjs\">console.log(URL === require('url').URL); // Prints 'true'.\n</code></pre>\n<p>A <code>TypeError</code> will be thrown if the <code>input</code> or <code>base</code> are not valid URLs. Note\nthat an effort will be made to coerce the given values into strings. For\ninstance:</p>\n<pre><code class=\"language-js\">const myURL = new URL({ toString: () => 'https://example.org/' });\n// https://example.org/\n</code></pre>\n<p>Unicode characters appearing within the host name of <code>input</code> will be\nautomatically converted to ASCII using the <a href=\"https://tools.ietf.org/html/rfc5891#section-4.4\">Punycode</a> algorithm.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://測試');\n// https://xn--g6w251d/\n</code></pre>\n<p>This feature is only available if the <code>node</code> executable was compiled with\n<a href=\"intl.html#intl_options_for_building_node_js\">ICU</a> enabled. If not, the domain names are passed through unchanged.</p>\n<p>In cases where it is not known in advance if <code>input</code> is an absolute URL\nand a <code>base</code> is provided, it is advised to validate that the <code>origin</code> of\nthe <code>URL</code> object is what is expected.</p>\n<pre><code class=\"language-js\">let myURL = new URL('http://Example.com/', 'https://example.org/');\n// http://example.com/\n\nmyURL = new URL('https://Example.com/', 'https://example.org/');\n// https://example.com/\n\nmyURL = new URL('foo://Example.com/', 'https://example.org/');\n// foo://Example.com/\n\nmyURL = new URL('http:Example.com/', 'https://example.org/');\n// http://example.com/\n\nmyURL = new URL('https:Example.com/', 'https://example.org/');\n// https://example.org/Example.com/\n\nmyURL = new URL('foo:Example.com/', 'https://example.org/');\n// foo:Example.com/\n</code></pre>"
                }
              ]
            },
            {
              "textRaw": "Class: `URLSearchParams`",
              "type": "class",
              "name": "URLSearchParams",
              "meta": {
                "added": [
                  "v7.5.0",
                  "v6.13.0"
                ],
                "changes": [
                  {
                    "version": "v10.0.0",
                    "pr-url": "https://github.com/nodejs/node/pull/18281",
                    "description": "The class is now available on the global object."
                  }
                ]
              },
              "desc": "<p>The <code>URLSearchParams</code> API provides read and write access to the query of a\n<code>URL</code>. The <code>URLSearchParams</code> class can also be used standalone with one of the\nfour following constructors.\nThe <code>URLSearchParams</code> class is also available on the global object.</p>\n<p>The WHATWG <code>URLSearchParams</code> interface and the <a href=\"querystring.html\"><code>querystring</code></a> module have\nsimilar purpose, but the purpose of the <a href=\"querystring.html\"><code>querystring</code></a> module is more\ngeneral, as it allows the customization of delimiter characters (<code>&#x26;</code> and <code>=</code>).\nOn the other hand, this API is designed purely for URL query strings.</p>\n<pre><code class=\"language-js\">const myURL = new URL('https://example.org/?abc=123');\nconsole.log(myURL.searchParams.get('abc'));\n// Prints 123\n\nmyURL.searchParams.append('abc', 'xyz');\nconsole.log(myURL.href);\n// Prints https://example.org/?abc=123&#x26;abc=xyz\n\nmyURL.searchParams.delete('abc');\nmyURL.searchParams.set('a', 'b');\nconsole.log(myURL.href);\n// Prints https://example.org/?a=b\n\nconst newSearchParams = new URLSearchParams(myURL.searchParams);\n// The above is equivalent to\n// const newSearchParams = new URLSearchParams(myURL.search);\n\nnewSearchParams.append('a', 'c');\nconsole.log(myURL.href);\n// Prints https://example.org/?a=b\nconsole.log(newSearchParams.toString());\n// Prints a=b&#x26;a=c\n\n// newSearchParams.toString() is implicitly called\nmyURL.search = newSearchParams;\nconsole.log(myURL.href);\n// Prints https://example.org/?a=b&#x26;a=c\nnewSearchParams.delete('a');\nconsole.log(myURL.href);\n// Prints https://example.org/?a=b&#x26;a=c\n</code></pre>",
              "methods": [
                {
                  "textRaw": "`urlSearchParams.append(name, value)`",
                  "type": "method",
                  "name": "append",
                  "signatures": [
                    {
                      "params": [
                        {
                          "textRaw": "`name` {string}",
                          "name": "name",
                          "type": "string"
                        },
                        {
                          "textRaw": "`value` {string}",
                          "name": "value",
                          "type": "string"
                        }
                      ]
                    }
                  ],
                  "desc": "<p>Append a new name-value pair to the query string.</p>"
                },
                {
                  "textRaw": "`urlSearchParams.delete(name)`",
                  "type": "method",
                  "name": "delete",
                  "signatures": [
                    {
                      "params": [
                        {
                          "textRaw": "`name` {string}",
                          "name": "name",
                          "type": "string"
                        }
                      ]
                    }
                  ],
                  "desc": "<p>Remove all name-value pairs whose name is <code>name</code>.</p>"
                },
                {
                  "textRaw": "`urlSearchParams.entries()`",
                  "type": "method",
                  "name": "entries",
                  "signatures": [
                    {
                      "return": {
                        "textRaw": "Returns: {Iterator}",
                        "name": "return",
                        "type": "Iterator"
                      },
                      "params": []
                    }
                  ],
                  "desc": "<p>Returns an ES6 <code>Iterator</code> over each of the name-value pairs in the query.\nEach item of the iterator is a JavaScript <code>Array</code>. The first item of the <code>Array</code>\nis the <code>name</code>, the second item of the <code>Array</code> is the <code>value</code>.</p>\n<p>Alias for 