41 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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
 | 
