Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

proper-url-join

moxystudio138.1kMIT2.1.2TypeScript support: definitely-typed

Like path.join but for a URL

url, join, path, pathname, normalize

readme

proper-url-join

NPM version Downloads Build Status Coverage Status Dependency status Dev Dependency status

Like path.join but for a URL.

Installation

$ npm install proper-url-join

This library expects the host environment to be up-to-date or polyfilled with core-js or similar.

This library is written in ES9 and is using ES modules. You must compile the source code to support older browsers.

Motivation

There are a lot of packages that attempt to provide this functionality but they all have issues.
This package exists with the hope to do it right:

  • Consistent behavior
  • Support adding/removing leading and trailing slashes
  • Supports absolute URLs, e.g.: http//google.com
  • Supports protocol relative URLs, e.g.: //google.com
  • Supports query strings

Usage

import urlJoin from 'proper-url-join';

urlJoin('foo', 'bar'); // /foo/bar
urlJoin('/foo/', '/bar/'); // /foo/bar
urlJoin('foo', '', 'bar'); // /foo/bar
urlJoin('foo', undefined, 'bar'); // /foo/bar
urlJoin('foo', null, 'bar'); // /foo/bar

// With leading & trailing slash options
urlJoin('foo', 'bar', { leadingSlash: false }); // foo/bar
urlJoin('foo', 'bar', { trailingSlash: true }); // /foo/bar/
urlJoin('foo', 'bar', { leadingSlash: false, trailingSlash: true }); // foo/bar/

// Absolute URLs
urlJoin('http://google.com', 'foo'); // http://google.com/foo

// Protocol relative URLs
urlJoin('//google.com', 'foo', { protocolRelative: true }); // //google.com/foo

// With query string as an url part
urlJoin('foo', 'bar?queryString'); // /foo/bar?queryString
urlJoin('foo', 'bar?queryString', { trailingSlash: true }); // /foo/bar/?queryString

// With query string as an object
urlJoin('foo', { query: { biz: 'buz', foo: 'bar' } }); // /foo?biz=buz&foo=bar

// With both query string as an url part and an object
urlJoin('foo', 'bar?queryString', { query: { biz: 'buz', foo: 'bar' } }); // /foo/bar?biz=buz&foo=bar&queryString

options

leadingSlash

Type: boolean / string
Default: true

Adds or removes leading /. You may pass keep to preserve what the leading slash only if it's present on the input.

trailingSlash

Type: boolean / string
Default: false

Adds or removes trailing /. You may pass keep to preserve what the trailing slash only if it's present on the input.

protocolRelative

Type: boolean
Default: false

Enables support for protocol relative URLs

query

Type: object

Query string object that will be properly stringified and appended to the url. It will be merged with the query string in the url, if it exists.

queryOptions

Type: object

Options to be considered when stringifying the query

Tests

$ npm test
$ npm test -- --watch during development

License

MIT License

changelog

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

2.1.2 (2024-10-15)

2.1.1 (2019-11-03)

2.1.0 (2019-11-03)

Features

  • add support to keep leading and trailing slashes (#32) (6008865)

2.0.1 (2019-03-13)

2.0.0 (2019-03-13)

Features

  • compile to both cjs and es (16a284f)

1.2.0 (2018-01-16)

Features

1.1.2 (2017-12-07)

Bug Fixes

  • fix concatenation not allowing type number (180965b), closes #7

1.1.1 (2017-11-23)

Bug Fixes

  • fix readme installation instructions (ec932a2)

1.1.0 (2017-11-22)

Features

  • add support for absolute URLs and query strings. (0c82a59), closes #2 #3

1.0.0 (2017-11-22)

Features