forked from xmppjs/xmpp.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
43 lines (33 loc) · 821 Bytes
/
index.js
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
"use strict";
const jid = require("@xmpp/jid");
const { IRI } = require("iri");
const querystring = require("querystring");
function findQueryType(params) {
return Object.getOwnPropertyNames(params).find((k) => {
return k[0] === "?" && params[k] === "";
});
}
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;
}
module.exports.parse = parse;