proper-url-join

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');
urlJoin('/foo/', '/bar/');
urlJoin('foo', '', 'bar');
urlJoin('foo', undefined, 'bar');
urlJoin('foo', null, 'bar');
urlJoin('foo', 'bar', { leadingSlash: false });
urlJoin('foo', 'bar', { trailingSlash: true });
urlJoin('foo', 'bar', { leadingSlash: false, trailingSlash: true });
urlJoin('http://google.com', 'foo');
urlJoin('//google.com', 'foo', { protocolRelative: true });
urlJoin('foo', 'bar?queryString');
urlJoin('foo', 'bar?queryString', { trailingSlash: true });
urlJoin('foo', { query: { biz: 'buz', foo: 'bar' } });
urlJoin('foo', 'bar?queryString', { query: { biz: 'buz', foo: 'bar' } });
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