76 lines
1.9 KiB
JavaScript
76 lines
1.9 KiB
JavaScript
/** RPL_ISUPPORT (005) token map. */
|
|
|
|
function bareIrcParseIsupport(params) {
|
|
var tokens = {}
|
|
var list = Array.isArray(params) ? params : []
|
|
var last = list.length
|
|
if (last && String(list[last - 1]).indexOf('are supported') >= 0) last--
|
|
var start = 0
|
|
if (
|
|
list.length &&
|
|
!/=/.test(String(list[0])) &&
|
|
!/^[A-Z]+$/.test(String(list[0]))
|
|
) {
|
|
start = 1
|
|
}
|
|
for (var i = start; i < last; i++) {
|
|
var raw = String(list[i] || '')
|
|
if (!raw) continue
|
|
var eq = raw.indexOf('=')
|
|
if (eq < 0) tokens[raw] = true
|
|
else tokens[raw.slice(0, eq)] = raw.slice(eq + 1)
|
|
}
|
|
return tokens
|
|
}
|
|
|
|
function bareIrcIsupportDefaults() {
|
|
return {
|
|
CASEMAPPING: 'rfc1459',
|
|
CHANTYPES: '#&',
|
|
PREFIX: '(ov)@+',
|
|
NICKLEN: '16',
|
|
CHANNELLEN: '50',
|
|
TOPICLEN: '390',
|
|
NETWORK: ''
|
|
}
|
|
}
|
|
|
|
function bareIrcMergeIsupport(cur, incoming) {
|
|
var out = cur && typeof cur === 'object' ? cur : bareIrcIsupportDefaults()
|
|
var next = incoming && typeof incoming === 'object' ? incoming : {}
|
|
var k
|
|
for (k in next) {
|
|
if (Object.prototype.hasOwnProperty.call(next, k)) out[k] = next[k]
|
|
}
|
|
return out
|
|
}
|
|
|
|
function bareIrcPrefixMap(isupport) {
|
|
var raw =
|
|
isupport && isupport.PREFIX != null ? String(isupport.PREFIX) : '(ov)@+'
|
|
var m = /^\(([^)]+)\)(.*)$/.exec(raw)
|
|
var modes = m ? m[1] : 'ov'
|
|
var prefs = m ? m[2] : '@+'
|
|
var byMode = {}
|
|
var byPref = {}
|
|
var i
|
|
for (i = 0; i < modes.length && i < prefs.length; i++) {
|
|
byMode[modes.charAt(i)] = prefs.charAt(i)
|
|
byPref[prefs.charAt(i)] = modes.charAt(i)
|
|
}
|
|
return { modes: modes, prefixes: prefs, byMode: byMode, byPref: byPref }
|
|
}
|
|
|
|
function bareIrcNicklen(isupport) {
|
|
var n = parseInt(isupport && isupport.NICKLEN, 10)
|
|
return Number.isFinite(n) && n > 0 ? n : 16
|
|
}
|
|
|
|
function bareIrcChantypes(isupport) {
|
|
return (isupport && isupport.CHANTYPES) || '#'
|
|
}
|
|
|
|
function bareIrcCasemapping(isupport) {
|
|
return (isupport && isupport.CASEMAPPING) || 'rfc1459'
|
|
}
|