@tarojs/components 4.0.0-canary.4 → 4.0.0-canary.6

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 (464) hide show
  1. package/dist/cjs/{hls-00fec546.js → hls-dfcad743.js} +280 -156
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/taro-ad-core.cjs.entry.js +1 -1
  4. package/dist/cjs/taro-ad-custom-core.cjs.entry.js +1 -1
  5. package/dist/cjs/taro-animation-video-core.cjs.entry.js +1 -1
  6. package/dist/cjs/taro-animation-view-core.cjs.entry.js +1 -1
  7. package/dist/cjs/taro-ar-camera-core.cjs.entry.js +1 -1
  8. package/dist/cjs/taro-audio-core.cjs.entry.js +1 -1
  9. package/dist/cjs/taro-aweme-data-core.cjs.entry.js +1 -1
  10. package/dist/cjs/taro-block-core.cjs.entry.js +1 -1
  11. package/dist/cjs/taro-button-core.cjs.entry.js +2 -2
  12. package/dist/cjs/taro-camera-core.cjs.entry.js +1 -1
  13. package/dist/cjs/taro-canvas-core.cjs.entry.js +1 -1
  14. package/dist/cjs/taro-channel-live-core.cjs.entry.js +1 -1
  15. package/dist/cjs/taro-channel-video-core.cjs.entry.js +1 -1
  16. package/dist/cjs/taro-checkbox-core_2.cjs.entry.js +1 -1
  17. package/dist/cjs/taro-comment-detail-core.cjs.entry.js +1 -1
  18. package/dist/cjs/taro-comment-list-core.cjs.entry.js +1 -1
  19. package/dist/cjs/taro-components.cjs.js +1 -1
  20. package/dist/cjs/taro-contact-button-core.cjs.entry.js +1 -1
  21. package/dist/cjs/taro-cover-image-core.cjs.entry.js +1 -1
  22. package/dist/cjs/taro-cover-view-core.cjs.entry.js +2 -2
  23. package/dist/cjs/taro-custom-wrapper-core.cjs.entry.js +1 -1
  24. package/dist/cjs/taro-editor-core.cjs.entry.js +1 -1
  25. package/dist/cjs/taro-follow-swan-core.cjs.entry.js +1 -1
  26. package/dist/cjs/taro-form-core.cjs.entry.js +1 -1
  27. package/dist/cjs/taro-functional-page-navigator-core.cjs.entry.js +1 -1
  28. package/dist/cjs/taro-grid-view-core.cjs.entry.js +1 -1
  29. package/dist/cjs/taro-icon-core.cjs.entry.js +2 -2
  30. package/dist/cjs/taro-image-core.cjs.entry.js +2 -2
  31. package/dist/cjs/taro-inline-payment-panel-core.cjs.entry.js +1 -1
  32. package/dist/cjs/taro-input-core.cjs.entry.js +1 -1
  33. package/dist/cjs/taro-keyboard-accessory-core.cjs.entry.js +1 -1
  34. package/dist/cjs/taro-label-core.cjs.entry.js +1 -1
  35. package/dist/cjs/taro-lifestyle-core.cjs.entry.js +1 -1
  36. package/dist/cjs/taro-like-core.cjs.entry.js +1 -1
  37. package/dist/cjs/taro-list-view-core.cjs.entry.js +1 -1
  38. package/dist/cjs/taro-live-player-core.cjs.entry.js +1 -1
  39. package/dist/cjs/taro-live-pusher-core.cjs.entry.js +1 -1
  40. package/dist/cjs/taro-login-core.cjs.entry.js +1 -1
  41. package/dist/cjs/taro-lottie-core.cjs.entry.js +1 -1
  42. package/dist/cjs/taro-map-core.cjs.entry.js +1 -1
  43. package/dist/cjs/taro-match-media-core.cjs.entry.js +1 -1
  44. package/dist/cjs/taro-movable-area-core_2.cjs.entry.js +1 -1
  45. package/dist/cjs/taro-native-slot-core.cjs.entry.js +1 -1
  46. package/dist/cjs/taro-navigation-bar-core.cjs.entry.js +1 -1
  47. package/dist/cjs/taro-navigator-core.cjs.entry.js +2 -2
  48. package/dist/cjs/taro-official-account-core.cjs.entry.js +1 -1
  49. package/dist/cjs/taro-open-data-core.cjs.entry.js +1 -1
  50. package/dist/cjs/taro-page-container-core.cjs.entry.js +1 -1
  51. package/dist/cjs/taro-page-meta-core.cjs.entry.js +1 -1
  52. package/dist/cjs/taro-picker-core_2.cjs.entry.js +2 -2
  53. package/dist/cjs/taro-picker-view-column-core_2.cjs.entry.js +2 -2
  54. package/dist/cjs/taro-progress-core.cjs.entry.js +1 -1
  55. package/dist/cjs/taro-pull-to-refresh-core.cjs.entry.js +2 -2
  56. package/dist/cjs/taro-radio-core_2.cjs.entry.js +1 -1
  57. package/dist/cjs/taro-rich-text-core.cjs.entry.js +1 -1
  58. package/dist/cjs/taro-root-portal-core.cjs.entry.js +1 -1
  59. package/dist/cjs/taro-rtc-room-core.cjs.entry.js +1 -1
  60. package/dist/cjs/taro-rtc-room-item-core.cjs.entry.js +1 -1
  61. package/dist/cjs/taro-scroll-view-core.cjs.entry.js +2 -2
  62. package/dist/cjs/taro-share-element-core.cjs.entry.js +1 -1
  63. package/dist/cjs/taro-slider-core.cjs.entry.js +1 -1
  64. package/dist/cjs/taro-slot-core.cjs.entry.js +1 -1
  65. package/dist/cjs/taro-snapshot-core.cjs.entry.js +1 -1
  66. package/dist/cjs/taro-sticky-header-core.cjs.entry.js +1 -1
  67. package/dist/cjs/taro-sticky-section-core.cjs.entry.js +1 -1
  68. package/dist/cjs/taro-swiper-core_2.cjs.entry.js +2 -2
  69. package/dist/cjs/taro-switch-core.cjs.entry.js +1 -1
  70. package/dist/cjs/taro-tab-item-core.cjs.entry.js +1 -1
  71. package/dist/cjs/taro-tabbar.cjs.entry.js +2 -2
  72. package/dist/cjs/taro-tabs-core.cjs.entry.js +1 -1
  73. package/dist/cjs/taro-text-core.cjs.entry.js +1 -1
  74. package/dist/cjs/taro-textarea-core.cjs.entry.js +1 -1
  75. package/dist/cjs/taro-video-control_3.cjs.entry.js +3 -3
  76. package/dist/cjs/taro-view-core.cjs.entry.js +2 -2
  77. package/dist/cjs/taro-voip-room-core.cjs.entry.js +1 -1
  78. package/dist/cjs/taro-web-view-core.cjs.entry.js +1 -1
  79. package/dist/components/hls.js +280 -156
  80. package/dist/esm/{hls-4018c7ea.js → hls-268fc25b.js} +280 -156
  81. package/dist/esm/loader.js +2 -2
  82. package/dist/esm/taro-ad-core.entry.js +1 -1
  83. package/dist/esm/taro-ad-custom-core.entry.js +1 -1
  84. package/dist/esm/taro-animation-video-core.entry.js +1 -1
  85. package/dist/esm/taro-animation-view-core.entry.js +1 -1
  86. package/dist/esm/taro-ar-camera-core.entry.js +1 -1
  87. package/dist/esm/taro-audio-core.entry.js +1 -1
  88. package/dist/esm/taro-aweme-data-core.entry.js +1 -1
  89. package/dist/esm/taro-block-core.entry.js +1 -1
  90. package/dist/esm/taro-button-core.entry.js +2 -2
  91. package/dist/esm/taro-camera-core.entry.js +1 -1
  92. package/dist/esm/taro-canvas-core.entry.js +1 -1
  93. package/dist/esm/taro-channel-live-core.entry.js +1 -1
  94. package/dist/esm/taro-channel-video-core.entry.js +1 -1
  95. package/dist/esm/taro-checkbox-core_2.entry.js +1 -1
  96. package/dist/esm/taro-comment-detail-core.entry.js +1 -1
  97. package/dist/esm/taro-comment-list-core.entry.js +1 -1
  98. package/dist/esm/taro-components.js +2 -2
  99. package/dist/esm/taro-contact-button-core.entry.js +1 -1
  100. package/dist/esm/taro-cover-image-core.entry.js +1 -1
  101. package/dist/esm/taro-cover-view-core.entry.js +2 -2
  102. package/dist/esm/taro-custom-wrapper-core.entry.js +1 -1
  103. package/dist/esm/taro-editor-core.entry.js +1 -1
  104. package/dist/esm/taro-follow-swan-core.entry.js +1 -1
  105. package/dist/esm/taro-form-core.entry.js +1 -1
  106. package/dist/esm/taro-functional-page-navigator-core.entry.js +1 -1
  107. package/dist/esm/taro-grid-view-core.entry.js +1 -1
  108. package/dist/esm/taro-icon-core.entry.js +2 -2
  109. package/dist/esm/taro-image-core.entry.js +2 -2
  110. package/dist/esm/taro-inline-payment-panel-core.entry.js +1 -1
  111. package/dist/esm/taro-input-core.entry.js +1 -1
  112. package/dist/esm/taro-keyboard-accessory-core.entry.js +1 -1
  113. package/dist/esm/taro-label-core.entry.js +1 -1
  114. package/dist/esm/taro-lifestyle-core.entry.js +1 -1
  115. package/dist/esm/taro-like-core.entry.js +1 -1
  116. package/dist/esm/taro-list-view-core.entry.js +1 -1
  117. package/dist/esm/taro-live-player-core.entry.js +1 -1
  118. package/dist/esm/taro-live-pusher-core.entry.js +1 -1
  119. package/dist/esm/taro-login-core.entry.js +1 -1
  120. package/dist/esm/taro-lottie-core.entry.js +1 -1
  121. package/dist/esm/taro-map-core.entry.js +1 -1
  122. package/dist/esm/taro-match-media-core.entry.js +1 -1
  123. package/dist/esm/taro-movable-area-core_2.entry.js +1 -1
  124. package/dist/esm/taro-native-slot-core.entry.js +1 -1
  125. package/dist/esm/taro-navigation-bar-core.entry.js +1 -1
  126. package/dist/esm/taro-navigator-core.entry.js +2 -2
  127. package/dist/esm/taro-official-account-core.entry.js +1 -1
  128. package/dist/esm/taro-open-data-core.entry.js +1 -1
  129. package/dist/esm/taro-page-container-core.entry.js +1 -1
  130. package/dist/esm/taro-page-meta-core.entry.js +1 -1
  131. package/dist/esm/taro-picker-core_2.entry.js +2 -2
  132. package/dist/esm/taro-picker-view-column-core_2.entry.js +2 -2
  133. package/dist/esm/taro-progress-core.entry.js +1 -1
  134. package/dist/esm/taro-pull-to-refresh-core.entry.js +2 -2
  135. package/dist/esm/taro-radio-core_2.entry.js +1 -1
  136. package/dist/esm/taro-rich-text-core.entry.js +1 -1
  137. package/dist/esm/taro-root-portal-core.entry.js +1 -1
  138. package/dist/esm/taro-rtc-room-core.entry.js +1 -1
  139. package/dist/esm/taro-rtc-room-item-core.entry.js +1 -1
  140. package/dist/esm/taro-scroll-view-core.entry.js +2 -2
  141. package/dist/esm/taro-share-element-core.entry.js +1 -1
  142. package/dist/esm/taro-slider-core.entry.js +1 -1
  143. package/dist/esm/taro-slot-core.entry.js +1 -1
  144. package/dist/esm/taro-snapshot-core.entry.js +1 -1
  145. package/dist/esm/taro-sticky-header-core.entry.js +1 -1
  146. package/dist/esm/taro-sticky-section-core.entry.js +1 -1
  147. package/dist/esm/taro-swiper-core_2.entry.js +2 -2
  148. package/dist/esm/taro-switch-core.entry.js +1 -1
  149. package/dist/esm/taro-tab-item-core.entry.js +1 -1
  150. package/dist/esm/taro-tabbar.entry.js +2 -2
  151. package/dist/esm/taro-tabs-core.entry.js +1 -1
  152. package/dist/esm/taro-text-core.entry.js +1 -1
  153. package/dist/esm/taro-textarea-core.entry.js +1 -1
  154. package/dist/esm/taro-video-control_3.entry.js +3 -3
  155. package/dist/esm/taro-view-core.entry.js +2 -2
  156. package/dist/esm/taro-voip-room-core.entry.js +1 -1
  157. package/dist/esm/taro-web-view-core.entry.js +1 -1
  158. package/dist/esm-es5/hls-268fc25b.js +1 -0
  159. package/dist/esm-es5/loader.js +1 -1
  160. package/dist/esm-es5/taro-ad-core.entry.js +1 -1
  161. package/dist/esm-es5/taro-ad-custom-core.entry.js +1 -1
  162. package/dist/esm-es5/taro-animation-video-core.entry.js +1 -1
  163. package/dist/esm-es5/taro-animation-view-core.entry.js +1 -1
  164. package/dist/esm-es5/taro-ar-camera-core.entry.js +1 -1
  165. package/dist/esm-es5/taro-audio-core.entry.js +1 -1
  166. package/dist/esm-es5/taro-aweme-data-core.entry.js +1 -1
  167. package/dist/esm-es5/taro-block-core.entry.js +1 -1
  168. package/dist/esm-es5/taro-button-core.entry.js +1 -1
  169. package/dist/esm-es5/taro-camera-core.entry.js +1 -1
  170. package/dist/esm-es5/taro-canvas-core.entry.js +1 -1
  171. package/dist/esm-es5/taro-channel-live-core.entry.js +1 -1
  172. package/dist/esm-es5/taro-channel-video-core.entry.js +1 -1
  173. package/dist/esm-es5/taro-checkbox-core_2.entry.js +1 -1
  174. package/dist/esm-es5/taro-comment-detail-core.entry.js +1 -1
  175. package/dist/esm-es5/taro-comment-list-core.entry.js +1 -1
  176. package/dist/esm-es5/taro-components.js +1 -1
  177. package/dist/esm-es5/taro-contact-button-core.entry.js +1 -1
  178. package/dist/esm-es5/taro-cover-image-core.entry.js +1 -1
  179. package/dist/esm-es5/taro-cover-view-core.entry.js +1 -1
  180. package/dist/esm-es5/taro-custom-wrapper-core.entry.js +1 -1
  181. package/dist/esm-es5/taro-editor-core.entry.js +1 -1
  182. package/dist/esm-es5/taro-follow-swan-core.entry.js +1 -1
  183. package/dist/esm-es5/taro-form-core.entry.js +1 -1
  184. package/dist/esm-es5/taro-functional-page-navigator-core.entry.js +1 -1
  185. package/dist/esm-es5/taro-grid-view-core.entry.js +1 -1
  186. package/dist/esm-es5/taro-icon-core.entry.js +1 -1
  187. package/dist/esm-es5/taro-image-core.entry.js +1 -1
  188. package/dist/esm-es5/taro-inline-payment-panel-core.entry.js +1 -1
  189. package/dist/esm-es5/taro-input-core.entry.js +1 -1
  190. package/dist/esm-es5/taro-keyboard-accessory-core.entry.js +1 -1
  191. package/dist/esm-es5/taro-label-core.entry.js +1 -1
  192. package/dist/esm-es5/taro-lifestyle-core.entry.js +1 -1
  193. package/dist/esm-es5/taro-like-core.entry.js +1 -1
  194. package/dist/esm-es5/taro-list-view-core.entry.js +1 -1
  195. package/dist/esm-es5/taro-live-player-core.entry.js +1 -1
  196. package/dist/esm-es5/taro-live-pusher-core.entry.js +1 -1
  197. package/dist/esm-es5/taro-login-core.entry.js +1 -1
  198. package/dist/esm-es5/taro-lottie-core.entry.js +1 -1
  199. package/dist/esm-es5/taro-map-core.entry.js +1 -1
  200. package/dist/esm-es5/taro-match-media-core.entry.js +1 -1
  201. package/dist/esm-es5/taro-movable-area-core_2.entry.js +1 -1
  202. package/dist/esm-es5/taro-native-slot-core.entry.js +1 -1
  203. package/dist/esm-es5/taro-navigation-bar-core.entry.js +1 -1
  204. package/dist/esm-es5/taro-navigator-core.entry.js +1 -1
  205. package/dist/esm-es5/taro-official-account-core.entry.js +1 -1
  206. package/dist/esm-es5/taro-open-data-core.entry.js +1 -1
  207. package/dist/esm-es5/taro-page-container-core.entry.js +1 -1
  208. package/dist/esm-es5/taro-page-meta-core.entry.js +1 -1
  209. package/dist/esm-es5/taro-picker-core_2.entry.js +1 -1
  210. package/dist/esm-es5/taro-picker-view-column-core_2.entry.js +1 -1
  211. package/dist/esm-es5/taro-progress-core.entry.js +1 -1
  212. package/dist/esm-es5/taro-pull-to-refresh-core.entry.js +1 -1
  213. package/dist/esm-es5/taro-radio-core_2.entry.js +1 -1
  214. package/dist/esm-es5/taro-rich-text-core.entry.js +1 -1
  215. package/dist/esm-es5/taro-root-portal-core.entry.js +1 -1
  216. package/dist/esm-es5/taro-rtc-room-core.entry.js +1 -1
  217. package/dist/esm-es5/taro-rtc-room-item-core.entry.js +1 -1
  218. package/dist/esm-es5/taro-scroll-view-core.entry.js +1 -1
  219. package/dist/esm-es5/taro-share-element-core.entry.js +1 -1
  220. package/dist/esm-es5/taro-slider-core.entry.js +1 -1
  221. package/dist/esm-es5/taro-slot-core.entry.js +1 -1
  222. package/dist/esm-es5/taro-snapshot-core.entry.js +1 -1
  223. package/dist/esm-es5/taro-sticky-header-core.entry.js +1 -1
  224. package/dist/esm-es5/taro-sticky-section-core.entry.js +1 -1
  225. package/dist/esm-es5/taro-swiper-core_2.entry.js +1 -1
  226. package/dist/esm-es5/taro-switch-core.entry.js +1 -1
  227. package/dist/esm-es5/taro-tab-item-core.entry.js +1 -1
  228. package/dist/esm-es5/taro-tabbar.entry.js +1 -1
  229. package/dist/esm-es5/taro-tabs-core.entry.js +1 -1
  230. package/dist/esm-es5/taro-text-core.entry.js +1 -1
  231. package/dist/esm-es5/taro-textarea-core.entry.js +1 -1
  232. package/dist/esm-es5/taro-video-control_3.entry.js +1 -1
  233. package/dist/esm-es5/taro-view-core.entry.js +1 -1
  234. package/dist/esm-es5/taro-voip-room-core.entry.js +1 -1
  235. package/dist/esm-es5/taro-web-view-core.entry.js +1 -1
  236. package/dist/taro-components/{p-eee6e075.system.entry.js → p-00113225.system.entry.js} +1 -1
  237. package/dist/taro-components/{p-ed331c06.system.js → p-0030841b.system.js} +1 -1
  238. package/dist/taro-components/p-028ad016.system.entry.js +1 -0
  239. package/dist/taro-components/p-03538d40.system.entry.js +1 -0
  240. package/dist/taro-components/p-039e15a4.system.entry.js +1 -0
  241. package/dist/taro-components/{p-9fe49bab.entry.js → p-0780df27.entry.js} +1 -1
  242. package/dist/taro-components/p-0910d414.entry.js +1 -0
  243. package/dist/taro-components/{p-1b789738.system.entry.js → p-0b6e9013.system.entry.js} +1 -1
  244. package/dist/taro-components/{p-0fe855c6.entry.js → p-0e37fb54.entry.js} +1 -1
  245. package/dist/taro-components/p-11c962b9.entry.js +1 -0
  246. package/dist/taro-components/p-139d64f1.entry.js +1 -0
  247. package/dist/taro-components/{p-be96eb59.system.entry.js → p-1411cd2e.system.entry.js} +1 -1
  248. package/dist/taro-components/p-175edd50.entry.js +1 -0
  249. package/dist/taro-components/p-178cb282.system.entry.js +1 -0
  250. package/dist/taro-components/{p-ccc64042.system.entry.js → p-18ea7e10.system.entry.js} +1 -1
  251. package/dist/taro-components/{p-ef322936.entry.js → p-1ac9622e.entry.js} +1 -1
  252. package/dist/taro-components/{p-a4951dd6.entry.js → p-1c1d9be8.entry.js} +1 -1
  253. package/dist/taro-components/{p-8ca82a56.entry.js → p-1c95795d.entry.js} +1 -1
  254. package/dist/taro-components/{p-5870248f.system.entry.js → p-1d3ed211.system.entry.js} +1 -1
  255. package/dist/taro-components/{p-600e89cc.system.entry.js → p-1eb875d0.system.entry.js} +1 -1
  256. package/dist/taro-components/p-1f36cd5f.entry.js +1 -0
  257. package/dist/taro-components/p-1f88349b.entry.js +1 -0
  258. package/dist/taro-components/{p-43720011.entry.js → p-20e38f24.entry.js} +1 -1
  259. package/dist/taro-components/p-2145dccb.entry.js +1 -0
  260. package/dist/taro-components/p-215881b4.entry.js +1 -0
  261. package/dist/taro-components/{p-8ccaf5e8.entry.js → p-222573ad.entry.js} +1 -1
  262. package/dist/taro-components/{p-c99e14b5.entry.js → p-2339a4d3.entry.js} +1 -1
  263. package/dist/taro-components/{p-ebc7b6fc.entry.js → p-23f15c7b.entry.js} +1 -1
  264. package/dist/taro-components/{p-de96861c.system.entry.js → p-25fffbbe.system.entry.js} +1 -1
  265. package/dist/taro-components/{p-2da9c8fd.entry.js → p-2713fc1a.entry.js} +1 -1
  266. package/dist/taro-components/{p-657cb6e4.system.entry.js → p-277892fe.system.entry.js} +1 -1
  267. package/dist/taro-components/{p-e67755f0.system.entry.js → p-27c756c5.system.entry.js} +1 -1
  268. package/dist/taro-components/p-2aff4cdb.entry.js +1 -0
  269. package/dist/taro-components/p-2e2487bf.system.entry.js +1 -0
  270. package/dist/taro-components/{p-15624788.system.entry.js → p-32b41faa.system.entry.js} +1 -1
  271. package/dist/taro-components/{p-9eeba192.entry.js → p-332dc867.entry.js} +1 -1
  272. package/dist/taro-components/{p-425c209a.entry.js → p-333305e3.entry.js} +1 -1
  273. package/dist/taro-components/{p-b641e598.entry.js → p-345cb56f.entry.js} +1 -1
  274. package/dist/taro-components/{p-92d04741.system.entry.js → p-346162b4.system.entry.js} +1 -1
  275. package/dist/taro-components/p-35160fd2.entry.js +1 -0
  276. package/dist/taro-components/{p-c913b635.system.entry.js → p-3708575b.system.entry.js} +1 -1
  277. package/dist/taro-components/{p-f02b6f70.entry.js → p-37edf3f6.entry.js} +1 -1
  278. package/dist/taro-components/p-3967311b.system.entry.js +1 -0
  279. package/dist/taro-components/p-3aaf0fb7.system.entry.js +1 -0
  280. package/dist/taro-components/{p-cbcaad0e.system.entry.js → p-3ad92100.system.entry.js} +1 -1
  281. package/dist/taro-components/{p-e6481671.system.entry.js → p-3cd71da3.system.entry.js} +1 -1
  282. package/dist/taro-components/p-3d7626a9.system.entry.js +1 -0
  283. package/dist/taro-components/{p-085076c5.system.entry.js → p-401743f9.system.entry.js} +1 -1
  284. package/dist/taro-components/{p-7726b789.system.entry.js → p-443fe754.system.entry.js} +1 -1
  285. package/dist/taro-components/{p-58cc2e6d.system.entry.js → p-46a9adcf.system.entry.js} +1 -1
  286. package/dist/taro-components/{p-519fbe84.system.entry.js → p-475f9ed3.system.entry.js} +1 -1
  287. package/dist/taro-components/{p-30805bdf.entry.js → p-48c52124.entry.js} +1 -1
  288. package/dist/taro-components/{p-a94e3347.system.entry.js → p-4aeb3859.system.entry.js} +1 -1
  289. package/dist/taro-components/{p-bf0e0394.entry.js → p-4cc2e06e.entry.js} +1 -1
  290. package/dist/taro-components/{p-dab28e1f.system.entry.js → p-4d609ebb.system.entry.js} +1 -1
  291. package/dist/taro-components/p-4d89b685.entry.js +1 -0
  292. package/dist/taro-components/{p-7e8e355b.system.entry.js → p-4ff6ad99.system.entry.js} +1 -1
  293. package/dist/taro-components/{p-7b68dee8.entry.js → p-527c55ca.entry.js} +1 -1
  294. package/dist/taro-components/p-550c350a.entry.js +1 -0
  295. package/dist/taro-components/{p-6cde54e5.system.entry.js → p-58d410c6.system.entry.js} +1 -1
  296. package/dist/taro-components/p-5b028f1b.js +1 -0
  297. package/dist/taro-components/{p-e09451c5.system.entry.js → p-619b9fe5.system.entry.js} +1 -1
  298. package/dist/taro-components/p-635fe530.system.entry.js +1 -0
  299. package/dist/taro-components/{p-8d990f1c.system.entry.js → p-67dcb636.system.entry.js} +1 -1
  300. package/dist/taro-components/{p-5e91398a.system.entry.js → p-680ba5a1.system.entry.js} +1 -1
  301. package/dist/taro-components/{p-aa04f605.entry.js → p-6c48d884.entry.js} +1 -1
  302. package/dist/taro-components/{p-fac4ce6f.system.entry.js → p-6d1e33e1.system.entry.js} +1 -1
  303. package/dist/taro-components/{p-f420680c.system.entry.js → p-6d7165eb.system.entry.js} +1 -1
  304. package/dist/taro-components/{p-9b0298bf.entry.js → p-6df6fd58.entry.js} +1 -1
  305. package/dist/taro-components/{p-21c07cb3.system.entry.js → p-6e1f0e6d.system.entry.js} +1 -1
  306. package/dist/taro-components/{p-0ec2e88a.entry.js → p-6f45f110.entry.js} +1 -1
  307. package/dist/taro-components/p-6f5e162d.entry.js +1 -0
  308. package/dist/taro-components/{p-dadd02ca.entry.js → p-70bd0541.entry.js} +1 -1
  309. package/dist/taro-components/{p-69c43a81.entry.js → p-70c81b7e.entry.js} +1 -1
  310. package/dist/taro-components/{p-117633e9.system.entry.js → p-728b6f8f.system.entry.js} +1 -1
  311. package/dist/taro-components/{p-3004e71a.system.entry.js → p-72d7fae0.system.entry.js} +1 -1
  312. package/dist/taro-components/{p-5994d9f2.system.entry.js → p-747bdbaa.system.entry.js} +1 -1
  313. package/dist/taro-components/p-79b675c8.entry.js +1 -0
  314. package/dist/taro-components/p-7ad33036.system.entry.js +1 -0
  315. package/dist/taro-components/{p-d5c8380d.system.entry.js → p-7b39971e.system.entry.js} +1 -1
  316. package/dist/taro-components/{p-6b454506.entry.js → p-7ba17143.entry.js} +1 -1
  317. package/dist/taro-components/p-7be1f603.entry.js +1 -0
  318. package/dist/taro-components/{p-f78823a1.entry.js → p-7de7d96c.entry.js} +1 -1
  319. package/dist/taro-components/p-7dee8f07.system.entry.js +1 -0
  320. package/dist/taro-components/{p-ce303d12.system.entry.js → p-810b9a86.system.entry.js} +1 -1
  321. package/dist/taro-components/{p-0cedad18.system.entry.js → p-817b319c.system.entry.js} +1 -1
  322. package/dist/taro-components/{p-9ea4f297.entry.js → p-8b604d50.entry.js} +1 -1
  323. package/dist/taro-components/{p-d2e0b15c.entry.js → p-8c93f3e0.entry.js} +1 -1
  324. package/dist/taro-components/{p-9e03bc7a.system.entry.js → p-8d797863.system.entry.js} +1 -1
  325. package/dist/taro-components/{p-a1763153.entry.js → p-907d2fe0.entry.js} +1 -1
  326. package/dist/taro-components/p-93a3d6ee.entry.js +1 -0
  327. package/dist/taro-components/{p-b5b30493.system.entry.js → p-9c566d7d.system.entry.js} +1 -1
  328. package/dist/taro-components/{p-1e739fcb.system.entry.js → p-9c91aee3.system.entry.js} +1 -1
  329. package/dist/taro-components/{p-962f28cb.entry.js → p-9e788d33.entry.js} +1 -1
  330. package/dist/taro-components/{p-b1d2b575.system.entry.js → p-9f5ebe09.system.entry.js} +1 -1
  331. package/dist/taro-components/{p-2a071adf.system.entry.js → p-9feeee0f.system.entry.js} +1 -1
  332. package/dist/taro-components/p-a3dad439.entry.js +1 -0
  333. package/dist/taro-components/{p-01e163f8.system.entry.js → p-a4ea7a51.system.entry.js} +1 -1
  334. package/dist/taro-components/p-a54735cb.entry.js +1 -0
  335. package/dist/taro-components/{p-d025a415.system.entry.js → p-a5adbf15.system.entry.js} +1 -1
  336. package/dist/taro-components/{p-99e16df8.entry.js → p-a744e7aa.entry.js} +1 -1
  337. package/dist/taro-components/{p-a6e2dd48.entry.js → p-a7ecb97a.entry.js} +1 -1
  338. package/dist/taro-components/{p-208e438c.system.entry.js → p-aa1ea71b.system.entry.js} +1 -1
  339. package/dist/taro-components/{p-29638de3.entry.js → p-aae38fe8.entry.js} +1 -1
  340. package/dist/taro-components/{p-a90221ab.system.entry.js → p-abd51173.system.entry.js} +1 -1
  341. package/dist/taro-components/p-b1977132.entry.js +1 -0
  342. package/dist/taro-components/p-b2ad9709.entry.js +1 -0
  343. package/dist/taro-components/{p-9feff958.system.entry.js → p-b3780eab.system.entry.js} +1 -1
  344. package/dist/taro-components/{p-fd7ff0f3.system.entry.js → p-b4e3f72e.system.entry.js} +1 -1
  345. package/dist/taro-components/{p-06671eee.entry.js → p-b69bcd43.entry.js} +1 -1
  346. package/dist/taro-components/{p-38ee526a.entry.js → p-b94dcfbe.entry.js} +1 -1
  347. package/dist/taro-components/p-b9c2a210.system.entry.js +1 -0
  348. package/dist/taro-components/p-bb454378.entry.js +1 -0
  349. package/dist/taro-components/p-bbbe728b.system.entry.js +1 -0
  350. package/dist/taro-components/p-bd6574cf.entry.js +1 -0
  351. package/dist/taro-components/p-bfea77f9.entry.js +1 -0
  352. package/dist/taro-components/p-c0a59843.entry.js +1 -0
  353. package/dist/taro-components/{p-473afc8e.system.entry.js → p-c2259653.system.entry.js} +1 -1
  354. package/dist/taro-components/{p-0d7a705b.system.entry.js → p-c3c69a95.system.entry.js} +1 -1
  355. package/dist/taro-components/{p-124ac21f.entry.js → p-c7679d57.entry.js} +1 -1
  356. package/dist/taro-components/{p-b07cd197.system.entry.js → p-c968ea43.system.entry.js} +1 -1
  357. package/dist/taro-components/p-cb21f4f1.entry.js +1 -0
  358. package/dist/taro-components/p-cd0f3444.entry.js +1 -0
  359. package/dist/taro-components/{p-36d4407e.system.entry.js → p-cd34c92e.system.entry.js} +1 -1
  360. package/dist/taro-components/{p-9edea30f.system.entry.js → p-d42968e9.system.entry.js} +1 -1
  361. package/dist/taro-components/{p-b0fc8752.entry.js → p-d55f870d.entry.js} +1 -1
  362. package/dist/taro-components/p-d81577b8.system.entry.js +1 -0
  363. package/dist/taro-components/p-d86ce035.system.entry.js +1 -0
  364. package/dist/taro-components/p-d8f78d99.system.entry.js +1 -0
  365. package/dist/taro-components/p-daabfc6e.entry.js +1 -0
  366. package/dist/taro-components/p-dda03c84.entry.js +1 -0
  367. package/dist/taro-components/{p-a74c970c.system.entry.js → p-dea67974.system.entry.js} +1 -1
  368. package/dist/taro-components/p-deff0bb8.entry.js +1 -0
  369. package/dist/taro-components/{p-c1a3fecf.system.entry.js → p-e487b8b4.system.entry.js} +1 -1
  370. package/dist/taro-components/{p-a940a65b.entry.js → p-e6e3c1d7.entry.js} +1 -1
  371. package/dist/taro-components/p-e7232d54.system.entry.js +1 -0
  372. package/dist/taro-components/p-e769cea4.system.entry.js +1 -0
  373. package/dist/taro-components/p-e82e16a1.entry.js +1 -0
  374. package/dist/taro-components/{p-f2c86846.entry.js → p-eab8a6b0.entry.js} +1 -1
  375. package/dist/taro-components/p-edb9e04e.system.entry.js +1 -0
  376. package/dist/taro-components/p-ee4da4db.system.js +1 -0
  377. package/dist/taro-components/{p-f0340edf.entry.js → p-f003caad.entry.js} +1 -1
  378. package/dist/taro-components/{p-9d76d7a9.system.entry.js → p-f094089c.system.entry.js} +1 -1
  379. package/dist/taro-components/p-f111303f.entry.js +1 -0
  380. package/dist/taro-components/{p-d1756770.entry.js → p-f232cf02.entry.js} +1 -1
  381. package/dist/taro-components/{p-22bf7daf.entry.js → p-f43ba9ed.entry.js} +1 -1
  382. package/dist/taro-components/{p-6aa2ac6a.system.entry.js → p-f75d094e.system.entry.js} +1 -1
  383. package/dist/taro-components/{p-0fa96970.entry.js → p-f8970571.entry.js} +1 -1
  384. package/dist/taro-components/{p-0e3b37e9.entry.js → p-fbc2b53e.entry.js} +1 -1
  385. package/dist/taro-components/p-fbec1f96.entry.js +1 -0
  386. package/dist/taro-components/{p-a2141e85.system.entry.js → p-fdccd9b3.system.entry.js} +1 -1
  387. package/dist/taro-components/p-feddde29.system.entry.js +1 -0
  388. package/dist/taro-components/{p-bc541cd8.entry.js → p-fff30a48.entry.js} +1 -1
  389. package/dist/taro-components/taro-components.esm.js +1 -1
  390. package/dist/taro-components/taro-components.js +1 -1
  391. package/lib/react/node_modules/.pnpm/{registry.npmjs.org_tslib@2.5.0 → tslib@2.6.2}/node_modules/tslib/tslib.es6.js +82 -5
  392. package/lib/react/node_modules/.pnpm/{registry.npmjs.org_tslib@2.5.0 → tslib@2.6.2}/node_modules/tslib/tslib.es6.js.map +1 -1
  393. package/lib/react/react-component-lib/createComponent.js +1 -1
  394. package/lib/react/react-component-lib/createOverlayComponent.js +1 -1
  395. package/lib/vue2/components-loader.js +1 -1
  396. package/package.json +4 -4
  397. package/types/common.d.ts +1 -1
  398. package/dist/esm-es5/hls-4018c7ea.js +0 -1
  399. package/dist/taro-components/p-00ed4bbb.entry.js +0 -1
  400. package/dist/taro-components/p-065a10d7.entry.js +0 -1
  401. package/dist/taro-components/p-08b7ecd7.system.entry.js +0 -1
  402. package/dist/taro-components/p-0a250d71.system.entry.js +0 -1
  403. package/dist/taro-components/p-0e8199b7.entry.js +0 -1
  404. package/dist/taro-components/p-1cf16dfa.entry.js +0 -1
  405. package/dist/taro-components/p-1f118969.system.entry.js +0 -1
  406. package/dist/taro-components/p-24d9836e.entry.js +0 -1
  407. package/dist/taro-components/p-32e9981a.system.entry.js +0 -1
  408. package/dist/taro-components/p-357ba712.system.entry.js +0 -1
  409. package/dist/taro-components/p-3f3abe55.system.entry.js +0 -1
  410. package/dist/taro-components/p-43efbf30.js +0 -1
  411. package/dist/taro-components/p-4cedbe5e.system.entry.js +0 -1
  412. package/dist/taro-components/p-4fc40739.entry.js +0 -1
  413. package/dist/taro-components/p-5756cf00.system.entry.js +0 -1
  414. package/dist/taro-components/p-5ebc7010.system.entry.js +0 -1
  415. package/dist/taro-components/p-64eb91f7.entry.js +0 -1
  416. package/dist/taro-components/p-72b118b0.entry.js +0 -1
  417. package/dist/taro-components/p-76996fcb.entry.js +0 -1
  418. package/dist/taro-components/p-78e4805e.entry.js +0 -1
  419. package/dist/taro-components/p-7bfc5f3d.entry.js +0 -1
  420. package/dist/taro-components/p-84958ace.entry.js +0 -1
  421. package/dist/taro-components/p-862b38b9.entry.js +0 -1
  422. package/dist/taro-components/p-9a5fbb2e.entry.js +0 -1
  423. package/dist/taro-components/p-9dcba4a7.system.entry.js +0 -1
  424. package/dist/taro-components/p-a20fed0a.entry.js +0 -1
  425. package/dist/taro-components/p-a2d590ad.entry.js +0 -1
  426. package/dist/taro-components/p-a5a51112.entry.js +0 -1
  427. package/dist/taro-components/p-a7d31b01.system.entry.js +0 -1
  428. package/dist/taro-components/p-ad9b04e0.entry.js +0 -1
  429. package/dist/taro-components/p-b201ff38.entry.js +0 -1
  430. package/dist/taro-components/p-bd4ed8b1.entry.js +0 -1
  431. package/dist/taro-components/p-bf0c8449.system.entry.js +0 -1
  432. package/dist/taro-components/p-c0080d83.entry.js +0 -1
  433. package/dist/taro-components/p-cb406f85.system.entry.js +0 -1
  434. package/dist/taro-components/p-d550aea9.system.entry.js +0 -1
  435. package/dist/taro-components/p-d867e333.system.entry.js +0 -1
  436. package/dist/taro-components/p-d9dcc6c6.entry.js +0 -1
  437. package/dist/taro-components/p-da3db323.entry.js +0 -1
  438. package/dist/taro-components/p-dc5d65a0.system.entry.js +0 -1
  439. package/dist/taro-components/p-e2cd5dd3.system.entry.js +0 -1
  440. package/dist/taro-components/p-e598f47b.entry.js +0 -1
  441. package/dist/taro-components/p-e740320c.entry.js +0 -1
  442. package/dist/taro-components/p-e78775ce.system.js +0 -1
  443. package/dist/taro-components/p-e976c6c9.system.entry.js +0 -1
  444. package/dist/taro-components/p-ea0d5d4f.system.entry.js +0 -1
  445. package/dist/taro-components/p-f1304456.entry.js +0 -1
  446. package/dist/taro-components/p-f2235cbb.entry.js +0 -1
  447. package/dist/taro-components/p-f23cfdc8.entry.js +0 -1
  448. package/dist/taro-components/p-f4d86882.entry.js +0 -1
  449. package/dist/taro-components/p-f533bc2f.entry.js +0 -1
  450. package/dist/taro-components/p-f658de2e.entry.js +0 -1
  451. package/dist/taro-components/p-f6f6a996.system.entry.js +0 -1
  452. package/dist/taro-components/p-fbb2446e.entry.js +0 -1
  453. /package/dist/cjs/{index-e751dfe3.js → index-5a8221ec.js} +0 -0
  454. /package/dist/cjs/{index-f6805218.js → index-b8c435ee.js} +0 -0
  455. /package/dist/esm/{index-980f930f.js → index-6bb77c5f.js} +0 -0
  456. /package/dist/esm/{index-c3e4004b.js → index-a74b6944.js} +0 -0
  457. /package/dist/esm-es5/{index-980f930f.js → index-6bb77c5f.js} +0 -0
  458. /package/dist/esm-es5/{index-c3e4004b.js → index-a74b6944.js} +0 -0
  459. /package/dist/taro-components/{p-de951a46.js → p-19f218e6.js} +0 -0
  460. /package/dist/taro-components/{p-2ec68968.system.js → p-34de4101.system.js} +0 -0
  461. /package/dist/taro-components/{p-9137dcab.js → p-7e90dfef.js} +0 -0
  462. /package/dist/taro-components/{p-7e6b54cb.system.js → p-cdd48677.system.js} +0 -0
  463. /package/lib/vue2/node_modules/.pnpm/{registry.npmjs.org_vue-fragment@1.6.0_vue@2.7.14 → vue-fragment@1.6.0_vue@2.7.15}/node_modules/vue-fragment/dist/vue-fragment.esm.js +0 -0
  464. /package/lib/vue2/node_modules/.pnpm/{registry.npmjs.org_vue-fragment@1.6.0_vue@2.7.14 → vue-fragment@1.6.0_vue@2.7.15}/node_modules/vue-fragment/dist/vue-fragment.esm.js.map +0 -0
