FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node/lib/internal/querystring.js at main · fetchapi/node · GitHub
fetchapi
/
node
Public
forked from
nodejs/node
Notifications
You must be signed in to change notification settings
Fork
1
Star
0
Code
Pull requests
1
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
node
/
lib
/
internal
/
querystring.js
Copy path
More file actions
More file actions
Latest commit
History
History
History
119 lines (103 loc) · 3.24 KB
Breadcrumbs
node
/
lib
/
internal
/
querystring.js
Copy path
File metadata and controls
119 lines (103 loc) · 3.24 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
'use strict'
;
const
{
Array
,
Int8Array
,
NumberPrototypeToString
,
StringPrototypeCharCodeAt
,
StringPrototypeSlice
,
StringPrototypeToUpperCase
,
}
=
primordials
;
const
{
ERR_INVALID_URI
}
=
require
(
'internal/errors'
)
.
codes
;
const
hexTable
=
new
Array
(
256
)
;
for
(
let
i
=
0
;
i
<
256
;
++
i
)
hexTable
[
i
]
=
'%'
+
StringPrototypeToUpperCase
(
(
i
<
16
?
'0'
:
''
)
+
NumberPrototypeToString
(
i
,
16
)
)
;
const
isHexTable
=
new
Int8Array
(
[
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 0 - 15
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 16 - 31
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 32 - 47
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
// 48 - 63
0
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 64 - 79
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 80 - 95
0
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 96 - 111
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 112 - 127
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// 128 ...
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
// ... 256
]
)
;
/**
*
@param
{
string
} str
*
@param
{
Int8Array
} noEscapeTable
*
@param
{
string[]
} hexTable
*
@returns
{
string
}
*/
function
encodeStr
(
str
,
noEscapeTable
,
hexTable
)
{
const
len
=
str
.
length
;
if
(
len
===
0
)
return
''
;
let
out
=
''
;
let
lastPos
=
0
;
let
i
=
0
;
outer:
for
(
;
i
<
len
;
i
++
)
{
let
c
=
StringPrototypeCharCodeAt
(
str
,
i
)
;
// ASCII
while
(
c
<
0x80
)
{
if
(
noEscapeTable
[
c
]
!==
1
)
{
if
(
lastPos
<
i
)
out
+=
StringPrototypeSlice
(
str
,
lastPos
,
i
)
;
lastPos
=
i
+
1
;
out
+=
hexTable
[
c
]
;
}
if
(
++
i
===
len
)
break
outer
;
c
=
StringPrototypeCharCodeAt
(
str
,
i
)
;
}
if
(
lastPos
<
i
)
out
+=
StringPrototypeSlice
(
str
,
lastPos
,
i
)
;
// Multi-byte characters ...
if
(
c
<
0x800
)
{
lastPos
=
i
+
1
;
out
+=
hexTable
[
0xC0
|
(
c
>>
6
)
]
+
hexTable
[
0x80
|
(
c
&
0x3F
)
]
;
continue
;
}
if
(
c
<
0xD800
||
c
>=
0xE000
)
{
lastPos
=
i
+
1
;
out
+=
hexTable
[
0xE0
|
(
c
>>
12
)
]
+
hexTable
[
0x80
|
(
(
c
>>
6
)
&
0x3F
)
]
+
hexTable
[
0x80
|
(
c
&
0x3F
)
]
;
continue
;
}
// Surrogate pair
++
i
;
// This branch should never happen because all URLSearchParams entries
// should already be converted to USVString. But, included for
// completion's sake anyway.
if
(
i
>=
len
)
throw
new
ERR_INVALID_URI
(
)
;
const
c2
=
StringPrototypeCharCodeAt
(
str
,
i
)
&
0x3FF
;
lastPos
=
i
+
1
;
c
=
0x10000
+
(
(
(
c
&
0x3FF
)
<<
10
)
|
c2
)
;
out
+=
hexTable
[
0xF0
|
(
c
>>
18
)
]
+
hexTable
[
0x80
|
(
(
c
>>
12
)
&
0x3F
)
]
+
hexTable
[
0x80
|
(
(
c
>>
6
)
&
0x3F
)
]
+
hexTable
[
0x80
|
(
c
&
0x3F
)
]
;
}
if
(
lastPos
===
0
)
return
str
;
if
(
lastPos
<
len
)
return
out
+
StringPrototypeSlice
(
str
,
lastPos
)
;
return
out
;
}
module
.
exports
=
{
encodeStr
,
hexTable
,
isHexTable
,
}
;
Back
|
FazBrowse Home
|
New Git URL