{"version":3,"sources":["/Users/gwakko/Projects/shared-websocket/dist/index.cjs","../src/withSocket.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACA;ACuCA,MAAA,SAAsB,UAAA,CACpB,GAAA,EACA,iBAAA,EACA,aAAA,EACe;AACf,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,QAAA;AAEJ,EAAA,GAAA,CAAI,OAAO,kBAAA,IAAsB,UAAA,EAAY;AAC3C,IAAA,SAAA,EAAW,iBAAA;AAAA,EACb,EAAA,KAAO;AACL,IAAA,QAAA,EAAU,iBAAA;AACV,IAAA,SAAA,EAAW,aAAA;AAAA,EACb;AAEA,EAAA,MAAM,GAAA,EAAK,IAAI,sCAAA,CAAgB,GAAA,EAAK,OAAO,CAAA;AAC3C,EAAA,MAAM,WAAA,EAAa,IAAI,eAAA,CAAgB,CAAA;AAGvC,EAAA,GAAA,iBAAI,OAAA,2BAAS,QAAA,EAAQ;AACnB,IAAA,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,OAAA,EAAS;AAC1B,MAAA,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AACnB,MAAA,uBAAM,OAAA,CAAQ,MAAA,CAAO,MAAA,UAAU,IAAI,KAAA,CAAM,SAAS,GAAA;AAAA,IACpD;AACA,IAAA,OAAA,CAAQ,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,CAAA,EAAA,GAAM,UAAA,CAAW,KAAA,CAAM,OAAA,CAAS,MAAA,CAAQ,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EAC1G;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,CAAG,OAAA,CAAQ,CAAA;AACjB,IAAA,MAAM,QAAA,CAAS,EAAE,EAAA,EAAI,MAAA,EAAQ,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,EAClD,EAAA,QAAE;AACA,IAAA,UAAA,CAAW,KAAA,CAAM,CAAA;AACjB,IAAA,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,EACrB;AACF;AD9CA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,2aAAC","file":"/Users/gwakko/Projects/shared-websocket/dist/index.cjs","sourcesContent":[null,"import { SharedWebSocket } from './SharedWebSocket';\nimport type { SharedWebSocketOptions } from './types';\n\n/**\n * Callback context — destructure what you need.\n */\nexport interface SocketScope {\n  /** The SharedWebSocket instance. */\n  ws: SharedWebSocket;\n  /** AbortSignal — aborted when scope exits (use with stream/fetch). */\n  signal: AbortSignal;\n}\n\nexport interface WithSocketOptions extends SharedWebSocketOptions {\n  /** External AbortSignal — aborts the scope and disposes the socket. */\n  signal?: AbortSignal;\n}\n\n/**\n * Scoped WebSocket lifecycle — creates, connects, and auto-disposes.\n * Guarantees cleanup even on errors. No polyfills needed.\n *\n * @example\n * // Basic — destructure { ws }\n * await withSocket('wss://api.example.com/ws', async ({ ws }) => {\n *   ws.on('order.created', (order) => console.log(order));\n *   await longRunningWork();\n * });\n *\n * @example\n * // With auth and signal\n * await withSocket('wss://api.example.com/ws', {\n *   auth: () => localStorage.getItem('token')!,\n * }, async ({ ws, signal }) => {\n *   for await (const msg of ws.stream('chat.messages', signal)) {\n *     renderMessage(msg);\n *   }\n * });\n *\n * @example\n * // External cancellation\n * const controller = new AbortController();\n * setTimeout(() => controller.abort(), 30_000);\n *\n * await withSocket('wss://api.example.com/ws', {\n *   signal: controller.signal,\n * }, async ({ ws, signal }) => {\n *   ws.on('notifications', (n) => showToast(n));\n *   // Stays alive until controller aborts or scope exits\n *   await new Promise((_, reject) => signal.addEventListener('abort', reject));\n * });\n */\nexport async function withSocket(\n  url: string,\n  optionsOrCallback: WithSocketOptions | WithSocketCallback,\n  maybeCallback?: WithSocketCallback,\n): Promise<void> {\n  let options: WithSocketOptions | undefined;\n  let callback: WithSocketCallback;\n\n  if (typeof optionsOrCallback === 'function') {\n    callback = optionsOrCallback;\n  } else {\n    options = optionsOrCallback;\n    callback = maybeCallback!;\n  }\n\n  const ws = new SharedWebSocket(url, options);\n  const controller = new AbortController();\n\n  // Link external signal\n  if (options?.signal) {\n    if (options.signal.aborted) {\n      ws[Symbol.dispose]();\n      throw options.signal.reason ?? new Error('Aborted');\n    }\n    options.signal.addEventListener('abort', () => controller.abort(options!.signal!.reason), { once: true });\n  }\n\n  try {\n    await ws.connect();\n    await callback({ ws, signal: controller.signal });\n  } finally {\n    controller.abort();\n    ws[Symbol.dispose]();\n  }\n}\n\nexport type WithSocketCallback = (scope: SocketScope) => void | Promise<void>;\n"]}