@@ -242,10 +242,17 @@ function _toPropertyKey(arg) {
242
242
  return typeof key === "symbol" ? key : String(key);
243
243
  }
244
244
 
245
+ // https://caniuse.com/mdn-javascript_builtins_number_isfinite
245
246
  const isFiniteNumber = Number.isFinite || function (value) {
246
247
  return typeof value === 'number' && isFinite(value);
247
248
  };
248
249
 
250
+ // https://caniuse.com/mdn-javascript_builtins_number_issafeinteger
251
+ const isSafeInteger = Number.isSafeInteger || function (value) {
252
+ return typeof value === 'number' && Math.abs(value) <= MAX_SAFE_INTEGER;
253
+ };
254
+ const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
255
+
249
256
  let Events = /*#__PURE__*/function (Events) {
250
257
  Events["MEDIA_ATTACHING"] = "hlsMediaAttaching";
251
258
  Events["MEDIA_ATTACHED"] = "hlsMediaAttached";
@@ -404,7 +411,7 @@ function enableLogs(debugConfig, id) {
404
411
  // Some browsers don't allow to use bind on console object anyway
405
412
  // fallback to default if needed
406
413
  try {
407
- exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.4.1"}`);
414
+ exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.4.13"}`);
408
415
  } catch (e) {
409
416
  exportedLogger = fakeLogger;
410
417
  }
@@ -929,7 +936,7 @@ class LevelDetails {
929
936
  }
930
937
  const partSnDiff = this.lastPartSn - previous.lastPartSn;
931
938
  const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;
932
- this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff;
939
+ this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;
933
940
  this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;
934
941
  if (this.updated || this.advanced) {
935
942
  this.misses = Math.floor(previous.misses * 0.6);
@@ -1825,13 +1832,13 @@ function getStartDTS(initData, fmp4) {
1825
1832
  const scale = track.timescale || 90e3;
1826
1833
  // convert base time to seconds
1827
1834
  const startTime = baseTime / scale;
1828
- if (isFinite(startTime) && (result === null || startTime < result)) {
1835
+ if (isFiniteNumber(startTime) && (result === null || startTime < result)) {
1829
1836
  return startTime;
1830
1837
  }
1831
1838
  }
1832
1839
  return result;
1833
1840
  }, null);
1834
- if (start !== null && isFinite(start) && (result === null || start < result)) {
1841
+ if (start !== null && isFiniteNumber(start) && (result === null || start < result)) {
1835
1842
  return start;
1836
1843
  }
1837
1844
  return result;
@@ -2350,7 +2357,7 @@ function parseEmsg(data) {
2350
2357
  const rightPresentationTime = readUint32(data, offset);
2351
2358
  offset += 4;
2352
2359
  presentationTime = 2 ** 32 * leftPresentationTime + rightPresentationTime;
2353
- if (!Number.isSafeInteger(presentationTime)) {
2360
+ if (!isSafeInteger(presentationTime)) {
2354
2361
  presentationTime = Number.MAX_SAFE_INTEGER;
2355
2362
  logger.warn('Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box');
2356
2363
  }
@@ -3993,9 +4000,13 @@ function addCueToTrack(track, cue) {
3993
4000
  }
3994
4001
  } catch (err) {
3995
4002
  logger.debug(`[texttrack-utils]: ${err}`);
3996
- const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);
3997
- textTrackCue.id = cue.id;
3998
- track.addCue(textTrackCue);
4003
+ try {
4004
+ const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);
4005
+ textTrackCue.id = cue.id;
4006
+ track.addCue(textTrackCue);
4007
+ } catch (err2) {
4008
+ logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);
4009
+ }
3999
4010
  }
4000
4011
  }
