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')
|
||
|
}
|
||
|
}
|