Socket
Socket
Sign inDemoInstall

ufo

Package Overview
Dependencies
Maintainers
1
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ufo

URL utils for humans


Version published
Weekly downloads
7.9M
increased by5.66%
Maintainers
1
Weekly downloads
 
Created

Package description

What is ufo?

The ufo npm package provides utilities for URL formatting and normalization. It helps in parsing, resolving, and normalizing URLs, as well as providing utilities for handling query parameters.

What are ufo's main functionalities?

Parsing and normalizing URLs

This feature allows you to normalize URLs, which includes removing the default port for HTTP and HTTPS, decoding unnecessary percent-encoded characters, and removing duplicate slashes.

const { normalizeURL } = require('ufo');
const normalizedUrl = normalizeURL('http://example.com:80/path/');

Handling query parameters

This feature enables you to easily add query parameters to a URL, which can be useful for constructing URLs with dynamic query strings.

const { withQuery } = require('ufo');
const urlWithQuery = withQuery('http://example.com', { query: 'value' });

Joining URLs

This feature is used to concatenate URL parts safely, ensuring that there are no duplicate slashes and that the query string is properly appended.

const { joinURL } = require('ufo');
const fullUrl = joinURL('http://example.com', '/path', '?query=value');

Other packages similar to ufo

Changelog

Source

v1.3.2

compare changes

🩹 Fixes

  • parseURL: Parse protocol case-insensitively (#188)
  • Respect fragment in trailing slash utils (#175)

🏡 Chore

❤️ Contributors

Readme

Source

👽 ufo

npm version npm downloads bundle Codecov License JSDocs

URL utils for humans.

Install

Install using npm or your favourite package manager:

npm i ufo

Import:

// CommonJS
const { normalizeURL, joinURL } = require('ufo')

// ESM
import { normalizeURL, joinURL } from 'ufo'

// Deno
import { parseURL } from 'https://unpkg.com/ufo/dist/index.mjs'

Notice: You may need to transpile package and add URL polyfill for legacy environments

Usage

normalizeURL

  • Ensures URL is properly encoded
  • Ensures pathname starts with slash
  • Preserves protocol/host if provided
normalizeURL('test?query=123 123#hash, test')
// test?query=123%20123#hash,%20test

normalizeURL('http://localhost:3000')
// http://localhost:3000/

joinURL

joinURL('a', '/b', '/c')
// a/b/c

resolveURL

resolveURL('http://foo.com/foo?test=123#token', 'bar', 'baz')
// http://foo.com/foo/bar/baz?test=123#token

parseURL

parseURL('http://foo.com/foo?test=123#token')
// { protocol: 'http:', auth: '', host: 'foo.com', pathname: '/foo', search: '?test=123', hash: '#token' }

parseURL('foo.com/foo?test=123#token')
// { pathname: 'foo.com/foo', search: '?test=123', hash: '#token' }

parseURL('foo.com/foo?test=123#token', 'https://')
// { protocol: 'https:', auth: '', host: 'foo.com', pathname: '/foo', search: '?test=123', hash: '#token' }

stringifyParsedURL

const obj = parseURL('http://foo.com/foo?test=123#token')
obj.host = 'bar.com'

stringifyParsedURL(obj)
// http://bar.com/foo?test=123#token

withQuery

withQuery('/foo?page=a', { token: 'secret' })
// /foo?page=a&token=secret

getQuery

getQuery('http://foo.com/foo?test=123&unicode=%E5%A5%BD')
// { test: '123', unicode: '好' }

parseFilename

// Result: filename.ext
parseFilename('http://example.com/path/to/filename.ext')

// Result: undefined
parseFilename('/path/to/.hidden-file', { strict: true })

$URL

Implementing URL interface with improvements:

  • Supporting schemeless and hostless URLs
  • Supporting relative URLs
  • Preserving trailing-slash status
  • Decoded and mutable class properties (protocol, host, auth, pathname, query, hash)
  • Consistent URL parser independent of environment
  • Consistent encoding independent of environment
  • Punycode support for host encoding
new $URL('http://localhost:3000/hello?world=true')
// { protocol: 'http:', host: 'localhost:3000', auth: '', pathname: '/hello', query: { world: 'true' }, hash: '' }

withTrailingSlash

Ensures url ends with a trailing slash.

withTrailingSlash('/foo')
// /foo/

Set the second option to true to support query parameters:

withTrailingSlash('/path?query=true', true)
// /path/?query=true

withoutTrailingSlash

Ensures url does not ends with a trailing slash.

withoutTrailingSlash('/foo/')
// /foo

Set the second option to true to support query parameters:

withoutTrailingSlash('/path/?query=true', true)
// /path?query=true

cleanDoubleSlashes

Ensures url does not have double slash (except for protocol).

cleanDoubleSlashes('//foo//bar//')
// /foo/bar/

cleanDoubleSlashes('http://example.com/analyze//http://localhost:3000//')
// http://example.com/analyze/http://localhost:3000/

isSamePath

Check two paths are equal or not. Trailing slash and encoding are normalized before comparison.

isSamePath('/foo', '/foo/')
// true

isRelative

Check if a path starts with ./ or ../.

isRelative('./foo')
// true

withHttp

Ensures url protocol is http

withHttp('https://example.com')
// http://example.com

withHttps

Ensures url protocol is https

withHttps('http://example.com')
// https://example.com

withProtocol

Changes url protocol passed as second argument

withProtocol('http://example.com', 'ftp://')
// ftp://example.com

withoutProtocol

Removes url protocol

withoutProtocol('http://example.com')
// example.com

isEqual

Compare two URLs regardless of their slash condition or encoding:

isEqual('/foo', 'foo')
// true
isEqual('foo/', 'foo')
// true
isEqual('/foo bar', '/foo%20bar')
// true

// Strict compare
isEqual('/foo', 'foo', { leadingSlash: true })
// false
isEqual('foo/', 'foo', { trailingSlash: true })
// false
isEqual('/foo bar', '/foo%20bar', { encoding: true })
// false

License

MIT

Special thanks to Eduardo San Martin Morote (posva) for encoding utilities

FAQs

Package last updated on 15 Nov 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc