{"version":3,"file":"index.mjs","names":["nick","utils.nick","utils.hostmask","utils.nick","utils.hostmask","utils.nick","utils.hostmask","utils.nick","utils.nick","utils.hostmask","utils.nick","utils.hostmask","utils.nick","utils.hostmask","utils.channelList","utils.nick","utils.hostmask","utils.nick","utils.hostmask","utils.hostmask","utils.nick","Emitter","names","whois","replies"],"sources":["../node_modules/.pnpm/irc-replies@2.0.1/node_modules/irc-replies/replies.json","../src/plugins/away.ts","../src/plugins/disconnect.ts","../src/plugins/errors.ts","../src/utils.ts","../src/plugins/invite.ts","../src/plugins/join.ts","../src/plugins/kick.ts","../src/plugins/mode.ts","../src/plugins/motd.ts","../src/plugins/names.ts","../src/plugins/nick.ts","../src/plugins/notice.ts","../src/plugins/part.ts","../src/plugins/pong.ts","../src/plugins/privmsg.ts","../src/plugins/quit.ts","../src/plugins/topic.ts","../src/plugins/welcome.ts","../src/plugins/whois.ts","../src/index.ts"],"sourcesContent":["","import type { AwayEvent, IrcClient, IrcMessage, Plugin } from \"../types\";\n\n/**\n * AWAY plugin to emit \"away\" events.\n *\n * @return {Function}\n */\n\nexport default function away(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (\n        msg.command !== \"RPL_AWAY\" &&\n        msg.command !== \"RPL_NOWAWAY\" &&\n        msg.command !== \"RPL_UNAWAY\"\n      ) {\n        return;\n      }\n      const params = msg.params.split(\" \");\n      const e: AwayEvent = {\n        message: msg.trailing,\n      };\n      if (msg.command === \"RPL_NOWAWAY\" || msg.command === \"RPL_UNAWAY\") {\n        e.nick = params[0];\n      } else {\n        e.nick = params[1];\n      }\n      irc.emit(\"away\", e);\n    });\n  };\n}\n","import type { IrcClient, Plugin } from \"../types\";\n\n/**\n * DISCONNECT plugin to emit \"disconnect\" events.\n *\n * @return {Function}\n */\n\nexport default function disconnect(): Plugin {\n  return (irc: IrcClient): void => {\n    const stream = irc.stream;\n    const ms = 60 * 1000;\n\n    stream.on(\"close\", () => {\n      irc.emit(\"disconnect\");\n    });\n\n    // Do nothing when given stream cannot perform setTimeout() operation\n    if (stream.setTimeout === undefined || stream.setTimeout === null) {\n      return;\n    }\n\n    stream.setTimeout(ms);\n\n    stream.on(\"timeout\", () => {\n      let timeout = true;\n      const time = Date.now();\n\n      irc.write(`PING :${time}`);\n\n      irc.once(\"pong\", (res: string | number) => {\n        if (String(res) === String(time)) {\n          timeout = false;\n        }\n      });\n\n      setTimeout(() => {\n        if (timeout) {\n          stream.destroy();\n        }\n      }, 5000);\n    });\n  };\n}\n","import type { ErrorEvent, IrcClient, IrcMessage, Plugin } from \"../types\";\n\n/**\n * ERRORS plugin to emit \"errors\" events.\n *\n * List of possible errors:\n * https://github.com/williamwicks/irc-replies/blob/master/replies.json#L113-L170\n *\n * @return {Function}\n */\n\nexport default function errors(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command.indexOf(\"ERR_\") !== 0) return;\n      const e: ErrorEvent = {\n        cmd: msg.command,\n        message: msg.trailing,\n      };\n      irc.emit(\"errors\", e);\n    });\n  };\n}\n","import type { Hostmask, IrcMessage } from \"./types\";\n\n/**\n * Parse channel list `str`.\n *\n * @param {String} str\n * @return {Array}\n */\n\nexport function channelList(str: string): string[] {\n  return str.split(\",\").map((chan: string) => chan.toLowerCase());\n}\n\n/**\n * Parse nick from `msg`.\n *\n * @param {Object} msg\n * @return {String}\n */\n\nexport function nick(msg: IrcMessage): string {\n  return msg.prefix.split(\"!\")[0]!;\n}\n\n/**\n * Parse hostmask from `msg`.\n *\n * @param {Object} msg\n * @return {Object}\n */\n\nexport function hostmask(msg: IrcMessage): Hostmask {\n  const mask: Hostmask = {\n    nick: \"\",\n    string: msg.prefix,\n  };\n  let parts = msg.prefix.split(\"!\");\n  mask.nick = parts[0]!;\n\n  try {\n    parts = parts[1]!.split(\"@\");\n    mask.username = parts[0]!;\n    mask.hostname = parts[1]!;\n  } catch {\n    // ..\n  }\n\n  return mask;\n}\n\n/**\n * Merge the contents of two objects together into the first object.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n */\n\nexport function extend<A extends Record<string, unknown>, B extends Record<string, unknown>>(\n  a: A,\n  b: B,\n): A & B {\n  for (const prop in b) {\n    (a as Record<string, unknown>)[prop] = b[prop];\n  }\n  return a as A & B;\n}\n","/**\n * Module dependencies.\n */\n\nimport type { InviteEvent, IrcClient, IrcMessage, Plugin } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * INVITE plugin to emit \"invite\" events.\n *\n * @return {Function}\n */\n\nexport default function invite(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"INVITE\") return;\n      const e: InviteEvent = {\n        from: utils.nick(msg),\n        hostmask: utils.hostmask(msg),\n        to: msg.params.toLowerCase(),\n        channel: msg.trailing,\n      };\n      irc.emit(\"invite\", e);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, JoinEvent, Plugin } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * JOIN plugin to emit \"join\" events.\n *\n * @return {Function}\n */\n\nexport default function join(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"JOIN\") return;\n      const e: JoinEvent = {\n        nick: utils.nick(msg),\n        hostmask: utils.hostmask(msg),\n        channel: (msg.params || msg.trailing).toLowerCase(),\n      };\n      irc.emit(\"join\", e);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, KickEvent, Plugin } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * KICK plugin to emit \"kick\" events.\n *\n * @return {Function}\n */\n\nexport default function kick(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"KICK\") return;\n      const params = msg.params.split(\" \");\n      const e: KickEvent = {\n        nick: utils.nick(msg),\n        hostmask: utils.hostmask(msg),\n        channel: params[0]!.toLowerCase(),\n        client: params[1]!,\n        message: msg.trailing,\n      };\n      irc.emit(\"kick\", e);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, ModeEvent, Plugin } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * MODE plugin to emit \"mode\" events.\n *\n * @return {Function}\n */\n\nexport default function mode(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"MODE\") return;\n      const params = msg.params.split(\" \");\n      const e: ModeEvent = {\n        nick: utils.nick(msg),\n        target: params[0],\n        mode: params[1] || msg.trailing,\n        client: params[2],\n      };\n      irc.emit(\"mode\", e);\n    });\n  };\n}\n","import type { IrcClient, IrcMessage, MotdEvent, Plugin } from \"../types\";\n\n/**\n * MOTD plugin to emit \"motd\" events.\n *\n * @return {Function}\n */\n\nexport default function motd(): Plugin {\n  return (irc: IrcClient): void => {\n    const e: MotdEvent = {\n      motd: [],\n    };\n\n    irc.on(\"data\", (msg: IrcMessage) => {\n      switch (msg.command) {\n        case \"RPL_MOTDSTART\":\n          e.motd.length = 0;\n          e.motd.push(msg.trailing);\n          break;\n        case \"RPL_ENDOFMOTD\":\n        case \"RPL_MOTD\":\n          e.motd.push(msg.trailing);\n          break;\n      }\n\n      if (msg.command === \"RPL_ENDOFMOTD\") {\n        irc.emit(\"motd\", e);\n      }\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport debugModule from \"debug\";\n\nimport type {\n  IrcClient,\n  IrcMessage,\n  NamesEvent,\n  NamesQueryCallback,\n  NamesUser,\n  Plugin,\n} from \"../types\";\n\nconst debug = debugModule(\"slate-irc:names\");\n\n/**\n * NAMES plugin to emit `name event`.\n *\n * @return {Function}\n */\n\nexport default function namesPlugin(): Plugin {\n  return (irc: IrcClient): void => {\n    const map: Record<string, NamesUser[]> = {};\n    irc.names = names;\n    irc.nameCallbacks = {};\n\n    irc.on(\"data\", (msg: IrcMessage) => {\n      switch (msg.command) {\n        case \"RPL_NAMREPLY\": {\n          const chan = msg.params.split(/ [=@*] /)[1]!.toLowerCase();\n          const names = msg.trailing.split(\" \");\n          const users: NamesUser[] = [];\n\n          names.forEach((n: string) => {\n            const user = n.split(/([~&@%+])/);\n            const name = user.pop()!;\n            const mode = user.pop();\n            users.push({ name, mode: mode || \"\" });\n          });\n\n          map[chan] = (map[chan] || []).concat(users);\n          debug(\"add %s %j\", chan, users);\n          break;\n        }\n\n        case \"RPL_ENDOFNAMES\": {\n          const chan = msg.params.split(\" \")[1]!.toLowerCase();\n          debug('emit \"names\" for %s', chan);\n          const e: NamesEvent = { channel: chan, names: map[chan] || [] };\n          const cb = irc.nameCallbacks[chan];\n\n          if (cb) cb(e);\n          else irc.emit(\"names\", e);\n\n          delete map[chan];\n          break;\n        }\n      }\n    });\n  };\n}\n\n/**\n * Fetch names for `channel` and invoke `fn(err, names)`.\n *\n * @param {String} channel\n * @param {Function} fn\n */\n\nfunction names(this: IrcClient, channel: string, fn?: NamesQueryCallback): void {\n  channel = channel.toLowerCase();\n\n  if (fn) {\n    this.nameCallbacks[channel] = (e: NamesEvent) => {\n      delete this.nameCallbacks[channel];\n      fn(null, e.names);\n    };\n  }\n\n  this.write(`NAMES ${channel}`);\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, NickEvent, Plugin } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * NICK plugin to emit \"nick\" events.\n *\n * @return {Function}\n */\n\nexport default function nick(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"NICK\") return;\n      const e: NickEvent = {\n        nick: utils.nick(msg),\n        hostmask: utils.hostmask(msg),\n        new: msg.trailing,\n      };\n      if (!e.new) e.new = msg.params;\n      if (e.nick === irc.me) irc.me = e.new;\n      irc.emit(\"nick\", e);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, NoticeEvent, Plugin } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * NOTICE plugin to emit \"notice\" events.\n *\n * @return {Function}\n */\n\nexport default function notice(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"NOTICE\") return;\n      const e: NoticeEvent = {\n        from: utils.nick(msg),\n        hostmask: utils.hostmask(msg),\n        to: msg.params.toLowerCase(),\n        message: msg.trailing,\n      };\n      irc.emit(\"notice\", e);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, PartEvent, Plugin } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * PART plugin to emit \"part\" events.\n *\n * @return {Function}\n */\n\nexport default function part(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"PART\") return;\n      const e: PartEvent = {\n        nick: utils.nick(msg),\n        hostmask: utils.hostmask(msg),\n        channels: utils.channelList(msg.params),\n        message: msg.trailing,\n      };\n      irc.emit(\"part\", e);\n    });\n  };\n}\n","import type { IrcClient, IrcMessage, Plugin } from \"../types\";\n\n/**\n * PONG plugin to reply to PING events.\n *\n * @return {Function}\n */\n\nexport default function pong(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command === \"PONG\") irc.emit(\"pong\", msg.trailing);\n      if (msg.command !== \"PING\") return;\n      irc.write(`PONG :${msg.trailing}`);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, Plugin, PrivmsgEvent } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * PRIVMSG plugin to emit \"message\" events.\n *\n * @return {Function}\n */\n\nexport default function privmsg(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"PRIVMSG\") return;\n      const e: PrivmsgEvent = {\n        from: utils.nick(msg),\n        hostmask: utils.hostmask(msg),\n        to: msg.params.toLowerCase(),\n        message: msg.trailing,\n      };\n      irc.emit(\"message\", e);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, Plugin, QuitEvent } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * QUIT plugin to emit \"quit\" events.\n *\n * @return {Function}\n */\n\nexport default function quit(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"QUIT\") return;\n      const e: QuitEvent = {\n        nick: utils.nick(msg),\n        hostmask: utils.hostmask(msg),\n        message: msg.trailing,\n      };\n      irc.emit(\"quit\", e);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\n\nimport type { IrcClient, IrcMessage, Plugin, TopicEvent } from \"../types\";\nimport * as utils from \"../utils\";\n\n/**\n * TOPIC plugin to emit \"topic\" events.\n *\n * @return {Function}\n */\n\nexport default function topic(): Plugin {\n  return (irc: IrcClient): void => {\n    let channel: string | undefined;\n    irc.on(\"data\", (msg: IrcMessage) => {\n      switch (msg.command) {\n        case \"RPL_NOTOPIC\":\n        case \"RPL_TOPIC\":\n          channel = msg.params.split(\" \")[1]!;\n          break;\n\n        case \"TOPIC\":\n          channel = msg.params;\n          break;\n\n        default:\n          return;\n      }\n\n      const e: TopicEvent = {\n        hostmask: utils.hostmask(msg),\n        channel: channel!.toLowerCase(),\n        topic: msg.trailing,\n      };\n      if (msg.command === \"TOPIC\") e.nick = utils.nick(msg);\n      irc.emit(\"topic\", e);\n    });\n  };\n}\n","import type { IrcClient, IrcMessage, Plugin } from \"../types\";\n\n/**\n * RPL_WELCOME plugin to set `irc.me`.\n *\n * @return {Function}\n */\n\nexport default function welcome(): Plugin {\n  return (irc: IrcClient): void => {\n    irc.on(\"data\", (msg: IrcMessage) => {\n      if (msg.command !== \"RPL_WELCOME\") return;\n      irc.me = msg.params;\n      irc.emit(\"welcome\", irc.me);\n    });\n  };\n}\n","/**\n * Module dependencies.\n */\nimport type { IrcClient, IrcMessage, Plugin, WhoisData, WhoisQueryCallback } from \"../types\";\n\n/**\n * WHOIS plugin to emit \"whois\" events.\n *\n * @return {Function}\n */\n\nexport default function whoisPlugin(): Plugin {\n  return (irc: IrcClient): void => {\n    let map: Record<string, WhoisData> = {};\n    let err: string | undefined;\n    irc.whois = whois;\n    irc.whoisCallbacks = {};\n\n    irc.on(\"data\", (msg: IrcMessage) => {\n      switch (msg.command) {\n        case \"RPL_WHOISUSER\": {\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          map[target] = map[target] || { channels: [], oper: false };\n          map[target]!.nickname = params[1];\n          map[target]!.username = params[2];\n          map[target]!.hostname = params[3];\n          map[target]!.realname = msg.trailing;\n          map[target]!.channels = [];\n          map[target]!.oper = false;\n          break;\n        }\n        case \"RPL_WHOISCHANNELS\": {\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          const channels = msg.trailing.split(\" \");\n          map[target]!.channels = map[target]!.channels.concat(channels);\n          break;\n        }\n        case \"RPL_WHOISSERVER\": {\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          map[target]!.server = params[2];\n          break;\n        }\n        case \"RPL_AWAY\": {\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          if (!map[target]) return;\n          map[target]!.away = msg.trailing;\n          break;\n        }\n        case \"RPL_WHOISOPERATOR\": {\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          map[target]!.oper = true;\n          break;\n        }\n        case \"RPL_WHOISIDLE\": {\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          map[target]!.idle = params[2]; // new Date(now - (n * 1000))\n          map[target]!.sign = params[3]; // new Date(n * 1000)\n          break;\n        }\n        case \"RPL_ENDOFWHOIS\": {\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          if (!map[target]) return;\n          const cb = irc.whoisCallbacks[target];\n          if (cb) cb(err, map[target]!);\n          else irc.emit(\"whois\", null, map[target]!);\n          map = {};\n          break;\n        }\n        case \"ERR_NEEDMOREPARAMS\": {\n          err = \"Not enough parameters\";\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          if (target !== \"whois\") return;\n          const cb = irc.whoisCallbacks[target];\n          if (cb) cb(err, null);\n          else irc.emit(\"whois\", err, null);\n          break;\n        }\n        case \"ERR_NOSUCHSERVER\": {\n          err = \"No such server\";\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          const cb = irc.whoisCallbacks[target];\n          if (cb) cb(err, null);\n          else irc.emit(\"whois\", err, null);\n          break;\n        }\n        case \"ERR_NOSUCHNICK\": {\n          err = \"No such nick/channel\";\n          const params = msg.params.split(\" \");\n          const target = params[1]!.toLowerCase();\n          const cb = irc.whoisCallbacks[target];\n          if (cb) cb(err, null);\n          else irc.emit(\"whois\", err, null);\n          break;\n        }\n      }\n    });\n  };\n}\n\n/**\n * Fetch whois data and invoke `fn(err, data)`.\n *\n * @param {String} target\n * @param {String} mask\n * @param {Function} fn\n */\n\nfunction whois(\n  this: IrcClient,\n  target: string,\n  mask?: string | WhoisQueryCallback,\n  fn?: WhoisQueryCallback,\n): void {\n  if (typeof mask === \"function\") {\n    fn = mask;\n    mask = \"\";\n  }\n\n  target = target.toLowerCase();\n\n  if (fn) {\n    this.whoisCallbacks[target] = (err: string | null | undefined, data: WhoisData | null) => {\n      delete this.whoisCallbacks[target];\n      fn(err, data);\n    };\n  }\n\n  this.write([\"WHOIS\", target, mask].filter(Boolean).join(\" \"));\n}\n","/**\n * Module dependencies.\n */\n\nimport { EventEmitter as Emitter } from \"events\";\n\nimport debugModule from \"debug\";\nimport replies from \"irc-replies\";\nimport Parser from \"slate-irc-parser\";\n\nimport type { IrcClient, IrcMessage, IrcStream, Plugin, WriteCallback } from \"./types\";\nexport type {\n  AwayEvent,\n  AnyFn,\n  ErrorEvent,\n  Hostmask,\n  IrcClient,\n  IrcMessage,\n  IrcStream,\n  InviteEvent,\n  JoinEvent,\n  KickEvent,\n  ModeEvent,\n  MotdEvent,\n  NamesEvent,\n  NamesQueryCallback,\n  NamesUser,\n  NickEvent,\n  NoticeEvent,\n  PartEvent,\n  Plugin,\n  PluginFactory,\n  PrivmsgEvent,\n  QuitEvent,\n  TopicEvent,\n  WhoisData,\n  WhoisQueryCallback,\n  WriteCallback,\n} from \"./types\";\n\n/**\n * Core plugins.\n */\n\nimport away from \"./plugins/away\";\nimport disconnect from \"./plugins/disconnect\";\nimport errors from \"./plugins/errors\";\nimport invite from \"./plugins/invite\";\nimport join from \"./plugins/join\";\nimport kick from \"./plugins/kick\";\nimport mode from \"./plugins/mode\";\nimport motd from \"./plugins/motd\";\nimport names from \"./plugins/names\";\nimport nick from \"./plugins/nick\";\nimport notice from \"./plugins/notice\";\nimport part from \"./plugins/part\";\nimport pong from \"./plugins/pong\";\nimport privmsg from \"./plugins/privmsg\";\nimport quit from \"./plugins/quit\";\nimport topic from \"./plugins/topic\";\nimport welcome from \"./plugins/welcome\";\nimport whois from \"./plugins/whois\";\n\n/**\n * Initialize a new IRC client with the\n * given duplex `stream`.\n *\n * @param {Stream} stream\n * @param {Parser} [parser]\n * @param {String} [encoding]\n */\n\nexport type ClientFactory = (\n  stream: IrcStream,\n  parser?: Parser,\n  encoding?: BufferEncoding,\n) => IrcClient;\n\nclass ClientImpl extends Emitter {\n  private static readonly debug = debugModule(\"slate-irc\");\n\n  stream!: IrcStream;\n  parser!: Parser;\n  me?: string;\n  names!: IrcClient[\"names\"];\n  whois!: IrcClient[\"whois\"];\n  nameCallbacks!: IrcClient[\"nameCallbacks\"];\n  whoisCallbacks!: IrcClient[\"whoisCallbacks\"];\n\n  constructor(stream: IrcStream, parser?: Parser, encoding?: BufferEncoding) {\n    super();\n    stream.setEncoding(encoding || \"utf8\");\n    this.stream = stream;\n    this.parser = parser || new Parser();\n    this.parser.on(\"message\", this.onmessage.bind(this));\n    stream.pipe(this.parser as unknown as NodeJS.WritableStream);\n    this.setMaxListeners(100);\n    this.use(away());\n    this.use(disconnect());\n    this.use(errors());\n    this.use(invite());\n    this.use(join());\n    this.use(kick());\n    this.use(mode());\n    this.use(motd());\n    this.use(names());\n    this.use(nick());\n    this.use(notice());\n    this.use(part());\n    this.use(pong());\n    this.use(privmsg());\n    this.use(quit());\n    this.use(topic());\n    this.use(welcome());\n    this.use(whois());\n  }\n\n  writeUnsafe(str: string, fn?: WriteCallback): void {\n    this.stream.write(`${str}\\r\\n`, fn);\n  }\n\n  write(str: string, fn?: WriteCallback): void {\n    if (str.includes(\"\\n\") || str.includes(\"\\r\")) {\n      if (fn) fn(new Error(\"The parameter to write() must not contain any '\\\\n' or '\\\\r'.\"));\n      return;\n    }\n    this.writeUnsafe(str, fn);\n  }\n\n  pass(pass: string, fn?: WriteCallback): void {\n    this.write(`PASS ${pass}`, fn);\n  }\n\n  webirc(\n    password: string,\n    username: string,\n    hostname: string,\n    ip: string,\n    fn?: WriteCallback,\n  ): void {\n    const message = [password, username, hostname, ip].join(\" \");\n    this.write(`WEBIRC ${message}`, fn);\n  }\n\n  nick(nick: string, fn?: WriteCallback): void {\n    this.write(`NICK ${nick}`, fn);\n  }\n\n  user(username: string, realname: string, fn?: WriteCallback): void {\n    this.write(`USER ${username} 0 * :${realname}`, fn);\n  }\n\n  invite(name: string, channel: string, fn?: WriteCallback): void {\n    this.write(`INVITE ${name} ${channel}`, fn);\n  }\n\n  send(target: string | string[], msg: string, fn?: WriteCallback): void {\n    this.write(`PRIVMSG ${toArray(target).join(\",\")} :${msg}`, fn);\n  }\n\n  action(target: string, msg: string, fn?: WriteCallback): void {\n    this.send(target, `\\u0001ACTION ${msg}\\u0001`, fn);\n  }\n\n  notice(target: string, msg: string, fn?: WriteCallback): void {\n    this.write(`NOTICE ${target} :${msg}`, fn);\n  }\n\n  ctcp(target: string, msg: string, fn?: WriteCallback): void {\n    this.notice(target, `\\x01${msg}\\x01`, fn);\n  }\n\n  join(\n    channels: string | string[],\n    keys?: string | string[] | WriteCallback,\n    fn?: WriteCallback,\n  ): void {\n    if (typeof keys === \"function\") {\n      fn = keys;\n      keys = \"\";\n    }\n\n    this.write(`JOIN ${toArray(channels).join(\",\")} ${toArray(keys).join(\",\")}`, fn);\n  }\n\n  part(channels: string | string[], msg?: string | WriteCallback, fn?: WriteCallback): void {\n    if (typeof msg === \"function\") {\n      fn = msg;\n      msg = \"\";\n    }\n\n    let part = `PART ${toArray(channels).join(\",\")}`;\n    if (msg) {\n      part += ` :${msg}`;\n    }\n    this.write(part, fn);\n  }\n\n  away(msg?: string, fn?: WriteCallback): void {\n    const awayMessage = msg || \"Talk to you later!\";\n    this.write(`AWAY :${awayMessage}`, fn);\n  }\n\n  back(fn?: WriteCallback): void {\n    this.write(\"AWAY\", fn);\n  }\n\n  topic(channel: string, topic?: string | WriteCallback, fn?: WriteCallback): void {\n    if (typeof topic === \"function\") {\n      fn = topic;\n      topic = \"\";\n    }\n\n    if (topic) {\n      topic = ` :${topic}`;\n    }\n\n    this.write(`TOPIC ${channel}${topic}`, fn);\n  }\n\n  kick(\n    channels: string | string[],\n    nicks: string | string[],\n    msg?: string | WriteCallback,\n    fn?: WriteCallback,\n  ): void {\n    if (typeof msg === \"function\") {\n      fn = msg;\n      msg = \"\";\n    }\n\n    let kick = `KICK ${toArray(channels).join(\",\")} ${toArray(nicks).join(\",\")}`;\n    if (msg) {\n      kick += ` :${msg}`;\n    }\n    this.write(kick, fn);\n  }\n\n  quit(msg?: string, fn?: WriteCallback): void {\n    const quitMessage = msg || \"Bye!\";\n    this.write(`QUIT :${quitMessage}`, fn);\n  }\n\n  oper(name: string, password: string, fn?: WriteCallback): void {\n    this.write(`OPER ${name} ${password}`, fn);\n  }\n\n  mode(target: string, flags: string, params?: string | WriteCallback, fn?: WriteCallback): void {\n    if (typeof params === \"function\") {\n      fn = params;\n      params = \"\";\n    }\n\n    if (params) {\n      this.write(`MODE ${target} ${flags} ${params}`, fn);\n    } else {\n      this.write(`MODE ${target} ${flags}`, fn);\n    }\n  }\n\n  use(fn: Plugin): IrcClient {\n    fn(this as unknown as IrcClient);\n    return this as unknown as IrcClient;\n  }\n\n  onmessage(msg: IrcMessage): void {\n    msg.command = replies[msg.command as keyof typeof replies] || msg.command;\n    ClientImpl.debug(\"message %s %s\", msg.command, msg.string);\n    this.emit(\"data\", msg);\n  }\n}\n\nfunction Client(stream: IrcStream, parser?: Parser, encoding?: BufferEncoding): IrcClient {\n  return new ClientImpl(stream, parser, encoding) as unknown as IrcClient;\n}\n\nexport default Client;\n\n/**\n * Array helper.\n */\n\nfunction toArray<T>(val: T | T[]): T[] {\n  return Array.isArray(val) ? val : [val];\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}