11/** @internal */
22const Url = require ( 'url-parse' )
3+ /** @internal */
4+ const _queryString = require ( 'query-string' ) ;
35
46interface UrlObject {
57 protocol : string
@@ -10,16 +12,16 @@ interface UrlObject {
1012 host : string
1113 port : string
1214 pathname : string
13- query : string
15+ search : string
1416 hash : string
1517 href : string
1618 origin : string
1719 set ( key : string , value : string | boolean ) : void
1820 toString ( ) : string
1921}
2022
23+ /** @internal */
2124class URL implements UrlObject {
22- /** @internal */
2325 url : UrlObject
2426 protocol : string
2527 slashes : boolean
@@ -29,23 +31,25 @@ class URL implements UrlObject {
2931 host : string
3032 port : string
3133 pathname : string
32- query : string
34+ search : string
35+ searchParams : URLSearchParams
3336 hash : string
3437 href : string
3538 origin : string
3639
3740 constructor ( urlStr : string , base = undefined ) {
38- let url : UrlObject = Url ( urlStr , base )
41+ let url = Url ( urlStr , base )
3942 this . url = url
4043 this . protocol = url . protocol
41- this . slashes = url . slashes
44+ this . slashes = url . slashes
4245 this . auth = url . auth
43- this . username = url . username
44- this . password = url . password
46+ this . username = url . username
47+ this . password = url . password
4548 this . host = url . host
4649 this . port = url . port
4750 this . pathname = url . pathname
48- this . query = url . query
51+ this . search = url . query
52+ this . searchParams = new URLSearchParams ( this . search )
4953 this . hash = url . hash
5054 this . href = url . origin
5155 this . origin = url . origin
@@ -61,4 +65,54 @@ class URL implements UrlObject {
6165
6266}
6367
64- export { URL }
68+ /** @internal */
69+ class URLSearchParams {
70+ queryParams : { [ key : string ] : string | Array < string > } = { }
71+
72+ constructor ( val : string ) {
73+ this . queryParams = {
74+ ..._queryString . parse ( val )
75+ }
76+ }
77+ append ( key : string , val : string | Array < string > ) {
78+ this . queryParams [ key ] = val
79+ }
80+ delete ( key : string ) {
81+ delete this . queryParams [ key ]
82+ }
83+ get ( key : string ) {
84+ let val = this . queryParams [ key ]
85+ if ( val ) {
86+ if ( typeof ( val ) == "object" ) {
87+ return val [ 0 ]
88+ }
89+ return val
90+ }
91+ return null
92+ }
93+ getAll ( key : string ) {
94+ let val = this . queryParams [ key ]
95+ if ( val ) {
96+ return val
97+ }
98+ return null
99+ }
100+ has ( key : string ) {
101+ return this . queryParams [ key ] != undefined ? true : false
102+ }
103+ keys ( ) {
104+ return Object . keys ( this . queryParams )
105+ }
106+ set ( key : string , val : string | Array < string > ) {
107+ this . queryParams [ key ] = val
108+ }
109+ toString ( ) {
110+ return _queryString . stringify ( this . queryParams )
111+ }
112+ values ( ) {
113+ return Object . keys ( this . queryParams ) . map ( k => this . queryParams [ k ] )
114+ }
115+ }
116+
117+ /** @internal */
118+ export { URL , URLSearchParams }
0 commit comments