{"version":3,"file":"ducanh2912-react-hls.umd.cjs","sources":["../src/index.tsx"],"sourcesContent":["import Hls, { type HlsConfig } from \"hls.js\";\nimport type { FC, RefObject, VideoHTMLAttributes } from \"react\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nexport interface HlsPlayerProps extends VideoHTMLAttributes<HTMLVideoElement> {\n  hlsConfig?: HlsConfig;\n  playerRef?: RefObject<HTMLVideoElement>;\n  src: string;\n}\n\nconst ReactHlsPlayer: FC<HlsPlayerProps> = ({\n  hlsConfig,\n  playerRef: passedPlayerRef,\n  src,\n  autoPlay,\n  ...props\n}) => {\n  const [supported, setSupported] = useState(false);\n  const myRef = useRef<HTMLVideoElement>(null);\n  const playerRef = passedPlayerRef ?? myRef;\n  useEffect(() => {\n    let hls: Hls;\n    function _initPlayer() {\n      if (hls != null) {\n        hls.destroy();\n      }\n      const newHls = new Hls({\n        enableWorker: false,\n        ...hlsConfig,\n      });\n      if (playerRef.current != null) {\n        newHls.attachMedia(playerRef.current);\n      }\n      newHls.on(Hls.Events.MEDIA_ATTACHED, () => {\n        newHls.loadSource(src);\n        newHls.on(Hls.Events.MANIFEST_PARSED, () => {\n          if (autoPlay) {\n            playerRef?.current\n              ?.play()\n              .catch(() =>\n                console.log(\n                  \"Unable to autoplay prior to user interaction with the dom.\"\n                )\n              );\n          }\n        });\n      });\n      newHls.on(Hls.Events.ERROR, function (event, data) {\n        //eslint-ignore-next-line prettier/prettier\n        if (data.fatal) {\n          switch (data.type) {\n            case Hls.ErrorTypes.NETWORK_ERROR:\n              newHls.startLoad();\n              break;\n            case Hls.ErrorTypes.MEDIA_ERROR:\n              newHls.recoverMediaError();\n              break;\n            default:\n              _initPlayer();\n              break;\n          }\n        }\n      });\n      hls = newHls;\n    }\n    // Check for Media Source support\n    if (Hls.isSupported()) {\n      _initPlayer();\n      setSupported(true);\n    }\n    return () => {\n      if (hls != null) {\n        hls.destroy();\n      }\n    };\n  }, [autoPlay, hlsConfig, playerRef, src]);\n\n  // If Media Source is supported, use HLS.js to play video and fallback to using a regular video player if HLS is not supported in the user's browser\n  return supported ? (\n    // eslint-disable-next-line jsx-a11y/media-has-caption\n    <video ref={playerRef} {...props} />\n  ) : (\n    // eslint-disable-next-line jsx-a11y/media-has-caption\n    <video ref={playerRef} src={src} autoPlay={autoPlay} {...props} />\n  );\n};\n\nexport default ReactHlsPlayer;\n"],"names":["_excluded","hlsConfig","passedPlayerRef","_ref","playerRef","src","autoPlay","props","_objectWithoutPropertiesLoose","useState","supported","_useState","setSupported","myRef","useRef","useEffect","hls","Hls","isSupported","_initPlayer","destroy","newHls","enableWorker","current","attachMedia","on","Events","MEDIA_ATTACHED","loadSource","MANIFEST_PARSED","_playerRef$current","play","console","log","ERROR","event","data","fatal","type","ErrorTypes","NETWORK_ERROR","startLoad","MEDIA_ERROR","recoverMediaError","React","createElement","ref"],"mappings":"8nBAAA,IAAAA,EAAA,CAAA,YAAA,YAAA,MAAA,mBAU2C,YACzCC,IAAAA,EAAAA,EAAAA,UACWC,EAIRC,EAJHC,UACAC,EAAAA,EAAAA,IACAC,IAAAA,SACGC,oIACAC,CAAAL,EAAAH,KAC+BS,EAAAA,UAAS,GAApCC,EAAPC,EAAA,GAAkBC,EAAlBD,EAAA,GACWE,EAAGC,SAAyB,MACjCV,EAAS,MAAGF,EAAAA,EAAmBW,EA2DrC,OA1DAE,YAAU,WACR,IAAIC,EAiDJ,OAJIC,EAAG,QAACC,gBA5CR,SAASC,IACI,MAAPH,GACFA,EAAII,UAEN,IAAMC,EAAS,IAAIJ,EAAAA,QACjBK,EAAAA,CAAAA,cAAc,GACXrB,IAEoB,MAArBG,EAAUmB,SACZF,EAAOG,YAAYpB,EAAUmB,SAE/BF,EAAOI,GAAGR,UAAIS,OAAOC,eAAgB,WACnCN,EAAOO,WAAWvB,GAClBgB,EAAOI,GAAGR,UAAIS,OAAOG,gBAAiB,WAElCzB,IAAAA,EADEE,UACFF,GAAA,OAAAA,EAAAA,EAAWmB,UAAXO,EACIC,OADJ,MAES,kBACEC,QAACC,IACN,6DAFG,GAMZ,EACF,GACDZ,EAAOI,GAAGR,EAAAA,QAAIS,OAAOQ,MAAO,SAAUC,EAAOC,GAE3C,GAAIA,EAAKC,MACP,OAAQD,EAAKE,MACX,KAAKrB,EAAG,QAACsB,WAAWC,cAClBnB,EAAOoB,YACP,MACF,KAAKxB,EAAAA,QAAIsB,WAAWG,YAClBrB,EAAOsB,oBACP,MACF,QACExB,IAIP,GACDH,EAAMK,CACP,CAGCF,GACAP,GAAa,IAEH,WACC,MAAPI,GACFA,EAAII,SAEP,CACF,EAAE,CAACd,EAAUL,EAAWG,EAAWC,IAKlCuC,UAAOC,cAAA,QAAAC,EAFFpC,EAEEoC,CAAAA,IAAK1C,GAGZ,CAAO0C,IAAK1C,EAAWC,IAAKA,EAAKC,SAAUA,GAHhBC,GAK9B"}