Big update!Introducing GitHub Bot Commands. Learn more
Socket
Log inBook a demo

relateurl

Package Overview
Dependencies
0
Maintainers
1
Versions
9
Issues
File Explorer

Advanced tools

relateurl

Minify URLs by converting them from absolute to relative.

    0.2.7latest

Version published
Maintainers
1
Weekly downloads
10,348,109
decreased by-13.37%

Weekly downloads

Readme

Source

relateurl NPM Version Build Status Dependency Status

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:

BeforeAfter
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:

npm install relateurl --save-dev

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
var RelateUrl = require("relateurl"); var result = RelateUrl.relate(from, to, options);
Reusable Instances
var RelateUrl = require("relateurl"); var instance = new RelateUrl(from, options); var result1 = instance.relate(to1); var result2 = instance.relate(to2, customOptions); var result3 = instance.relate(to3);

FAQ

  1. 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.

  2. Why not just use Node's url.parse, url.resolve and path.relative?
    url.parse is used, but url.resolve and path.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 URLs
  • 0.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 like options.externalDirectoryIndexes=[] for external sites

Keywords

FAQs

What is relateurl?

Minify URLs by converting them from absolute to relative.

Is relateurl popular?

The npm package relateurl receives a total of 8,329,167 weekly downloads. As such, relateurl popularity was classified as popular.

Is relateurl well maintained?

We found that relateurl demonstrated a not healthy version release cadence and project activity because the last version was released a year ago.It has 1 open source maintainer collaborating on the project.

Last updated on 14 Jul 2016

Did you know?

Socket installs a Github app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.

Install Socket
Socket

Product

Subscribe to our newsletter

Get open source security insights delivered straight into your inbox. Be the first to learn about new features and product updates.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc