41 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
function isSecure(wsComponents) {
 | 
						|
    return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === "wss";
 | 
						|
}
 | 
						|
//RFC 6455
 | 
						|
const handler = {
 | 
						|
    scheme: "ws",
 | 
						|
    domainHost: true,
 | 
						|
    parse: function (components, options) {
 | 
						|
        const wsComponents = components;
 | 
						|
        //indicate if the secure flag is set
 | 
						|
        wsComponents.secure = isSecure(wsComponents);
 | 
						|
        //construct resouce name
 | 
						|
        wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');
 | 
						|
        wsComponents.path = undefined;
 | 
						|
        wsComponents.query = undefined;
 | 
						|
        return wsComponents;
 | 
						|
    },
 | 
						|
    serialize: function (wsComponents, options) {
 | 
						|
        //normalize the default port
 | 
						|
        if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === "") {
 | 
						|
            wsComponents.port = undefined;
 | 
						|
        }
 | 
						|
        //ensure scheme matches secure flag
 | 
						|
        if (typeof wsComponents.secure === 'boolean') {
 | 
						|
            wsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');
 | 
						|
            wsComponents.secure = undefined;
 | 
						|
        }
 | 
						|
        //reconstruct path from resource name
 | 
						|
        if (wsComponents.resourceName) {
 | 
						|
            const [path, query] = wsComponents.resourceName.split('?');
 | 
						|
            wsComponents.path = (path && path !== '/' ? path : undefined);
 | 
						|
            wsComponents.query = query;
 | 
						|
            wsComponents.resourceName = undefined;
 | 
						|
        }
 | 
						|
        //forbid fragment component
 | 
						|
        wsComponents.fragment = undefined;
 | 
						|
        return wsComponents;
 | 
						|
    }
 | 
						|
};
 | 
						|
export default handler;
 | 
						|
//# sourceMappingURL=ws.js.map
 |