{"version":3,"file":"join-all.mjs","names":[],"sources":["../../src/operations/join-all.ts"],"sourcesContent":["import type { SingleConnection } from \"~/client/connection\";\nimport { MAX_OUTGOING_COMMAND_LENGTH } from \"../constants\";\nimport { awaitJoinResponse } from \"./join\";\nimport { splitIntoChunks } from \"~/utils/split-into-chunks\";\n\nexport async function joinAll(\n  conn: SingleConnection,\n  channelNames: string[],\n): Promise<Record<string, Error | undefined>> {\n  // e.g. \"JOIN #firstchannel,#secondchannel,#thirdchannel\"\n  // joining channels this way is much faster than sending individual JOIN commands\n  // the twitch server cuts off messages at 4096 characters so we produce chunks of that size\n  for (const channelName of channelNames) conn.wantedChannels.add(channelName);\n\n  const channelChunks = splitIntoChunks(\n    channelNames.map((element) => `#${element}`),\n    \",\",\n    MAX_OUTGOING_COMMAND_LENGTH - \"JOIN \".length,\n  );\n\n  const resultsMap: Record<string, Error | undefined> = {};\n\n  for (const chunk of channelChunks) {\n    conn.sendRaw(`JOIN ${chunk.join(\",\")}`);\n\n    const chunkNames = chunk.map((s) => s.slice(1));\n    const chunkPromises: Promise<unknown>[] = [];\n\n    // we await the joining of all channels of this chunk in parallel\n    for (const channelName of chunkNames) {\n      chunkPromises.push(\n        awaitJoinResponse(conn, channelName).then(\n          () => {\n            // on success\n            conn.joinedChannels.add(channelName);\n            resultsMap[channelName] = undefined;\n          },\n          (error: unknown) => {\n            // on failure\n            resultsMap[channelName] = error as Error;\n          },\n        ),\n      );\n    }\n\n    await Promise.all(chunkPromises);\n  }\n\n  return resultsMap;\n}\n"],"mappings":";;;;AAKA,eAAsB,QACpB,MACA,cAC4C;AAI5C,MAAK,MAAM,eAAe,aAAc,MAAK,eAAe,IAAI,YAAY;CAE5E,MAAM,gBAAgB,gBACpB,aAAa,KAAK,YAAY,IAAI,UAAU,EAC5C,KACA,8BAA8B,EAC/B;CAED,MAAM,aAAgD,EAAE;AAExD,MAAK,MAAM,SAAS,eAAe;AACjC,OAAK,QAAQ,QAAQ,MAAM,KAAK,IAAI,GAAG;EAEvC,MAAM,aAAa,MAAM,KAAK,MAAM,EAAE,MAAM,EAAE,CAAC;EAC/C,MAAM,gBAAoC,EAAE;AAG5C,OAAK,MAAM,eAAe,WACxB,eAAc,KACZ,kBAAkB,MAAM,YAAY,CAAC,WAC7B;AAEJ,QAAK,eAAe,IAAI,YAAY;AACpC,cAAW,eAAe,KAAA;MAE3B,UAAmB;AAElB,cAAW,eAAe;IAE7B,CACF;AAGH,QAAM,QAAQ,IAAI,cAAc;;AAGlC,QAAO"}