You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							47 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							47 lines
						
					
					
						
							1.0 KiB
						
					
					
				| 'use strict'
 | |
| const assert = require('assert')
 | |
| 
 | |
| function HostStorage () {
 | |
|   var hosts = {}
 | |
|   var regexHosts = []
 | |
|   return {
 | |
|     get: (host) => {
 | |
|       var exact = hosts[host]
 | |
|       if (exact) {
 | |
|         return exact
 | |
|       }
 | |
|       var item
 | |
|       for (var i = 0; i < regexHosts.length; i++) {
 | |
|         item = regexHosts[i]
 | |
|         if (item.host.test(host)) {
 | |
|           return item.value
 | |
|         }
 | |
|       }
 | |
|     },
 | |
|     set: (host, value) => {
 | |
|       if (host instanceof RegExp) {
 | |
|         regexHosts.push({ host, value })
 | |
|       } else {
 | |
|         hosts[host] = value
 | |
|       }
 | |
|     },
 | |
|     del: (host) => {
 | |
|       delete hosts[host]
 | |
|       regexHosts = regexHosts.filter((obj) => String(obj.host) !== String(host))
 | |
|     },
 | |
|     empty: () => {
 | |
|       hosts = {}
 | |
|       regexHosts = []
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = {
 | |
|   name: 'host',
 | |
|   mustMatchWhenDerived: false,
 | |
|   storage: HostStorage,
 | |
|   validate (value) {
 | |
|     assert(typeof value === 'string' || Object.prototype.toString.call(value) === '[object RegExp]', 'Host should be a string or a RegExp')
 | |
|   }
 | |
| }
 |