Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/anonrig/url-js
Super fast spec-compliant URL state machine for Node.js
https://github.com/anonrig/url-js
Last synced: 12 days ago
JSON representation
Super fast spec-compliant URL state machine for Node.js
- Host: GitHub
- URL: https://github.com/anonrig/url-js
- Owner: anonrig
- License: mit
- Created: 2022-03-01T21:57:44.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-10-07T11:25:31.000Z (about 1 year ago)
- Last Synced: 2024-05-02T05:54:46.488Z (6 months ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/url-state-machine
- Size: 448 KB
- Stars: 159
- Watchers: 15
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## URL State Machine
Super fast specification compliant URL state machine for Node.js. For more information about the URL parsing state machine visit [here](https://url.spec.whatwg.org/#url-parsing).
### Installation
```bash
npm i --save url-state-machine
```### Usage
```javascript
const URLStateMachine = require('url-state-machine')
const state = new URLStateMachine('https://www.yagiz.co/implementing-node-js-url-parser-in-webassembly-with-rust')console.log(state.url)
// {
// scheme: 'https',
// username: '',
// password: '',
// host: 'www.yagiz.co',
// port: null,
// path: [ 'implementing-node-js-url-parser-in-webassembly-with-rust' ],
// query: null,
// fragment: null
// }
```### Benchmarks
Full domain with input and base
- `new URL("/path/to/something?hello=world", "https://www.google.com")`
```
╔═══════════════════╤═════════╤══════════════════╤═══════════╤══════════════════════════╗
║ Slower tests │ Samples │ Result │ Tolerance │ Difference with previous ║
╟───────────────────┼─────────┼──────────────────┼───────────┼──────────────────────────╢
║ whatwg-url │ 1000 │ 37994.48 op/sec │ ± 0.97 % │ ║
║ url-state-machine │ 9500 │ 257195.34 op/sec │ ± 0.99 % │ + 576.93 % ║
╟───────────────────┼─────────┼──────────────────┼───────────┼──────────────────────────╢
║ Fastest test │ Samples │ Result │ Tolerance │ Difference with previous ║
╟───────────────────┼─────────┼──────────────────┼───────────┼──────────────────────────╢
║ URL │ 10000 │ 477303.34 op/sec │ ± 1.27 % │ + 85.58 % ║
╚═══════════════════╧═════════╧══════════════════╧═══════════╧══════════════════════════╝
```ipv4 address
- `new URL("http://127.0.0.1")`
```
╔═══════════════════╤═════════╤═══════════════════╤═══════════╤══════════════════════════╗
║ Slower tests │ Samples │ Result │ Tolerance │ Difference with previous ║
╟───────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
║ whatwg-url │ 5000 │ 91747.56 op/sec │ ± 0.97 % │ ║
║ url-state-machine │ 10000 │ 626208.74 op/sec │ ± 1.65 % │ + 582.53 % ║
╟───────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
║ Fastest test │ Samples │ Result │ Tolerance │ Difference with previous ║
╟───────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
║ URL │ 2500 │ 1037903.40 op/sec │ ± 0.87 % │ + 65.74 % ║
╚═══════════════════╧═════════╧═══════════════════╧═══════════╧══════════════════════════╝
```ipv6 address
- `new URL("http://[1:0::]")`
```
╔═══════════════════╤═════════╤═══════════════════╤═══════════╤══════════════════════════╗
║ Slower tests │ Samples │ Result │ Tolerance │ Difference with previous ║
╟───────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
║ whatwg-url │ 5500 │ 196896.91 op/sec │ ± 0.97 % │ ║
║ url-state-machine │ 10000 │ 1321601.39 op/sec │ ± 2.76 % │ + 571.21 % ║
╟───────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
║ Fastest test │ Samples │ Result │ Tolerance │ Difference with previous ║
╟───────────────────┼─────────┼───────────────────┼───────────┼──────────────────────────╢
║ URL │ 8000 │ 1356561.74 op/sec │ ± 0.97 % │ + 2.65 % ║
╚═══════════════════╧═════════╧═══════════════════╧═══════════╧══════════════════════════╝
```### Testing
#### Running
All tests are referenced and borrowed from [web-platform-tests](https://github.com/web-platform-tests/wpt/blob/master/url/resources/urltestdata.json).
```bash
npm test
```#### Code Coverage
```
Test Files 1 failed (1)
Tests 1 failed | 732 passed (733)
Time 633ms (in thread 64ms, 989.58%)
```File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
--------------|---------|----------|---------|---------|--------------------------------------------
All files | 95.88 | 95.18 | 98 | 95.88 |
constants.js | 100 | 100 | 100 | 100 |
encoding.js | 100 | 100 | 100 | 100 |
index.js | 93.99 | 93.02 | 100 | 93.99 | ...4-775,800-801,921-922,926-927,1070-1071
parser.js | 99.53 | 99.05 | 100 | 99.53 | 283-284
platform.js | 100 | 100 | 100 | 100 |
string.js | 100 | 100 | 100 | 100 |
utf8.js | 84.33 | 88.23 | 50 | 84.33 | 39-44,63-64,77-81#### Conformance to specification
- pathname
- 1 failed | 732 passed (733)
- search
- 1 failed | 732 passed (733)
- host
- 733 passed (733)
- password
- 733 passed (733)
- protocol
- 733 passed (733)
- username
- 733 passed (733)
- port
- 733 passed (733)
- fragment
- 733 passed (733)