• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1function isSecure(wsComponents) {
2    return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === "wss";
3}
4//RFC 6455
5const handler = {
6    scheme: "ws",
7    domainHost: true,
8    parse: function (components, options) {
9        const wsComponents = components;
10        //indicate if the secure flag is set
11        wsComponents.secure = isSecure(wsComponents);
12        //construct resouce name
13        wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');
14        wsComponents.path = undefined;
15        wsComponents.query = undefined;
16        return wsComponents;
17    },
18    serialize: function (wsComponents, options) {
19        //normalize the default port
20        if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === "") {
21            wsComponents.port = undefined;
22        }
23        //ensure scheme matches secure flag
24        if (typeof wsComponents.secure === 'boolean') {
25            wsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');
26            wsComponents.secure = undefined;
27        }
28        //reconstruct path from resource name
29        if (wsComponents.resourceName) {
30            const [path, query] = wsComponents.resourceName.split('?');
31            wsComponents.path = (path && path !== '/' ? path : undefined);
32            wsComponents.query = query;
33            wsComponents.resourceName = undefined;
34        }
35        //forbid fragment component
36        wsComponents.fragment = undefined;
37        return wsComponents;
38    }
39};
40export default handler;
41//# sourceMappingURL=ws.js.map