yurl
v4.0.1
Published
A URL manipulation library that offers support for daisy chaining, pathname resolution and query args manipulation.
Downloads
245
Maintainers
Readme
YURL
A daisy-chaining URL manipulation library. As of v4.0.0, the library has been ported to TypeScript.
Usage
Modern versions of Node.js ship with a native implementation of the
WHATWG URL interface in the form of the URL
class exported by the
url module.
yurl
builds upon such interface by implementing dedicated modifier methods
for each URL
property, adding a few bits of useful logic here and there.
Example
import { YURL } from 'yurl';
new YURL('http://example.com/foo/bar?a=24')
.pathname('..', 'baz') // Resolves pathname to /foo/baz
.port(8888) // Changes port to 8888
.query({a: null, b: 24}) // Drops param "a", sets param "b"
.format() // Serialization
// ==> http://example.com:8888/foo/baz?b=24
Installation
npm install yurl
import { YURL } from 'yurl';
const { YURL } = require('yurl');
Parts
The backing instance of the URL
class is available through the parts
property.
const example = new YURL('http://example.com');
example.parts.hostname === 'example.com'; // true
example.parts.protocol === 'http:'; // true
Cloning
The clone()
method returns a deep copy of the current YURL
instance. All other methods are modifier methods and alter the instance they are called upon.
Pathname resolution
The pathname()
method supports trailing slashes and both absolute and relative pathnames.
const example = new YURL('http://example.com');
example.parts.pathname === '/'; // true
example.pathname('/foo/bar');
example.parts.pathname === '/foo/bar'; // true
example.pathname('../baz');
example.parts.pathname === '/baz'; // true
example.pathname('/baz/');
example.parts.pathname === '/baz/'; // true
Query params
Query params are set and removed via the .query()
method.
const example = new YURL('http://example.com');
example.query('answer', '42');
example.parts.query.answer[0] === '42'; // true
example.format(); // ?answer=42
example.query({answer: null, hello: 'world'});
example.parts.query.answer; // undefined
example.parts.query.hello[0] === 'world'; // true
example.format(); // ?hello=world
example.query('pets', ['cats', 'dogs']);
example.parts.query.pets[0] === 'cats'; // true
example.parts.query.pets[1] === 'dogs'; // true
example.format(); // ?pets=cats&pets=dogs
example.query(); // removes all params
Test
npm test
License
MIT