/** 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' }