Skip to content
Vitaly Tomilov edited this page Jul 13, 2018 · 75 revisions

The URL spec extends on RFC 3986, by adding the following:

  • Multiple-hosts support, in the form of hostA:123,hostB:456,hostC:789
  • Supports Unicode symbols within the protocol section

optional format

The connection-string protocol is ultimately flexible, and allows everything to be optional.

See from examples below how various parameters can be passed in, while skipping others.

protocol only

ends with ://

parse('abc://'); //=> {protocol: 'abc'}
parse('my%20protocol://'); //=> {protocol: 'my protocol'}

protocol + hostname + port

parse('abc://server:12345');
/* => {
    protocol: 'abc',
    hosts: [{name: 'server', port: 12345}]
}*/

hostname + port

parse('server:12345');
/* => {
    hosts: [{name: 'server', port: 12345}]
}*/

hostname only

parse('server');
/* => {
    hosts: [{name: 'server'}]
}*/

port only

starts with :, followed by digits

parse(':12345');
/* => {
    hosts: [{port: 12345}]
}*/

user only

ends with @

parse('username@'); //=> {user: 'username'}

password only

starts with : and ends with @

parse(':pass123@'); //=> {password: 'pass123'}

segments only

starts with /

parse('/segment1/segment2'); //=> {segments: ['segment1', 'segment2']}

parameters only

starts with ?

parse('?param1=value1&param2=value2');
/* => {
    params: {
        param1: value1,
        param2: value2
    }
}*/

protocol + segments

parse('abc:///segment1/segment2');
/* => {
    protocol: 'abc',
    segments: ['segment1', 'segment2']
}*/

protocol + parameters

parse('abc://?param1=one&param2=two');
/* => {
    protocol: 'abc',
    params: {
        param1: 'one',
        param2: 'two'
    }
}*/

The list of examples above shows only the most interesting cases, but you can combine them as you want, and the parser will recognize all the right parameters.

Clone this wiki locally