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
			| 
								 
											3 years ago
										 
									 | 
							
								'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')
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |