@opendesign-plus/components 0.0.1-rc.34 → 0.0.1-rc.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +6 -6
  3. package/dist/components/activity/index.d.ts +9 -9
  4. package/dist/components/banner/index.d.ts +6 -6
  5. package/dist/components/events/index.d.ts +20 -20
  6. package/dist/components/header/OHeaderMobile.vue.d.ts +22 -22
  7. package/dist/components/header/components/HeaderNavMobile.vue.d.ts +3 -3
  8. package/dist/components/header/index.d.ts +27 -27
  9. package/dist/components/header-search/index.d.ts +13 -13
  10. package/dist/components/meeting/OMeetingPlayback.vue.d.ts +6 -6
  11. package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +664 -0
  12. package/dist/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +1 -1
  13. package/dist/components/meeting/index.d.ts +31 -31
  14. package/dist/components/search/index.d.ts +11 -11
  15. package/dist/components.cjs.js +1 -1
  16. package/dist/components.css +1 -1
  17. package/dist/components.es.js +139 -131
  18. package/dist/treeshaking/_virtual/@babel/runtime/helpers/esm/extends.js.mjs +12 -0
  19. package/dist/treeshaking/_virtual/@babel/runtime/helpers/extends.js.mjs +22 -0
  20. package/dist/treeshaking/_virtual/@babel/runtime/helpers/extends.js2.mjs +4 -0
  21. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/byte-helpers.js.mjs +141 -0
  22. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/codecs.js.mjs +158 -0
  23. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/containers.js.mjs +161 -0
  24. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js.mjs +15 -0
  25. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/ebml-helpers.js.mjs +126 -0
  26. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/id3-helpers.js.mjs +32 -0
  27. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/media-groups.js.mjs +13 -0
  28. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/media-types.js.mjs +17 -0
  29. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/mp4-helpers.js.mjs +57 -0
  30. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/nal-helpers.js.mjs +78 -0
  31. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/resolve-url.js.mjs +23 -0
  32. package/dist/treeshaking/_virtual/@videojs/vhs-utils/es/stream.js.mjs +51 -0
  33. package/dist/treeshaking/_virtual/@videojs/xhr/lib/http-handler.js.mjs +55 -0
  34. package/dist/treeshaking/_virtual/@videojs/xhr/lib/index.js.mjs +7 -0
  35. package/dist/treeshaking/_virtual/@videojs/xhr/lib/index.js2.mjs +300 -0
  36. package/dist/treeshaking/_virtual/@videojs/xhr/lib/index.js3.mjs +4 -0
  37. package/dist/treeshaking/_virtual/@videojs/xhr/lib/interceptors.js.mjs +109 -0
  38. package/dist/treeshaking/_virtual/@videojs/xhr/lib/retry.js.mjs +104 -0
  39. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/conventions.js.mjs +142 -0
  40. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/conventions.js2.mjs +4 -0
  41. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/dom-parser.js.mjs +224 -0
  42. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/dom-parser.js2.mjs +4 -0
  43. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/dom.js.mjs +1449 -0
  44. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/dom.js2.mjs +4 -0
  45. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/entities.js.mjs +2149 -0
  46. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/entities.js2.mjs +4 -0
  47. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/index.js.mjs +5 -0
  48. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/index.js2.mjs +16 -0
  49. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/index.js3.mjs +4 -0
  50. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/sax.js.mjs +594 -0
  51. package/dist/treeshaking/_virtual/@xmldom/xmldom/lib/sax.js2.mjs +4 -0
  52. package/dist/treeshaking/_virtual/___vite-browser-external.mjs +6 -0
  53. package/dist/treeshaking/_virtual/__vite-browser-external.mjs +4 -0
  54. package/dist/treeshaking/_virtual/_commonjsHelpers.mjs +33 -0
  55. package/dist/treeshaking/_virtual/_plugin-vue_export-helper.mjs +10 -0
  56. package/dist/treeshaking/_virtual/global/document.js.mjs +7 -0
  57. package/dist/treeshaking/_virtual/global/document.js2.mjs +24 -0
  58. package/dist/treeshaking/_virtual/global/window.js.mjs +7 -0
  59. package/dist/treeshaking/_virtual/global/window.js2.mjs +22 -0
  60. package/dist/treeshaking/_virtual/icon-all.mjs +20 -0
  61. package/dist/treeshaking/_virtual/icon-avatar-line.mjs +21 -0
  62. package/dist/treeshaking/_virtual/icon-caret-left.mjs +20 -0
  63. package/dist/treeshaking/_virtual/icon-caret-right.mjs +20 -0
  64. package/dist/treeshaking/_virtual/icon-checked.mjs +20 -0
  65. package/dist/treeshaking/_virtual/icon-chevron-down.mjs +20 -0
  66. package/dist/treeshaking/_virtual/icon-chevron-right.mjs +17 -0
  67. package/dist/treeshaking/_virtual/icon-chevron-up.mjs +20 -0
  68. package/dist/treeshaking/_virtual/icon-close.mjs +20 -0
  69. package/dist/treeshaking/_virtual/icon-competition.mjs +31 -0
  70. package/dist/treeshaking/_virtual/icon-copy.mjs +21 -0
  71. package/dist/treeshaking/_virtual/icon-delete-hover.mjs +24 -0
  72. package/dist/treeshaking/_virtual/icon-delete.mjs +17 -0
  73. package/dist/treeshaking/_virtual/icon-event.mjs +21 -0
  74. package/dist/treeshaking/_virtual/icon-events.mjs +31 -0
  75. package/dist/treeshaking/_virtual/icon-filter.mjs +21 -0
  76. package/dist/treeshaking/_virtual/icon-header-back.mjs +20 -0
  77. package/dist/treeshaking/_virtual/icon-header-menu.mjs +20 -0
  78. package/dist/treeshaking/_virtual/icon-header-search.mjs +26 -0
  79. package/dist/treeshaking/_virtual/icon-help.mjs +21 -0
  80. package/dist/treeshaking/_virtual/icon-image-upload.mjs +20 -0
  81. package/dist/treeshaking/_virtual/icon-image-zoomin.mjs +20 -0
  82. package/dist/treeshaking/_virtual/icon-locale.mjs +21 -0
  83. package/dist/treeshaking/_virtual/icon-meet.mjs +21 -0
  84. package/dist/treeshaking/_virtual/icon-moon.mjs +21 -0
  85. package/dist/treeshaking/_virtual/icon-playing.mjs +33 -0
  86. package/dist/treeshaking/_virtual/icon-refresh.mjs +21 -0
  87. package/dist/treeshaking/_virtual/icon-release.mjs +31 -0
  88. package/dist/treeshaking/_virtual/icon-search.mjs +17 -0
  89. package/dist/treeshaking/_virtual/icon-speaker.mjs +17 -0
  90. package/dist/treeshaking/_virtual/icon-summit.mjs +21 -0
  91. package/dist/treeshaking/_virtual/icon-summit2.mjs +31 -0
  92. package/dist/treeshaking/_virtual/icon-sun.mjs +21 -0
  93. package/dist/treeshaking/_virtual/icon-tip.mjs +21 -0
  94. package/dist/treeshaking/_virtual/icon-tips.mjs +17 -0
  95. package/dist/treeshaking/_virtual/is-function/index.js.mjs +20 -0
  96. package/dist/treeshaking/_virtual/m3u8-parser/dist/m3u8-parser.es.js.mjs +1390 -0
  97. package/dist/treeshaking/_virtual/mpd-parser/dist/mpd-parser.es.js.mjs +1693 -0
  98. package/dist/treeshaking/_virtual/mux.js/lib/tools/parse-sidx.js.mjs +7 -0
  99. package/dist/treeshaking/_virtual/mux.js/lib/tools/parse-sidx.js2.mjs +45 -0
  100. package/dist/treeshaking/_virtual/mux.js/lib/utils/clock.js.mjs +5 -0
  101. package/dist/treeshaking/_virtual/mux.js/lib/utils/clock.js2.mjs +42 -0
  102. package/dist/treeshaking/_virtual/mux.js/lib/utils/numbers.js.mjs +27 -0
  103. package/dist/treeshaking/_virtual/video.js/dist/video-js.css +2018 -0
  104. package/dist/treeshaking/_virtual/video.js/dist/video.es.js.mjs +40111 -0
  105. package/dist/treeshaking/_virtual/videojs-vtt.js/lib/browser-index.js.mjs +7 -0
  106. package/dist/treeshaking/_virtual/videojs-vtt.js/lib/browser-index.js2.mjs +37 -0
  107. package/dist/treeshaking/_virtual/videojs-vtt.js/lib/browser-index.js3.mjs +4 -0
  108. package/dist/treeshaking/_virtual/videojs-vtt.js/lib/vtt.js.mjs +1082 -0
  109. package/dist/treeshaking/_virtual/videojs-vtt.js/lib/vttcue.js.mjs +235 -0
  110. package/dist/treeshaking/_virtual/videojs-vtt.js/lib/vttregion.js.mjs +122 -0
  111. package/dist/treeshaking/assets/meeting/empty.png.mjs +4 -0
  112. package/dist/treeshaking/assets/meeting/transparent.png.mjs +4 -0
  113. package/dist/treeshaking/components/activity/OActivityApproval.css +638 -0
  114. package/dist/treeshaking/components/activity/OActivityApproval.vue.d.ts +273 -0
  115. package/dist/treeshaking/components/activity/OActivityApproval.vue.mjs +718 -0
  116. package/dist/treeshaking/components/activity/OActivityApproval.vue4.mjs +6 -0
  117. package/dist/treeshaking/components/activity/OActivityApproval2.css +331 -0
  118. package/dist/treeshaking/components/activity/OActivityForm.css +367 -0
  119. package/dist/treeshaking/components/activity/OActivityForm.vue.d.ts +138 -0
  120. package/dist/treeshaking/components/activity/OActivityForm.vue.mjs +628 -0
  121. package/dist/treeshaking/components/activity/OActivityForm.vue4.mjs +6 -0
  122. package/dist/treeshaking/components/activity/OActivityForm2.css +330 -0
  123. package/dist/treeshaking/components/activity/OActivityMyCalendar.css +1237 -0
  124. package/dist/treeshaking/components/activity/OActivityMyCalendar.vue.d.ts +636 -0
  125. package/dist/treeshaking/components/activity/OActivityMyCalendar.vue.mjs +856 -0
  126. package/dist/treeshaking/components/activity/OActivityMyCalendar.vue4.mjs +6 -0
  127. package/dist/treeshaking/components/activity/OActivityMyCalendar2.css +314 -0
  128. package/dist/treeshaking/components/activity/composables/useActivityConfig.d.ts +17 -0
  129. package/dist/treeshaking/components/activity/composables/useActivityConfig.mjs +139 -0
  130. package/dist/treeshaking/components/activity/config.d.ts +1 -0
  131. package/dist/treeshaking/components/activity/config.mjs +4 -0
  132. package/dist/treeshaking/components/activity/index.d.ts +648 -0
  133. package/dist/treeshaking/components/activity/index.mjs +29 -0
  134. package/dist/treeshaking/components/activity/types.d.ts +88 -0
  135. package/dist/treeshaking/components/banner/OBanner.css +151 -0
  136. package/dist/treeshaking/components/banner/OBanner.vue.d.ts +13 -0
  137. package/dist/treeshaking/components/banner/OBanner.vue.mjs +8 -0
  138. package/dist/treeshaking/components/banner/OBanner.vue2.mjs +141 -0
  139. package/dist/treeshaking/components/banner/OBanner2.css +39 -0
  140. package/dist/treeshaking/components/banner/OBannerContent.css +113 -0
  141. package/dist/treeshaking/components/banner/OBannerContent.vue.d.ts +7 -0
  142. package/dist/treeshaking/components/banner/OBannerContent.vue.mjs +7 -0
  143. package/dist/treeshaking/components/banner/OBannerContent.vue2.mjs +102 -0
  144. package/dist/treeshaking/components/banner/index.d.ts +68 -0
  145. package/dist/treeshaking/components/banner/index.mjs +16 -0
  146. package/dist/treeshaking/components/banner/types.d.ts +31 -0
  147. package/dist/treeshaking/components/common/AppAvatar.css +20 -0
  148. package/dist/treeshaking/components/common/AppAvatar.vue.mjs +7 -0
  149. package/dist/treeshaking/components/common/AppAvatar.vue2.mjs +83 -0
  150. package/dist/treeshaking/components/common/ClientOnly.vue.mjs +16 -0
  151. package/dist/treeshaking/components/common/ClientOnly.vue2.mjs +4 -0
  152. package/dist/treeshaking/components/common/ContentWrapper.css +36 -0
  153. package/dist/treeshaking/components/common/ContentWrapper.vue.mjs +7 -0
  154. package/dist/treeshaking/components/common/ContentWrapper.vue2.mjs +50 -0
  155. package/dist/treeshaking/components/common/MoreText.css +69 -0
  156. package/dist/treeshaking/components/common/MoreText.vue.mjs +7 -0
  157. package/dist/treeshaking/components/common/MoreText.vue2.mjs +88 -0
  158. package/dist/treeshaking/components/common/ThFilter.css +146 -0
  159. package/dist/treeshaking/components/common/ThFilter.vue.mjs +270 -0
  160. package/dist/treeshaking/components/common/ThFilter.vue3.mjs +5 -0
  161. package/dist/treeshaking/components/config-provider/OPlusConfigProvider.vue.d.ts +24 -0
  162. package/dist/treeshaking/components/config-provider/OPlusConfigProvider.vue.mjs +33 -0
  163. package/dist/treeshaking/components/config-provider/OPlusConfigProvider.vue2.mjs +4 -0
  164. package/dist/treeshaking/components/config-provider/index.d.ts +30 -0
  165. package/dist/treeshaking/components/config-provider/index.mjs +9 -0
  166. package/dist/treeshaking/components/cookie-notice/OCookieNotice.css +35 -0
  167. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue.d.ts +17 -0
  168. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue.mjs +8 -0
  169. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue2.mjs +367 -0
  170. package/dist/treeshaking/components/cookie-notice/OCookieNotice2.css +309 -0
  171. package/dist/treeshaking/components/cookie-notice/index.d.ts +53 -0
  172. package/dist/treeshaking/components/cookie-notice/index.mjs +9 -0
  173. package/dist/treeshaking/components/element-plus/OElCookieNotice.css +306 -0
  174. package/dist/treeshaking/components/element-plus/OElCookieNotice.vue.d.ts +34 -0
  175. package/dist/treeshaking/components/element-plus/OElCookieNotice.vue.mjs +8 -0
  176. package/dist/treeshaking/components/element-plus/OElCookieNotice.vue2.mjs +384 -0
  177. package/dist/treeshaking/components/element-plus/OElCookieNotice2.css +691 -0
  178. package/dist/treeshaking/components/element-plus/index.d.ts +2 -0
  179. package/dist/treeshaking/components/events/OEventsApply.css +583 -0
  180. package/dist/treeshaking/components/events/OEventsApply.vue.d.ts +16 -0
  181. package/dist/treeshaking/components/events/OEventsApply.vue.mjs +98 -0
  182. package/dist/treeshaking/components/events/OEventsApply.vue3.mjs +5 -0
  183. package/dist/treeshaking/components/events/OEventsCalendar.css +501 -0
  184. package/dist/treeshaking/components/events/OEventsCalendar.vue.d.ts +5 -0
  185. package/dist/treeshaking/components/events/OEventsCalendar.vue.mjs +289 -0
  186. package/dist/treeshaking/components/events/OEventsCalendar.vue3.mjs +5 -0
  187. package/dist/treeshaking/components/events/OEventsList.css +470 -0
  188. package/dist/treeshaking/components/events/OEventsList.vue.d.ts +26 -0
  189. package/dist/treeshaking/components/events/OEventsList.vue.mjs +237 -0
  190. package/dist/treeshaking/components/events/OEventsList.vue3.mjs +5 -0
  191. package/dist/treeshaking/components/events/config.d.ts +14 -0
  192. package/dist/treeshaking/components/events/config.mjs +37 -0
  193. package/dist/treeshaking/components/events/index.d.ts +78 -0
  194. package/dist/treeshaking/components/events/index.mjs +26 -0
  195. package/dist/treeshaking/components/events/types.d.ts +73 -0
  196. package/dist/treeshaking/components/events/types.mjs +9 -0
  197. package/{src/components/events/utils.ts → dist/treeshaking/components/events/utils.d.ts} +7 -9
  198. package/dist/treeshaking/components/events/utils.mjs +6 -0
  199. package/dist/treeshaking/components/footer/OFooter.css +617 -0
  200. package/dist/treeshaking/components/footer/OFooter.vue.d.ts +46 -0
  201. package/dist/treeshaking/components/footer/OFooter.vue.mjs +7 -0
  202. package/dist/treeshaking/components/footer/OFooter.vue2.mjs +348 -0
  203. package/dist/treeshaking/components/footer/index.d.ts +89 -0
  204. package/dist/treeshaking/components/footer/index.mjs +9 -0
  205. package/dist/treeshaking/components/header/OHeader.css +65 -0
  206. package/dist/treeshaking/components/header/OHeader.vue.d.ts +30 -0
  207. package/dist/treeshaking/components/header/OHeader.vue.mjs +7 -0
  208. package/dist/treeshaking/components/header/OHeader.vue2.mjs +118 -0
  209. package/dist/treeshaking/components/header/OHeaderMobile.css +106 -0
  210. package/dist/treeshaking/components/header/OHeaderMobile.vue.d.ts +178 -0
  211. package/dist/treeshaking/components/header/OHeaderMobile.vue.mjs +7 -0
  212. package/dist/treeshaking/components/header/OHeaderMobile.vue2.mjs +141 -0
  213. package/dist/treeshaking/components/header/components/HeaderContent.css +1062 -0
  214. package/dist/treeshaking/components/header/components/HeaderContent.vue.d.ts +13 -0
  215. package/dist/treeshaking/components/header/components/HeaderContent.vue.mjs +7 -0
  216. package/dist/treeshaking/components/header/components/HeaderContent.vue2.mjs +235 -0
  217. package/dist/treeshaking/components/header/components/HeaderNav.css +141 -0
  218. package/dist/treeshaking/components/header/components/HeaderNav.vue.d.ts +19 -0
  219. package/dist/treeshaking/components/header/components/HeaderNav.vue.mjs +7 -0
  220. package/dist/treeshaking/components/header/components/HeaderNav.vue2.mjs +207 -0
  221. package/dist/treeshaking/components/header/components/HeaderNavMobile.css +419 -0
  222. package/dist/treeshaking/components/header/components/HeaderNavMobile.vue.d.ts +36 -0
  223. package/dist/treeshaking/components/header/components/HeaderNavMobile.vue.mjs +7 -0
  224. package/dist/treeshaking/components/header/components/HeaderNavMobile.vue2.mjs +229 -0
  225. package/dist/treeshaking/components/header/index.d.ts +153 -0
  226. package/dist/treeshaking/components/header/index.mjs +16 -0
  227. package/dist/treeshaking/components/header/types.d.ts +85 -0
  228. package/dist/treeshaking/components/header/types.mjs +9 -0
  229. package/dist/treeshaking/components/header-language-switcher/OHeaderLanguageSwitcher.css +140 -0
  230. package/dist/treeshaking/components/header-language-switcher/OHeaderLanguageSwitcher.vue.d.ts +58 -0
  231. package/dist/treeshaking/components/header-language-switcher/OHeaderLanguageSwitcher.vue.mjs +8 -0
  232. package/dist/treeshaking/components/header-language-switcher/OHeaderLanguageSwitcher.vue2.mjs +125 -0
  233. package/dist/treeshaking/components/header-language-switcher/OHeaderLanguageSwitcher2.css +11 -0
  234. package/dist/treeshaking/components/header-language-switcher/index.d.ts +105 -0
  235. package/dist/treeshaking/components/header-language-switcher/index.mjs +9 -0
  236. package/dist/treeshaking/components/header-search/OHeaderSearch.css +199 -0
  237. package/dist/treeshaking/components/header-search/OHeaderSearch.vue.d.ts +1032 -0
  238. package/dist/treeshaking/components/header-search/OHeaderSearch.vue.mjs +7 -0
  239. package/dist/treeshaking/components/header-search/OHeaderSearch.vue2.mjs +419 -0
  240. package/dist/treeshaking/components/header-search/index.d.ts +607 -0
  241. package/dist/treeshaking/components/header-search/index.mjs +9 -0
  242. package/dist/treeshaking/components/header-source-code/OHeaderSourceCode.css +133 -0
  243. package/dist/treeshaking/components/header-source-code/OHeaderSourceCode.vue.d.ts +18 -0
  244. package/dist/treeshaking/components/header-source-code/OHeaderSourceCode.vue.mjs +7 -0
  245. package/dist/treeshaking/components/header-source-code/OHeaderSourceCode.vue2.mjs +88 -0
  246. package/dist/treeshaking/components/header-source-code/index.d.ts +23 -0
  247. package/dist/treeshaking/components/header-source-code/index.mjs +9 -0
  248. package/dist/treeshaking/components/header-theme/OHeaderTheme.css +48 -0
  249. package/dist/treeshaking/components/header-theme/OHeaderTheme.vue.d.ts +25 -0
  250. package/dist/treeshaking/components/header-theme/OHeaderTheme.vue.mjs +7 -0
  251. package/dist/treeshaking/components/header-theme/OHeaderTheme.vue2.mjs +86 -0
  252. package/dist/treeshaking/components/header-theme/index.d.ts +50 -0
  253. package/dist/treeshaking/components/header-theme/index.mjs +9 -0
  254. package/dist/treeshaking/components/header-user/OHeaderUser.css +135 -0
  255. package/dist/treeshaking/components/header-user/OHeaderUser.vue.d.ts +40 -0
  256. package/dist/treeshaking/components/header-user/OHeaderUser.vue.mjs +8 -0
  257. package/dist/treeshaking/components/header-user/OHeaderUser.vue2.mjs +121 -0
  258. package/dist/treeshaking/components/header-user/OHeaderUser2.css +80 -0
  259. package/dist/treeshaking/components/header-user/index.d.ts +53 -0
  260. package/dist/treeshaking/components/header-user/index.mjs +9 -0
  261. package/dist/treeshaking/components/meeting/OMeetingCalendar.css +978 -0
  262. package/dist/treeshaking/components/meeting/OMeetingCalendar.vue.d.ts +297 -0
  263. package/dist/treeshaking/components/meeting/OMeetingCalendar.vue.mjs +510 -0
  264. package/dist/treeshaking/components/meeting/OMeetingCalendar.vue3.mjs +5 -0
  265. package/dist/treeshaking/components/meeting/OMeetingForm.css +767 -0
  266. package/dist/treeshaking/components/meeting/OMeetingForm.vue.d.ts +141 -0
  267. package/dist/treeshaking/components/meeting/OMeetingForm.vue.mjs +1020 -0
  268. package/dist/treeshaking/components/meeting/OMeetingForm.vue4.mjs +6 -0
  269. package/dist/treeshaking/components/meeting/OMeetingForm2.css +361 -0
  270. package/dist/treeshaking/components/meeting/OMeetingMyCalendar.css +1342 -0
  271. package/dist/treeshaking/components/meeting/OMeetingMyCalendar.vue.d.ts +644 -0
  272. package/dist/treeshaking/components/meeting/OMeetingMyCalendar.vue.mjs +890 -0
  273. package/dist/treeshaking/components/meeting/OMeetingMyCalendar.vue4.mjs +6 -0
  274. package/dist/treeshaking/components/meeting/OMeetingMyCalendar2.css +325 -0
  275. package/dist/treeshaking/components/meeting/OMeetingPlayback.css +256 -0
  276. package/dist/treeshaking/components/meeting/OMeetingPlayback.vue.d.ts +94 -0
  277. package/dist/treeshaking/components/meeting/OMeetingPlayback.vue.mjs +328 -0
  278. package/dist/treeshaking/components/meeting/OMeetingPlayback.vue3.mjs +5 -0
  279. package/dist/treeshaking/components/meeting/OMeetingSigCalendar.css +224 -0
  280. package/dist/treeshaking/components/meeting/OMeetingSigCalendar.vue.d.ts +26 -0
  281. package/dist/treeshaking/components/meeting/OMeetingSigCalendar.vue.mjs +396 -0
  282. package/dist/treeshaking/components/meeting/OMeetingSigCalendar.vue3.mjs +5 -0
  283. package/dist/treeshaking/components/meeting/components/OMeetingCalendarList.css +421 -0
  284. package/dist/treeshaking/components/meeting/components/OMeetingCalendarList.vue.d.ts +29 -0
  285. package/dist/treeshaking/components/meeting/components/OMeetingCalendarList.vue.mjs +395 -0
  286. package/dist/treeshaking/components/meeting/components/OMeetingCalendarList.vue3.mjs +5 -0
  287. package/dist/treeshaking/components/meeting/components/OMeetingCalendarSelector.css +382 -0
  288. package/dist/treeshaking/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +664 -0
  289. package/dist/treeshaking/components/meeting/components/OMeetingCalendarSelector.vue.mjs +132 -0
  290. package/dist/treeshaking/components/meeting/components/OMeetingCalendarSelector.vue4.mjs +6 -0
  291. package/dist/treeshaking/components/meeting/components/OMeetingCalendarSelector2.css +346 -0
  292. package/dist/treeshaking/components/meeting/components/OMeetingDetail.css +113 -0
  293. package/dist/treeshaking/components/meeting/components/OMeetingDetail.vue.d.ts +13 -0
  294. package/dist/treeshaking/components/meeting/components/OMeetingDetail.vue.mjs +189 -0
  295. package/dist/treeshaking/components/meeting/components/OMeetingDetail.vue3.mjs +5 -0
  296. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackSubtitles.css +564 -0
  297. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackSubtitles.vue.d.ts +20 -0
  298. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackSubtitles.vue.mjs +426 -0
  299. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackSubtitles.vue4.mjs +6 -0
  300. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackSubtitles2.css +347 -0
  301. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackVideo.css +431 -0
  302. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +17 -0
  303. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackVideo.vue.mjs +244 -0
  304. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackVideo.vue3.mjs +5 -0
  305. package/dist/treeshaking/components/meeting/components/OMeetingSigAside.css +171 -0
  306. package/dist/treeshaking/components/meeting/components/OMeetingSigAside.vue.d.ts +16 -0
  307. package/dist/treeshaking/components/meeting/components/OMeetingSigAside.vue.mjs +112 -0
  308. package/dist/treeshaking/components/meeting/components/OMeetingSigAside.vue3.mjs +5 -0
  309. package/dist/treeshaking/components/meeting/composables/useMeetingConfig.d.ts +14 -0
  310. package/dist/treeshaking/components/meeting/composables/useMeetingConfig.mjs +97 -0
  311. package/dist/treeshaking/components/meeting/config.d.ts +12 -0
  312. package/dist/treeshaking/components/meeting/config.mjs +19 -0
  313. package/dist/treeshaking/components/meeting/index.d.ts +829 -0
  314. package/dist/treeshaking/components/meeting/index.mjs +44 -0
  315. package/dist/treeshaking/components/meeting/types.d.ts +237 -0
  316. package/dist/treeshaking/components/meeting/types.mjs +17 -0
  317. package/dist/treeshaking/components/meeting/utils.d.ts +9 -0
  318. package/dist/treeshaking/components/meeting/utils.mjs +68 -0
  319. package/dist/treeshaking/components/search/OSearchInput.css +155 -0
  320. package/dist/treeshaking/components/search/OSearchInput.vue.d.ts +1025 -0
  321. package/dist/treeshaking/components/search/OSearchInput.vue.mjs +7 -0
  322. package/dist/treeshaking/components/search/OSearchInput.vue2.mjs +382 -0
  323. package/dist/treeshaking/components/search/composables/useImageSearch.d.ts +48 -0
  324. package/dist/treeshaking/components/search/composables/useImageSearch.mjs +134 -0
  325. package/dist/treeshaking/components/search/composables/useKeywordHighlight.d.ts +2 -0
  326. package/{src/components/search/composables/useKeywordHighlight.ts → dist/treeshaking/components/search/composables/useKeywordHighlight.mjs} +28 -30
  327. package/dist/treeshaking/components/search/composables/useSearchHistory.d.ts +14 -0
  328. package/{src/components/search/composables/useSearchHistory.ts → dist/treeshaking/components/search/composables/useSearchHistory.mjs} +58 -75
  329. package/dist/treeshaking/components/search/index.d.ts +600 -0
  330. package/dist/treeshaking/components/search/index.mjs +9 -0
  331. package/dist/treeshaking/components/search/internal/HighlightText.css +12 -0
  332. package/dist/treeshaking/components/search/internal/HighlightText.vue.d.ts +9 -0
  333. package/dist/treeshaking/components/search/internal/HighlightText.vue.mjs +7 -0
  334. package/dist/treeshaking/components/search/internal/HighlightText.vue2.mjs +33 -0
  335. package/dist/treeshaking/components/search/internal/SearchImageInput.css +213 -0
  336. package/dist/treeshaking/components/search/internal/SearchImageInput.vue.d.ts +736 -0
  337. package/dist/treeshaking/components/search/internal/SearchImageInput.vue.mjs +8 -0
  338. package/dist/treeshaking/components/search/internal/SearchImageInput.vue2.mjs +305 -0
  339. package/dist/treeshaking/components/search/internal/SearchImageInput2.css +38 -0
  340. package/dist/treeshaking/components/search/internal/SearchPanel.css +547 -0
  341. package/dist/treeshaking/components/search/internal/SearchPanel.vue.d.ts +100 -0
  342. package/dist/treeshaking/components/search/internal/SearchPanel.vue.mjs +7 -0
  343. package/dist/treeshaking/components/search/internal/SearchPanel.vue2.mjs +249 -0
  344. package/{src/components/search/types.ts → dist/treeshaking/components/search/types.d.ts} +20 -25
  345. package/dist/treeshaking/components/section/OSection.css +173 -0
  346. package/dist/treeshaking/components/section/OSection.vue.d.ts +37 -0
  347. package/dist/treeshaking/components/section/OSection.vue.mjs +7 -0
  348. package/dist/treeshaking/components/section/OSection.vue2.mjs +93 -0
  349. package/dist/treeshaking/components/section/index.d.ts +47 -0
  350. package/dist/treeshaking/components/section/index.mjs +9 -0
  351. package/dist/treeshaking/i18n/en.mjs +281 -0
  352. package/{src/i18n/index.ts → dist/treeshaking/i18n/index.mjs} +49 -56
  353. package/dist/treeshaking/i18n/zh.mjs +271 -0
  354. package/{src/index.ts → dist/treeshaking/index.d.ts} +1 -3
  355. package/dist/treeshaking/index.mjs +51 -0
  356. package/dist/treeshaking/shared/provide.mjs +4 -0
  357. package/package.json +15 -5
  358. package/docs/design.md +0 -27
  359. package/docs/design_banner.md +0 -41
  360. package/docs/design_section.md +0 -27
  361. package/scripts/generate-components-index.js +0 -62
  362. package/src/assets/events/svg-icons/icon-checked.svg +0 -3
  363. package/src/assets/events/svg-icons/icon-competition.svg +0 -7
  364. package/src/assets/events/svg-icons/icon-events.svg +0 -4
  365. package/src/assets/events/svg-icons/icon-release.svg +0 -4
  366. package/src/assets/events/svg-icons/icon-summit.svg +0 -4
  367. package/src/assets/meeting/empty.png +0 -0
  368. package/src/assets/meeting/svg-icons/icon-all.svg +0 -4
  369. package/src/assets/meeting/svg-icons/icon-backward.svg +0 -4
  370. package/src/assets/meeting/svg-icons/icon-calendar.svg +0 -3
  371. package/src/assets/meeting/svg-icons/icon-cancel.svg +0 -4
  372. package/src/assets/meeting/svg-icons/icon-captions.svg +0 -4
  373. package/src/assets/meeting/svg-icons/icon-close-captions.svg +0 -6
  374. package/src/assets/meeting/svg-icons/icon-close-fullscreen.svg +0 -6
  375. package/src/assets/meeting/svg-icons/icon-copy.svg +0 -4
  376. package/src/assets/meeting/svg-icons/icon-create.svg +0 -5
  377. package/src/assets/meeting/svg-icons/icon-delete.svg +0 -7
  378. package/src/assets/meeting/svg-icons/icon-empty.svg +0 -65
  379. package/src/assets/meeting/svg-icons/icon-event.svg +0 -4
  380. package/src/assets/meeting/svg-icons/icon-export.svg +0 -3
  381. package/src/assets/meeting/svg-icons/icon-forward.svg +0 -4
  382. package/src/assets/meeting/svg-icons/icon-fullscreen.svg +0 -6
  383. package/src/assets/meeting/svg-icons/icon-help.svg +0 -3
  384. package/src/assets/meeting/svg-icons/icon-important.svg +0 -4
  385. package/src/assets/meeting/svg-icons/icon-info.svg +0 -3
  386. package/src/assets/meeting/svg-icons/icon-meet.svg +0 -4
  387. package/src/assets/meeting/svg-icons/icon-meeting-message.svg +0 -5
  388. package/src/assets/meeting/svg-icons/icon-meeting.svg +0 -4
  389. package/src/assets/meeting/svg-icons/icon-play.svg +0 -5
  390. package/src/assets/meeting/svg-icons/icon-playing-tip.svg +0 -7
  391. package/src/assets/meeting/svg-icons/icon-playing.svg +0 -5
  392. package/src/assets/meeting/svg-icons/icon-question.svg +0 -4
  393. package/src/assets/meeting/svg-icons/icon-sound.svg +0 -5
  394. package/src/assets/meeting/svg-icons/icon-speaker.svg +0 -3
  395. package/src/assets/meeting/svg-icons/icon-summit.svg +0 -4
  396. package/src/assets/meeting/svg-icons/icon-telligent.svg +0 -3
  397. package/src/assets/meeting/svg-icons/icon-tip.svg +0 -3
  398. package/src/assets/meeting/svg-icons/icon-todo.svg +0 -4
  399. package/src/assets/meeting/transparent.png +0 -0
  400. package/src/assets/styles/element-plus.scss +0 -277
  401. package/src/assets/svg-icons/icon-arrow-left.svg +0 -3
  402. package/src/assets/svg-icons/icon-avatar-line.svg +0 -3
  403. package/src/assets/svg-icons/icon-caret-left.svg +0 -3
  404. package/src/assets/svg-icons/icon-caret-right.svg +0 -3
  405. package/src/assets/svg-icons/icon-chevron-down.svg +0 -3
  406. package/src/assets/svg-icons/icon-chevron-right.svg +0 -3
  407. package/src/assets/svg-icons/icon-chevron-up.svg +0 -3
  408. package/src/assets/svg-icons/icon-close.svg +0 -3
  409. package/src/assets/svg-icons/icon-delete-hover.svg +0 -4
  410. package/src/assets/svg-icons/icon-delete.svg +0 -7
  411. package/src/assets/svg-icons/icon-filter.svg +0 -3
  412. package/src/assets/svg-icons/icon-header-back.svg +0 -3
  413. package/src/assets/svg-icons/icon-header-delete.svg +0 -3
  414. package/src/assets/svg-icons/icon-header-menu.svg +0 -3
  415. package/src/assets/svg-icons/icon-header-person.svg +0 -3
  416. package/src/assets/svg-icons/icon-header-search.svg +0 -4
  417. package/src/assets/svg-icons/icon-image-close.svg +0 -4
  418. package/src/assets/svg-icons/icon-image-upload.svg +0 -3
  419. package/src/assets/svg-icons/icon-image-zoomin.svg +0 -3
  420. package/src/assets/svg-icons/icon-loading.svg +0 -4
  421. package/src/assets/svg-icons/icon-locale.svg +0 -3
  422. package/src/assets/svg-icons/icon-log-off.svg +0 -3
  423. package/src/assets/svg-icons/icon-message.svg +0 -3
  424. package/src/assets/svg-icons/icon-moon.svg +0 -3
  425. package/src/assets/svg-icons/icon-outlink.svg +0 -3
  426. package/src/assets/svg-icons/icon-overview.svg +0 -3
  427. package/src/assets/svg-icons/icon-refresh.svg +0 -3
  428. package/src/assets/svg-icons/icon-search.svg +0 -3
  429. package/src/assets/svg-icons/icon-setting.svg +0 -3
  430. package/src/assets/svg-icons/icon-sun.svg +0 -3
  431. package/src/assets/svg-icons/icon-tips.svg +0 -3
  432. package/src/components/activity/OActivityApproval.vue +0 -868
  433. package/src/components/activity/OActivityForm.vue +0 -548
  434. package/src/components/activity/OActivityMyCalendar.vue +0 -1540
  435. package/src/components/activity/composables/useActivityConfig.ts +0 -141
  436. package/src/components/activity/config.ts +0 -1
  437. package/src/components/activity/index.ts +0 -24
  438. package/src/components/activity/types.ts +0 -95
  439. package/src/components/banner/OBanner.vue +0 -288
  440. package/src/components/banner/OBannerContent.vue +0 -175
  441. package/src/components/banner/index.ts +0 -18
  442. package/src/components/banner/types.ts +0 -39
  443. package/src/components/common/AppAvatar.vue +0 -83
  444. package/src/components/common/ClientOnly.vue +0 -13
  445. package/src/components/common/ContentWrapper.vue +0 -85
  446. package/src/components/common/MoreText.vue +0 -124
  447. package/src/components/common/ThFilter.vue +0 -330
  448. package/src/components/config-provider/OPlusConfigProvider.vue +0 -32
  449. package/src/components/config-provider/index.ts +0 -10
  450. package/src/components/cookie-notice/OCookieNotice.vue +0 -575
  451. package/src/components/cookie-notice/index.ts +0 -10
  452. package/src/components/element-plus/OElCookieNotice.vue +0 -603
  453. package/src/components/element-plus/index.ts +0 -3
  454. package/src/components/events/OEventsApply.vue +0 -509
  455. package/src/components/events/OEventsCalendar.vue +0 -600
  456. package/src/components/events/OEventsList.vue +0 -461
  457. package/src/components/events/config.ts +0 -35
  458. package/src/components/events/index.ts +0 -24
  459. package/src/components/events/types.ts +0 -84
  460. package/src/components/footer/OFooter.vue +0 -577
  461. package/src/components/footer/index.ts +0 -10
  462. package/src/components/header/OHeader.vue +0 -157
  463. package/src/components/header/OHeaderMobile.vue +0 -184
  464. package/src/components/header/components/HeaderContent.vue +0 -1125
  465. package/src/components/header/components/HeaderNav.vue +0 -278
  466. package/src/components/header/components/HeaderNavMobile.vue +0 -380
  467. package/src/components/header/index.ts +0 -18
  468. package/src/components/header/types.ts +0 -96
  469. package/src/components/header-language-switcher/OHeaderLanguageSwitcher.vue +0 -253
  470. package/src/components/header-language-switcher/index.ts +0 -10
  471. package/src/components/header-search/OHeaderSearch.vue +0 -628
  472. package/src/components/header-search/index.ts +0 -10
  473. package/src/components/header-source-code/OHeaderSourceCode.vue +0 -151
  474. package/src/components/header-source-code/index.ts +0 -10
  475. package/src/components/header-theme/OHeaderTheme.vue +0 -132
  476. package/src/components/header-theme/index.ts +0 -10
  477. package/src/components/header-user/OHeaderUser.vue +0 -238
  478. package/src/components/header-user/index.ts +0 -10
  479. package/src/components/meeting/OMeetingCalendar.vue +0 -943
  480. package/src/components/meeting/OMeetingForm.vue +0 -1131
  481. package/src/components/meeting/OMeetingMyCalendar.vue +0 -1601
  482. package/src/components/meeting/OMeetingPlayback.vue +0 -469
  483. package/src/components/meeting/OMeetingSigCalendar.vue +0 -500
  484. package/src/components/meeting/components/OMeetingCalendarList.vue +0 -626
  485. package/src/components/meeting/components/OMeetingCalendarSelector.vue +0 -213
  486. package/src/components/meeting/components/OMeetingDetail.vue +0 -285
  487. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +0 -615
  488. package/src/components/meeting/components/OMeetingPlaybackVideo.vue +0 -741
  489. package/src/components/meeting/components/OMeetingSigAside.vue +0 -205
  490. package/src/components/meeting/composables/useMeetingConfig.ts +0 -108
  491. package/src/components/meeting/config.ts +0 -48
  492. package/src/components/meeting/index.ts +0 -45
  493. package/src/components/meeting/types.ts +0 -270
  494. package/src/components/meeting/utils.ts +0 -70
  495. package/src/components/search/OSearchInput.vue +0 -526
  496. package/src/components/search/composables/useImageSearch.ts +0 -157
  497. package/src/components/search/index.ts +0 -23
  498. package/src/components/search/internal/HighlightText.vue +0 -37
  499. package/src/components/search/internal/SearchImageInput.vue +0 -498
  500. package/src/components/search/internal/SearchPanel.vue +0 -431
  501. package/src/components/section/OSection.vue +0 -178
  502. package/src/components/section/index.ts +0 -10
  503. package/src/draft/Banner.vue +0 -265
  504. package/src/draft/ButtonCards.vue +0 -106
  505. package/src/draft/Feature.vue +0 -134
  506. package/src/draft/Footer.vue +0 -519
  507. package/src/draft/HorizontalAnchor.vue +0 -165
  508. package/src/draft/ItemSwiper.vue +0 -133
  509. package/src/draft/Logo.vue +0 -141
  510. package/src/draft/LogoCard.vue +0 -75
  511. package/src/draft/LogoV2.vue +0 -19
  512. package/src/draft/MainCard.vue +0 -38
  513. package/src/draft/MultiCard.vue +0 -95
  514. package/src/draft/MultiIconCard.vue +0 -74
  515. package/src/draft/OInfoCard.vue +0 -176
  516. package/src/draft/Process.vue +0 -81
  517. package/src/draft/Section.vue +0 -167
  518. package/src/draft/SingleTabCard.vue +0 -85
  519. package/src/draft/SliderCard.vue +0 -111
  520. package/src/env.d.ts +0 -16
  521. package/src/i18n/en.ts +0 -278
  522. package/src/i18n/zh.ts +0 -268
  523. package/src/shared/provide.ts +0 -6
  524. package/src/shims-vue-dompurify-html.d.ts +0 -17
  525. package/src/vue.d.ts +0 -10
  526. package/tsconfig.json +0 -37
  527. package/vite.config.ts +0 -123
