fast-uri 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +2 -0
- package/.github/workflows/ci.yml +5 -0
- package/.github/workflows/package-manager-ci.yml +13 -59
- package/benchmark.js +2 -0
- package/index.js +17 -4
- package/lib/schemes.js +2 -2
- package/lib/utils.js +5 -5
- package/package.json +3 -3
package/.gitattributes
ADDED
package/.github/workflows/ci.yml
CHANGED
|
@@ -3,64 +3,18 @@ name: package-manager-ci
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
- main
|
|
7
|
+
- master
|
|
8
|
+
- next
|
|
9
|
+
- 'v*'
|
|
10
|
+
paths-ignore:
|
|
11
|
+
- 'docs/**'
|
|
12
|
+
- '*.md'
|
|
13
|
+
pull_request:
|
|
14
|
+
paths-ignore:
|
|
15
|
+
- 'docs/**'
|
|
16
|
+
- '*.md'
|
|
10
17
|
|
|
11
18
|
jobs:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
strategy:
|
|
16
|
-
matrix:
|
|
17
|
-
# Maintenance and active LTS
|
|
18
|
-
node-version: [14, 16]
|
|
19
|
-
os: [ubuntu-18.04]
|
|
20
|
-
|
|
21
|
-
steps:
|
|
22
|
-
- uses: actions/checkout@v3
|
|
23
|
-
with:
|
|
24
|
-
persist-credentials: false
|
|
25
|
-
|
|
26
|
-
- name: Use Node.js
|
|
27
|
-
uses: actions/setup-node@v3
|
|
28
|
-
with:
|
|
29
|
-
node-version: ${{ matrix.node-version }}
|
|
30
|
-
|
|
31
|
-
- name: Install with pnpm
|
|
32
|
-
run: |
|
|
33
|
-
curl -L https://unpkg.com/@pnpm/self-installer | node
|
|
34
|
-
pnpm install
|
|
35
|
-
|
|
36
|
-
- name: Run tests
|
|
37
|
-
run: |
|
|
38
|
-
pnpm run test
|
|
39
|
-
|
|
40
|
-
yarn:
|
|
41
|
-
runs-on: ${{ matrix.os }}
|
|
42
|
-
|
|
43
|
-
strategy:
|
|
44
|
-
matrix:
|
|
45
|
-
# Maintenance and active LTS
|
|
46
|
-
node-version: [14, 16]
|
|
47
|
-
os: [ubuntu-18.04]
|
|
48
|
-
|
|
49
|
-
steps:
|
|
50
|
-
- uses: actions/checkout@v3
|
|
51
|
-
with:
|
|
52
|
-
persist-credentials: false
|
|
53
|
-
|
|
54
|
-
- name: Use Node.js
|
|
55
|
-
uses: actions/setup-node@v3
|
|
56
|
-
with:
|
|
57
|
-
node-version: ${{ matrix.node-version }}
|
|
58
|
-
|
|
59
|
-
- name: Install with yarn
|
|
60
|
-
run: |
|
|
61
|
-
curl -o- -L https://yarnpkg.com/install.sh | bash
|
|
62
|
-
yarn install --ignore-engines
|
|
63
|
-
|
|
64
|
-
- name: Run tests
|
|
65
|
-
run: |
|
|
66
|
-
yarn run test
|
|
19
|
+
test:
|
|
20
|
+
uses: fastify/workflows/.github/workflows/plugins-ci-package-manager.yml@v3
|
package/benchmark.js
CHANGED
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const URL = require('url')
|
|
3
|
+
const URL = require('node:url')
|
|
4
4
|
const { normalizeIPv6, normalizeIPv4, removeDotSegments, recomposeAuthority, normalizeComponentEncoding } = require('./lib/utils')
|
|
5
5
|
const SCHEMES = require('./lib/schemes')
|
|
6
6
|
|
|
@@ -160,7 +160,7 @@ function serialize (cmpts, opts) {
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
if (authority === undefined) {
|
|
163
|
-
s = s.replace(
|
|
163
|
+
s = s.replace(/^\/\//u, '/%2F') // don't allow the path to start with "//"
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
uriTokens.push(s)
|
|
@@ -178,7 +178,20 @@ function serialize (cmpts, opts) {
|
|
|
178
178
|
return uriTokens.join('')
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
const
|
|
181
|
+
const hexLookUp = Array.from({ length: 127 }, (v, k) => /[^!"$&'()*+,\-.;=_`a-z{}~]/u.test(String.fromCharCode(k)))
|
|
182
|
+
|
|
183
|
+
function nonSimpleDomain (value) {
|
|
184
|
+
let code = 0
|
|
185
|
+
for (let i = 0, len = value.length; i < len; ++i) {
|
|
186
|
+
code = value.charCodeAt(i)
|
|
187
|
+
if (code > 126 || hexLookUp[code]) {
|
|
188
|
+
return true
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return false
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u
|
|
182
195
|
|
|
183
196
|
function parse (uri, opts) {
|
|
184
197
|
const options = Object.assign({}, opts)
|
|
@@ -239,7 +252,7 @@ function parse (uri, opts) {
|
|
|
239
252
|
// check if scheme can't handle IRIs
|
|
240
253
|
if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
|
|
241
254
|
// if host component is a domain name
|
|
242
|
-
if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {
|
|
255
|
+
if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && nonSimpleDomain(parsed.host)) {
|
|
243
256
|
// convert Unicode IDN -> ASCII IDN
|
|
244
257
|
try {
|
|
245
258
|
parsed.host = URL.domainToASCII(parsed.host.toLowerCase())
|
package/lib/schemes.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const UUID_REG = /^[
|
|
4
|
-
const URN_REG = /([
|
|
3
|
+
const UUID_REG = /^[\da-f]{8}\b-[\da-f]{4}\b-[\da-f]{4}\b-[\da-f]{4}\b-[\da-f]{12}$/iu
|
|
4
|
+
const URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu
|
|
5
5
|
|
|
6
6
|
function isSecure (wsComponents) {
|
|
7
7
|
return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === 'wss'
|
package/lib/utils.js
CHANGED
|
@@ -4,7 +4,7 @@ const { HEX } = require('./scopedChars')
|
|
|
4
4
|
|
|
5
5
|
function normalizeIPv4 (host) {
|
|
6
6
|
if (findToken(host, '.') < 3) { return { host, isIPV4: false } }
|
|
7
|
-
const matches = host.match(/^(\
|
|
7
|
+
const matches = host.match(/^(\b[01]?\d{1,2}|\b2[0-4]\d|\b25[0-5])(\.([01]?\d{1,2}|2[0-4]\d|25[0-5])){3}$/u) || []
|
|
8
8
|
const [address] = matches
|
|
9
9
|
if (address) {
|
|
10
10
|
return { host: stripLeadingZeros(address, '.'), isIPV4: true }
|
|
@@ -138,10 +138,10 @@ function findToken (str, token) {
|
|
|
138
138
|
return ind
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
const RDS1 = /^\.\.?\//
|
|
142
|
-
const RDS2 = /^\/\.(
|
|
143
|
-
const RDS3 = /^\/\.\.(
|
|
144
|
-
const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/
|
|
141
|
+
const RDS1 = /^\.\.?\//u
|
|
142
|
+
const RDS2 = /^\/\.(?:\/|$)/u
|
|
143
|
+
const RDS3 = /^\/\.\.(?:\/|$)/u
|
|
144
|
+
const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/u
|
|
145
145
|
|
|
146
146
|
function removeDotSegments (input) {
|
|
147
147
|
const output = []
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fast-uri",
|
|
3
3
|
"description": "Dependency free RFC 3986 URI toolbox",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.3.0",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"types": "types/index.d.ts",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"bugs": {
|
|
15
15
|
"url": "https://github.com/fastify/fast-uri/issues"
|
|
16
16
|
},
|
|
17
|
-
"homepage":"https://github.com/fastify/fast-uri",
|
|
17
|
+
"homepage": "https://github.com/fastify/fast-uri",
|
|
18
18
|
"scripts": {
|
|
19
19
|
"bench": "node benchmark.js",
|
|
20
20
|
"lint:fix": "standard --fix",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"snazzy": "^9.0.0",
|
|
32
32
|
"standard": "^17.0.0",
|
|
33
33
|
"tap": "^16.0.0",
|
|
34
|
-
"tsd": "^0.
|
|
34
|
+
"tsd": "^0.29.0",
|
|
35
35
|
"uri-js": "^4.4.1"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {},
|