4001
4012
  if (mode === 'disabled') {
@@ -4091,11 +4102,21 @@ var MetadataSchema = {
4091
4102
  const MIN_CUE_DURATION = 0.25;
4092
4103
  function getCueClass() {
4093
4104
  if (typeof self === 'undefined') return undefined;
4094
-
4095
- // Attempt to recreate Safari functionality by creating
4096
- // WebKitDataCue objects when available and store the decoded
4097
- // ID3 data in the value property of the cue
4098
- return self.WebKitDataCue || self.VTTCue || self.TextTrackCue;
4105
+ return self.VTTCue || self.TextTrackCue;
4106
+ }
4107
+ function createCueWithDataFields(Cue, startTime, endTime, data, type) {
4108
+ let cue = new Cue(startTime, endTime, '');
4109
+ try {
4110
+ cue.value = data;
4111
+ if (type) {
4112
+ cue.type = type;
4113
+ }
4114
+ } catch (e) {
4115
+ cue = new Cue(startTime, endTime, JSON.stringify(type ? _objectSpread2({
4116
+ type
4117
+ }, data) : data));
4118
+ }
4119
+ return cue;
4099
4120
  }
4100
4121
 
4101
4122
  // VTTCue latest draft allows an infinite duration, fallback
@@ -4103,7 +4124,7 @@ function getCueClass() {
4103
4124
  const MAX_CUE_ENDTIME = (() => {
4104
4125
  const Cue = getCueClass();
4105
4126
  try {
4106
- new Cue(0, Number.POSITIVE_INFINITY, '');
4127
+ Cue && new Cue(0, Number.POSITIVE_INFINITY, '');
4107
4128
  } catch (e) {
4108
4129
  return Number.MAX_VALUE;
4109
4130
  }
@@ -4215,6 +4236,9 @@ class ID3TrackController {
4215
4236
  this.id3Track = this.createTrack(this.media);
4216
4237
  }
4217
4238
  const Cue = getCueClass();
4239
+ if (!Cue) {
4240
+ return;
4241
+ }
4218
4242
  for (let i = 0; i < samples.length; i++) {
4219
4243
  const type = samples[i].type;
4220
4244
  if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {
@@ -4236,25 +4260,23 @@ class ID3TrackController {
4236
4260
  // Safari doesn't put the timestamp frame in the TextTrack
4237
4261
  if (!isTimeStampFrame(frame)) {
4238
4262
  // add a bounds to any unbounded cues
4239
- this.updateId3CueEnds(startTime);
4240
- const cue = new Cue(startTime, endTime, '');
4241
- cue.value = frame;
4242
- if (type) {
4243
- cue.type = type;
4263
+ this.updateId3CueEnds(startTime, type);
4264
+ const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);
4265
+ if (cue) {
4266
+ this.id3Track.addCue(cue);
4244
4267
  }
4245
- this.id3Track.addCue(cue);
4246
4268
  }
4247
4269
  }
4248
4270
  }
4249
4271
  }
4250
4272
  }
4251
- updateId3CueEnds(startTime) {
4273
+ updateId3CueEnds(startTime, type) {
4252
4274
  var _this$id3Track;
4253
4275
  const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;
4254
4276
  if (cues) {
4255
4277
  for (let i = cues.length; i--;) {
4256
4278
  const cue = cues[i];
4257
- if (cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {
4279
+ if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {
4258
4280
  cue.endTime = startTime;
4259
4281
  }
4260
4282
  }
@@ -4356,25 +4378,25 @@ class ID3TrackController {
4356
4378
  if (!isDateRangeCueAttribute(key)) {
4357
4379
  continue;
4358
4380
  }
4359
- let cue = cues[key];
4381
+ const cue = cues[key];
4360
4382
  if (cue) {
4361
4383
  if (durationKnown && !appendedDateRangeCues.durationKnown) {
4362
4384
  cue.endTime = endTime;
4363
4385
  }
4364
- } else {
4386
+ } else if (Cue) {
4365
4387
  let data = dateRange.attr[key];
4366
- cue = new Cue(startTime, endTime, '');
4367
4388
  if (isSCTE35Attribute(key)) {
4368
4389
  data = hexToArrayBuffer(data);
4369
4390
  }
4370
- cue.value = {
4391
+ const _cue = createCueWithDataFields(Cue, startTime, endTime, {
4371
4392
  key,
4372
4393
  data
4373
- };
4374
- cue.type = MetadataSchema.dateRange;
4375
- cue.id = id;
4376
- this.id3Track.addCue(cue);
4377
- cues[key] = cue;
4394
+ }, MetadataSchema.dateRange);
4395
+ if (_cue) {
4396
+ _cue.id = id;
4397
+ this.id3Track.addCue(_cue);
4398
+ cues[key] = _cue;
4399
+ }
4378
4400
  }
4379
4401
  }
4380
4402
  dateRangeCuesAppended[id] = {
@@ -5284,6 +5306,7 @@ class ErrorController {
5284
5306
  const hls = this.hls;
5285
5307
  hls.on(Events.ERROR, this.onError, this);
5286
5308
  hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);
5309
+ hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);
5287
5310
  }
5288
5311
  unregisterListeners() {
5289
5312
  const hls = this.hls;
@@ -5293,6 +5316,7 @@ class ErrorController {
5293
5316
  hls.off(Events.ERROR, this.onError, this);
5294
5317
  hls.off(Events.ERROR, this.onErrorOut, this);
5295
5318
  hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);
5319
+ hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);
5296
5320
  }
5297
5321
  destroy() {
5298
5322
  this.unregisterListeners();
@@ -5311,8 +5335,11 @@ class ErrorController {
5311
5335
  this.playlistError = 0;
5312
5336
  this.penalizedRenditions = {};
5313
5337
  }
5338
+ onLevelUpdated() {
5339
+ this.playlistError = 0;
5340
+ }
5314
5341
  onError(event, data) {
5315
- var _data$level;
5342
+ var _data$frag, _data$level;
5316
5343
  if (data.fatal) {
5317
5344
  return;
5318
5345
  }
@@ -5325,8 +5352,17 @@ class ErrorController {
5325
5352
  case ErrorDetails.KEY_LOAD_TIMEOUT:
5326
5353
  data.errorAction = this.getFragRetryOrSwitchAction(data);
5327
5354
  return;
5328
- case ErrorDetails.FRAG_GAP:
5329
5355
  case ErrorDetails.FRAG_PARSING_ERROR:
5356
+ // ignore empty segment errors marked as gap
5357
+ if ((_data$frag = data.frag) != null && _data$frag.gap) {
5358
+ data.errorAction = {
5359
+ action: NetworkErrorAction.DoNothing,
5360
+ flags: ErrorActionFlags.None
5361
+ };
5362
+ return;
5363
+ }
5364
+ // falls through
5365
+ case ErrorDetails.FRAG_GAP:
5330
5366
  case ErrorDetails.FRAG_DECRYPT_ERROR:
5331
5367
  {
5332
5368
  // Switch level if possible, otherwise allow retry count to reach max error retries
@@ -5411,7 +5447,7 @@ class ErrorController {
5411
5447
  }
5412
5448
  }
5413
5449
  getPlaylistRetryOrSwitchAction(data, levelIndex) {
5414
- var _data$response, _data$context2;
5450
+ var _data$response;
5415
5451
  const hls = this.hls;
5416
5452
  const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);
5417
5453
  const retryCount = this.playlistError++;
@@ -5425,21 +5461,12 @@ class ErrorController {
5425
5461
  retryCount
5426
5462
  };
5427
5463
  }
5428
- // Do not perform level switch if an error occurred using delivery directives
5429
- // Allow reload without directives (handled in playlist-loader)
5430
- if ((_data$context2 = data.context) != null && _data$context2.deliveryDirectives) {
5431
- return {
5432
- action: NetworkErrorAction.DoNothing,
5433
- flags: ErrorActionFlags.None,
5434
- retryConfig: retryConfig || {
5435
- maxNumRetry: 0,
5436
- retryDelayMs: 0,
5437
- maxRetryDelayMs: 0
5438
- },
5439
- retryCount
5440
- };
5464
+ const errorAction = this.getLevelSwitchAction(data, levelIndex);
5465
+ if (retryConfig) {
5466
+ errorAction.retryConfig = retryConfig;
5467
+ errorAction.retryCount = retryCount;
5441
5468
  }
5442
- return this.getLevelSwitchAction(data, levelIndex);
5469
+ return errorAction;
5443
5470
  }
5444
5471
  getFragRetryOrSwitchAction(data) {
5445
5472
  const hls = this.hls;
@@ -5489,18 +5516,23 @@ class ErrorController {
5489
5516
  if (level) {
5490
5517
  level.loadError++;
5491
5518
  if (hls.autoLevelEnabled) {
5492
- var _data$frag, _data$context3;
5519
+ var _data$frag2, _data$context2;
5493
5520
  // Search for next level to retry
5494
5521
  let nextLevel = -1;
5495
- const levels = hls.levels;
5496
- const fragErrorType = (_data$frag = data.frag) == null ? void 0 : _data$frag.type;
5522
+ const {
5523
+ levels,
5524
+ loadLevel,
5525
+ minAutoLevel,
5526
+ maxAutoLevel
5527
+ } = hls;
5528
+ const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;
5497
5529
  const {
5498
5530
  type: playlistErrorType,
5499
5531
  groupId: playlistErrorGroupId
5500
- } = (_data$context3 = data.context) != null ? _data$context3 : {};
5532
+ } = (_data$context2 = data.context) != null ? _data$context2 : {};
5501
5533
  for (let i = levels.length; i--;) {
5502
- const candidate = (i + hls.loadLevel) % levels.length;
5503
- if (candidate !== hls.loadLevel && levels[candidate].loadError === 0) {
5534
+ const candidate = (i + loadLevel) % levels.length;
5535
+ if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {
5504
5536
  const levelCandidate = levels[candidate];
5505
5537
  // Skip level switch if GAP tag is found in next level at same position
5506
5538
  if (data.details === ErrorDetails.FRAG_GAP && data.frag) {
@@ -5524,6 +5556,7 @@ class ErrorController {
5524
5556
  }
5525
5557
  if (nextLevel > -1 && hls.loadLevel !== nextLevel) {
5526
5558
  data.levelRetry = true;
5559
+ this.playlistError = 0;
5527
5560
  return {
5528
5561
  action: NetworkErrorAction.SendAlternateToPenaltyBox,
5529
5562
  flags: ErrorActionFlags.None,
@@ -5764,7 +5797,7 @@ class BasePlaylistController {
5764
5797
  if (details.live || previousDetails != null && previousDetails.live) {
5765
5798
  details.reloaded(previousDetails);
5766
5799
  if (previousDetails) {
5767
- this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : 'MISSED'}`);
5800
+ this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : details.updated ? 'UPDATED' : 'MISSED'}`);
5768
5801
  }
5769
5802
  // Merge live playlists to adjust fragment starts and fill in delta playlist skipped segments
5770
5803
  if (previousDetails && details.fragments.length > 0) {
@@ -5819,7 +5852,7 @@ class BasePlaylistController {
5819
5852
  this.loadPlaylist(deliveryDirectives);
5820
5853
  return;
5821
5854
  }
5822
- } else if (details.canBlockReload) {
5855
+ } else if (details.canBlockReload || details.canSkipUntil) {
5823
5856
  deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);
5824
5857
  }
5825
5858
  const bufferInfo = this.hls.mainForwardBufferInfo;
@@ -5882,6 +5915,9 @@ class BasePlaylistController {
5882
5915
  if (retry) {
5883
5916
  var _errorEvent$context;
5884
5917
  this.requestScheduled = -1;
5918
+ if (retryCount >= retryConfig.maxNumRetry) {
5919
+ return false;
5920
+ }
5885
5921
  if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {
5886
5922
  // The LL-HLS request already timed out so retry immediately
5887
5923
  this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after "${errorDetails}" without delivery-directives`);
@@ -6501,7 +6537,7 @@ class FragmentTracker {
6501
6537
  }
6502
6538
  // Check if any flagged fragments have been unloaded
6503
6539
  // excluding anything newer than appendedPartSn
6504
- const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || 0;
6540
+ const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;
6505
6541
  Object.keys(this.fragments).forEach(key => {
6506
6542
  const fragmentEntity = this.fragments[key];
6507
6543
  if (!fragmentEntity) {
@@ -6546,7 +6582,7 @@ class FragmentTracker {
6546
6582
  }
6547
6583
  const fragKey = getFragmentKey(frag);
6548
6584
  const fragmentEntity = this.fragments[fragKey];
6549
- if (!fragmentEntity) {
6585
+ if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {
6550
6586
  return;
6551
6587
  }
6552
6588
  const isFragHint = !frag.relurl;
@@ -6562,7 +6598,8 @@ class FragmentTracker {
6562
6598
  fragmentEntity.loaded = null;
6563
6599
  if (Object.keys(fragmentEntity.range).length) {
6564
6600
  fragmentEntity.buffered = true;
6565
- if (fragmentEntity.body.endList) {
6601
+ const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;
6602
+ if (endList) {
6566
6603
  this.endListFragments[fragmentEntity.body.type] = fragmentEntity;
6567
6604
  }
6568
6605
  if (!isPartial(fragmentEntity)) {
@@ -6801,8 +6838,8 @@ class FragmentTracker {
6801
6838
  }
6802
6839
  }
6803
6840
  function isPartial(fragmentEntity) {
6804
- var _fragmentEntity$range, _fragmentEntity$range2;
6805
- return fragmentEntity.buffered && (fragmentEntity.body.gap || ((_fragmentEntity$range = fragmentEntity.range.video) == null ? void 0 : _fragmentEntity$range.partial) || ((_fragmentEntity$range2 = fragmentEntity.range.audio) == null ? void 0 : _fragmentEntity$range2.partial));
6841
+ var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;
6842
+ return fragmentEntity.buffered && (fragmentEntity.body.gap || ((_fragmentEntity$range = fragmentEntity.range.video) == null ? void 0 : _fragmentEntity$range.partial) || ((_fragmentEntity$range2 = fragmentEntity.range.audio) == null ? void 0 : _fragmentEntity$range2.partial) || ((_fragmentEntity$range3 = fragmentEntity.range.audiovideo) == null ? void 0 : _fragmentEntity$range3.partial));
6806
6843
  }
6807
6844
  function getFragmentKey(fragment) {
6808
6845
  return `${fragment.type}_${fragment.level}_${fragment.urlId}_${fragment.sn}`;
@@ -6850,8 +6887,13 @@ class FragmentLoader {
6850
6887
  this.loader.destroy();
6851
6888
  }
6852
6889
  if (frag.gap) {
6853
- reject(createGapLoadError(frag));
6854
- return;
6890
+ if (frag.tagList.some(tags => tags[0] === 'GAP')) {
6891
+ reject(createGapLoadError(frag));
6892
+ return;
6893
+ } else {
6894
+ // Reset temporary treatment as GAP tag
6895
+ frag.gap = false;
6896
+ }
6855
6897
  }
6856
6898
  const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);
6857
6899
  const loaderContext = createLoaderContext(frag);
@@ -7484,6 +7526,7 @@ class TaskLoop {
7484
7526
  *
7485
7527
  * Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered
7486
7528
  */
7529
+
7487
7530
  const noopBuffered = {
7488
7531
  length: 0,
7489
7532
  start: () => 0,
@@ -8544,6 +8587,21 @@ class BaseStreamController extends TaskLoop {
8544
8587
  }
8545
8588
  }
8546
8589
  }
8590
+ checkLiveUpdate(details) {
8591
+ if (details.updated && !details.live) {
8592
+ // Live stream ended, update fragment tracker
8593
+ const lastFragment = details.fragments[details.fragments.length - 1];
8594
+ this.fragmentTracker.detectPartialFragments({
8595
+ frag: lastFragment,
8596
+ part: null,
8597
+ stats: lastFragment.stats,
8598
+ id: lastFragment.type
8599
+ });
8600
+ }
8601
+ if (!details.fragments[0]) {
8602
+ details.deltaUpdateFailed = true;
8603
+ }
8604
+ }
8547
8605
  flushMainBuffer(startOffset, endOffset, type = null) {
8548
8606
  if (!(startOffset - endOffset)) {
8549
8607
  return;
@@ -8873,7 +8931,7 @@ class BaseStreamController extends TaskLoop {
8873
8931
  level
8874
8932
  };
8875
8933
  }
8876
- bufferFragmentData(data, frag, part, chunkMeta) {
8934
+ bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {
8877
8935
  var _buffer;
8878
8936
  if (!data || this.state !== State.PARSING) {
8879
8937
  return;
@@ -8900,6 +8958,9 @@ class BaseStreamController extends TaskLoop {
8900
8958
  };
8901
8959
  this.hls.trigger(Events.BUFFER_APPENDING, segment);
8902
8960
  if (data.dropped && data.independent && !part) {
8961
+ if (noBacktracking) {
8962
+ return;
8963
+ }
8903
8964
  // Clear buffer so that we reload previous segments sequentially if required
8904
8965
  this.flushBufferGap(frag);
8905
8966
  }
@@ -9316,10 +9377,8 @@ class BaseStreamController extends TaskLoop {
9316
9377
  retryConfig
9317
9378
  } = errorAction || {};
9318
9379
  if (errorAction && action === NetworkErrorAction.RetryRequest && retryConfig) {
9319
- if (!this.loadedmetadata) {
9320
- this.startFragRequested = false;
9321
- this.nextLoadPosition = this.startPosition;
9322
- }
9380
+ var _this$levelLastLoaded;
9381
+ this.resetStartWhenNotLoaded((_this$levelLastLoaded = this.levelLastLoaded) != null ? _this$levelLastLoaded : frag.level);
9323
9382
  const delay = getRetryDelay(retryConfig, retryCount);
9324
9383
  this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay}ms`);
9325
9384
  errorAction.resolved = true;
@@ -9335,6 +9394,8 @@ class BaseStreamController extends TaskLoop {
9335
9394
  } else {
9336
9395
  logger.warn(`${data.details} reached or exceeded max retry (${retryCount})`);
9337
9396
  }
9397
+ } else if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox) {
9398
+ this.state = State.WAITING_LEVEL;
9338
9399
  } else {
9339
9400
  this.state = State.ERROR;
9340
9401
  }
@@ -9417,9 +9478,10 @@ class BaseStreamController extends TaskLoop {
9417
9478
  }
9418
9479
  }
9419
9480
  resetWhenMissingContext(chunkMeta) {
9481
+ var _this$levelLastLoaded2;
9420
9482
  this.warn(`The loading context changed while buffering fragment ${chunkMeta.sn} of level ${chunkMeta.level}. This chunk will not be buffered.`);
9421
9483
  this.removeUnbufferedFrags();
9422
- this.resetStartWhenNotLoaded(chunkMeta.level);
9484
+ this.resetStartWhenNotLoaded((_this$levelLastLoaded2 = this.levelLastLoaded) != null ? _this$levelLastLoaded2 : chunkMeta.level);
9423
9485
  this.resetLoadingState();
9424
9486
  }
9425
9487
  removeUnbufferedFrags(start = 0) {
@@ -9460,7 +9522,14 @@ class BaseStreamController extends TaskLoop {
9460
9522
  if (parsed) {
9461
9523
  level.fragmentError = 0;
9462
9524
  } else if (((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null) {
9463
- const error = new Error(`Found no media in fragment ${frag.sn} of level ${level.id} resetting transmuxer to fallback to playlist timing`);
9525
+ const error = new Error(`Found no media in fragment ${frag.sn} of level ${frag.level} resetting transmuxer to fallback to playlist timing`);
9526
+ if (level.fragmentError === 0) {
9527
+ // Mark and track the odd empty segment as a gap to avoid reloading
9528
+ level.fragmentError++;
9529
+ frag.gap = true;
9530
+ this.fragmentTracker.removeFragment(frag);
9531
+ this.fragmentTracker.fragBuffered(frag, true);
9532
+ }
9464
9533
  this.warn(error.message);
9465
9534
  this.hls.trigger(Events.ERROR, {
9466
9535
  type: ErrorTypes.MEDIA_ERROR,
@@ -9491,7 +9560,10 @@ class BaseStreamController extends TaskLoop {
9491
9560
  }
9492
9561
  recoverWorkerError(data) {
9493
9562
  if (data.event === 'demuxerWorker') {
9563
+ var _ref, _this$levelLastLoaded3, _this$fragCurrent3;
9564
+ this.fragmentTracker.removeAllFragments();
9494
9565
  this.resetTransmuxer();
9566
+ this.resetStartWhenNotLoaded((_ref = (_this$levelLastLoaded3 = this.levelLastLoaded) != null ? _this$levelLastLoaded3 : (_this$fragCurrent3 = this.fragCurrent) == null ? void 0 : _this$fragCurrent3.level) != null ? _ref : 0);
9495
9567
  this.resetLoadingState();
9496
9568
  }
9497
9569
  }
@@ -9538,6 +9610,7 @@ function changeTypeSupported() {
9538
9610
  }
9539
9611
 
9540
9612
  // ensure the worker ends up in the bundle
9613
+ // If the worker should not be included this gets aliased to empty.js
9541
9614
  function hasUMDWorker() {
9542
9615
  return typeof __HLS_WORKER_BUNDLE__ === 'function';
9543
9616
  }
@@ -10301,6 +10374,7 @@ function probe(data, offset) {
10301
10374
  /**
10302
10375
  * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.
10303
10376
  */
10377
+
10304
10378
  class ExpGolomb {
10305
10379
  constructor(data) {
10306
10380
  this.data = void 0;
@@ -10626,6 +10700,7 @@ class ExpGolomb {
10626
10700
  /**
10627
10701
  * SAMPLE-AES decrypter
10628
10702
  */
10703
+
10629
10704
  class SampleAesDecrypter {
10630
10705
  constructor(observer, config, keyData) {
10631
10706
  this.keyData = void 0;
@@ -10760,19 +10835,33 @@ class TSDemuxer {
10760
10835
  }
10761
10836
  static syncOffset(data) {
10762
10837
  const length = data.length;
10763
- const scanwindow = Math.min(PACKET_LENGTH * 5, data.length - PACKET_LENGTH) + 1;
10838
+ let scanwindow = Math.min(PACKET_LENGTH * 5, data.length - PACKET_LENGTH) + 1;
10764
10839
  let i = 0;
10765
10840
  while (i < scanwindow) {
10766
10841
  // a TS init segment should contain at least 2 TS packets: PAT and PMT, each starting with 0x47
10767
10842
  let foundPat = false;
10843
+ let packetStart = -1;
10844
+ let tsPackets = 0;
10768
10845
  for (let j = i; j < length; j += PACKET_LENGTH) {
10769
10846
  if (data[j] === 0x47) {
10770
- if (!foundPat && parsePID(data, j) === 0) {
10771
- foundPat = true;
10847
+ tsPackets++;
10848
+ if (packetStart === -1) {
10849
+ packetStart = j;
10850
+ // First sync word found at offset, increase scan length (#5251)
10851
+ if (packetStart !== 0) {
10852
+ scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;
10853
+ }
10854
+ }
10855
+ if (!foundPat) {
10856
+ foundPat = parsePID(data, j) === 0;
10772
10857
  }
10773
- if (foundPat && j + PACKET_LENGTH > scanwindow) {
10774
- return i;
10858
+ // Sync word found at 0 with 3 packets, or found at offset least 2 packets up to scanwindow (#5501)
10859
+ if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j + PACKET_LENGTH > scanwindow)) {
10860
+ return packetStart;
10775
10861
  }
10862
+ } else if (tsPackets) {
10863
+ // Exit if sync word found, but does not contain contiguous packets (#5501)
10864
+ return -1;
10776
10865
  } else {
10777
10866
  break;
10778
10867
  }
@@ -11141,15 +11230,13 @@ class TSDemuxer {
11141
11230
  avcSample = this.avcSample = createAVCSample(false, pes.pts, pes.dts, '');
11142
11231
  }
11143
11232
  units.forEach(unit => {
11233
+ var _avcSample2;
11144
11234
  switch (unit.type) {
11145
11235
  // NDR
11146
11236
  case 1:
11147
11237
  {
11238
+ let iskey = false;
11148
11239
  push = true;
11149
- if (!avcSample) {
11150
- avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
11151
- }
11152
- avcSample.frame = true;
11153
11240
  const data = unit.data;
11154
11241
  // only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)
11155
11242
  if (spsfound && data.length > 4) {
@@ -11161,9 +11248,22 @@ class TSDemuxer {
11161
11248
  // I slice: A slice that is not an SI slice that is decoded using intra prediction only.
11162
11249
  // if (sliceType === 2 || sliceType === 7) {
11163
11250
  if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {
11164
- avcSample.key = true;
11251
+ iskey = true;
11252
+ }
11253
+ }
11254
+ if (iskey) {
11255
+ var _avcSample;
11256
+ // if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push
11257
+ if ((_avcSample = avcSample) != null && _avcSample.frame && !avcSample.key) {
11258
+ pushAccessUnit(avcSample, track);
11259
+ avcSample = this.avcSample = null;
11165
11260
  }
11166
11261
  }
11262
+ if (!avcSample) {
11263
+ avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
11264
+ }
11265
+ avcSample.frame = true;
11266
+ avcSample.key = iskey;
11167
11267
  break;
11168
11268
  // IDR
11169
11269
  }
@@ -11171,6 +11271,11 @@ class TSDemuxer {
11171
11271
  case 5:
11172
11272
  push = true;
11173
11273
  // handle PES not starting with AUD
11274
+ // if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push
11275
+ if ((_avcSample2 = avcSample) != null && _avcSample2.frame && !avcSample.key) {
11276
+ pushAccessUnit(avcSample, track);
11277
+ avcSample = this.avcSample = null;
11278
+ }
11174
11279
  if (!avcSample) {
11175
11280
  avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
11176
11281
  }
@@ -11249,14 +11354,14 @@ class TSDemuxer {
11249
11354
  }
11250
11355
  }
11251
11356
  getLastNalUnit(samples) {
11252
- var _avcSample;
11357
+ var _avcSample3;
11253
11358
  let avcSample = this.avcSample;
11254
11359
  let lastUnit;
11255
11360
  // try to fallback to previous sample if current one is empty
11256
11361
  if (!avcSample || avcSample.units.length === 0) {
11257
11362
  avcSample = samples[samples.length - 1];
11258
11363
  }
11259
- if ((_avcSample = avcSample) != null && _avcSample.units) {
11364
+ if ((_avcSample3 = avcSample) != null && _avcSample3.units) {
11260
11365
  const units = avcSample.units;
11261
11366
  lastUnit = units[units.length - 1];
11262
11367
  }
@@ -12761,7 +12866,7 @@ class MP4Remuxer {
12761
12866
  } else {
12762
12867
  logger.warn(`AVC: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected`);
12763
12868
  }
12764
- if (!foundOverlap || nextAvcDts > inputSamples[0].pts) {
12869
+ if (!foundOverlap || nextAvcDts >= inputSamples[0].pts) {
12765
12870
  firstDTS = nextAvcDts;
12766
12871
  const firstPTS = inputSamples[0].pts - delta;
12767
12872
  inputSamples[0].dts = firstDTS;
@@ -13214,8 +13319,8 @@ function flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {
13214
13319
  const sample = track.samples[index];
13215
13320
  // setting id3 pts, dts to relative time
13216
13321
  // using this._initPTS and this._initDTS to calculate relative time
13217
- sample.pts = normalizePts(sample.pts - initPTS.baseTime * 90000 / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13218
- sample.dts = normalizePts(sample.dts - initDTS.baseTime * 90000 / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13322
+ sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13323
+ sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13219
13324
  }
13220
13325
  const samples = track.samples;
13221
13326
  track.samples = [];
@@ -13233,7 +13338,7 @@ function flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {
13233
13338
  const sample = track.samples[index];
13234
13339
  // setting text pts, dts to relative time
13235
13340
  // using this._initPTS and this._initDTS to calculate relative time
13236
- sample.pts = normalizePts(sample.pts - initPTS.baseTime * 90000 / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13341
+ sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13237
13342
  }
13238
13343
  track.samples.sort((a, b) => a.pts - b.pts);
13239
13344
  const samples = track.samples;
@@ -13382,16 +13487,19 @@ class PassThroughRemuxer {
13382
13487
  initSegment.tracks = this.initTracks;
13383
13488
  this.emitInitSegment = false;
13384
13489
  }
13490
+ const duration = getDuration(data, initData);
13385
13491
  const startDTS = getStartDTS(initData, data);
13386
13492
  const decodeTime = startDTS === null ? timeOffset : startDTS;
13387
- if (isInvalidInitPts(initPTS, decodeTime, timeOffset) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {
13493
+ if (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {
13388
13494
  initSegment.initPTS = decodeTime - timeOffset;
13495
+ if (initPTS && initPTS.timescale === 1) {
13496
+ logger.warn(`Adjusting initPTS by ${initSegment.initPTS - initPTS.baseTime}`);
13497
+ }
13389
13498
  this.initPTS = initPTS = {
13390
13499
  baseTime: initSegment.initPTS,
13391
13500
  timescale: 1
13392
13501
  };
13393
13502
  }
13394
- const duration = getDuration(data, initData);
13395
13503
  const startTime = audioTrack ? decodeTime - initPTS.baseTime / initPTS.timescale : lastEndTime;
13396
13504
  const endTime = startTime + duration;
13397
13505
  offsetStartDTS(initData, data, initPTS.baseTime / initPTS.timescale);
@@ -13432,13 +13540,14 @@ class PassThroughRemuxer {
13432
13540
  return result;
13433
13541
  }
13434
13542
  }
13435
- function isInvalidInitPts(initPTS, startDTS, timeOffset) {
13543
+ function isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {
13436
13544
  if (initPTS === null) {
13437
13545
  return true;
13438
13546
  }
13439
- // InitPTS is invalid when it would cause start time to be negative, or distance from time offset to be more than 1 second
13547
+ // InitPTS is invalid when distance from program would be more than segment duration or a minimum of one second
13548
+ const minDuration = Math.max(duration, 1);
13440
13549
  const startTime = startDTS - initPTS.baseTime / initPTS.timescale;
13441
- return startTime < 0 && Math.abs(startTime - timeOffset) > 1;
13550
+ return Math.abs(startTime - timeOffset) > minDuration;
13442
13551
  }
13443
13552
  function getParsedTrackCodec(track, type) {
13444
13553
  const parsedCodec = track == null ? void 0 : track.codec;
@@ -14913,6 +15022,9 @@ class StreamController extends BaseStreamController {
14913
15022
  }
14914
15023
  this.state = State.IDLE;
14915
15024
  break;
15025
+ } else if (this.hls.nextLoadLevel !== this.level) {
15026
+ this.state = State.IDLE;
15027
+ break;
14916
15028
  }
14917
15029
  break;
14918
15030
  }
@@ -15281,9 +15393,7 @@ class StreamController extends BaseStreamController {
15281
15393
  }
15282
15394
  let sliding = 0;
15283
15395
  if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {
15284
- if (!newDetails.fragments[0]) {
15285
- newDetails.deltaUpdateFailed = true;
15286
- }
15396
+ this.checkLiveUpdate(newDetails);
15287
15397
  if (newDetails.deltaUpdateFailed) {
15288
15398
  return;
15289
15399
  }
@@ -15667,8 +15777,11 @@ class StreamController extends BaseStreamController {
15667
15777
  }
15668
15778
 
15669
15779
  // Avoid buffering if backtracking this fragment
15670
- if (video && remuxResult.independent !== false) {
15671
- if (details) {
15780
+ if (video && details && frag.sn !== 'initSegment') {
15781
+ const prevFrag = details.fragments[frag.sn - 1 - details.startSN];
15782
+ const isFirstFragment = frag.sn === details.startSN;
15783
+ const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;
15784
+ if (remuxResult.independent !== false) {
15672
15785
  const {
15673
15786
  startPTS,
15674
15787
  endPTS,
@@ -15683,7 +15796,7 @@ class StreamController extends BaseStreamController {
15683
15796
  endDTS
15684
15797
  };
15685
15798
  } else {
15686
- if (video.firstKeyFrame && video.independent && chunkMeta.id === 1) {
15799
+ if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {
15687
15800
  this.couldBacktrack = true;
15688
15801
  }
15689
15802
  if (video.dropped && video.independent) {
@@ -15692,9 +15805,12 @@ class StreamController extends BaseStreamController {
15692
15805
  const bufferInfo = this.getMainFwdBufferInfo();
15693
15806
  const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;
15694
15807
  const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;
15695
- if (targetBufferTime < startTime - this.config.maxBufferHole) {
15808
+ if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {
15696
15809
  this.backtrack(frag);
15697
15810
  return;
15811
+ } else if (isFirstInDiscontinuity) {
15812
+ // Mark segment with a gap to avoid loop loading
15813
+ frag.gap = true;
15698
15814
  }
15699
15815
  // Set video stream start to fragment start so that truncated samples do not distort the timeline, and mark it partial
15700
15816
  frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);
@@ -15704,11 +15820,14 @@ class StreamController extends BaseStreamController {
15704
15820
  if (this.backtrackFragment) {
15705
15821
  this.backtrackFragment = frag;
15706
15822
  }
15707
- this.bufferFragmentData(video, frag, part, chunkMeta);
15823
+ this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);
15824
+ } else if (isFirstFragment || isFirstInDiscontinuity) {
15825
+ // Mark segment with a gap to avoid loop loading
15826
+ frag.gap = true;
15827
+ } else {
15828
+ this.backtrack(frag);
15829
+ return;
15708
15830
  }
15709
- } else if (remuxResult.independent === false) {
15710
- this.backtrack(frag);
15711
- return;
15712
15831
  }
15713
15832
  if (audio) {
15714
15833
  const {
@@ -15965,6 +16084,7 @@ class EWMA {
15965
16084
  * Based on the minimum of two exponentially-weighted moving averages with
15966
16085
  * different half-lives.
15967
16086
  */
16087
+
15968
16088
  class EwmaBandWidthEstimator {
15969
16089
  constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {
15970
16090
  this.defaultEstimate_ = void 0;
@@ -16885,10 +17005,8 @@ class AudioStreamController extends BaseStreamController {
16885
17005
  const track = levels[trackId];
16886
17006
  let sliding = 0;
16887
17007
  if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {
17008
+ this.checkLiveUpdate(newDetails);
16888
17009
  const mainDetails = this.mainDetails;
16889
- if (!newDetails.fragments[0]) {
16890
- newDetails.deltaUpdateFailed = true;
16891
- }
16892
17010
  if (newDetails.deltaUpdateFailed || !mainDetails) {
16893
17011
  return;
16894
17012
  }
@@ -17005,9 +17123,12 @@ class AudioStreamController extends BaseStreamController {
17005
17123
  } = data;
17006
17124
  if (frag.type !== PlaylistLevelType.AUDIO) {
17007
17125
  if (!this.loadedmetadata && frag.type === PlaylistLevelType.MAIN) {
17008
- var _ref;
17009
- if ((_ref = this.videoBuffer || this.media) != null && _ref.buffered.length) {
17010
- this.loadedmetadata = true;
17126
+ const bufferable = this.videoBuffer || this.media;
17127
+ if (bufferable) {
17128
+ const bufferedTimeRanges = BufferHelper.getBuffered(bufferable);
17129
+ if (bufferedTimeRanges.length) {
17130
+ this.loadedmetadata = true;
17131
+ }
17011
17132
  }
17012
17133
  }
17013
17134
  return;
@@ -17572,16 +17693,7 @@ class SubtitleStreamController extends BaseStreamController {
17572
17693
  endOffset
17573
17694
  } = data;
17574
17695
  if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {
17575
- const {
17576
- currentTrackId,
17577
- levels
17578
- } = this;
17579
- if (!levels.length || !levels[currentTrackId] || !levels[currentTrackId].details) {
17580
- return;
17581
- }
17582
- const trackDetails = levels[currentTrackId].details;
17583
- const targetDuration = trackDetails.targetduration;
17584
- const endOffsetSubtitles = endOffset - targetDuration;
17696
+ const endOffsetSubtitles = endOffset - 1;
17585
17697
  if (endOffsetSubtitles <= 0) {
17586
17698
  return;
17587
17699
  }
@@ -17777,21 +17889,18 @@ class SubtitleStreamController extends BaseStreamController {
17777
17889
  if (!levels.length || !track || !track.details) {
17778
17890
  return;
17779
17891
  }
17780
-
17781
- // Expand range of subs loaded by one target-duration in either direction to make up for misaligned playlists
17782
- const trackDetails = track.details;
17783
- const targetDuration = trackDetails.targetduration;
17784
17892
  const {
17785
17893
  config
17786
17894
  } = this;
17787
17895
  const currentTime = this.getLoadPosition();
17788
- const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime - targetDuration, config.maxBufferHole);
17896
+ const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);
17789
17897
  const {
17790
17898
  end: targetBufferTime,
17791
17899
  len: bufferLen
17792
17900
  } = bufferedInfo;
17793
17901
  const mainBufferInfo = this.getFwdBufferInfo(this.media, PlaylistLevelType.MAIN);
17794
- const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + targetDuration;
17902
+ const trackDetails = track.details;
17903
+ const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + trackDetails.levelTargetDuration;
17795
17904
  if (bufferLen > maxBufLen) {
17796
17905
  return;
17797
17906
  }
@@ -17801,10 +17910,9 @@ class SubtitleStreamController extends BaseStreamController {
17801
17910
  let foundFrag = null;
17802
17911
  const fragPrevious = this.fragPrevious;
17803
17912
  if (targetBufferTime < end) {
17804
- const {
17805
- maxFragLookUpTolerance
17806
- } = config;
17807
- foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), maxFragLookUpTolerance);
17913
+ const tolerance = config.maxFragLookUpTolerance;
17914
+ const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;
17915
+ foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);
17808
17916
  if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {
17809
17917
  foundFrag = fragments[0];
17810
17918
  }
@@ -17815,6 +17923,14 @@ class SubtitleStreamController extends BaseStreamController {
17815
17923
  return;
17816
17924
  }
17817
17925
  foundFrag = this.mapToInitFragWhenRequired(foundFrag);
17926
+ if (foundFrag.sn !== 'initSegment') {
17927
+ // Load earlier fragment in same discontinuity to make up for misaligned playlists and cues that extend beyond end of segment
17928
+ const curSNIdx = foundFrag.sn - trackDetails.startSN;
17929
+ const prevFrag = fragments[curSNIdx - 1];
17930
+ if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {
17931
+ foundFrag = prevFrag;
17932
+ }
17933
+ }
17818
17934
  if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {
17819
17935
  // only load if fragment is not loaded
17820
17936
  this.loadFragment(foundFrag, track, targetBufferTime);
@@ -20676,6 +20792,7 @@ var VTTCue = (function () {
20676
20792
  /*
20677
20793
  * Source: https://github.com/mozilla/vtt.js/blob/master/dist/vtt.js
20678
20794
  */
20795
+
20679
20796
  class StringDecoder {
20680
20797
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
20681
20798
  decode(data, options) {
@@ -21157,7 +21274,7 @@ function parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, er
21157
21274
  // Uint8Array.prototype.reduce is not implemented in IE11
21158
21275
  const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, '\n').split('\n');
21159
21276
  const cues = [];
21160
- const init90kHz = toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale);
21277
+ const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;
21161
21278
  let cueTime = '00:00.000';
21162
21279
  let timestampMapMPEGTS = 0;
21163
21280
  let timestampMapLOCAL = 0;
@@ -21181,6 +21298,10 @@ function parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, er
21181
21298
  }
21182
21299
  }
21183
21300
  if (webVttMpegTsMapOffset) {
21301
+ if (!initPTS) {
21302
+ parsingError = new Error('Missing initPTS for VTT MPEGTS');
21303
+ return;
21304
+ }
21184
21305
  // If we have MPEGTS, offset = presentation time + discontinuity offset
21185
21306
  cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;
21186
21307
  }
@@ -21676,7 +21797,7 @@ class TimelineController {
21676
21797
  this.captionsTracks = {};
21677
21798
  this.nonNativeCaptionsTracks = {};
21678
21799
  this.textTracks = [];
21679
- this.unparsedVttFrags = this.unparsedVttFrags || [];
21800
+ this.unparsedVttFrags = [];
21680
21801
  this.initPTS = [];
21681
21802
  if (this.cea608Parser1 && this.cea608Parser2) {
21682
21803
  this.cea608Parser1.reset();
@@ -21820,26 +21941,9 @@ class TimelineController {
21820
21941
  frag,
21821
21942
  payload
21822
21943
  } = data;
21823
- const {
21824
- initPTS,
21825
- unparsedVttFrags
21826
- } = this;
21827
21944
  if (frag.type === PlaylistLevelType.SUBTITLE) {
21828
21945
  // If fragment is subtitle type, parse as WebVTT.
21829
21946
  if (payload.byteLength) {
21830
- // We need an initial synchronisation PTS. Store fragments as long as none has arrived.
21831
- if (!initPTS[frag.cc]) {
21832
- unparsedVttFrags.push(data);
21833
- if (initPTS.length) {
21834
- // finish unsuccessfully, otherwise the subtitle-stream-controller could be blocked from loading new frags.
21835
- this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
21836
- success: false,
21837
- frag,
21838
- error: new Error('Missing initial subtitle PTS')
21839
- });
21840
- }
21841
- return;
21842
- }
21843
21947
  const decryptData = frag.decryptdata;
21844
21948
  // fragment after decryption has a stats object
21845
21949
  const decrypted = ('stats' in data);
@@ -21858,7 +21962,7 @@ class TimelineController {
21858
21962
  if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {
21859
21963
  this._parseIMSC1(frag, payload);
21860
21964
  } else {
21861
- this._parseVTTs(frag, payload, vttCCs);
21965
+ this._parseVTTs(data);
21862
21966
  }
21863
21967
  }
21864
21968
  } else {
@@ -21888,21 +21992,43 @@ class TimelineController {
21888
21992
  });
21889
21993
  });
21890
21994
  }
21891
- _parseVTTs(frag, payload, vttCCs) {
21995
+ _parseVTTs(data) {
21892
21996
  var _frag$initSegment;
21997
+ const {
21998
+ frag,
21999
+ payload
22000
+ } = data;
22001
+ // We need an initial synchronisation PTS. Store fragments as long as none has arrived
22002
+ const {
22003
+ initPTS,
22004
+ unparsedVttFrags
22005
+ } = this;
22006
+ const maxAvCC = initPTS.length - 1;
22007
+ if (!initPTS[frag.cc] && maxAvCC === -1) {
22008
+ unparsedVttFrags.push(data);
22009
+ return;
22010
+ }
21893
22011
  const hls = this.hls;
21894
22012
  // Parse the WebVTT file contents.
21895
22013
  const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)) : payload;
21896
- parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], vttCCs, frag.cc, frag.start, cues => {
22014
+ parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, cues => {
21897
22015
  this._appendCues(cues, frag.level);
21898
22016
  hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
21899
22017
  success: true,
21900
22018
  frag: frag
21901
22019
  });
21902
22020
  }, error => {
21903
- this._fallbackToIMSC1(frag, payload);
22021
+ const missingInitPTS = error.message === 'Missing initPTS for VTT MPEGTS';
22022
+ if (missingInitPTS) {
22023
+ unparsedVttFrags.push(data);
22024
+ } else {
22025
+ this._fallbackToIMSC1(frag, payload);
22026
+ }
21904
22027
  // Something went wrong while parsing. Trigger event with success false.
21905
22028
  logger.log(`Failed to parse VTT cue: ${error}`);
22029
+ if (missingInitPTS && maxAvCC > frag.cc) {
22030
+ return;
22031
+ }
21906
22032
  hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
21907
22033
  success: false,
21908
22034
  frag: frag,
@@ -21952,10 +22078,6 @@ class TimelineController {
21952
22078
  frag
21953
22079
  } = data;
21954
22080
  if (frag.type === PlaylistLevelType.SUBTITLE) {
21955
- if (!this.initPTS[frag.cc]) {
21956
- this.unparsedVttFrags.push(data);
21957
- return;
21958
- }
21959
22081
  this.onFragLoaded(Events.FRAG_LOADED, data);
21960
22082
  }
21961
22083
  }
@@ -22064,6 +22186,7 @@ function newVTTCCs() {
22064
22186
  /*
22065
22187
  * cap stream level to media size dimension controller
22066
22188
  */
22189
+
22067
22190
  class CapLevelController {
22068
22191
  constructor(hls) {
22069
22192
  this.hls = void 0;
@@ -24087,6 +24210,7 @@ class XhrLoader {
24087
24210
  const stats = this.stats;
24088
24211
  stats.loading.first = 0;
24089
24212
  stats.loaded = 0;
24213
+ stats.aborted = false;
24090
24214
  const xhrSetup = this.xhrSetup;
24091
24215
  if (xhrSetup) {
24092
24216
  Promise.resolve().then(() => {
@@ -24958,7 +25082,7 @@ class Hls {
24958
25082
  * Get the video-dev/hls.js package version.
24959
25083
  */
24960
25084
  static get version() {
24961
- return "1.4.1";
25085
+ return "1.4.13";
24962
25086
  }
24963
25087
 
24964
25088
  /**