@@ -0,0 +1,1390 @@
1
+ import Stream from "../../@videojs/vhs-utils/es/stream.js.mjs";
2
+ import _extends from "../../@babel/runtime/helpers/esm/extends.js.mjs";
3
+ import decodeB64ToUint8Array from "../../@videojs/vhs-utils/es/decode-b64-to-uint8-array.js.mjs";
4
+ /*! @name m3u8-parser @version 7.2.0 @license Apache-2.0 */
5
+ class LineStream extends Stream {
6
+ constructor() {
7
+ super();
8
+ this.buffer = "";
9
+ }
10
+ /**
11
+ * Add new data to be parsed.
12
+ *
13
+ * @param {string} data the text to process
14
+ */
15
+ push(data) {
16
+ let nextNewline;
17
+ this.buffer += data;
18
+ nextNewline = this.buffer.indexOf("\n");
19
+ for (; nextNewline > -1; nextNewline = this.buffer.indexOf("\n")) {
20
+ this.trigger("data", this.buffer.substring(0, nextNewline));
21
+ this.buffer = this.buffer.substring(nextNewline + 1);
22
+ }
23
+ }
24
+ }
25
+ const TAB = String.fromCharCode(9);
26
+ const parseByterange = function(byterangeString) {
27
+ const match = /([0-9.]*)?@?([0-9.]*)?/.exec(byterangeString || "");
28
+ const result = {};
29
+ if (match[1]) {
30
+ result.length = parseInt(match[1], 10);
31
+ }
32
+ if (match[2]) {
33
+ result.offset = parseInt(match[2], 10);
34
+ }
35
+ return result;
36
+ };
37
+ const attributeSeparator = function() {
38
+ const key = "[^=]*";
39
+ const value = '"[^"]*"|[^,]*';
40
+ const keyvalue = "(?:" + key + ")=(?:" + value + ")";
41
+ return new RegExp("(?:^|,)(" + keyvalue + ")");
42
+ };
43
+ const parseAttributes = function(attributes) {
44
+ const result = {};
45
+ if (!attributes) {
46
+ return result;
47
+ }
48
+ const attrs = attributes.split(attributeSeparator());
49
+ let i = attrs.length;
50
+ let attr;
51
+ while (i--) {
52
+ if (attrs[i] === "") {
53
+ continue;
54
+ }
55
+ attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1);
56
+ attr[0] = attr[0].replace(/^\s+|\s+$/g, "");
57
+ attr[1] = attr[1].replace(/^\s+|\s+$/g, "");
58
+ attr[1] = attr[1].replace(/^['"](.*)['"]$/g, "$1");
59
+ result[attr[0]] = attr[1];
60
+ }
61
+ return result;
62
+ };
63
+ const parseResolution = (resolution) => {
64
+ const split = resolution.split("x");
65
+ const result = {};
66
+ if (split[0]) {
67
+ result.width = parseInt(split[0], 10);
68
+ }
69
+ if (split[1]) {
70
+ result.height = parseInt(split[1], 10);
71
+ }
72
+ return result;
73
+ };
74
+ class ParseStream extends Stream {
75
+ constructor() {
76
+ super();
77
+ this.customParsers = [];
78
+ this.tagMappers = [];
79
+ }
80
+ /**
81
+ * Parses an additional line of input.
82
+ *
83
+ * @param {string} line a single line of an M3U8 file to parse
84
+ */
85
+ push(line) {
86
+ let match;
87
+ let event;
88
+ line = line.trim();
89
+ if (line.length === 0) {
90
+ return;
91
+ }
92
+ if (line[0] !== "#") {
93
+ this.trigger("data", {
94
+ type: "uri",
95
+ uri: line
96
+ });
97
+ return;
98
+ }
99
+ const newLines = this.tagMappers.reduce((acc, mapper) => {
100
+ const mappedLine = mapper(line);
101
+ if (mappedLine === line) {
102
+ return acc;
103
+ }
104
+ return acc.concat([mappedLine]);
105
+ }, [line]);
106
+ newLines.forEach((newLine) => {
107
+ for (let i = 0; i < this.customParsers.length; i++) {
108
+ if (this.customParsers[i].call(this, newLine)) {
109
+ return;
110
+ }
111
+ }
112
+ if (newLine.indexOf("#EXT") !== 0) {
113
+ this.trigger("data", {
114
+ type: "comment",
115
+ text: newLine.slice(1)
116
+ });
117
+ return;
118
+ }
119
+ newLine = newLine.replace("\r", "");
120
+ match = /^#EXTM3U/.exec(newLine);
121
+ if (match) {
122
+ this.trigger("data", {
123
+ type: "tag",
124
+ tagType: "m3u"
125
+ });
126
+ return;
127
+ }
128
+ match = /^#EXTINF:([0-9\.]*)?,?(.*)?$/.exec(newLine);
129
+ if (match) {
130
+ event = {
131
+ type: "tag",
132
+ tagType: "inf"
133
+ };
134
+ if (match[1]) {
135
+ event.duration = parseFloat(match[1]);
136
+ }
137
+ if (match[2]) {
138
+ event.title = match[2];
139
+ }
140
+ this.trigger("data", event);
141
+ return;
142
+ }
143
+ match = /^#EXT-X-TARGETDURATION:([0-9.]*)?/.exec(newLine);
144
+ if (match) {
145
+ event = {
146
+ type: "tag",
147
+ tagType: "targetduration"
148
+ };
149
+ if (match[1]) {
150
+ event.duration = parseInt(match[1], 10);
151
+ }
152
+ this.trigger("data", event);
153
+ return;
154
+ }
155
+ match = /^#EXT-X-VERSION:([0-9.]*)?/.exec(newLine);
156
+ if (match) {
157
+ event = {
158
+ type: "tag",
159
+ tagType: "version"
160
+ };
161
+ if (match[1]) {
162
+ event.version = parseInt(match[1], 10);
163
+ }
164
+ this.trigger("data", event);
165
+ return;
166
+ }
167
+ match = /^#EXT-X-MEDIA-SEQUENCE:(\-?[0-9.]*)?/.exec(newLine);
168
+ if (match) {
169
+ event = {
170
+ type: "tag",
171
+ tagType: "media-sequence"
172
+ };
173
+ if (match[1]) {
174
+ event.number = parseInt(match[1], 10);
175
+ }
176
+ this.trigger("data", event);
177
+ return;
178
+ }
179
+ match = /^#EXT-X-DISCONTINUITY-SEQUENCE:(\-?[0-9.]*)?/.exec(newLine);
180
+ if (match) {
181
+ event = {
182
+ type: "tag",
183
+ tagType: "discontinuity-sequence"
184
+ };
185
+ if (match[1]) {
186
+ event.number = parseInt(match[1], 10);
187
+ }
188
+ this.trigger("data", event);
189
+ return;
190
+ }
191
+ match = /^#EXT-X-PLAYLIST-TYPE:(.*)?$/.exec(newLine);
192
+ if (match) {
193
+ event = {
194
+ type: "tag",
195
+ tagType: "playlist-type"
196
+ };
197
+ if (match[1]) {
198
+ event.playlistType = match[1];
199
+ }
200
+ this.trigger("data", event);
201
+ return;
202
+ }
203
+ match = /^#EXT-X-BYTERANGE:(.*)?$/.exec(newLine);
204
+ if (match) {
205
+ event = _extends(parseByterange(match[1]), {
206
+ type: "tag",
207
+ tagType: "byterange"
208
+ });
209
+ this.trigger("data", event);
210
+ return;
211
+ }
212
+ match = /^#EXT-X-ALLOW-CACHE:(YES|NO)?/.exec(newLine);
213
+ if (match) {
214
+ event = {
215
+ type: "tag",
216
+ tagType: "allow-cache"
217
+ };
218
+ if (match[1]) {
219
+ event.allowed = !/NO/.test(match[1]);
220
+ }
221
+ this.trigger("data", event);
222
+ return;
223
+ }
224
+ match = /^#EXT-X-MAP:(.*)$/.exec(newLine);
225
+ if (match) {
226
+ event = {
227
+ type: "tag",
228
+ tagType: "map"
229
+ };
230
+ if (match[1]) {
231
+ const attributes = parseAttributes(match[1]);
232
+ if (attributes.URI) {
233
+ event.uri = attributes.URI;
234
+ }
235
+ if (attributes.BYTERANGE) {
236
+ event.byterange = parseByterange(attributes.BYTERANGE);
237
+ }
238
+ }
239
+ this.trigger("data", event);
240
+ return;
241
+ }
242
+ match = /^#EXT-X-STREAM-INF:(.*)$/.exec(newLine);
243
+ if (match) {
244
+ event = {
245
+ type: "tag",
246
+ tagType: "stream-inf"
247
+ };
248
+ if (match[1]) {
249
+ event.attributes = parseAttributes(match[1]);
250
+ if (event.attributes.RESOLUTION) {
251
+ event.attributes.RESOLUTION = parseResolution(event.attributes.RESOLUTION);
252
+ }
253
+ if (event.attributes.BANDWIDTH) {
254
+ event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);
255
+ }
256
+ if (event.attributes["FRAME-RATE"]) {
257
+ event.attributes["FRAME-RATE"] = parseFloat(event.attributes["FRAME-RATE"]);
258
+ }
259
+ if (event.attributes["PROGRAM-ID"]) {
260
+ event.attributes["PROGRAM-ID"] = parseInt(event.attributes["PROGRAM-ID"], 10);
261
+ }
262
+ }
263
+ this.trigger("data", event);
264
+ return;
265
+ }
266
+ match = /^#EXT-X-MEDIA:(.*)$/.exec(newLine);
267
+ if (match) {
268
+ event = {
269
+ type: "tag",
270
+ tagType: "media"
271
+ };
272
+ if (match[1]) {
273
+ event.attributes = parseAttributes(match[1]);
274
+ }
275
+ this.trigger("data", event);
276
+ return;
277
+ }
278
+ match = /^#EXT-X-ENDLIST/.exec(newLine);
279
+ if (match) {
280
+ this.trigger("data", {
281
+ type: "tag",
282
+ tagType: "endlist"
283
+ });
284
+ return;
285
+ }
286
+ match = /^#EXT-X-DISCONTINUITY/.exec(newLine);
287
+ if (match) {
288
+ this.trigger("data", {
289
+ type: "tag",
290
+ tagType: "discontinuity"
291
+ });
292
+ return;
293
+ }
294
+ match = /^#EXT-X-PROGRAM-DATE-TIME:(.*)$/.exec(newLine);
295
+ if (match) {
296
+ event = {
297
+ type: "tag",
298
+ tagType: "program-date-time"
299
+ };
300
+ if (match[1]) {
301
+ event.dateTimeString = match[1];
302
+ event.dateTimeObject = new Date(match[1]);
303
+ }
304
+ this.trigger("data", event);
305
+ return;
306
+ }
307
+ match = /^#EXT-X-KEY:(.*)$/.exec(newLine);
308
+ if (match) {
309
+ event = {
310
+ type: "tag",
311
+ tagType: "key"
312
+ };
313
+ if (match[1]) {
314
+ event.attributes = parseAttributes(match[1]);
315
+ if (event.attributes.IV) {
316
+ if (event.attributes.IV.substring(0, 2).toLowerCase() === "0x") {
317
+ event.attributes.IV = event.attributes.IV.substring(2);
318
+ }
319
+ event.attributes.IV = event.attributes.IV.match(/.{8}/g);
320
+ event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);
321
+ event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);
322
+ event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);
323
+ event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);
324
+ event.attributes.IV = new Uint32Array(event.attributes.IV);
325
+ }
326
+ }
327
+ this.trigger("data", event);
328
+ return;
329
+ }
330
+ match = /^#EXT-X-START:(.*)$/.exec(newLine);
331
+ if (match) {
332
+ event = {
333
+ type: "tag",
334
+ tagType: "start"
335
+ };
336
+ if (match[1]) {
337
+ event.attributes = parseAttributes(match[1]);
338
+ event.attributes["TIME-OFFSET"] = parseFloat(event.attributes["TIME-OFFSET"]);
339
+ event.attributes.PRECISE = /YES/.test(event.attributes.PRECISE);
340
+ }
341
+ this.trigger("data", event);
342
+ return;
343
+ }
344
+ match = /^#EXT-X-CUE-OUT-CONT:(.*)?$/.exec(newLine);
345
+ if (match) {
346
+ event = {
347
+ type: "tag",
348
+ tagType: "cue-out-cont"
349
+ };
350
+ if (match[1]) {
351
+ event.data = match[1];
352
+ } else {
353
+ event.data = "";
354
+ }
355
+ this.trigger("data", event);
356
+ return;
357
+ }
358
+ match = /^#EXT-X-CUE-OUT:(.*)?$/.exec(newLine);
359
+ if (match) {
360
+ event = {
361
+ type: "tag",
362
+ tagType: "cue-out"
363
+ };
364
+ if (match[1]) {
365
+ event.data = match[1];
366
+ } else {
367
+ event.data = "";
368
+ }
369
+ this.trigger("data", event);
370
+ return;
371
+ }
372
+ match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(newLine);
373
+ if (match) {
374
+ event = {
375
+ type: "tag",
376
+ tagType: "cue-in"
377
+ };
378
+ if (match[1]) {
379
+ event.data = match[1];
380
+ } else {
381
+ event.data = "";
382
+ }
383
+ this.trigger("data", event);
384
+ return;
385
+ }
386
+ match = /^#EXT-X-SKIP:(.*)$/.exec(newLine);
387
+ if (match && match[1]) {
388
+ event = {
389
+ type: "tag",
390
+ tagType: "skip"
391
+ };
392
+ event.attributes = parseAttributes(match[1]);
393
+ if (event.attributes.hasOwnProperty("SKIPPED-SEGMENTS")) {
394
+ event.attributes["SKIPPED-SEGMENTS"] = parseInt(event.attributes["SKIPPED-SEGMENTS"], 10);
395
+ }
396
+ if (event.attributes.hasOwnProperty("RECENTLY-REMOVED-DATERANGES")) {
397
+ event.attributes["RECENTLY-REMOVED-DATERANGES"] = event.attributes["RECENTLY-REMOVED-DATERANGES"].split(TAB);
398
+ }
399
+ this.trigger("data", event);
400
+ return;
401
+ }
402
+ match = /^#EXT-X-PART:(.*)$/.exec(newLine);
403
+ if (match && match[1]) {
404
+ event = {
405
+ type: "tag",
406
+ tagType: "part"
407
+ };
408
+ event.attributes = parseAttributes(match[1]);
409
+ ["DURATION"].forEach(function(key) {
410
+ if (event.attributes.hasOwnProperty(key)) {
411
+ event.attributes[key] = parseFloat(event.attributes[key]);
412
+ }
413
+ });
414
+ ["INDEPENDENT", "GAP"].forEach(function(key) {
415
+ if (event.attributes.hasOwnProperty(key)) {
416
+ event.attributes[key] = /YES/.test(event.attributes[key]);
417
+ }
418
+ });
419
+ if (event.attributes.hasOwnProperty("BYTERANGE")) {
420
+ event.attributes.byterange = parseByterange(event.attributes.BYTERANGE);
421
+ }
422
+ this.trigger("data", event);
423
+ return;
424
+ }
425
+ match = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(newLine);
426
+ if (match && match[1]) {
427
+ event = {
428
+ type: "tag",
429
+ tagType: "server-control"
430
+ };
431
+ event.attributes = parseAttributes(match[1]);
432
+ ["CAN-SKIP-UNTIL", "PART-HOLD-BACK", "HOLD-BACK"].forEach(function(key) {
433
+ if (event.attributes.hasOwnProperty(key)) {
434
+ event.attributes[key] = parseFloat(event.attributes[key]);
435
+ }
436
+ });
437
+ ["CAN-SKIP-DATERANGES", "CAN-BLOCK-RELOAD"].forEach(function(key) {
438
+ if (event.attributes.hasOwnProperty(key)) {
439
+ event.attributes[key] = /YES/.test(event.attributes[key]);
440
+ }
441
+ });
442
+ this.trigger("data", event);
443
+ return;
444
+ }
445
+ match = /^#EXT-X-PART-INF:(.*)$/.exec(newLine);
446
+ if (match && match[1]) {
447
+ event = {
448
+ type: "tag",
449
+ tagType: "part-inf"
450
+ };
451
+ event.attributes = parseAttributes(match[1]);
452
+ ["PART-TARGET"].forEach(function(key) {
453
+ if (event.attributes.hasOwnProperty(key)) {
454
+ event.attributes[key] = parseFloat(event.attributes[key]);
455
+ }
456
+ });
457
+ this.trigger("data", event);
458
+ return;
459
+ }
460
+ match = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(newLine);
461
+ if (match && match[1]) {
462
+ event = {
463
+ type: "tag",
464
+ tagType: "preload-hint"
465
+ };
466
+ event.attributes = parseAttributes(match[1]);
467
+ ["BYTERANGE-START", "BYTERANGE-LENGTH"].forEach(function(key) {
468
+ if (event.attributes.hasOwnProperty(key)) {
469
+ event.attributes[key] = parseInt(event.attributes[key], 10);
470
+ const subkey = key === "BYTERANGE-LENGTH" ? "length" : "offset";
471
+ event.attributes.byterange = event.attributes.byterange || {};
472
+ event.attributes.byterange[subkey] = event.attributes[key];
473
+ delete event.attributes[key];
474
+ }
475
+ });
476
+ this.trigger("data", event);
477
+ return;
478
+ }
479
+ match = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(newLine);
480
+ if (match && match[1]) {
481
+ event = {
482
+ type: "tag",
483
+ tagType: "rendition-report"
484
+ };
485
+ event.attributes = parseAttributes(match[1]);
486
+ ["LAST-MSN", "LAST-PART"].forEach(function(key) {
487
+ if (event.attributes.hasOwnProperty(key)) {
488
+ event.attributes[key] = parseInt(event.attributes[key], 10);
489
+ }
490
+ });
491
+ this.trigger("data", event);
492
+ return;
493
+ }
494
+ match = /^#EXT-X-DATERANGE:(.*)$/.exec(newLine);
495
+ if (match && match[1]) {
496
+ event = {
497
+ type: "tag",
498
+ tagType: "daterange"
499
+ };
500
+ event.attributes = parseAttributes(match[1]);
501
+ ["ID", "CLASS"].forEach(function(key) {
502
+ if (event.attributes.hasOwnProperty(key)) {
503
+ event.attributes[key] = String(event.attributes[key]);
504
+ }
505
+ });
506
+ ["START-DATE", "END-DATE"].forEach(function(key) {
507
+ if (event.attributes.hasOwnProperty(key)) {
508
+ event.attributes[key] = new Date(event.attributes[key]);
509
+ }
510
+ });
511
+ ["DURATION", "PLANNED-DURATION"].forEach(function(key) {
512
+ if (event.attributes.hasOwnProperty(key)) {
513
+ event.attributes[key] = parseFloat(event.attributes[key]);
514
+ }
515
+ });
516
+ ["END-ON-NEXT"].forEach(function(key) {
517
+ if (event.attributes.hasOwnProperty(key)) {
518
+ event.attributes[key] = /YES/i.test(event.attributes[key]);
519
+ }
520
+ });
521
+ ["SCTE35-CMD", " SCTE35-OUT", "SCTE35-IN"].forEach(function(key) {
522
+ if (event.attributes.hasOwnProperty(key)) {
523
+ event.attributes[key] = event.attributes[key].toString(16);
524
+ }
525
+ });
526
+ const clientAttributePattern = /^X-([A-Z]+-)+[A-Z]+$/;
527
+ for (const key in event.attributes) {
528
+ if (!clientAttributePattern.test(key)) {
529
+ continue;
530
+ }
531
+ const isHexaDecimal = /[0-9A-Fa-f]{6}/g.test(event.attributes[key]);
532
+ const isDecimalFloating = /^\d+(\.\d+)?$/.test(event.attributes[key]);
533
+ event.attributes[key] = isHexaDecimal ? event.attributes[key].toString(16) : isDecimalFloating ? parseFloat(event.attributes[key]) : String(event.attributes[key]);
534
+ }
535
+ this.trigger("data", event);
536
+ return;
537
+ }
538
+ match = /^#EXT-X-INDEPENDENT-SEGMENTS/.exec(newLine);
539
+ if (match) {
540
+ this.trigger("data", {
541
+ type: "tag",
542
+ tagType: "independent-segments"
543
+ });
544
+ return;
545
+ }
546
+ match = /^#EXT-X-I-FRAMES-ONLY/.exec(newLine);
547
+ if (match) {
548
+ this.trigger("data", {
549
+ type: "tag",
550
+ tagType: "i-frames-only"
551
+ });
552
+ return;
553
+ }
554
+ match = /^#EXT-X-CONTENT-STEERING:(.*)$/.exec(newLine);
555
+ if (match) {
556
+ event = {
557
+ type: "tag",
558
+ tagType: "content-steering"
559
+ };
560
+ event.attributes = parseAttributes(match[1]);
561
+ this.trigger("data", event);
562
+ return;
563
+ }
564
+ match = /^#EXT-X-I-FRAME-STREAM-INF:(.*)$/.exec(newLine);
565
+ if (match) {
566
+ event = {
567
+ type: "tag",
568
+ tagType: "i-frame-playlist"
569
+ };
570
+ event.attributes = parseAttributes(match[1]);
571
+ if (event.attributes.URI) {
572
+ event.uri = event.attributes.URI;
573
+ }
574
+ if (event.attributes.BANDWIDTH) {
575
+ event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);
576
+ }
577
+ if (event.attributes.RESOLUTION) {
578
+ event.attributes.RESOLUTION = parseResolution(event.attributes.RESOLUTION);
579
+ }
580
+ if (event.attributes["AVERAGE-BANDWIDTH"]) {
581
+ event.attributes["AVERAGE-BANDWIDTH"] = parseInt(event.attributes["AVERAGE-BANDWIDTH"], 10);
582
+ }
583
+ if (event.attributes["FRAME-RATE"]) {
584
+ event.attributes["FRAME-RATE"] = parseFloat(event.attributes["FRAME-RATE"]);
585
+ }
586
+ this.trigger("data", event);
587
+ return;
588
+ }
589
+ match = /^#EXT-X-DEFINE:(.*)$/.exec(newLine);
590
+ if (match) {
591
+ event = {
592
+ type: "tag",
593
+ tagType: "define"
594
+ };
595
+ event.attributes = parseAttributes(match[1]);
596
+ this.trigger("data", event);
597
+ return;
598
+ }
599
+ this.trigger("data", {
600
+ type: "tag",
601
+ data: newLine.slice(4)
602
+ });
603
+ });
604
+ }
605
+ /**
606
+ * Add a parser for custom headers
607
+ *
608
+ * @param {Object} options a map of options for the added parser
609
+ * @param {RegExp} options.expression a regular expression to match the custom header
610
+ * @param {string} options.customType the custom type to register to the output
611
+ * @param {Function} [options.dataParser] function to parse the line into an object
612
+ * @param {boolean} [options.segment] should tag data be attached to the segment object
613
+ */
614
+ addParser({
615
+ expression,
616
+ customType,
617
+ dataParser,
618
+ segment
619
+ }) {
620
+ if (typeof dataParser !== "function") {
621
+ dataParser = (line) => line;
622
+ }
623
+ this.customParsers.push((line) => {
624
+ const match = expression.exec(line);
625
+ if (match) {
626
+ this.trigger("data", {
627
+ type: "custom",
628
+ data: dataParser(line),
629
+ customType,
630
+ segment
631
+ });
632
+ return true;
633
+ }
634
+ });
635
+ }
636
+ /**
637
+ * Add a custom header mapper
638
+ *
639
+ * @param {Object} options
640
+ * @param {RegExp} options.expression a regular expression to match the custom header
641
+ * @param {Function} options.map function to translate tag into a different tag
642
+ */
643
+ addTagMapper({
644
+ expression,
645
+ map
646
+ }) {
647
+ const mapFn = (line) => {
648
+ if (expression.test(line)) {
649
+ return map(line);
650
+ }
651
+ return line;
652
+ };
653
+ this.tagMappers.push(mapFn);
654
+ }
655
+ }
656
+ const camelCase = (str) => str.toLowerCase().replace(/-(\w)/g, (a) => a[1].toUpperCase());
657
+ const camelCaseKeys = function(attributes) {
658
+ const result = {};
659
+ Object.keys(attributes).forEach(function(key) {
660
+ result[camelCase(key)] = attributes[key];
661
+ });
662
+ return result;
663
+ };
664
+ const setHoldBack = function(manifest) {
665
+ const {
666
+ serverControl,
667
+ targetDuration,
668
+ partTargetDuration
669
+ } = manifest;
670
+ if (!serverControl) {
671
+ return;
672
+ }
673
+ const tag = "#EXT-X-SERVER-CONTROL";
674
+ const hb = "holdBack";
675
+ const phb = "partHoldBack";
676
+ const minTargetDuration = targetDuration && targetDuration * 3;
677
+ const minPartDuration = partTargetDuration && partTargetDuration * 2;
678
+ if (targetDuration && !serverControl.hasOwnProperty(hb)) {
679
+ serverControl[hb] = minTargetDuration;
680
+ this.trigger("info", {
681
+ message: `${tag} defaulting HOLD-BACK to targetDuration * 3 (${minTargetDuration}).`
682
+ });
683
+ }
684
+ if (minTargetDuration && serverControl[hb] < minTargetDuration) {
685
+ this.trigger("warn", {
686
+ message: `${tag} clamping HOLD-BACK (${serverControl[hb]}) to targetDuration * 3 (${minTargetDuration})`
687
+ });
688
+ serverControl[hb] = minTargetDuration;
689
+ }
690
+ if (partTargetDuration && !serverControl.hasOwnProperty(phb)) {
691
+ serverControl[phb] = partTargetDuration * 3;
692
+ this.trigger("info", {
693
+ message: `${tag} defaulting PART-HOLD-BACK to partTargetDuration * 3 (${serverControl[phb]}).`
694
+ });
695
+ }
696
+ if (partTargetDuration && serverControl[phb] < minPartDuration) {
697
+ this.trigger("warn", {
698
+ message: `${tag} clamping PART-HOLD-BACK (${serverControl[phb]}) to partTargetDuration * 2 (${minPartDuration}).`
699
+ });
700
+ serverControl[phb] = minPartDuration;
701
+ }
702
+ };
703
+ class Parser extends Stream {
704
+ constructor(opts = {}) {
705
+ super();
706
+ this.lineStream = new LineStream();
707
+ this.parseStream = new ParseStream();
708
+ this.lineStream.pipe(this.parseStream);
709
+ this.mainDefinitions = opts.mainDefinitions || {};
710
+ this.params = new URL(opts.uri, "https://a.com").searchParams;
711
+ this.lastProgramDateTime = null;
712
+ const self = this;
713
+ const uris = [];
714
+ let currentUri = {};
715
+ let currentMap;
716
+ let key;
717
+ let hasParts = false;
718
+ const noop = function() {
719
+ };
720
+ const defaultMediaGroups = {
721
+ "AUDIO": {},
722
+ "VIDEO": {},
723
+ "CLOSED-CAPTIONS": {},
724
+ "SUBTITLES": {}
725
+ };
726
+ const widevineUuid = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed";
727
+ let currentTimeline = 0;
728
+ this.manifest = {
729
+ allowCache: true,
730
+ discontinuityStarts: [],
731
+ dateRanges: [],
732
+ iFramePlaylists: [],
733
+ segments: []
734
+ };
735
+ let lastByterangeEnd = 0;
736
+ let lastPartByterangeEnd = 0;
737
+ const dateRangeTags = {};
738
+ this.on("end", () => {
739
+ if (currentUri.uri || !currentUri.parts && !currentUri.preloadHints) {
740
+ return;
741
+ }
742
+ if (!currentUri.map && currentMap) {
743
+ currentUri.map = currentMap;
744
+ }
745
+ if (!currentUri.key && key) {
746
+ currentUri.key = key;
747
+ }
748
+ if (!currentUri.timeline && typeof currentTimeline === "number") {
749
+ currentUri.timeline = currentTimeline;
750
+ }
751
+ this.manifest.preloadSegment = currentUri;
752
+ });
753
+ this.parseStream.on("data", function(entry) {
754
+ let mediaGroup;
755
+ let rendition;
756
+ if (self.manifest.definitions) {
757
+ for (const def in self.manifest.definitions) {
758
+ if (entry.uri) {
759
+ entry.uri = entry.uri.replace(`{$${def}}`, self.manifest.definitions[def]);
760
+ }
761
+ if (entry.attributes) {
762
+ for (const attr in entry.attributes) {
763
+ if (typeof entry.attributes[attr] === "string") {
764
+ entry.attributes[attr] = entry.attributes[attr].replace(`{$${def}}`, self.manifest.definitions[def]);
765
+ }
766
+ }
767
+ }
768
+ }
769
+ }
770
+ ({
771
+ tag() {
772
+ ({
773
+ version() {
774
+ if (entry.version) {
775
+ this.manifest.version = entry.version;
776
+ }
777
+ },
778
+ "allow-cache"() {
779
+ this.manifest.allowCache = entry.allowed;
780
+ if (!("allowed" in entry)) {
781
+ this.trigger("info", {
782
+ message: "defaulting allowCache to YES"
783
+ });
784
+ this.manifest.allowCache = true;
785
+ }
786
+ },
787
+ byterange() {
788
+ const byterange = {};
789
+ if ("length" in entry) {
790
+ currentUri.byterange = byterange;
791
+ byterange.length = entry.length;
792
+ if (!("offset" in entry)) {
793
+ entry.offset = lastByterangeEnd;
794
+ }
795
+ }
796
+ if ("offset" in entry) {
797
+ currentUri.byterange = byterange;
798
+ byterange.offset = entry.offset;
799
+ }
800
+ lastByterangeEnd = byterange.offset + byterange.length;
801
+ },
802
+ endlist() {
803
+ this.manifest.endList = true;
804
+ },
805
+ inf() {
806
+ if (!("mediaSequence" in this.manifest)) {
807
+ this.manifest.mediaSequence = 0;
808
+ this.trigger("info", {
809
+ message: "defaulting media sequence to zero"
810
+ });
811
+ }
812
+ if (!("discontinuitySequence" in this.manifest)) {
813
+ this.manifest.discontinuitySequence = 0;
814
+ this.trigger("info", {
815
+ message: "defaulting discontinuity sequence to zero"
816
+ });
817
+ }
818
+ if (entry.title) {
819
+ currentUri.title = entry.title;
820
+ }
821
+ if (entry.duration > 0) {
822
+ currentUri.duration = entry.duration;
823
+ }
824
+ if (entry.duration === 0) {
825
+ currentUri.duration = 0.01;
826
+ this.trigger("info", {
827
+ message: "updating zero segment duration to a small value"
828
+ });
829
+ }
830
+ this.manifest.segments = uris;
831
+ },
832
+ key() {
833
+ if (!entry.attributes) {
834
+ this.trigger("warn", {
835
+ message: "ignoring key declaration without attribute list"
836
+ });
837
+ return;
838
+ }
839
+ if (entry.attributes.METHOD === "NONE") {
840
+ key = null;
841
+ return;
842
+ }
843
+ if (!entry.attributes.URI) {
844
+ this.trigger("warn", {
845
+ message: "ignoring key declaration without URI"
846
+ });
847
+ return;
848
+ }
849
+ if (entry.attributes.KEYFORMAT === "com.apple.streamingkeydelivery") {
850
+ this.manifest.contentProtection = this.manifest.contentProtection || {};
851
+ this.manifest.contentProtection["com.apple.fps.1_0"] = {
852
+ attributes: entry.attributes
853
+ };
854
+ return;
855
+ }
856
+ if (entry.attributes.KEYFORMAT === "com.microsoft.playready") {
857
+ this.manifest.contentProtection = this.manifest.contentProtection || {};
858
+ this.manifest.contentProtection["com.microsoft.playready"] = {
859
+ uri: entry.attributes.URI
860
+ };
861
+ return;
862
+ }
863
+ if (entry.attributes.KEYFORMAT === widevineUuid) {
864
+ const VALID_METHODS = ["SAMPLE-AES", "SAMPLE-AES-CTR", "SAMPLE-AES-CENC"];
865
+ if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) {
866
+ this.trigger("warn", {
867
+ message: "invalid key method provided for Widevine"
868
+ });
869
+ return;
870
+ }
871
+ if (entry.attributes.METHOD === "SAMPLE-AES-CENC") {
872
+ this.trigger("warn", {
873
+ message: "SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead"
874
+ });
875
+ }
876
+ if (entry.attributes.URI.substring(0, 23) !== "data:text/plain;base64,") {
877
+ this.trigger("warn", {
878
+ message: "invalid key URI provided for Widevine"
879
+ });
880
+ return;
881
+ }
882
+ if (!(entry.attributes.KEYID && entry.attributes.KEYID.substring(0, 2) === "0x")) {
883
+ this.trigger("warn", {
884
+ message: "invalid key ID provided for Widevine"
885
+ });
886
+ return;
887
+ }
888
+ this.manifest.contentProtection = this.manifest.contentProtection || {};
889
+ this.manifest.contentProtection["com.widevine.alpha"] = {
890
+ attributes: {
891
+ schemeIdUri: entry.attributes.KEYFORMAT,
892
+ // remove '0x' from the key id string
893
+ keyId: entry.attributes.KEYID.substring(2)
894
+ },
895
+ // decode the base64-encoded PSSH box
896
+ pssh: decodeB64ToUint8Array(entry.attributes.URI.split(",")[1])
897
+ };
898
+ return;
899
+ }
900
+ if (!entry.attributes.METHOD) {
901
+ this.trigger("warn", {
902
+ message: "defaulting key method to AES-128"
903
+ });
904
+ }
905
+ key = {
906
+ method: entry.attributes.METHOD || "AES-128",
907
+ uri: entry.attributes.URI
908
+ };
909
+ if (typeof entry.attributes.IV !== "undefined") {
910
+ key.iv = entry.attributes.IV;
911
+ }
912
+ },
913
+ "media-sequence"() {
914
+ if (!isFinite(entry.number)) {
915
+ this.trigger("warn", {
916
+ message: "ignoring invalid media sequence: " + entry.number
917
+ });
918
+ return;
919
+ }
920
+ this.manifest.mediaSequence = entry.number;
921
+ },
922
+ "discontinuity-sequence"() {
923
+ if (!isFinite(entry.number)) {
924
+ this.trigger("warn", {
925
+ message: "ignoring invalid discontinuity sequence: " + entry.number
926
+ });
927
+ return;
928
+ }
929
+ this.manifest.discontinuitySequence = entry.number;
930
+ currentTimeline = entry.number;
931
+ },
932
+ "playlist-type"() {
933
+ if (!/VOD|EVENT/.test(entry.playlistType)) {
934
+ this.trigger("warn", {
935
+ message: "ignoring unknown playlist type: " + entry.playlist
936
+ });
937
+ return;
938
+ }
939
+ this.manifest.playlistType = entry.playlistType;
940
+ },
941
+ map() {
942
+ currentMap = {};
943
+ if (entry.uri) {
944
+ currentMap.uri = entry.uri;
945
+ }
946
+ if (entry.byterange) {
947
+ currentMap.byterange = entry.byterange;
948
+ }
949
+ if (key) {
950
+ currentMap.key = key;
951
+ }
952
+ },
953
+ "stream-inf"() {
954
+ this.manifest.playlists = uris;
955
+ this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;
956
+ if (!entry.attributes) {
957
+ this.trigger("warn", {
958
+ message: "ignoring empty stream-inf attributes"
959
+ });
960
+ return;
961
+ }
962
+ if (!currentUri.attributes) {
963
+ currentUri.attributes = {};
964
+ }
965
+ _extends(currentUri.attributes, entry.attributes);
966
+ },
967
+ media() {
968
+ this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;
969
+ if (!(entry.attributes && entry.attributes.TYPE && entry.attributes["GROUP-ID"] && entry.attributes.NAME)) {
970
+ this.trigger("warn", {
971
+ message: "ignoring incomplete or missing media group"
972
+ });
973
+ return;
974
+ }
975
+ const mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE];
976
+ mediaGroupType[entry.attributes["GROUP-ID"]] = mediaGroupType[entry.attributes["GROUP-ID"]] || {};
977
+ mediaGroup = mediaGroupType[entry.attributes["GROUP-ID"]];
978
+ rendition = {
979
+ default: /yes/i.test(entry.attributes.DEFAULT)
980
+ };
981
+ if (rendition.default) {
982
+ rendition.autoselect = true;
983
+ } else {
984
+ rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT);
985
+ }
986
+ if (entry.attributes.LANGUAGE) {
987
+ rendition.language = entry.attributes.LANGUAGE;
988
+ }
989
+ if (entry.attributes.URI) {
990
+ rendition.uri = entry.attributes.URI;
991
+ }
992
+ if (entry.attributes["INSTREAM-ID"]) {
993
+ rendition.instreamId = entry.attributes["INSTREAM-ID"];
994
+ }
995
+ if (entry.attributes.CHARACTERISTICS) {
996
+ rendition.characteristics = entry.attributes.CHARACTERISTICS;
997
+ }
998
+ if (entry.attributes.FORCED) {
999
+ rendition.forced = /yes/i.test(entry.attributes.FORCED);
1000
+ }
1001
+ mediaGroup[entry.attributes.NAME] = rendition;
1002
+ },
1003
+ discontinuity() {
1004
+ currentTimeline += 1;
1005
+ currentUri.discontinuity = true;
1006
+ this.manifest.discontinuityStarts.push(uris.length);
1007
+ },
1008
+ "program-date-time"() {
1009
+ if (typeof this.manifest.dateTimeString === "undefined") {
1010
+ this.manifest.dateTimeString = entry.dateTimeString;
1011
+ this.manifest.dateTimeObject = entry.dateTimeObject;
1012
+ }
1013
+ currentUri.dateTimeString = entry.dateTimeString;
1014
+ currentUri.dateTimeObject = entry.dateTimeObject;
1015
+ const {
1016
+ lastProgramDateTime
1017
+ } = this;
1018
+ this.lastProgramDateTime = new Date(entry.dateTimeString).getTime();
1019
+ if (lastProgramDateTime === null) {
1020
+ this.manifest.segments.reduceRight((programDateTime, segment) => {
1021
+ segment.programDateTime = programDateTime - segment.duration * 1e3;
1022
+ return segment.programDateTime;
1023
+ }, this.lastProgramDateTime);
1024
+ }
1025
+ },
1026
+ targetduration() {
1027
+ if (!isFinite(entry.duration) || entry.duration < 0) {
1028
+ this.trigger("warn", {
1029
+ message: "ignoring invalid target duration: " + entry.duration
1030
+ });
1031
+ return;
1032
+ }
1033
+ this.manifest.targetDuration = entry.duration;
1034
+ setHoldBack.call(this, this.manifest);
1035
+ },
1036
+ start() {
1037
+ if (!entry.attributes || isNaN(entry.attributes["TIME-OFFSET"])) {
1038
+ this.trigger("warn", {
1039
+ message: "ignoring start declaration without appropriate attribute list"
1040
+ });
1041
+ return;
1042
+ }
1043
+ this.manifest.start = {
1044
+ timeOffset: entry.attributes["TIME-OFFSET"],
1045
+ precise: entry.attributes.PRECISE
1046
+ };
1047
+ },
1048
+ "cue-out"() {
1049
+ currentUri.cueOut = entry.data;
1050
+ },
1051
+ "cue-out-cont"() {
1052
+ currentUri.cueOutCont = entry.data;
1053
+ },
1054
+ "cue-in"() {
1055
+ currentUri.cueIn = entry.data;
1056
+ },
1057
+ "skip"() {
1058
+ this.manifest.skip = camelCaseKeys(entry.attributes);
1059
+ this.warnOnMissingAttributes_("#EXT-X-SKIP", entry.attributes, ["SKIPPED-SEGMENTS"]);
1060
+ },
1061
+ "part"() {
1062
+ hasParts = true;
1063
+ const segmentIndex = this.manifest.segments.length;
1064
+ const part = camelCaseKeys(entry.attributes);
1065
+ currentUri.parts = currentUri.parts || [];
1066
+ currentUri.parts.push(part);
1067
+ if (part.byterange) {
1068
+ if (!part.byterange.hasOwnProperty("offset")) {
1069
+ part.byterange.offset = lastPartByterangeEnd;
1070
+ }
1071
+ lastPartByterangeEnd = part.byterange.offset + part.byterange.length;
1072
+ }
1073
+ const partIndex = currentUri.parts.length - 1;
1074
+ this.warnOnMissingAttributes_(`#EXT-X-PART #${partIndex} for segment #${segmentIndex}`, entry.attributes, ["URI", "DURATION"]);
1075
+ if (this.manifest.renditionReports) {
1076
+ this.manifest.renditionReports.forEach((r, i) => {
1077
+ if (!r.hasOwnProperty("lastPart")) {
1078
+ this.trigger("warn", {
1079
+ message: `#EXT-X-RENDITION-REPORT #${i} lacks required attribute(s): LAST-PART`
1080
+ });
1081
+ }
1082
+ });
1083
+ }
1084
+ },
1085
+ "server-control"() {
1086
+ const attrs = this.manifest.serverControl = camelCaseKeys(entry.attributes);
1087
+ if (!attrs.hasOwnProperty("canBlockReload")) {
1088
+ attrs.canBlockReload = false;
1089
+ this.trigger("info", {
1090
+ message: "#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false"
1091
+ });
1092
+ }
1093
+ setHoldBack.call(this, this.manifest);
1094
+ if (attrs.canSkipDateranges && !attrs.hasOwnProperty("canSkipUntil")) {
1095
+ this.trigger("warn", {
1096
+ message: "#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set"
1097
+ });
1098
+ }
1099
+ },
1100
+ "preload-hint"() {
1101
+ const segmentIndex = this.manifest.segments.length;
1102
+ const hint = camelCaseKeys(entry.attributes);
1103
+ const isPart = hint.type && hint.type === "PART";
1104
+ currentUri.preloadHints = currentUri.preloadHints || [];
1105
+ currentUri.preloadHints.push(hint);
1106
+ if (hint.byterange) {
1107
+ if (!hint.byterange.hasOwnProperty("offset")) {
1108
+ hint.byterange.offset = isPart ? lastPartByterangeEnd : 0;
1109
+ if (isPart) {
1110
+ lastPartByterangeEnd = hint.byterange.offset + hint.byterange.length;
1111
+ }
1112
+ }
1113
+ }
1114
+ const index = currentUri.preloadHints.length - 1;
1115
+ this.warnOnMissingAttributes_(`#EXT-X-PRELOAD-HINT #${index} for segment #${segmentIndex}`, entry.attributes, ["TYPE", "URI"]);
1116
+ if (!hint.type) {
1117
+ return;
1118
+ }
1119
+ for (let i = 0; i < currentUri.preloadHints.length - 1; i++) {
1120
+ const otherHint = currentUri.preloadHints[i];
1121
+ if (!otherHint.type) {
1122
+ continue;
1123
+ }
1124
+ if (otherHint.type === hint.type) {
1125
+ this.trigger("warn", {
1126
+ message: `#EXT-X-PRELOAD-HINT #${index} for segment #${segmentIndex} has the same TYPE ${hint.type} as preload hint #${i}`
1127
+ });
1128
+ }
1129
+ }
1130
+ },
1131
+ "rendition-report"() {
1132
+ const report = camelCaseKeys(entry.attributes);
1133
+ this.manifest.renditionReports = this.manifest.renditionReports || [];
1134
+ this.manifest.renditionReports.push(report);
1135
+ const index = this.manifest.renditionReports.length - 1;
1136
+ const required = ["LAST-MSN", "URI"];
1137
+ if (hasParts) {
1138
+ required.push("LAST-PART");
1139
+ }
1140
+ this.warnOnMissingAttributes_(`#EXT-X-RENDITION-REPORT #${index}`, entry.attributes, required);
1141
+ },
1142
+ "part-inf"() {
1143
+ this.manifest.partInf = camelCaseKeys(entry.attributes);
1144
+ this.warnOnMissingAttributes_("#EXT-X-PART-INF", entry.attributes, ["PART-TARGET"]);
1145
+ if (this.manifest.partInf.partTarget) {
1146
+ this.manifest.partTargetDuration = this.manifest.partInf.partTarget;
1147
+ }
1148
+ setHoldBack.call(this, this.manifest);
1149
+ },
1150
+ "daterange"() {
1151
+ this.manifest.dateRanges.push(camelCaseKeys(entry.attributes));
1152
+ const index = this.manifest.dateRanges.length - 1;
1153
+ this.warnOnMissingAttributes_(`#EXT-X-DATERANGE #${index}`, entry.attributes, ["ID", "START-DATE"]);
1154
+ const dateRange = this.manifest.dateRanges[index];
1155
+ if (dateRange.endDate && dateRange.startDate && new Date(dateRange.endDate) < new Date(dateRange.startDate)) {
1156
+ this.trigger("warn", {
1157
+ message: "EXT-X-DATERANGE END-DATE must be equal to or later than the value of the START-DATE"
1158
+ });
1159
+ }
1160
+ if (dateRange.duration && dateRange.duration < 0) {
1161
+ this.trigger("warn", {
1162
+ message: "EXT-X-DATERANGE DURATION must not be negative"
1163
+ });
1164
+ }
1165
+ if (dateRange.plannedDuration && dateRange.plannedDuration < 0) {
1166
+ this.trigger("warn", {
1167
+ message: "EXT-X-DATERANGE PLANNED-DURATION must not be negative"
1168
+ });
1169
+ }
1170
+ const endOnNextYes = !!dateRange.endOnNext;
1171
+ if (endOnNextYes && !dateRange.class) {
1172
+ this.trigger("warn", {
1173
+ message: "EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must have a CLASS attribute"
1174
+ });
1175
+ }
1176
+ if (endOnNextYes && (dateRange.duration || dateRange.endDate)) {
1177
+ this.trigger("warn", {
1178
+ message: "EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must not contain DURATION or END-DATE attributes"
1179
+ });
1180
+ }
1181
+ if (dateRange.duration && dateRange.endDate) {
1182
+ const startDate = dateRange.startDate;
1183
+ const newDateInSeconds = startDate.getTime() + dateRange.duration * 1e3;
1184
+ this.manifest.dateRanges[index].endDate = new Date(newDateInSeconds);
1185
+ }
1186
+ if (!dateRangeTags[dateRange.id]) {
1187
+ dateRangeTags[dateRange.id] = dateRange;
1188
+ } else {
1189
+ for (const attribute in dateRangeTags[dateRange.id]) {
1190
+ if (!!dateRange[attribute] && JSON.stringify(dateRangeTags[dateRange.id][attribute]) !== JSON.stringify(dateRange[attribute])) {
1191
+ this.trigger("warn", {
1192
+ message: "EXT-X-DATERANGE tags with the same ID in a playlist must have the same attributes values"
1193
+ });
1194
+ break;
1195
+ }
1196
+ }
1197
+ const dateRangeWithSameId = this.manifest.dateRanges.findIndex((dateRangeToFind) => dateRangeToFind.id === dateRange.id);
1198
+ this.manifest.dateRanges[dateRangeWithSameId] = _extends(this.manifest.dateRanges[dateRangeWithSameId], dateRange);
1199
+ dateRangeTags[dateRange.id] = _extends(dateRangeTags[dateRange.id], dateRange);
1200
+ this.manifest.dateRanges.pop();
1201
+ }
1202
+ },
1203
+ "independent-segments"() {
1204
+ this.manifest.independentSegments = true;
1205
+ },
1206
+ "i-frames-only"() {
1207
+ this.manifest.iFramesOnly = true;
1208
+ this.requiredCompatibilityversion(this.manifest.version, 4);
1209
+ },
1210
+ "content-steering"() {
1211
+ this.manifest.contentSteering = camelCaseKeys(entry.attributes);
1212
+ this.warnOnMissingAttributes_("#EXT-X-CONTENT-STEERING", entry.attributes, ["SERVER-URI"]);
1213
+ },
1214
+ /** @this {Parser} */
1215
+ define() {
1216
+ this.manifest.definitions = this.manifest.definitions || {};
1217
+ const addDef = (n, v) => {
1218
+ if (n in this.manifest.definitions) {
1219
+ this.trigger("error", {
1220
+ message: `EXT-X-DEFINE: Duplicate name ${n}`
1221
+ });
1222
+ return;
1223
+ }
1224
+ this.manifest.definitions[n] = v;
1225
+ };
1226
+ if ("QUERYPARAM" in entry.attributes) {
1227
+ if ("NAME" in entry.attributes || "IMPORT" in entry.attributes) {
1228
+ this.trigger("error", {
1229
+ message: "EXT-X-DEFINE: Invalid attributes"
1230
+ });
1231
+ return;
1232
+ }
1233
+ const val = this.params.get(entry.attributes.QUERYPARAM);
1234
+ if (!val) {
1235
+ this.trigger("error", {
1236
+ message: `EXT-X-DEFINE: No query param ${entry.attributes.QUERYPARAM}`
1237
+ });
1238
+ return;
1239
+ }
1240
+ addDef(entry.attributes.QUERYPARAM, decodeURIComponent(val));
1241
+ return;
1242
+ }
1243
+ if ("NAME" in entry.attributes) {
1244
+ if ("IMPORT" in entry.attributes) {
1245
+ this.trigger("error", {
1246
+ message: "EXT-X-DEFINE: Invalid attributes"
1247
+ });
1248
+ return;
1249
+ }
1250
+ if (!("VALUE" in entry.attributes) || typeof entry.attributes.VALUE !== "string") {
1251
+ this.trigger("error", {
1252
+ message: `EXT-X-DEFINE: No value for ${entry.attributes.NAME}`
1253
+ });
1254
+ return;
1255
+ }
1256
+ addDef(entry.attributes.NAME, entry.attributes.VALUE);
1257
+ return;
1258
+ }
1259
+ if ("IMPORT" in entry.attributes) {
1260
+ if (!this.mainDefinitions[entry.attributes.IMPORT]) {
1261
+ this.trigger("error", {
1262
+ message: `EXT-X-DEFINE: No value ${entry.attributes.IMPORT} to import, or IMPORT used on main playlist`
1263
+ });
1264
+ return;
1265
+ }
1266
+ addDef(entry.attributes.IMPORT, this.mainDefinitions[entry.attributes.IMPORT]);
1267
+ return;
1268
+ }
1269
+ this.trigger("error", {
1270
+ message: "EXT-X-DEFINE: No attribute"
1271
+ });
1272
+ },
1273
+ "i-frame-playlist"() {
1274
+ this.manifest.iFramePlaylists.push({
1275
+ attributes: entry.attributes,
1276
+ uri: entry.uri,
1277
+ timeline: currentTimeline
1278
+ });
1279
+ this.warnOnMissingAttributes_("#EXT-X-I-FRAME-STREAM-INF", entry.attributes, ["BANDWIDTH", "URI"]);
1280
+ }
1281
+ }[entry.tagType] || noop).call(self);
1282
+ },
1283
+ uri() {
1284
+ currentUri.uri = entry.uri;
1285
+ uris.push(currentUri);
1286
+ if (this.manifest.targetDuration && !("duration" in currentUri)) {
1287
+ this.trigger("warn", {
1288
+ message: "defaulting segment duration to the target duration"
1289
+ });
1290
+ currentUri.duration = this.manifest.targetDuration;
1291
+ }
1292
+ if (key) {
1293
+ currentUri.key = key;
1294
+ }
1295
+ currentUri.timeline = currentTimeline;
1296
+ if (currentMap) {
1297
+ currentUri.map = currentMap;
1298
+ }
1299
+ lastPartByterangeEnd = 0;
1300
+ if (this.lastProgramDateTime !== null) {
1301
+ currentUri.programDateTime = this.lastProgramDateTime;
1302
+ this.lastProgramDateTime += currentUri.duration * 1e3;
1303
+ }
1304
+ currentUri = {};
1305
+ },
1306
+ comment() {
1307
+ },
1308
+ custom() {
1309
+ if (entry.segment) {
1310
+ currentUri.custom = currentUri.custom || {};
1311
+ currentUri.custom[entry.customType] = entry.data;
1312
+ } else {
1313
+ this.manifest.custom = this.manifest.custom || {};
1314
+ this.manifest.custom[entry.customType] = entry.data;
1315
+ }
1316
+ }
1317
+ })[entry.type].call(self);
1318
+ });
1319
+ }
1320
+ requiredCompatibilityversion(currentVersion, targetVersion) {
1321
+ if (currentVersion < targetVersion || !currentVersion) {
1322
+ this.trigger("warn", {
1323
+ message: `manifest must be at least version ${targetVersion}`
1324
+ });
1325
+ }
1326
+ }
1327
+ warnOnMissingAttributes_(identifier, attributes, required) {
1328
+ const missing = [];
1329
+ required.forEach(function(key) {
1330
+ if (!attributes.hasOwnProperty(key)) {
1331
+ missing.push(key);
1332
+ }
1333
+ });
1334
+ if (missing.length) {
1335
+ this.trigger("warn", {
1336
+ message: `${identifier} lacks required attribute(s): ${missing.join(", ")}`
1337
+ });
1338
+ }
1339
+ }
1340
+ /**
1341
+ * Parse the input string and update the manifest object.
1342
+ *
1343
+ * @param {string} chunk a potentially incomplete portion of the manifest
1344
+ */
1345
+ push(chunk) {
1346
+ this.lineStream.push(chunk);
1347
+ }
1348
+ /**
1349
+ * Flush any remaining input. This can be handy if the last line of an M3U8
1350
+ * manifest did not contain a trailing newline but the file has been
1351
+ * completely received.
1352
+ */
1353
+ end() {
1354
+ this.lineStream.push("\n");
1355
+ if (this.manifest.dateRanges.length && this.lastProgramDateTime === null) {
1356
+ this.trigger("warn", {
1357
+ message: "A playlist with EXT-X-DATERANGE tag must contain atleast one EXT-X-PROGRAM-DATE-TIME tag"
1358
+ });
1359
+ }
1360
+ this.lastProgramDateTime = null;
1361
+ this.trigger("end");
1362
+ }
1363
+ /**
1364
+ * Add an additional parser for non-standard tags
1365
+ *
1366
+ * @param {Object} options a map of options for the added parser
1367
+ * @param {RegExp} options.expression a regular expression to match the custom header
1368
+ * @param {string} options.customType the custom type to register to the output
1369
+ * @param {Function} [options.dataParser] function to parse the line into an object
1370
+ * @param {boolean} [options.segment] should tag data be attached to the segment object
1371
+ */
1372
+ addParser(options) {
1373
+ this.parseStream.addParser(options);
1374
+ }
1375
+ /**
1376
+ * Add a custom header mapper
1377
+ *
1378
+ * @param {Object} options
1379
+ * @param {RegExp} options.expression a regular expression to match the custom header
1380
+ * @param {Function} options.map function to translate tag into a different tag
1381
+ */
1382
+ addTagMapper(options) {
1383
+ this.parseStream.addTagMapper(options);
1384
+ }
1385
+ }
1386
+ export {
1387
+ LineStream,
1388
+ ParseStream,
1389
+ Parser
1390
+ };