{"_id":"@cjser/normalize-url__v7_2_0","name":"@cjser/normalize-url__v7_2_0","dist-tags":{"latest":"7.2.0-cjser.2"},"versions":{"7.2.0-cjser.2":{"name":"@cjser/normalize-url__v7_2_0","version":"7.2.0-cjser.2","description":"Normalize a URL","license":"MIT","repository":{"type":"git","url":"https://code.moenext.com/3rdeye/cjser.git"},"funding":"https://github.com/sponsors/sindresorhus","author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"https://sindresorhus.com"},"type":"module","exports":{"require":"./dist-cjser/index.cjs","default":"./index.js"},"engines":{"node":">=12.20"},"scripts":{"test":"xo && c8 ava && tsd"},"keywords":["normalize","url","uri","address","string","normalization","normalisation","query","querystring","simplify","strip","trim","canonical"],"devDependencies":{"ava":"^4.0.1","c8":"^7.11.0","tsd":"^0.19.1","xo":"^0.47.0"},"c8":{"reporter":["text","lcov"]},"main":"./dist-cjser/index.cjs","cjser":{"sourceVersion":"7.2.0","cjserVersion":2,"original":{"name":"normalize-url","version":"7.2.0","exports":"./index.js","repository":"sindresorhus/normalize-url","files":["index.js","index.d.ts"],"scripts":{"test":"xo && c8 ava && tsd"}}},"_id":"@cjser/normalize-url__v7_2_0@7.2.0-cjser.2","gitHead":"a4bef54d7d22d3d9a6b84528457938d84cd65fe7","_nodeVersion":"20.14.0","_npmVersion":"10.7.0","dist":{"integrity":"sha512-drdtj8Sg4JLxNnXGhThm9pyshgK8RtuQR23nl7xZk+oXE0Y6CrGdB1DbWONH678Q/8Eez0O81avq47RIDcpY1g==","shasum":"089648b5065fed30d81ce34255b9567f26cd3c42","tarball":"https://registry.npmjs.org/@cjser/normalize-url__v7_2_0/-/normalize-url__v7_2_0-7.2.0-cjser.2.tgz","fileCount":6,"unpackedSize":33359,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFBFhHkZzCVsDalQjRqABqVfJDpxX7zrsw41rmZ6NeerAiEAj8anWowLujfC5CeidhqVmA/tDkadMxGpyjptvIcTNXI="}]},"_npmUser":{"name":"nanahira","email":"nanahira@momobako.com"},"directories":{},"maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/normalize-url__v7_2_0_7.2.0-cjser.2_1778159189051_0.39513284231856005"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-07T13:06:28.914Z","7.2.0-cjser.2":"2026-05-07T13:06:29.256Z","modified":"2026-05-07T13:06:29.479Z"},"maintainers":[{"name":"nanahira","email":"nanahira@momobako.com"}],"description":"Normalize a URL","keywords":["normalize","url","uri","address","string","normalization","normalisation","query","querystring","simplify","strip","trim","canonical"],"repository":{"type":"git","url":"https://code.moenext.com/3rdeye/cjser.git"},"author":{"name":"Sindre Sorhus","email":"sindresorhus@gmail.com","url":"https://sindresorhus.com"},"license":"MIT","readme":"# normalize-url [![Coverage Status](https://codecov.io/gh/sindresorhus/normalize-url/branch/main/graph/badge.svg)](https://codecov.io/gh/sindresorhus/normalize-url)\n\n> [Normalize](https://en.wikipedia.org/wiki/URL_normalization) a URL\n\nUseful when you need to display, store, deduplicate, sort, compare, etc, URLs.\n\n**Note:** This package does **not** do URL sanitization. [Garbage in, garbage out.](https://en.wikipedia.org/wiki/Garbage_in,_garbage_out) If you use this in a server context and accept URLs as user input, it's up to you to protect against invalid URLs, [path traversal attacks](https://owasp.org/www-community/attacks/Path_Traversal), etc.\n\n## Install\n\n```sh\nnpm install normalize-url\n```\n\n*If you need Safari support, use version 4: `npm i normalize-url@4`*\n\n## Usage\n\n```js\nimport normalizeUrl from 'normalize-url';\n\nnormalizeUrl('sindresorhus.com');\n//=> 'http://sindresorhus.com'\n\nnormalizeUrl('//www.sindresorhus.com:80/../baz?b=bar&a=foo');\n//=> 'http://sindresorhus.com/baz?a=foo&b=bar'\n```\n\n## API\n\n### normalizeUrl(url, options?)\n\n#### url\n\nType: `string`\n\nURL to normalize, including [data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs).\n\n#### options\n\nType: `object`\n\n##### defaultProtocol\n\nType: `string`\\\nDefault: `http:`\\\nValues: `'https:' | 'http:'`\n\n##### normalizeProtocol\n\nType: `boolean`\\\nDefault: `true`\n\nPrepend `defaultProtocol` to the URL if it's protocol-relative.\n\n```js\nnormalizeUrl('//sindresorhus.com');\n//=> 'http://sindresorhus.com'\n\nnormalizeUrl('//sindresorhus.com', {normalizeProtocol: false});\n//=> '//sindresorhus.com'\n```\n\n##### forceHttp\n\nType: `boolean`\\\nDefault: `false`\n\nNormalize `https:` to `http:`.\n\n```js\nnormalizeUrl('https://sindresorhus.com');\n//=> 'https://sindresorhus.com'\n\nnormalizeUrl('https://sindresorhus.com', {forceHttp: true});\n//=> 'http://sindresorhus.com'\n```\n\n##### forceHttps\n\nType: `boolean`\\\nDefault: `false`\n\nNormalize `http:` to `https:`.\n\n```js\nnormalizeUrl('http://sindresorhus.com');\n//=> 'http://sindresorhus.com'\n\nnormalizeUrl('http://sindresorhus.com', {forceHttps: true});\n//=> 'https://sindresorhus.com'\n```\n\nThis option can't be used with the `forceHttp` option at the same time.\n\n##### stripAuthentication\n\nType: `boolean`\\\nDefault: `true`\n\nStrip the [authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) part of the URL.\n\n```js\nnormalizeUrl('user:password@sindresorhus.com');\n//=> 'https://sindresorhus.com'\n\nnormalizeUrl('user:password@sindresorhus.com', {stripAuthentication: false});\n//=> 'https://user:password@sindresorhus.com'\n```\n\n##### stripHash\n\nType: `boolean`\\\nDefault: `false`\n\nStrip the hash part of the URL.\n\n```js\nnormalizeUrl('sindresorhus.com/about.html#contact');\n//=> 'http://sindresorhus.com/about.html#contact'\n\nnormalizeUrl('sindresorhus.com/about.html#contact', {stripHash: true});\n//=> 'http://sindresorhus.com/about.html'\n```\n\n##### stripProtocol\n\nType: `boolean`\\\nDefault: `false`\n\nRemove the protocol from the URL: `http://sindresorhus.com` → `sindresorhus.com`.\n\nIt will only remove `https://` and `http://` protocols.\n\n```js\nnormalizeUrl('https://sindresorhus.com');\n//=> 'https://sindresorhus.com'\n\nnormalizeUrl('https://sindresorhus.com', {stripProtocol: true});\n//=> 'sindresorhus.com'\n```\n\n##### stripTextFragment\n\nType: `boolean`\\\nDefault: `true`\n\nStrip the [text fragment](https://web.dev/text-fragments/) part of the URL.\n\n**Note:** The text fragment will always be removed if the `stripHash` option is set to `true`, as the hash contains the text fragment.\n\n```js\nnormalizeUrl('http://sindresorhus.com/about.html#:~:text=hello');\n//=> 'http://sindresorhus.com/about.html#'\n\nnormalizeUrl('http://sindresorhus.com/about.html#section:~:text=hello');\n//=> 'http://sindresorhus.com/about.html#section'\n\nnormalizeUrl('http://sindresorhus.com/about.html#:~:text=hello', {stripTextFragment: false});\n//=> 'http://sindresorhus.com/about.html#:~:text=hello'\n\nnormalizeUrl('http://sindresorhus.com/about.html#section:~:text=hello', {stripTextFragment: false});\n//=> 'http://sindresorhus.com/about.html#section:~:text=hello'\n```\n\n##### stripWWW\n\nType: `boolean`\\\nDefault: `true`\n\nRemove `www.` from the URL.\n\n```js\nnormalizeUrl('http://www.sindresorhus.com');\n//=> 'http://sindresorhus.com'\n\nnormalizeUrl('http://www.sindresorhus.com', {stripWWW: false});\n//=> 'http://www.sindresorhus.com'\n```\n\n##### removeQueryParameters\n\nType: `Array<RegExp | string> | boolean`\\\nDefault: `[/^utm_\\w+/i]`\n\nRemove query parameters that matches any of the provided strings or regexes.\n\n```js\nnormalizeUrl('www.sindresorhus.com?foo=bar&ref=test_ref', {\n\tremoveQueryParameters: ['ref']\n});\n//=> 'http://sindresorhus.com/?foo=bar'\n```\n\nIf a boolean is provided, `true` will remove all the query parameters.\n\n```js\nnormalizeUrl('www.sindresorhus.com?foo=bar', {\n\tremoveQueryParameters: true\n});\n//=> 'http://sindresorhus.com'\n```\n\n`false` will not remove any query parameter.\n\n```js\nnormalizeUrl('www.sindresorhus.com?foo=bar&utm_medium=test&ref=test_ref', {\n\tremoveQueryParameters: false\n});\n//=> 'http://www.sindresorhus.com/?foo=bar&ref=test_ref&utm_medium=test'\n```\n\n##### keepQueryParameters\n\nType: `Array<RegExp | string>`\\\nDefault: `undefined`\n\nKeeps only query parameters that matches any of the provided strings or regexes.\n\n**Note:** It overrides the `removeQueryParameters` option.\n\n```js\nnormalizeUrl('https://sindresorhus.com?foo=bar&ref=unicorn', {\n\tkeepQueryParameters: ['ref']\n});\n//=> 'https://sindresorhus.com/?ref=unicorn'\n```\n\n##### removeTrailingSlash\n\nType: `boolean`\\\nDefault: `true`\n\nRemove trailing slash.\n\n**Note:** Trailing slash is always removed if the URL doesn't have a pathname unless the `removeSingleSlash` option is set to `false`.\n\n```js\nnormalizeUrl('http://sindresorhus.com/redirect/');\n//=> 'http://sindresorhus.com/redirect'\n\nnormalizeUrl('http://sindresorhus.com/redirect/', {removeTrailingSlash: false});\n//=> 'http://sindresorhus.com/redirect/'\n\nnormalizeUrl('http://sindresorhus.com/', {removeTrailingSlash: false});\n//=> 'http://sindresorhus.com'\n```\n\n##### removeSingleSlash\n\nType: `boolean`\\\nDefault: `true`\n\nRemove a sole `/` pathname in the output. This option is independent of `removeTrailingSlash`.\n\n```js\nnormalizeUrl('https://sindresorhus.com/');\n//=> 'https://sindresorhus.com'\n\nnormalizeUrl('https://sindresorhus.com/', {removeSingleSlash: false});\n//=> 'https://sindresorhus.com/'\n```\n\n##### removeDirectoryIndex\n\nType: `boolean | Array<RegExp | string>`\\\nDefault: `false`\n\nRemoves the default directory index file from path that matches any of the provided strings or regexes. When `true`, the regex `/^index\\.[a-z]+$/` is used.\n\n```js\nnormalizeUrl('www.sindresorhus.com/foo/default.php', {\n\tremoveDirectoryIndex: [/^default\\.[a-z]+$/]\n});\n//=> 'http://sindresorhus.com/foo'\n```\n\n##### removeExplicitPort\n\nType: `boolean`\\\nDefault: `false`\n\nRemoves an explicit port number from the URL.\n\nPort 443 is always removed from HTTPS URLs and 80 is always removed from HTTP URLs regardless of this option.\n\n```js\nnormalizeUrl('sindresorhus.com:123', {\n\tremoveExplicitPort: true\n});\n//=> 'http://sindresorhus.com'\n```\n\n##### sortQueryParameters\n\nType: `boolean`\\\nDefault: `true`\n\nSorts the query parameters alphabetically by key.\n\n```js\nnormalizeUrl('www.sindresorhus.com?b=two&a=one&c=three', {\n\tsortQueryParameters: false\n});\n//=> 'http://sindresorhus.com/?b=two&a=one&c=three'\n```\n\n## Related\n\n- [compare-urls](https://github.com/sindresorhus/compare-urls) - Compare URLs by first normalizing them\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-normalize-url?utm_source=npm-normalize-url&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n\n## cjser\n\nThis package is a CommonJS-compatible build generated by cjser for projects that still need `require()` support. The source version matches the original npm package version, with a cjser prerelease suffix for this generated build.\nOriginal repository: https://github.com/sindresorhus/normalize-url\n","readmeFilename":"readme.md","_rev":"1-348d8fb050b32ef27a4f494e372f18da"}