Skip to content

Commit c516765

Browse files
authored
Merge pull request spinframework#29 from karthik2804/feat/query_String
Add Url parsing
2 parents 4c1bdc2 + 9b5192b commit c516765

File tree

6 files changed

+146
-1508
lines changed

6 files changed

+146
-1508
lines changed

crates/spin-js-engine/src/js_sdk/modules/url.ts

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
/** @internal */
22
const Url = require('url-parse')
3+
/** @internal */
4+
const _queryString = require('query-string');
35

46
interface 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 */
2124
class 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

Comments
 (0)