1893 lines
44 KiB
JavaScript
1893 lines
44 KiB
JavaScript
|
/*jshint unused:false, scripturl:true */
|
||
|
var urls = [{
|
||
|
name: 'scheme and domain',
|
||
|
url: 'http://www.example.org',
|
||
|
_url: 'http://www.example.org/',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'www.example.org',
|
||
|
port: null,
|
||
|
path: '/',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/',
|
||
|
authority: 'www.example.org',
|
||
|
origin: 'http://www.example.org',
|
||
|
userinfo: '',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '', // location.hash style
|
||
|
search: '', // location.search style
|
||
|
host: 'www.example.org',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'second level domain',
|
||
|
url: 'http://www.example.co.uk',
|
||
|
_url: 'http://www.example.co.uk/',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'www.example.co.uk',
|
||
|
port: null,
|
||
|
path: '/',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/',
|
||
|
authority: 'www.example.co.uk',
|
||
|
origin: 'http://www.example.co.uk',
|
||
|
userinfo: '',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.co.uk',
|
||
|
tld: 'co.uk',
|
||
|
directory: '/',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '', // location.hash style
|
||
|
search: '', // location.search style
|
||
|
host: 'www.example.co.uk',
|
||
|
hostname: 'www.example.co.uk'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: true,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
},{
|
||
|
name: 'qualified HTTP',
|
||
|
url: 'http://www.example.org/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'www.example.org',
|
||
|
port: null,
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'www.example.org',
|
||
|
origin: 'http://www.example.org',
|
||
|
userinfo: '',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: 'www.example.org',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'funky suffix',
|
||
|
url: 'http://www.example.org/some/directory/file.html-is-awesome?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'www.example.org',
|
||
|
port: null,
|
||
|
path: '/some/directory/file.html-is-awesome',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/some/directory/file.html-is-awesome',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html-is-awesome?query=string#fragment',
|
||
|
authority: 'www.example.org',
|
||
|
origin: 'http://www.example.org',
|
||
|
userinfo: '',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html-is-awesome',
|
||
|
suffix: '',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: 'www.example.org',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'complete URL',
|
||
|
url: 'scheme://user:pass@www.example.org:123/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'scheme',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
hostname: 'www.example.org',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'scheme',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'user:pass@www.example.org:123',
|
||
|
origin: 'scheme://user:pass@www.example.org:123',
|
||
|
userinfo: 'user:pass',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: 'www.example.org:123',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'badly encoded userinfo',
|
||
|
url: 'scheme://user:pass:word@www.example.org/',
|
||
|
_url: 'scheme://user:pass%3Aword@www.example.org/',
|
||
|
parts: {
|
||
|
protocol: 'scheme',
|
||
|
username: 'user',
|
||
|
password: 'pass:word',
|
||
|
hostname: 'www.example.org',
|
||
|
port: null,
|
||
|
path: '/',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'scheme',
|
||
|
username: 'user',
|
||
|
password: 'pass:word',
|
||
|
port: '',
|
||
|
path: '/',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/',
|
||
|
authority: 'user:pass%3Aword@www.example.org',
|
||
|
origin: 'scheme://user:pass%3Aword@www.example.org',
|
||
|
userinfo: 'user:pass%3Aword',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: 'www.example.org',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'empty username with non-empty password',
|
||
|
url: 'scheme://:password@www.example.org/',
|
||
|
_url: 'scheme://:password@www.example.org/',
|
||
|
parts: {
|
||
|
protocol: 'scheme',
|
||
|
username: null,
|
||
|
password: 'password',
|
||
|
hostname: 'www.example.org',
|
||
|
port: null,
|
||
|
path: '/',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'scheme',
|
||
|
username: '',
|
||
|
password: 'password',
|
||
|
port: '',
|
||
|
path: '/',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/',
|
||
|
authority: ':password@www.example.org',
|
||
|
origin: 'scheme://:password@www.example.org',
|
||
|
userinfo: ':password',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: 'www.example.org',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'malformed email in userinfo',
|
||
|
url: 'scheme://john@doe.com:pass:word@www.example.org/',
|
||
|
_url: 'scheme://john%40doe.com:pass%3Aword@www.example.org/',
|
||
|
parts: {
|
||
|
protocol: 'scheme',
|
||
|
username: 'john@doe.com',
|
||
|
password: 'pass:word',
|
||
|
hostname: 'www.example.org',
|
||
|
port: null,
|
||
|
path: '/',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'scheme',
|
||
|
username: 'john@doe.com',
|
||
|
password: 'pass:word',
|
||
|
port: '',
|
||
|
path: '/',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/',
|
||
|
authority: 'john%40doe.com:pass%3Aword@www.example.org',
|
||
|
origin: 'scheme://john%40doe.com:pass%3Aword@www.example.org',
|
||
|
userinfo: 'john%40doe.com:pass%3Aword',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: 'www.example.org',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'host-relative: URL',
|
||
|
url: '/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: null,
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: '',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: true,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'path-relative: URL',
|
||
|
url: '../some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: null,
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: '../some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: '',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '../some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '../some/directory/file.html?query=string#fragment',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '../some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: true,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'missing scheme',
|
||
|
url: 'user:pass@www.example.org:123/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'user',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: 'pass@www.example.org:123/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'user',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: 'pass@www.example.org:123/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: 'pass@www.example.org:123/some/directory/file.html?query=string#fragment',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: true,
|
||
|
url: false,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'ignoring scheme',
|
||
|
url: '://user:pass@example.org:123/some/directory/file.html?query=string#fragment',
|
||
|
_url: '//user:pass@example.org:123/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: null,
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
hostname: 'example.org',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: '',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'user:pass@example.org:123',
|
||
|
origin: 'user:pass@example.org:123',
|
||
|
userinfo: 'user:pass',
|
||
|
subdomain: '',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: 'example.org:123',
|
||
|
hostname: 'example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'scheme-relative URL',
|
||
|
url: '//www.example.org/',
|
||
|
parts: {
|
||
|
protocol: null,
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'www.example.org',
|
||
|
port: null,
|
||
|
path: '/',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: '',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/',
|
||
|
authority: 'www.example.org',
|
||
|
origin: 'www.example.org',
|
||
|
userinfo: '',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: 'www.example.org',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv4',
|
||
|
url: 'http://user:pass@123.123.123.123:123/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
hostname: '123.123.123.123',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'user:pass@123.123.123.123:123',
|
||
|
origin: 'http://user:pass@123.123.123.123:123',
|
||
|
userinfo: 'user:pass',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: '123.123.123.123:123',
|
||
|
hostname: '123.123.123.123'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: true,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6',
|
||
|
url: 'http://user:pass@fe80:0000:0000:0000:0204:61ff:fe9d:f156/some/directory/file.html?query=string#fragment',
|
||
|
_url: 'http://user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
hostname: 'fe80:0000:0000:0000:0204:61ff:fe9d:f156',
|
||
|
port: null,
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
port: '',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]',
|
||
|
origin: 'http://user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]',
|
||
|
userinfo: 'user:pass',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: '[fe80:0000:0000:0000:0204:61ff:fe9d:f156]',
|
||
|
hostname: 'fe80:0000:0000:0000:0204:61ff:fe9d:f156'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6 with port',
|
||
|
url: 'http://user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]:123/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
hostname: 'fe80:0000:0000:0000:0204:61ff:fe9d:f156',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]:123',
|
||
|
origin: 'http://user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]:123',
|
||
|
userinfo: 'user:pass',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: '[fe80:0000:0000:0000:0204:61ff:fe9d:f156]:123',
|
||
|
hostname: 'fe80:0000:0000:0000:0204:61ff:fe9d:f156'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6 brackets, port, file.ext',
|
||
|
url: 'http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
|
||
|
port: '80',
|
||
|
path: '/index.html',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '80',
|
||
|
path: '/index.html',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/index.html',
|
||
|
authority: '[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80',
|
||
|
origin: 'http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/',
|
||
|
filename: 'index.html',
|
||
|
suffix: 'html',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80',
|
||
|
hostname: 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6 brackets, file.ext',
|
||
|
url: 'http://[1080:0:0:0:8:800:200C:417A]/index.html',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: '1080:0:0:0:8:800:200C:417A',
|
||
|
port: null,
|
||
|
path: '/index.html',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/index.html',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/index.html',
|
||
|
authority: '[1080:0:0:0:8:800:200C:417A]',
|
||
|
origin: 'http://[1080:0:0:0:8:800:200C:417A]',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/',
|
||
|
filename: 'index.html',
|
||
|
suffix: 'html',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '[1080:0:0:0:8:800:200C:417A]',
|
||
|
hostname: '1080:0:0:0:8:800:200C:417A'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6 brackets ::1',
|
||
|
url: 'http://[3ffe:2a00:100:7031::1]',
|
||
|
_url: 'http://[3ffe:2a00:100:7031::1]/',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: '3ffe:2a00:100:7031::1',
|
||
|
port: null,
|
||
|
path: '/',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/',
|
||
|
authority: '[3ffe:2a00:100:7031::1]',
|
||
|
origin: 'http://[3ffe:2a00:100:7031::1]',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '[3ffe:2a00:100:7031::1]',
|
||
|
hostname: '3ffe:2a00:100:7031::1'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6 brackets, file',
|
||
|
url: 'http://[1080::8:800:200C:417A]/foo',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: '1080::8:800:200C:417A',
|
||
|
port: null,
|
||
|
path: '/foo',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/foo',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/foo',
|
||
|
authority: '[1080::8:800:200C:417A]',
|
||
|
origin: 'http://[1080::8:800:200C:417A]',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/',
|
||
|
filename: 'foo',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '[1080::8:800:200C:417A]',
|
||
|
hostname: '1080::8:800:200C:417A'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6 IPv4 brackets, path',
|
||
|
url: 'http://[::192.9.5.5]/ipng',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: '::192.9.5.5',
|
||
|
port: null,
|
||
|
path: '/ipng',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/ipng',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/ipng',
|
||
|
authority: '[::192.9.5.5]',
|
||
|
origin: 'http://[::192.9.5.5]',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/',
|
||
|
filename: 'ipng',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '[::192.9.5.5]',
|
||
|
hostname: '::192.9.5.5'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6 mask IPv4 brackets, port, file.ext',
|
||
|
url: 'http://[::FFFF:129.144.52.38]:80/index.html',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: '::FFFF:129.144.52.38',
|
||
|
port: '80',
|
||
|
path: '/index.html',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '80',
|
||
|
path: '/index.html',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/index.html',
|
||
|
authority: '[::FFFF:129.144.52.38]:80',
|
||
|
origin: 'http://[::FFFF:129.144.52.38]:80',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/',
|
||
|
filename: 'index.html',
|
||
|
suffix: 'html',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '[::FFFF:129.144.52.38]:80',
|
||
|
hostname: '::FFFF:129.144.52.38'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IPv6 brackets',
|
||
|
url: 'http://[2010:836B:4179::836B:4179]',
|
||
|
_url: 'http://[2010:836B:4179::836B:4179]/',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: '2010:836B:4179::836B:4179',
|
||
|
port: null,
|
||
|
path: '/',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/',
|
||
|
authority: '[2010:836B:4179::836B:4179]',
|
||
|
origin: 'http://[2010:836B:4179::836B:4179]',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '[2010:836B:4179::836B:4179]',
|
||
|
hostname: '2010:836B:4179::836B:4179'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: true,
|
||
|
ip4: false,
|
||
|
ip6: true,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IDN (punycode)',
|
||
|
url: 'http://user:pass@xn--exmple-cua.org:123/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
hostname: 'xn--exmple-cua.org',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'user:pass@xn--exmple-cua.org:123',
|
||
|
origin: 'http://user:pass@xn--exmple-cua.org:123',
|
||
|
userinfo: 'user:pass',
|
||
|
subdomain: '',
|
||
|
domain: 'xn--exmple-cua.org',
|
||
|
tld: 'org',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: 'xn--exmple-cua.org:123',
|
||
|
hostname: 'xn--exmple-cua.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: true
|
||
|
}
|
||
|
}, {
|
||
|
name: 'IDN',
|
||
|
url: 'http://user:pass@exämple.org:123/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
hostname: 'exämple.org',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: 'user',
|
||
|
password: 'pass',
|
||
|
port: '123',
|
||
|
path: '/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'user:pass@exämple.org:123',
|
||
|
origin: 'http://user:pass@exämple.org:123',
|
||
|
userinfo: 'user:pass',
|
||
|
subdomain: '',
|
||
|
domain: 'exämple.org',
|
||
|
tld: 'org',
|
||
|
directory: '/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: 'exämple.org:123',
|
||
|
hostname: 'exämple.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: true,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'file://',
|
||
|
url: 'file:///foo/bar/baz.html',
|
||
|
parts: {
|
||
|
protocol: 'file',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: '/foo/bar/baz.html',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'file',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/foo/bar/baz.html',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/foo/bar/baz.html',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/foo/bar',
|
||
|
filename: 'baz.html',
|
||
|
suffix: 'html',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: true,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'file://example.org:123',
|
||
|
url: 'file://example.org:123/foo/bar/baz.html',
|
||
|
parts: {
|
||
|
protocol: 'file',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'example.org',
|
||
|
port: '123',
|
||
|
path: '/foo/bar/baz.html',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'file',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '123',
|
||
|
path: '/foo/bar/baz.html',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/foo/bar/baz.html',
|
||
|
authority: 'example.org:123',
|
||
|
origin: 'file://example.org:123',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/foo/bar',
|
||
|
filename: 'baz.html',
|
||
|
suffix: 'html',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: 'example.org:123',
|
||
|
hostname: 'example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'file:// Windows-Drive-Letter',
|
||
|
url: 'file:///C:/WINDOWS/foo.txt',
|
||
|
parts: {
|
||
|
protocol: 'file',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: '/C:/WINDOWS/foo.txt',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'file',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/C:/WINDOWS/foo.txt',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/C:/WINDOWS/foo.txt',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/C:/WINDOWS',
|
||
|
filename: 'foo.txt',
|
||
|
suffix: 'txt',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: true,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'file://example.org/ Windows-Drive-Letter',
|
||
|
url: 'file://example.org/C:/WINDOWS/foo.txt',
|
||
|
parts: {
|
||
|
protocol: 'file',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'example.org',
|
||
|
port: null,
|
||
|
path: '/C:/WINDOWS/foo.txt',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'file',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/C:/WINDOWS/foo.txt',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/C:/WINDOWS/foo.txt',
|
||
|
authority: 'example.org',
|
||
|
origin: 'file://example.org',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/C:/WINDOWS',
|
||
|
filename: 'foo.txt',
|
||
|
suffix: 'txt',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: 'example.org',
|
||
|
hostname: 'example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'file://localhost/ Windows-Drive-Letter with pipe',
|
||
|
url: 'file://localhost/C|/WINDOWS/foo.txt',
|
||
|
parts: {
|
||
|
protocol: 'file',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'localhost',
|
||
|
port: null,
|
||
|
path: '/C|/WINDOWS/foo.txt',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'file',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/C|/WINDOWS/foo.txt',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/C|/WINDOWS/foo.txt',
|
||
|
authority: 'localhost',
|
||
|
origin: 'file://localhost',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: 'localhost',
|
||
|
tld: 'localhost',
|
||
|
directory: '/C|/WINDOWS',
|
||
|
filename: 'foo.txt',
|
||
|
suffix: 'txt',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: 'localhost',
|
||
|
hostname: 'localhost'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'Path containing @',
|
||
|
url: 'http://www.example.org/@foobar',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'www.example.org',
|
||
|
port: null,
|
||
|
path: '/@foobar',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/@foobar',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/@foobar',
|
||
|
authority: 'www.example.org',
|
||
|
origin: 'http://www.example.org',
|
||
|
userinfo: '',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/',
|
||
|
filename: '@foobar',
|
||
|
suffix: '',
|
||
|
hash: '', // location.hash style
|
||
|
search: '', // location.search style
|
||
|
host: 'www.example.org',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'mailto:',
|
||
|
url: 'mailto:hello@example.org?subject=hello',
|
||
|
_url: 'mailto:hello@example.org?subject=hello',
|
||
|
parts: {
|
||
|
protocol: 'mailto',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: 'hello@example.org',
|
||
|
query: 'subject=hello',
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'mailto',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: 'hello@example.org',
|
||
|
query: 'subject=hello',
|
||
|
fragment: '',
|
||
|
resource: 'hello@example.org?subject=hello',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '?subject=hello',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: true,
|
||
|
url: false,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'magnet:',
|
||
|
url: 'magnet:?xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
|
||
|
_url: 'magnet:?xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
|
||
|
parts: {
|
||
|
protocol: 'magnet',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: '',
|
||
|
query: 'xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'magnet',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '',
|
||
|
query: 'xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
|
||
|
fragment: '',
|
||
|
resource: '?xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '?xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: true,
|
||
|
url: false,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'javascript:',
|
||
|
url: 'javascript:alert("hello world");',
|
||
|
_url: 'javascript:alert("hello world");',
|
||
|
parts: {
|
||
|
protocol: 'javascript',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: 'alert("hello world");',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'javascript',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: 'alert("hello world");',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: 'alert("hello world");',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '',
|
||
|
filename: '',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: true,
|
||
|
url: false,
|
||
|
relative: false,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'colon in path',
|
||
|
url: 'http://en.wikipedia.org/wiki/Help:IPA',
|
||
|
_url: 'http://en.wikipedia.org/wiki/Help:IPA',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'en.wikipedia.org',
|
||
|
port: null,
|
||
|
path: '/wiki/Help:IPA',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/wiki/Help:IPA',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/wiki/Help:IPA',
|
||
|
authority: 'en.wikipedia.org',
|
||
|
origin: 'http://en.wikipedia.org',
|
||
|
userinfo: '',
|
||
|
subdomain: 'en',
|
||
|
domain: 'wikipedia.org',
|
||
|
tld: 'org',
|
||
|
directory: '/wiki',
|
||
|
filename: 'Help:IPA',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: 'en.wikipedia.org',
|
||
|
hostname: 'en.wikipedia.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'colon in path without protocol',
|
||
|
url: '/wiki/Help:IPA',
|
||
|
_url: '/wiki/Help:IPA',
|
||
|
parts: {
|
||
|
protocol: null,
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: '/wiki/Help:IPA',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: '',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/wiki/Help:IPA',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/wiki/Help:IPA',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/wiki',
|
||
|
filename: 'Help:IPA',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: true,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'colon dash dash in path without protocol',
|
||
|
url: '/foo/xy://bar',
|
||
|
_url: '/foo/xy://bar',
|
||
|
parts: {
|
||
|
protocol: null,
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: null,
|
||
|
port: null,
|
||
|
path: '/foo/xy://bar',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: '',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/foo/xy://bar',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/foo/xy://bar',
|
||
|
authority: '',
|
||
|
origin: '',
|
||
|
userinfo: '',
|
||
|
subdomain: '',
|
||
|
domain: '',
|
||
|
tld: '',
|
||
|
directory: '/foo/xy:/', // sanitized empty directory!
|
||
|
filename: 'bar',
|
||
|
suffix: '',
|
||
|
hash: '',
|
||
|
search: '',
|
||
|
host: '',
|
||
|
hostname: ''
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: true,
|
||
|
name: false,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'colon in path',
|
||
|
url: 'http://www.example.org:8080/hello:world',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'www.example.org',
|
||
|
port: '8080',
|
||
|
path: '/hello:world',
|
||
|
query: null,
|
||
|
fragment: null
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '8080',
|
||
|
path: '/hello:world',
|
||
|
query: '',
|
||
|
fragment: '',
|
||
|
resource: '/hello:world',
|
||
|
authority: 'www.example.org:8080',
|
||
|
origin: 'http://www.example.org:8080',
|
||
|
userinfo: '',
|
||
|
subdomain: 'www',
|
||
|
domain: 'example.org',
|
||
|
tld: 'org',
|
||
|
directory: '/',
|
||
|
filename: 'hello:world',
|
||
|
suffix: '',
|
||
|
hash: '', // location.hash style
|
||
|
search: '', // location.search style
|
||
|
host: 'www.example.org:8080',
|
||
|
hostname: 'www.example.org'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}, {
|
||
|
name: 'backslashes',
|
||
|
url: 'http://i.xss.com\\www.example.org/some/directory/file.html?query=string#fragment',
|
||
|
_url: 'http://i.xss.com/www.example.org/some/directory/file.html?query=string#fragment',
|
||
|
parts: {
|
||
|
protocol: 'http',
|
||
|
username: null,
|
||
|
password: null,
|
||
|
hostname: 'i.xss.com',
|
||
|
port: null,
|
||
|
path: '/www.example.org/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment'
|
||
|
},
|
||
|
accessors: {
|
||
|
protocol: 'http',
|
||
|
username: '',
|
||
|
password: '',
|
||
|
port: '',
|
||
|
path: '/www.example.org/some/directory/file.html',
|
||
|
query: 'query=string',
|
||
|
fragment: 'fragment',
|
||
|
resource: '/www.example.org/some/directory/file.html?query=string#fragment',
|
||
|
authority: 'i.xss.com',
|
||
|
origin: 'http://i.xss.com',
|
||
|
userinfo: '',
|
||
|
subdomain: 'i',
|
||
|
domain: 'xss.com',
|
||
|
tld: 'com',
|
||
|
directory: '/www.example.org/some/directory',
|
||
|
filename: 'file.html',
|
||
|
suffix: 'html',
|
||
|
hash: '#fragment',
|
||
|
search: '?query=string',
|
||
|
host: 'i.xss.com',
|
||
|
hostname: 'i.xss.com'
|
||
|
},
|
||
|
is: {
|
||
|
urn: false,
|
||
|
url: true,
|
||
|
relative: false,
|
||
|
name: true,
|
||
|
sld: false,
|
||
|
ip: false,
|
||
|
ip4: false,
|
||
|
ip6: false,
|
||
|
idn: false,
|
||
|
punycode: false
|
||
|
}
|
||
|
}
|
||
|
];
|
||
|
|