A daisy-chaining URL manipulation library. As of v4.0.0, the library has been ported to TypeScript.
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.
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
npm install yurl
import { YURL } from 'yurl';
const { YURL } = require('yurl');
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
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.
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 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
npm test
MIT