{"version":3,"sources":["../src/components/StreamPlayer.ts"],"names":["defineComponent","ref","shallowRef","createStream","onMounted","onBeforeUnmount","watch","h"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\r\n  defineComponent,\r\n  h,\r\n  ref,\r\n  shallowRef,\r\n  watch,\r\n  onMounted,\r\n  onBeforeUnmount,\r\n  type PropType,\r\n} from \"vue\";\r\n\r\nimport { createStream, type StreamAPI } from \"js-streaming\";\r\nimport type { StreamStatus, StreamType } from \"../types\";\r\n\r\nexport default defineComponent({\r\n  name: \"StreamPlayer\",\r\n  props: {\r\n    type: { type: String as PropType<StreamType>, required: true },\r\n    config: { type: Object as PropType<Record<string, any>>, required: true },\r\n    autoOpen: { type: Boolean, default: false },\r\n    autoplay: { type: Boolean, default: false },\r\n    controls: { type: Boolean, default: true },\r\n    playsInline: { type: Boolean, default: true },\r\n    muted: { type: Boolean, default: false },\r\n    logLimit: { type: Number, default: 500 },\r\n  },\r\n  emits: [\"open\", \"close\", \"status\", \"error\", \"message\"],\r\n  setup(props, { emit, expose }) {\r\n    const status = ref<StreamStatus>(\"idle\");\r\n    const isOpen = ref(false);\r\n    const error = ref<Error | null>(null);\r\n    const messages = shallowRef<unknown[]>([]);\r\n    const videoRef = ref<HTMLVideoElement | null>(null);\r\n\r\n    let api: StreamAPI | null = null;\r\n    let unsubs: Array<() => void> = [];\r\n\r\n    function destroyAPI() {\r\n      try {\r\n        api?.close();\r\n      } catch {}\r\n      for (const off of unsubs) off();\r\n      unsubs = [];\r\n      api = null;\r\n      isOpen.value = false;\r\n    }\r\n\r\n    function bindAPI(a: StreamAPI) {\r\n      const onOpen = () => {\r\n        isOpen.value = true;\r\n        emit(\"open\");\r\n      };\r\n      const onClose = () => {\r\n        isOpen.value = false;\r\n        emit(\"close\");\r\n      };\r\n      const onStatus = (s: StreamStatus) => {\r\n        status.value = s;\r\n        emit(\"status\", s);\r\n      };\r\n      const onError = (e: Error) => {\r\n        error.value = e;\r\n        emit(\"error\", e);\r\n      };\r\n      const onMessage = (m: unknown) => {\r\n        const next = messages.value.slice();\r\n        next.push(m);\r\n        messages.value = next.slice(-props.logLimit);\r\n        emit(\"message\", m);\r\n      };\r\n\r\n      unsubs.push(a.on(\"open\", onOpen));\r\n      unsubs.push(a.on(\"close\", onClose));\r\n      unsubs.push(a.on(\"status\", onStatus));\r\n      unsubs.push(a.on(\"error\", onError));\r\n      unsubs.push(a.on(\"message\", onMessage));\r\n\r\n      if ((a as any).off) {\r\n        unsubs.push(() => {\r\n          (a as any).off(\"open\", onOpen);\r\n          (a as any).off(\"close\", onClose);\r\n          (a as any).off(\"status\", onStatus);\r\n          (a as any).off(\"error\", onError);\r\n          (a as any).off(\"message\", onMessage);\r\n        });\r\n      }\r\n    }\r\n\r\n    async function instantiate(openNow = false) {\r\n      destroyAPI();\r\n      const opts = { type: props.type, ...props.config, video: videoRef.value };\r\n      api = createStream(opts) as StreamAPI;\r\n      bindAPI(api);\r\n      if (openNow) await api.open();\r\n    }\r\n\r\n    expose({\r\n      open: instantiate,\r\n      close: () => api?.close(),\r\n      send: (d: any) => api?.send?.(d),\r\n    });\r\n\r\n    onMounted(() => props.autoOpen && instantiate(true));\r\n    onBeforeUnmount(destroyAPI);\r\n\r\n    watch(\r\n      () => [props.type, props.config],\r\n      () => {\r\n        props.autoOpen ? instantiate(true) : destroyAPI();\r\n      }\r\n    );\r\n\r\n    return () =>\r\n      props.type === \"hls\" || props.type === \"webrtc\"\r\n        ? h(\"video\", {\r\n            ref: videoRef,\r\n            autoplay: props.autoplay,\r\n            controls: props.controls,\r\n          })\r\n        : h(\r\n            \"div\",\r\n            {},\r\n            messages.value.map((m, i) =>\r\n              h(\"div\", { key: i }, JSON.stringify(m))\r\n            )\r\n          );\r\n  },\r\n});\r\n"]}