forked from xmppjs/xmpp.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
40 lines (31 loc) · 773 Bytes
/
Copy pathindex.js
File metadata and controls
40 lines (31 loc) · 773 Bytes
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
import querystring from "node:querystring";
import jid from "@xmpp/jid";
import { IRI } from "iri";
function findQueryType(params) {
return Object.getOwnPropertyNames(params).find((k) => {
return k[0] === "?" && params[k] === "";
});
}
export function parse(str) {
const iri = new IRI(str);
const uri = {};
const path = iri.path();
uri.path = jid(path.startsWith("/") ? path.slice(1) : path);
const authority = iri.authority();
if (authority) {
uri.authority = jid(authority);
}
const query = iri.query();
const params = querystring.parse(query, ";");
const type = findQueryType(params);
if (type) {
delete params[type];
}
if (query) {
uri.query = {
type: type.slice(1),
params,
};
}
return uri;
}