Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/donavon/thwack-resolve
A tiny functional equivalent to` new URL(url, base).href`
https://github.com/donavon/thwack-resolve
rfc rfc-3986 rfc3986 url url-resolve
Last synced: 8 days ago
JSON representation
A tiny functional equivalent to` new URL(url, base).href`
- Host: GitHub
- URL: https://github.com/donavon/thwack-resolve
- Owner: donavon
- License: mit
- Created: 2020-04-26T17:24:17.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T04:27:31.000Z (almost 2 years ago)
- Last Synced: 2024-05-02T05:53:32.741Z (8 months ago)
- Topics: rfc, rfc-3986, rfc3986, url, url-resolve
- Language: TypeScript
- Homepage:
- Size: 1.56 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# @thwack/resolve
## What is it?
- Functionally equivalent to `new URL(url, base).href`
- Works on browsers, NodeJS, and React Native
- Tiny.
- Has loads of tests that use JSDOM's WHATWG `URL` as its expected results## What it's not?
- It is not, nor does it intend to be, a replacement for `URL` (i.e. an implementation of the WHATWG URL Standard )
- If you need to full `URL` replacement, see [whatwg-url](https://github.com/jsdom/whatwg-url).## Why?
I needed to resolve a URL against a base when writing [Thwack](https://github.com/donavon/thwack). Initially I used `new URL(url, base).href`, but found that it failed when running on React Native as its implimenation of `URL` sucks (to put it mildly).
I initially imported [react-native-url-polyfill](https://github.com/charpeni/react-native-url-polyfill) but it's 41k, which is more than 10x Thwack itself!
So I set out to write my own and share it with the world.
## Installation
```bash
$ npm i @thwack/resolve
```or
```bash
$ yarn add @thwack/resolve
```## The RegEx
It is based on the RegEx in the RFC for Uniform Resource Identifier (i.e. the URL syntax for the internet)
```regex
^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
```see https://tools.ietf.org/html/rfc3986#appendix-B
The RegEx returns:
```
$1 = http:
$2 = http //protocol
$3 = //www.example.com
$4 = www.example.com //domain
$5 = /foo/bar/ or foo //path
$6 = ?a=b //search
$7 = a=b
$8 = #hash //hash
$9 = hash
```> Note 1: all but $5 will be undefined if missing. $5 will be ""
> Note 2: \$5 will be "undefined" (a string) if uri is undefined
> Note 3: \$4 will be `undefined` if missing or "" if present but blank
## License
Licensed under [MIT](LICENSE)