{"version":3,"file":"hosttarget.mjs","names":[],"sources":["../../../src/message/twitch-types/hosttarget.ts"],"sourcesContent":["import { ChannelIRCMessage } from \"../irc/channel-irc-message\";\nimport { type IRCMessageData, requireParameter } from \"../irc/irc-message\";\nimport { ParseError } from \"../parser/parse-error\";\nimport { reasonForValue } from \"~/utils/reason-for-value\";\n\nexport function parseHostedChannelName(\n  rawHostedChannelName: string | undefined,\n): string | undefined {\n  if (rawHostedChannelName == null || rawHostedChannelName.length <= 0) {\n    throw new ParseError(\n      `Malformed channel part in HOSTTARGET message: ${reasonForValue(\n        rawHostedChannelName,\n      )}`,\n    );\n  }\n\n  return rawHostedChannelName === \"-\" ? undefined : rawHostedChannelName;\n}\n\nexport function parseViewerCount(\n  rawViewerCount: string | undefined,\n): number | undefined {\n  if (rawViewerCount == null || rawViewerCount.length <= 0) {\n    throw new ParseError(\n      `Malformed viewer count part in HOSTTARGET message: ${reasonForValue(\n        rawViewerCount,\n      )}`,\n    );\n  }\n\n  if (rawViewerCount === \"-\") {\n    return undefined;\n  }\n\n  const numberValue = Number.parseInt(rawViewerCount);\n  if (Number.isNaN(numberValue)) {\n    throw new ParseError(\n      `Malformed viewer count part in HOSTTARGET message: ${reasonForValue(\n        rawViewerCount,\n      )}`,\n    );\n  }\n  return numberValue;\n}\n\nexport function parseHosttargetParameter(rawParameter: string): {\n  hostedChannelName: string | undefined;\n  viewerCount: number | undefined;\n} {\n  const split = rawParameter.split(\" \");\n  if (split.length !== 2) {\n    throw new ParseError(\n      \"HOSTTARGET accepts exactly 2 arguments in second parameter, \" +\n        `given: ${reasonForValue(rawParameter)}`,\n    );\n  }\n\n  const [rawHostedChannelName, rawViewerCount] = split;\n\n  return {\n    hostedChannelName: parseHostedChannelName(rawHostedChannelName),\n    viewerCount: parseViewerCount(rawViewerCount),\n  };\n}\n\nexport class HosttargetMessage extends ChannelIRCMessage {\n  /**\n   * channel name if now hosting channel,\n   *\n   * null if host mode was exited.\n   */\n  public readonly hostedChannelName: string | undefined;\n\n  /**\n   * The viewer count of the enabled host.\n   *\n   * null if viewercount is unknown or host mode was exited.\n   */\n  public readonly viewerCount: number | undefined;\n\n  public constructor(message: IRCMessageData) {\n    super(message);\n\n    const parsedSecondParameter = parseHosttargetParameter(\n      requireParameter(this, 1),\n    );\n    this.hostedChannelName = parsedSecondParameter.hostedChannelName;\n    this.viewerCount = parsedSecondParameter.viewerCount;\n  }\n\n  public wasHostModeExited(): this is ExitHostModeHosttargetMessage {\n    return this.hostedChannelName == null;\n  }\n\n  public wasHostModeEntered(): this is ExitedHostModeHosttargetMessage {\n    return this.hostedChannelName != null;\n  }\n}\n\nexport interface ExitHostModeHosttargetMessage extends HosttargetMessage {\n  readonly hostedChannelName: undefined;\n  readonly viewerCount: undefined;\n}\n\nexport interface ExitedHostModeHosttargetMessage extends HosttargetMessage {\n  readonly hostedChannelName: string;\n  readonly viewerCount: number | undefined;\n}\n"],"mappings":";;;;;AAKA,SAAgB,uBACd,sBACoB;AACpB,KAAI,wBAAwB,QAAQ,qBAAqB,UAAU,EACjE,OAAM,IAAI,WACR,iDAAiD,eAC/C,qBACD,GACF;AAGH,QAAO,yBAAyB,MAAM,KAAA,IAAY;;AAGpD,SAAgB,iBACd,gBACoB;AACpB,KAAI,kBAAkB,QAAQ,eAAe,UAAU,EACrD,OAAM,IAAI,WACR,sDAAsD,eACpD,eACD,GACF;AAGH,KAAI,mBAAmB,IACrB;CAGF,MAAM,cAAc,OAAO,SAAS,eAAe;AACnD,KAAI,OAAO,MAAM,YAAY,CAC3B,OAAM,IAAI,WACR,sDAAsD,eACpD,eACD,GACF;AAEH,QAAO;;AAGT,SAAgB,yBAAyB,cAGvC;CACA,MAAM,QAAQ,aAAa,MAAM,IAAI;AACrC,KAAI,MAAM,WAAW,EACnB,OAAM,IAAI,WACR,sEACY,eAAe,aAAa,GACzC;CAGH,MAAM,CAAC,sBAAsB,kBAAkB;AAE/C,QAAO;EACL,mBAAmB,uBAAuB,qBAAqB;EAC/D,aAAa,iBAAiB,eAAe;EAC9C;;AAGH,IAAa,oBAAb,cAAuC,kBAAkB;;;;;;CAMvD;;;;;;CAOA;CAEA,YAAmB,SAAyB;AAC1C,QAAM,QAAQ;EAEd,MAAM,wBAAwB,yBAC5B,iBAAiB,MAAM,EAAE,CAC1B;AACD,OAAK,oBAAoB,sBAAsB;AAC/C,OAAK,cAAc,sBAAsB;;CAG3C,oBAAkE;AAChE,SAAO,KAAK,qBAAqB;;CAGnC,qBAAqE;AACnE,SAAO,KAAK,qBAAqB"}