relateurl
Minify URLs by converting them from absolute to relative.
If you were to use this library on a website like http://example.com/dir1/dir1-1/
, you would get results such as:
http://example.com/dir1/dir1-2/index.html
../dir1-2/
http://example.com/dir2/dir2-1/
/dir2/dir2-1/
http://example.com/dir1/dir1-1/
https://example.com/dir1/dir1-1/
https://example.com/dir1/dir1-1/
http://google.com:80/dir/
//google.com/dir/
../../../../../../../../#anchor
/#anchor
All string parsing. No directory browsing. It is thoroughly tested, very fast and lightweight with zero external dependencies.
Getting Started
This utility requires Node.js >= 0.10
. To install, type this at the command line:
Options
options.defaultPorts
Type: Object
Default value: {ftp:21, http:80, https:443}
Extend the list with any ports you need. Any URLs containing these default ports will have them removed. Example: http://example.com:80/
will become http://example.com/
.
options.directoryIndexes
Type: Array
Default value: ["index.html"]
Extend the list with any resources you need. Works with options.removeDirectoryIndexes
.
options.ignore_www
Type: Boolean
Default value: false
This will, for example, consider any domains containing http://www.example.com/
to be related to any that contain http://example.com/
.
options.output
Type: constant or String
Choices: RelateUrl.ABSOLUTE
,RelateUrl.PATH_RELATIVE
,RelateUrl.ROOT_RELATIVE
,RelateUrl.SHORTEST
Choices: "absolute"
,"pathRelative"
,"rootRelative"
,"shortest"
Default value: RelateUrl.SHORTEST
RelateUrl.ABSOLUTE
will produce an absolute URL. Overrides options.schemeRelative
with a value of false
.
RelateUrl.PATH_RELATIVE
will produce something like ../child-of-parent/etc/
.
RelateUrl.ROOT_RELATIVE
will produce something like /child-of-root/etc/
.
RelateUrl.SHORTEST
will choose whichever is shortest between root- and path-relative.
options.rejectedSchemes
Type: Array
Default value: ["data","javascript","mailto"]
Extend the list with any additional schemes. Example: javascript:something
will not be modified.
options.removeAuth
Type: Boolean
Default value: false
Remove user authentication information from the output URL.
options.removeDirectoryIndexes
Type: Boolean
Default value: true
Remove any resources that match any found in options.directoryIndexes
.
options.removeEmptyQueries
Type: Boolean
Default value: false
Remove empty query variables. Example: http://domain.com/?var1&var2=&var3=asdf
will become http://domain.com/?var3=adsf
. This does not apply to unrelated URLs (with other protocols, auths, hosts and/or ports).
options.removeRootTrailingSlash
Type: Boolean
Default value: true
Remove trailing slashes from root paths. Example: http://domain.com/?var
will become http://domain.com?var
while http://domain.com/dir/?var
will not be modified.
options.schemeRelative
Type: Boolean
Default value: true
Output URLs relative to the scheme. Example: http://example.com/
will become //example.com/
.
options.site
Type: String
Default value: undefined
An options-based version of the from
argument. If both are specified, from
takes priority.
options.slashesDenoteHost
Type: Boolean
Default value: true
Passed to Node's url.parse
.
Examples
This library can be used as a function for single-use or as a class for multiple conversions.
Upon successful conversion, a String
will be returned. If an issue is encountered while parsing from
, an error will be thrown.
Single Instance
Reusable Instances
FAQ
Why bother writing/using this? To aid in further minifying HTML, mainly for the purpose of faster page loads and SEO. It's been integrated into HTMLMinifier.
Why not just use Node's
url.parse
,url.resolve
andpath.relative
?url.parse
is used, buturl.resolve
andpath.relative
are both slower and less powerful than this library.
Release History
0.2.7 Node v6 support
0.2.6 minor enhancements
0.2.5 added
options.removeRootTrailingSlash
0.2.4 added
options.site
0.2.3 added browserify npm-script
0.2.2 removed task runner
0.2.1 shorten resource- and query-relative URLs, test variations list with other site URLs
0.2.0 code cleanup,
options.removeEmptyQueries=true
only applied to unrelated URLs0.1.0 initial release
Roadmap
0.2.8 check if queries are the same, regardless of param order
0.2.8 possible scheme exclusions such as
tel:
0.2.8 decipher and return invalid input (special cases) to complete test suite
0.3.0 test
options.slashesDenoteHost=false
, add something likeoptions.externalDirectoryIndexes=[]
for external sites
Last updated