Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stevenvachon/relateurl
Create a relative URL with options to minify.
https://github.com/stevenvachon/relateurl
minify minify-urls nodejs url whatwg
Last synced: 13 days ago
JSON representation
Create a relative URL with options to minify.
- Host: GitHub
- URL: https://github.com/stevenvachon/relateurl
- Owner: stevenvachon
- License: mit
- Created: 2014-03-20T02:28:42.000Z (over 10 years ago)
- Default Branch: main
- Last Pushed: 2021-02-27T22:52:28.000Z (over 3 years ago)
- Last Synced: 2024-06-11T17:36:06.278Z (5 months ago)
- Topics: minify, minify-urls, nodejs, url, whatwg
- Language: JavaScript
- Homepage:
- Size: 131 KB
- Stars: 54
- Watchers: 4
- Forks: 8
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: license
Awesome Lists containing this project
README
# relateurl [![NPM Version][npm-image]][npm-url] ![File Size][filesize-image] [![Build Status][travis-image]][travis-url] [![Coverage Status][coveralls-image]][coveralls-url] [![Dependency Monitor][greenkeeper-image]][greenkeeper-url]
> Create a relative URL with options to minify.
With `http://domain.com/seg1/seg1-1/` as a base URL, you can produce:
| Before | After |
| :----------------------------------------- | :-------------------------------- |
| `http://domain.com/seg1/seg1-2/index.html` | `../seg1-2/` |
| `http://domain.com/seg2/seg2-1/` | `/seg2/seg2-1/` |
| `http://domain.com/seg1/seg1-1/` | ` ` |
| `httpS://domain.com/seg1/seg1-1/` | `https://domain.com/seg1/seg1-1/` |
| `../../../../../../../../#anchor` | `/#anchor` |## Installation
[Node.js](https://nodejs.org) `>= 14` is required. To install, type this at the command line:
```shell
npm install relateurl
```## Usage
Inputs *must* be [`URL`](https://mdn.io/URL) instances.
```js
const relateURL = require('relateurl');const base = new URL('http://domain.com/seg1/seg1-1/');
const url = new URL('//domain.com/seg1/seg1-2/index.html', base);relateURL(url, base, options);
//-> ../seg1-2/
```## Options
It is simplest to use an [option profile](#option-profiles), but custom configurations are still possible.
### `output`
Type: `Symbol`
Default value: `relateURL.SHORTEST`
The limit of how far the resulting URL should be related. Possible values:* `PROTOCOL_RELATIVE`: will try to produce something like `//domain.com/path/to/file.html`.
* `ROOT_PATH_RELATIVE`: will try to produce something like `/child-of-root/etc/`.
* `PATH_RELATIVE`: will try to produce something like `../child-of-parent/etc/`.
* `SHORTEST`: will try to choose whichever is shortest between `PATH_RELATIVE` and `ROOT_PATH_RELATIVE`.### Minify Options
Any other defined option will be passed to [minurl](https://npmjs.com/minurl). Avoid setting `stringify` to `false`, as it will prevent any operations performed by this library from being outputted.
#### Ignoring Basic Authentication
Ignoring a URL's username and password attributes will need the not-so-obvious `removeAuth` option (from `minurl`):
```js
const base = new URL('http://user:[email protected]/seg1/seg1-1/');
const url = new URL('http://domain.com/seg1/seg1-2/');relateURL(url, base, {
removeAuth: true
});
//-> ../seg1-2/
````### Option Profiles
There're two profiles: [`CAREFUL_PROFILE` and `COMMON_PROFILE`](https://npmjs.com/minurl#option-profiles).
[npm-image]: https://img.shields.io/npm/v/relateurl.svg
[npm-url]: https://npmjs.org/package/relateurl
[filesize-image]: https://img.shields.io/badge/bundle-56kB%20gzipped-blue.svg
[travis-image]: https://img.shields.io/travis/stevenvachon/relateurl.svg
[travis-url]: https://travis-ci.org/stevenvachon/relateurl
[coveralls-image]: https://img.shields.io/coveralls/stevenvachon/relateurl.svg
[coveralls-url]: https://coveralls.io/github/stevenvachon/relateurl
[greenkeeper-image]: https://badges.greenkeeper.io/stevenvachon/relateurl.svg
[greenkeeper-url]: https://greenkeeper.io/