Browse Source

Revert "url: support `path` for url.format"

This reverts commit d312b6d15c.

Reverted for breaking `npm install` with git+ssh URLs.

Conflicts:
    doc/api/url.markdown

Fixes: https://github.com/iojs/io.js/issues/295
PR-URL: https://github.com/iojs/io.js/pull/303
Reviewed-By: Rod Vagg <rod@vagg.org>
v1.8.0-commit
Ben Noordhuis 10 years ago
parent
commit
913addbff5
  1. 1
      doc/api/url.markdown
  2. 31
      lib/url.js
  3. 77
      test/parallel/test-url.js

1
doc/api/url.markdown

@ -98,7 +98,6 @@ Here's how the formatting process works:
* `port` will only be used if `host` is absent. * `port` will only be used if `host` is absent.
* `host` will be used in place of `hostname` and `port` * `host` will be used in place of `hostname` and `port`
* `pathname` is treated the same with or without the leading `/` (slash). * `pathname` is treated the same with or without the leading `/` (slash).
* `path` is treated the same with `pathname` but able to contain `query` as well.
* `query` (object; see `querystring`) will only be used if `search` is absent. * `query` (object; see `querystring`) will only be used if `search` is absent.
* `search` will be used in place of `query`. * `search` will be used in place of `query`.
* It is treated the same with or without the leading `?` (question mark). * It is treated the same with or without the leading `?` (question mark).

31
lib/url.js

@ -364,7 +364,7 @@ Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
} }
// finally, reconstruct the href based on what has been validated. // finally, reconstruct the href based on what has been validated.
this.href = this.format(parseQueryString); this.href = this.format();
return this; return this;
}; };
@ -379,7 +379,7 @@ function urlFormat(obj) {
return obj.format(); return obj.format();
} }
Url.prototype.format = function(parseQueryString) { Url.prototype.format = function() {
var auth = this.auth || ''; var auth = this.auth || '';
if (auth) { if (auth) {
auth = encodeURIComponent(auth); auth = encodeURIComponent(auth);
@ -391,26 +391,7 @@ Url.prototype.format = function(parseQueryString) {
pathname = this.pathname || '', pathname = this.pathname || '',
hash = this.hash || '', hash = this.hash || '',
host = false, host = false,
query = '', query = '';
search = '';
if (this.path) {
var qm = this.path.indexOf('?');
if (qm !== -1) {
query = this.path.slice(qm + 1);
search = '?' + query;
pathname = this.path.slice(0, qm);
} else {
if (parseQueryString) {
this.query = {};
this.search = '';
} else {
this.query = null;
this.search = null;
}
pathname = this.path;
}
}
if (this.host) { if (this.host) {
host = auth + this.host; host = auth + this.host;
@ -423,15 +404,13 @@ Url.prototype.format = function(parseQueryString) {
} }
} }
if (!query && if (this.query &&
this.query &&
util.isObject(this.query) && util.isObject(this.query) &&
Object.keys(this.query).length) { Object.keys(this.query).length) {
query = querystring.stringify(this.query); query = querystring.stringify(this.query);
} }
if (!search) var search = this.search || (query && ('?' + query)) || '';
search = this.search || (query && ('?' + query)) || '';
if (protocol && protocol.substr(-1) !== ':') protocol += ':'; if (protocol && protocol.substr(-1) !== ':') protocol += ':';

77
test/parallel/test-url.js

@ -1113,7 +1113,7 @@ var formatTests = {
// `#`,`?` in path // `#`,`?` in path
'/path/to/%%23%3F+=&.txt?foo=theA1#bar' : { '/path/to/%%23%3F+=&.txt?foo=theA1#bar' : {
href: '/path/to/%%23%3F+=&.txt?foo=theA1#bar', href : '/path/to/%%23%3F+=&.txt?foo=theA1#bar',
pathname: '/path/to/%#?+=&.txt', pathname: '/path/to/%#?+=&.txt',
query: { query: {
foo: 'theA1' foo: 'theA1'
@ -1123,7 +1123,7 @@ var formatTests = {
// `#`,`?` in path + `#` in query // `#`,`?` in path + `#` in query
'/path/to/%%23%3F+=&.txt?foo=the%231#bar' : { '/path/to/%%23%3F+=&.txt?foo=the%231#bar' : {
href: '/path/to/%%23%3F+=&.txt?foo=the%231#bar', href : '/path/to/%%23%3F+=&.txt?foo=the%231#bar',
pathname: '/path/to/%#?+=&.txt', pathname: '/path/to/%#?+=&.txt',
query: { query: {
foo: 'the#1' foo: 'the#1'
@ -1138,7 +1138,7 @@ var formatTests = {
hostname: 'ex.com', hostname: 'ex.com',
hash: '#frag', hash: '#frag',
search: '?abc=the#1?&foo=bar', search: '?abc=the#1?&foo=bar',
pathname: '/foo?100%m#r' pathname: '/foo?100%m#r',
}, },
// `?` and `#` in search only // `?` and `#` in search only
@ -1148,77 +1148,8 @@ var formatTests = {
hostname: 'ex.com', hostname: 'ex.com',
hash: '#frag', hash: '#frag',
search: '?abc=the#1?&foo=bar', search: '?abc=the#1?&foo=bar',
pathname: '/fooA100%mBr' pathname: '/fooA100%mBr',
},
// path
'http://github.com/joyent/node#js1': {
href: 'http://github.com/joyent/node#js1',
protocol: 'http:',
hostname: 'github.com',
hash: '#js1',
path: '/joyent/node'
},
// pathname vs. path, path wins
'http://github.com/joyent/node2#js1': {
href: 'http://github.com/joyent/node2#js1',
protocol: 'http:',
hostname: 'github.com',
hash: '#js1',
path: '/joyent/node2',
pathname: '/joyent/node'
},
// pathname with query/search
'http://github.com/joyent/node?foo=bar#js2': {
href: 'http://github.com/joyent/node?foo=bar#js2',
protocol: 'http:',
hostname: 'github.com',
hash: '#js2',
path: '/joyent/node?foo=bar'
},
// path vs. query, path wins
'http://github.com/joyent/node?foo=bar2#js3': {
href: 'http://github.com/joyent/node?foo=bar2#js3',
protocol: 'http:',
hostname: 'github.com',
hash: '#js3',
path: '/joyent/node?foo=bar2',
query: {foo: 'bar'}
},
// path vs. search, path wins
'http://github.com/joyent/node?foo=bar3#js4': {
href: 'http://github.com/joyent/node?foo=bar3#js4',
protocol: 'http:',
hostname: 'github.com',
hash: '#js4',
path: '/joyent/node?foo=bar3',
search: '?foo=bar'
},
// path is present without ? vs. query given
'http://github.com/joyent/node#js5': {
href: 'http://github.com/joyent/node#js5',
protocol: 'http:',
hostname: 'github.com',
hash: '#js5',
path: '/joyent/node',
query: {foo: 'bar'}
},
// path is present without ? vs. search given
'http://github.com/joyent/node#js6': {
href: 'http://github.com/joyent/node#js6',
protocol: 'http:',
hostname: 'github.com',
hash: '#js6',
path: '/joyent/node',
search: '?foo=bar'
} }
}; };
for (var u in formatTests) { for (var u in formatTests) {
var expect = formatTests[u].href; var expect = formatTests[u].href;

Loading…
Cancel
Save