{"version":3,"file":"use-media-url.cjs","names":[],"sources":["../src/use-media-url.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\n\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { MediaBase } from \"@langchain/langgraph-sdk/stream\";\n\n/**\n * Resolve the lazy {@link MediaBase.objectURL} promise into a string\n * suitable for direct use in `<audio src>` / `<img src>` /\n * `<video src>` / `<a href download>`. Returns `undefined` until the\n * URL is available.\n *\n * Lifecycle:\n *  - On mount (or when `media` changes) the hook awaits\n *    `media.objectURL`, then commits the resolved string to state.\n *  - On unmount (or when `media` changes) the hook calls\n *    `media.revoke()` to free the object URL slot. The next consumer\n *    that accesses `media.objectURL` mints a fresh URL from the same\n *    `Blob`, so live re-renders just work.\n *  - If the underlying handle errored before settling, the promise\n *    rejects and `useMediaURL` stays at `undefined`. Inspect\n *    `media.error` to surface the failure.\n *\n * Pair with {@link useAudio} / {@link useImages} / {@link useVideo} /\n * {@link useFiles} to bridge SDK media handles into React DOM nodes\n * without manual `URL.createObjectURL` bookkeeping.\n */\nexport function useMediaURL(media: MediaBase | undefined): string | undefined {\n  const [url, setUrl] = useState<string>();\n\n  useEffect(() => {\n    if (media == null) {\n      setUrl(undefined);\n      return undefined;\n    }\n    let cancelled = false;\n    media.objectURL.then(\n      (resolved) => {\n        if (!cancelled) setUrl(resolved);\n      },\n      () => {\n        // Errors surfaced via `media.error`; keep `url` undefined so\n        // consumers fall through to a no-src render.\n      }\n    );\n    return () => {\n      cancelled = true;\n      setUrl(undefined);\n      try {\n        media.revoke();\n      } catch {\n        // best-effort\n      }\n    };\n  }, [media]);\n\n  return url;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA4BA,SAAgB,YAAY,OAAkD;CAC5E,MAAM,CAAC,KAAK,WAAA,GAAA,MAAA,WAA4B;AAExC,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,SAAS,MAAM;AACjB,UAAO,KAAA,EAAU;AACjB;;EAEF,IAAI,YAAY;AAChB,QAAM,UAAU,MACb,aAAa;AACZ,OAAI,CAAC,UAAW,QAAO,SAAS;WAE5B,GAIP;AACD,eAAa;AACX,eAAY;AACZ,UAAO,KAAA,EAAU;AACjB,OAAI;AACF,UAAM,QAAQ;WACR;;IAIT,CAAC,MAAM,CAAC;AAEX,QAAO"}