@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
@@ -240,10 +240,17 @@ function _toPropertyKey(arg) {
240
240
  return typeof key === "symbol" ? key : String(key);
241
241
  }
242
242
 
243
+ // https://caniuse.com/mdn-javascript_builtins_number_isfinite
243
244
  const isFiniteNumber = Number.isFinite || function (value) {
244
245
  return typeof value === 'number' && isFinite(value);
245
246
  };
246
247
 
248
+ // https://caniuse.com/mdn-javascript_builtins_number_issafeinteger
249
+ const isSafeInteger = Number.isSafeInteger || function (value) {
250
+ return typeof value === 'number' && Math.abs(value) <= MAX_SAFE_INTEGER;
251
+ };
252
+ const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
253
+
247
254
  let Events = /*#__PURE__*/function (Events) {
248
255
  Events["MEDIA_ATTACHING"] = "hlsMediaAttaching";
249
256
  Events["MEDIA_ATTACHED"] = "hlsMediaAttached";
@@ -402,7 +409,7 @@ function enableLogs(debugConfig, id) {
402
409
  // Some browsers don't allow to use bind on console object anyway
403
410
  // fallback to default if needed
404
411
  try {
405
- exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.4.1"}`);
412
+ exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.4.13"}`);
406
413
  } catch (e) {
407
414
  exportedLogger = fakeLogger;
408
415
  }
@@ -927,7 +934,7 @@ class LevelDetails {
927
934
  }
928
935
  const partSnDiff = this.lastPartSn - previous.lastPartSn;
929
936
  const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;
930
- this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff;
937
+ this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;
931
938
  this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;
932
939
  if (this.updated || this.advanced) {
933
940
  this.misses = Math.floor(previous.misses * 0.6);
@@ -1823,13 +1830,13 @@ function getStartDTS(initData, fmp4) {
1823
1830
  const scale = track.timescale || 90e3;
1824
1831
  // convert base time to seconds
1825
1832
  const startTime = baseTime / scale;
1826
- if (isFinite(startTime) && (result === null || startTime < result)) {
1833
+ if (isFiniteNumber(startTime) && (result === null || startTime < result)) {
1827
1834
  return startTime;
1828
1835
  }
1829
1836
  }
1830
1837
  return result;
1831
1838
  }, null);
1832
- if (start !== null && isFinite(start) && (result === null || start < result)) {
1839
+ if (start !== null && isFiniteNumber(start) && (result === null || start < result)) {
1833
1840
  return start;
1834
1841
  }
1835
1842
  return result;
@@ -2348,7 +2355,7 @@ function parseEmsg(data) {
2348
2355
  const rightPresentationTime = readUint32(data, offset);
2349
2356
  offset += 4;
2350
2357
  presentationTime = 2 ** 32 * leftPresentationTime + rightPresentationTime;
2351
- if (!Number.isSafeInteger(presentationTime)) {
2358
+ if (!isSafeInteger(presentationTime)) {
2352
2359
  presentationTime = Number.MAX_SAFE_INTEGER;
2353
2360
  logger.warn('Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box');
2354
2361
  }
@@ -3991,9 +3998,13 @@ function addCueToTrack(track, cue) {
3991
3998
  }
3992
3999
  } catch (err) {
3993
4000
  logger.debug(`[texttrack-utils]: ${err}`);
3994
- const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);
3995
- textTrackCue.id = cue.id;
3996
- track.addCue(textTrackCue);
4001
+ try {
4002
+ const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);
4003
+ textTrackCue.id = cue.id;
4004
+ track.addCue(textTrackCue);
4005
+ } catch (err2) {
4006
+ logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);
4007
+ }
3997
4008
  }
3998
4009
  }
3999
4010
  if (mode === 'disabled') {
@@ -4089,11 +4100,21 @@ var MetadataSchema = {
4089
4100
  const MIN_CUE_DURATION = 0.25;
4090
4101
  function getCueClass() {
4091
4102
  if (typeof self === 'undefined') return undefined;
4092
-
4093
- // Attempt to recreate Safari functionality by creating
4094
- // WebKitDataCue objects when available and store the decoded
4095
- // ID3 data in the value property of the cue
4096
- return self.WebKitDataCue || self.VTTCue || self.TextTrackCue;
4103
+ return self.VTTCue || self.TextTrackCue;
4104
+ }
4105
+ function createCueWithDataFields(Cue, startTime, endTime, data, type) {
4106
+ let cue = new Cue(startTime, endTime, '');
4107
+ try {
4108
+ cue.value = data;
4109
+ if (type) {
4110
+ cue.type = type;
4111
+ }
4112
+ } catch (e) {
4113
+ cue = new Cue(startTime, endTime, JSON.stringify(type ? _objectSpread2({
4114
+ type
4115
+ }, data) : data));
4116
+ }
4117
+ return cue;
4097
4118
  }
4098
4119
 
4099
4120
  // VTTCue latest draft allows an infinite duration, fallback
@@ -4101,7 +4122,7 @@ function getCueClass() {
4101
4122
  const MAX_CUE_ENDTIME = (() => {
4102
4123
  const Cue = getCueClass();
4103
4124
  try {
4104
- new Cue(0, Number.POSITIVE_INFINITY, '');
4125
+ Cue && new Cue(0, Number.POSITIVE_INFINITY, '');
4105
4126
  } catch (e) {
4106
4127
  return Number.MAX_VALUE;
4107
4128
  }
@@ -4213,6 +4234,9 @@ class ID3TrackController {
4213
4234
  this.id3Track = this.createTrack(this.media);
4214
4235
  }
4215
4236
  const Cue = getCueClass();
4237
+ if (!Cue) {
4238
+ return;
4239
+ }
4216
4240
  for (let i = 0; i < samples.length; i++) {
4217
4241
  const type = samples[i].type;
4218
4242
  if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {
@@ -4234,25 +4258,23 @@ class ID3TrackController {
4234
4258
  // Safari doesn't put the timestamp frame in the TextTrack
4235
4259
  if (!isTimeStampFrame(frame)) {
4236
4260
  // add a bounds to any unbounded cues
4237
- this.updateId3CueEnds(startTime);
4238
- const cue = new Cue(startTime, endTime, '');
4239
- cue.value = frame;
4240
- if (type) {
4241
- cue.type = type;
4261
+ this.updateId3CueEnds(startTime, type);
4262
+ const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);
4263
+ if (cue) {
4264
+ this.id3Track.addCue(cue);
4242
4265
  }
4243
- this.id3Track.addCue(cue);
4244
4266
  }
4245
4267
  }
4246
4268
  }
4247
4269
  }
4248
4270
  }
4249
- updateId3CueEnds(startTime) {
4271
+ updateId3CueEnds(startTime, type) {
4250
4272
  var _this$id3Track;
4251
4273
  const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;
4252
4274
  if (cues) {
4253
4275
  for (let i = cues.length; i--;) {
4254
4276
  const cue = cues[i];
4255
- if (cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {
4277
+ if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {
4256
4278
  cue.endTime = startTime;
4257
4279
  }
4258
4280
  }
@@ -4354,25 +4376,25 @@ class ID3TrackController {
4354
4376
  if (!isDateRangeCueAttribute(key)) {
4355
4377
  continue;
4356
4378
  }
4357
- let cue = cues[key];
4379
+ const cue = cues[key];
4358
4380
  if (cue) {
4359
4381
  if (durationKnown && !appendedDateRangeCues.durationKnown) {
4360
4382
  cue.endTime = endTime;
4361
4383
  }
4362
- } else {
4384
+ } else if (Cue) {
4363
4385
  let data = dateRange.attr[key];
4364
- cue = new Cue(startTime, endTime, '');
4365
4386
  if (isSCTE35Attribute(key)) {
4366
4387
  data = hexToArrayBuffer(data);
4367
4388
  }
4368
- cue.value = {
4389
+ const _cue = createCueWithDataFields(Cue, startTime, endTime, {
4369
4390
  key,
4370
4391
  data
4371
- };
4372
- cue.type = MetadataSchema.dateRange;
4373
- cue.id = id;
4374
- this.id3Track.addCue(cue);
4375
- cues[key] = cue;
4392
+ }, MetadataSchema.dateRange);
4393
+ if (_cue) {
4394
+ _cue.id = id;
4395
+ this.id3Track.addCue(_cue);
4396
+ cues[key] = _cue;
4397
+ }
4376
4398
  }
4377
4399
  }
4378
4400
  dateRangeCuesAppended[id] = {
@@ -5282,6 +5304,7 @@ class ErrorController {
5282
5304
  const hls = this.hls;
5283
5305
  hls.on(Events.ERROR, this.onError, this);
5284
5306
  hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);
5307
+ hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);
5285
5308
  }
5286
5309
  unregisterListeners() {
5287
5310
  const hls = this.hls;
@@ -5291,6 +5314,7 @@ class ErrorController {
5291
5314
  hls.off(Events.ERROR, this.onError, this);
5292
5315
  hls.off(Events.ERROR, this.onErrorOut, this);
5293
5316
  hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);
5317
+ hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);
5294
5318
  }
5295
5319
  destroy() {
5296
5320
  this.unregisterListeners();
@@ -5309,8 +5333,11 @@ class ErrorController {
5309
5333
  this.playlistError = 0;
5310
5334
  this.penalizedRenditions = {};
5311
5335
  }
5336
+ onLevelUpdated() {
5337
+ this.playlistError = 0;
5338
+ }
5312
5339
  onError(event, data) {
5313
- var _data$level;
5340
+ var _data$frag, _data$level;
5314
5341
  if (data.fatal) {
5315
5342
  return;
5316
5343
  }
@@ -5323,8 +5350,17 @@ class ErrorController {
5323
5350
  case ErrorDetails.KEY_LOAD_TIMEOUT:
5324
5351
  data.errorAction = this.getFragRetryOrSwitchAction(data);
5325
5352
  return;
5326
- case ErrorDetails.FRAG_GAP:
5327
5353
  case ErrorDetails.FRAG_PARSING_ERROR:
5354
+ // ignore empty segment errors marked as gap
5355
+ if ((_data$frag = data.frag) != null && _data$frag.gap) {
5356
+ data.errorAction = {
5357
+ action: NetworkErrorAction.DoNothing,
5358
+ flags: ErrorActionFlags.None
5359
+ };
5360
+ return;
5361
+ }
5362
+ // falls through
5363
+ case ErrorDetails.FRAG_GAP:
5328
5364
  case ErrorDetails.FRAG_DECRYPT_ERROR:
5329
5365
  {
5330
5366
  // Switch level if possible, otherwise allow retry count to reach max error retries
@@ -5409,7 +5445,7 @@ class ErrorController {
5409
5445
  }
5410
5446
  }
5411
5447
  getPlaylistRetryOrSwitchAction(data, levelIndex) {
5412
- var _data$response, _data$context2;
5448
+ var _data$response;
5413
5449
  const hls = this.hls;
5414
5450
  const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);
5415
5451
  const retryCount = this.playlistError++;
@@ -5423,21 +5459,12 @@ class ErrorController {
5423
5459
  retryCount
5424
5460
  };
5425
5461
  }
5426
- // Do not perform level switch if an error occurred using delivery directives
5427
- // Allow reload without directives (handled in playlist-loader)
5428
- if ((_data$context2 = data.context) != null && _data$context2.deliveryDirectives) {
5429
- return {
5430
- action: NetworkErrorAction.DoNothing,
5431
- flags: ErrorActionFlags.None,
5432
- retryConfig: retryConfig || {
5433
- maxNumRetry: 0,
5434
- retryDelayMs: 0,
5435
- maxRetryDelayMs: 0
5436
- },
5437
- retryCount
5438
- };
5462
+ const errorAction = this.getLevelSwitchAction(data, levelIndex);
5463
+ if (retryConfig) {
5464
+ errorAction.retryConfig = retryConfig;
5465
+ errorAction.retryCount = retryCount;
5439
5466
  }
5440
- return this.getLevelSwitchAction(data, levelIndex);
5467
+ return errorAction;
5441
5468
  }
5442
5469
  getFragRetryOrSwitchAction(data) {
5443
5470
  const hls = this.hls;
@@ -5487,18 +5514,23 @@ class ErrorController {
5487
5514
  if (level) {
5488
5515
  level.loadError++;
5489
5516
  if (hls.autoLevelEnabled) {
5490
- var _data$frag, _data$context3;
5517
+ var _data$frag2, _data$context2;
5491
5518
  // Search for next level to retry
5492
5519
  let nextLevel = -1;
5493
- const levels = hls.levels;
5494
- const fragErrorType = (_data$frag = data.frag) == null ? void 0 : _data$frag.type;
5520
+ const {
5521
+ levels,
5522
+ loadLevel,
5523
+ minAutoLevel,
5524
+ maxAutoLevel
5525
+ } = hls;
5526
+ const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;
5495
5527
  const {
5496
5528
  type: playlistErrorType,
5497
5529
  groupId: playlistErrorGroupId
5498
- } = (_data$context3 = data.context) != null ? _data$context3 : {};
5530
+ } = (_data$context2 = data.context) != null ? _data$context2 : {};
5499
5531
  for (let i = levels.length; i--;) {
5500
- const candidate = (i + hls.loadLevel) % levels.length;
5501
- if (candidate !== hls.loadLevel && levels[candidate].loadError === 0) {
5532
+ const candidate = (i + loadLevel) % levels.length;
5533
+ if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {
5502
5534
  const levelCandidate = levels[candidate];
5503
5535
  // Skip level switch if GAP tag is found in next level at same position
5504
5536
  if (data.details === ErrorDetails.FRAG_GAP && data.frag) {
@@ -5522,6 +5554,7 @@ class ErrorController {
5522
5554
  }
5523
5555
  if (nextLevel > -1 && hls.loadLevel !== nextLevel) {
5524
5556
  data.levelRetry = true;
5557
+ this.playlistError = 0;
5525
5558
  return {
5526
5559
  action: NetworkErrorAction.SendAlternateToPenaltyBox,
5527
5560
  flags: ErrorActionFlags.None,
@@ -5762,7 +5795,7 @@ class BasePlaylistController {
5762
5795
  if (details.live || previousDetails != null && previousDetails.live) {
5763
5796
  details.reloaded(previousDetails);
5764
5797
  if (previousDetails) {
5765
- this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : 'MISSED'}`);
5798
+ this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : details.updated ? 'UPDATED' : 'MISSED'}`);
5766
5799
  }
5767
5800
  // Merge live playlists to adjust fragment starts and fill in delta playlist skipped segments
5768
5801
  if (previousDetails && details.fragments.length > 0) {
@@ -5817,7 +5850,7 @@ class BasePlaylistController {
5817
5850
  this.loadPlaylist(deliveryDirectives);
5818
5851
  return;
5819
5852
  }
5820
- } else if (details.canBlockReload) {
5853
+ } else if (details.canBlockReload || details.canSkipUntil) {
5821
5854
  deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);
5822
5855
  }
5823
5856
  const bufferInfo = this.hls.mainForwardBufferInfo;
@@ -5880,6 +5913,9 @@ class BasePlaylistController {
5880
5913
  if (retry) {
5881
5914
  var _errorEvent$context;
5882
5915
  this.requestScheduled = -1;
5916
+ if (retryCount >= retryConfig.maxNumRetry) {
5917
+ return false;
5918
+ }
5883
5919
  if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {
5884
5920
  // The LL-HLS request already timed out so retry immediately
5885
5921
  this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after "${errorDetails}" without delivery-directives`);
@@ -6499,7 +6535,7 @@ class FragmentTracker {
6499
6535
  }
6500
6536
  // Check if any flagged fragments have been unloaded
6501
6537
  // excluding anything newer than appendedPartSn
6502
- const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || 0;
6538
+ const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;
6503
6539
  Object.keys(this.fragments).forEach(key => {
6504
6540
  const fragmentEntity = this.fragments[key];
6505
6541
  if (!fragmentEntity) {
@@ -6544,7 +6580,7 @@ class FragmentTracker {
6544
6580
  }
6545
6581
  const fragKey = getFragmentKey(frag);
6546
6582
  const fragmentEntity = this.fragments[fragKey];
6547
- if (!fragmentEntity) {
6583
+ if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {
6548
6584
  return;
6549
6585
  }
6550
6586
  const isFragHint = !frag.relurl;
@@ -6560,7 +6596,8 @@ class FragmentTracker {
6560
6596
  fragmentEntity.loaded = null;
6561
6597
  if (Object.keys(fragmentEntity.range).length) {
6562
6598
  fragmentEntity.buffered = true;
6563
- if (fragmentEntity.body.endList) {
6599
+ const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;
6600
+ if (endList) {
6564
6601
  this.endListFragments[fragmentEntity.body.type] = fragmentEntity;
6565
6602
  }
6566
6603
  if (!isPartial(fragmentEntity)) {
@@ -6799,8 +6836,8 @@ class FragmentTracker {
6799
6836
  }
6800
6837
  }
6801
6838
  function isPartial(fragmentEntity) {
6802
- var _fragmentEntity$range, _fragmentEntity$range2;
6803
- 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));
6839
+ var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;
6840
+ 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));
6804
6841
  }
6805
6842
  function getFragmentKey(fragment) {
6806
6843
  return `${fragment.type}_${fragment.level}_${fragment.urlId}_${fragment.sn}`;
@@ -6848,8 +6885,13 @@ class FragmentLoader {
6848
6885
  this.loader.destroy();
6849
6886
  }
6850
6887
  if (frag.gap) {
6851
- reject(createGapLoadError(frag));
6852
- return;
6888
+ if (frag.tagList.some(tags => tags[0] === 'GAP')) {
6889
+ reject(createGapLoadError(frag));
6890
+ return;
6891
+ } else {
6892
+ // Reset temporary treatment as GAP tag
6893
+ frag.gap = false;
6894
+ }
6853
6895
  }
6854
6896
  const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);
6855
6897
  const loaderContext = createLoaderContext(frag);
@@ -7482,6 +7524,7 @@ class TaskLoop {
7482
7524
  *
7483
7525
  * Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered
7484
7526
  */
7527
+
7485
7528
  const noopBuffered = {
7486
7529
  length: 0,
7487
7530
  start: () => 0,
@@ -8542,6 +8585,21 @@ class BaseStreamController extends TaskLoop {
8542
8585
  }
8543
8586
  }
8544
8587
  }
8588
+ checkLiveUpdate(details) {
8589
+ if (details.updated && !details.live) {
8590
+ // Live stream ended, update fragment tracker
8591
+ const lastFragment = details.fragments[details.fragments.length - 1];
8592
+ this.fragmentTracker.detectPartialFragments({
8593
+ frag: lastFragment,
8594
+ part: null,
8595
+ stats: lastFragment.stats,
8596
+ id: lastFragment.type
8597
+ });
8598
+ }
8599
+ if (!details.fragments[0]) {
8600
+ details.deltaUpdateFailed = true;
8601
+ }
8602
+ }
8545
8603
  flushMainBuffer(startOffset, endOffset, type = null) {
8546
8604
  if (!(startOffset - endOffset)) {
8547
8605
  return;
@@ -8871,7 +8929,7 @@ class BaseStreamController extends TaskLoop {
8871
8929
  level
8872
8930
  };
8873
8931
  }
8874
- bufferFragmentData(data, frag, part, chunkMeta) {
8932
+ bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {
8875
8933
  var _buffer;
8876
8934
  if (!data || this.state !== State.PARSING) {
8877
8935
  return;
@@ -8898,6 +8956,9 @@ class BaseStreamController extends TaskLoop {
8898
8956
  };
8899
8957
  this.hls.trigger(Events.BUFFER_APPENDING, segment);
8900
8958
  if (data.dropped && data.independent && !part) {
8959
+ if (noBacktracking) {
8960
+ return;
8961
+ }
8901
8962
  // Clear buffer so that we reload previous segments sequentially if required
8902
8963
  this.flushBufferGap(frag);
8903
8964
  }
@@ -9314,10 +9375,8 @@ class BaseStreamController extends TaskLoop {
9314
9375
  retryConfig
9315
9376
  } = errorAction || {};
9316
9377
  if (errorAction && action === NetworkErrorAction.RetryRequest && retryConfig) {
9317
- if (!this.loadedmetadata) {
9318
- this.startFragRequested = false;
9319
- this.nextLoadPosition = this.startPosition;
9320
- }
9378
+ var _this$levelLastLoaded;
9379
+ this.resetStartWhenNotLoaded((_this$levelLastLoaded = this.levelLastLoaded) != null ? _this$levelLastLoaded : frag.level);
9321
9380
  const delay = getRetryDelay(retryConfig, retryCount);
9322
9381
  this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay}ms`);
9323
9382
  errorAction.resolved = true;
@@ -9333,6 +9392,8 @@ class BaseStreamController extends TaskLoop {
9333
9392
  } else {
9334
9393
  logger.warn(`${data.details} reached or exceeded max retry (${retryCount})`);
9335
9394
  }
9395
+ } else if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox) {
9396
+ this.state = State.WAITING_LEVEL;
9336
9397
  } else {
9337
9398
  this.state = State.ERROR;
9338
9399
  }
@@ -9415,9 +9476,10 @@ class BaseStreamController extends TaskLoop {
9415
9476
  }
9416
9477
  }
9417
9478
  resetWhenMissingContext(chunkMeta) {
9479
+ var _this$levelLastLoaded2;
9418
9480
  this.warn(`The loading context changed while buffering fragment ${chunkMeta.sn} of level ${chunkMeta.level}. This chunk will not be buffered.`);
9419
9481
  this.removeUnbufferedFrags();
9420
- this.resetStartWhenNotLoaded(chunkMeta.level);
9482
+ this.resetStartWhenNotLoaded((_this$levelLastLoaded2 = this.levelLastLoaded) != null ? _this$levelLastLoaded2 : chunkMeta.level);
9421
9483
  this.resetLoadingState();
9422
9484
  }
9423
9485
  removeUnbufferedFrags(start = 0) {
@@ -9458,7 +9520,14 @@ class BaseStreamController extends TaskLoop {
9458
9520
  if (parsed) {
9459
9521
  level.fragmentError = 0;
9460
9522
  } else if (((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null) {
9461
- const error = new Error(`Found no media in fragment ${frag.sn} of level ${level.id} resetting transmuxer to fallback to playlist timing`);
9523
+ const error = new Error(`Found no media in fragment ${frag.sn} of level ${frag.level} resetting transmuxer to fallback to playlist timing`);
9524
+ if (level.fragmentError === 0) {
9525
+ // Mark and track the odd empty segment as a gap to avoid reloading
9526
+ level.fragmentError++;
9527
+ frag.gap = true;
9528
+ this.fragmentTracker.removeFragment(frag);
9529
+ this.fragmentTracker.fragBuffered(frag, true);
9530
+ }
9462
9531
  this.warn(error.message);
9463
9532
  this.hls.trigger(Events.ERROR, {
9464
9533
  type: ErrorTypes.MEDIA_ERROR,
@@ -9489,7 +9558,10 @@ class BaseStreamController extends TaskLoop {
9489
9558
  }
9490
9559
  recoverWorkerError(data) {
9491
9560
  if (data.event === 'demuxerWorker') {
9561
+ var _ref, _this$levelLastLoaded3, _this$fragCurrent3;
9562
+ this.fragmentTracker.removeAllFragments();
9492
9563
  this.resetTransmuxer();
9564
+ this.resetStartWhenNotLoaded((_ref = (_this$levelLastLoaded3 = this.levelLastLoaded) != null ? _this$levelLastLoaded3 : (_this$fragCurrent3 = this.fragCurrent) == null ? void 0 : _this$fragCurrent3.level) != null ? _ref : 0);
9493
9565
  this.resetLoadingState();
9494
9566
  }
9495
9567
  }
@@ -9536,6 +9608,7 @@ function changeTypeSupported() {
9536
9608
  }
9537
9609
 
9538
9610
  // ensure the worker ends up in the bundle
9611
+ // If the worker should not be included this gets aliased to empty.js
9539
9612
  function hasUMDWorker() {
9540
9613
  return typeof __HLS_WORKER_BUNDLE__ === 'function';
9541
9614
  }
@@ -10299,6 +10372,7 @@ function probe(data, offset) {
10299
10372
  /**
10300
10373
  * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.
10301
10374
  */
10375
+
10302
10376
  class ExpGolomb {
10303
10377
  constructor(data) {
10304
10378
  this.data = void 0;
@@ -10624,6 +10698,7 @@ class ExpGolomb {
10624
10698
  /**
10625
10699
  * SAMPLE-AES decrypter
10626
10700
  */
10701
+
10627
10702
  class SampleAesDecrypter {
10628
10703
  constructor(observer, config, keyData) {
10629
10704
  this.keyData = void 0;
@@ -10758,19 +10833,33 @@ class TSDemuxer {
10758
10833
  }
10759
10834
  static syncOffset(data) {
10760
10835
  const length = data.length;
10761
- const scanwindow = Math.min(PACKET_LENGTH * 5, data.length - PACKET_LENGTH) + 1;
10836
+ let scanwindow = Math.min(PACKET_LENGTH * 5, data.length - PACKET_LENGTH) + 1;
10762
10837
  let i = 0;
10763
10838
  while (i < scanwindow) {
10764
10839
  // a TS init segment should contain at least 2 TS packets: PAT and PMT, each starting with 0x47
10765
10840
  let foundPat = false;
10841
+ let packetStart = -1;
10842
+ let tsPackets = 0;
10766
10843
  for (let j = i; j < length; j += PACKET_LENGTH) {
10767
10844
  if (data[j] === 0x47) {
10768
- if (!foundPat && parsePID(data, j) === 0) {
10769
- foundPat = true;
10845
+ tsPackets++;
10846
+ if (packetStart === -1) {
10847
+ packetStart = j;
10848
+ // First sync word found at offset, increase scan length (#5251)
10849
+ if (packetStart !== 0) {
10850
+ scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;
10851
+ }
10852
+ }
10853
+ if (!foundPat) {
10854
+ foundPat = parsePID(data, j) === 0;
10770
10855
  }
10771
- if (foundPat && j + PACKET_LENGTH > scanwindow) {
10772
- return i;
10856
+ // Sync word found at 0 with 3 packets, or found at offset least 2 packets up to scanwindow (#5501)
10857
+ if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j + PACKET_LENGTH > scanwindow)) {
10858
+ return packetStart;
10773
10859
  }
10860
+ } else if (tsPackets) {
10861
+ // Exit if sync word found, but does not contain contiguous packets (#5501)
10862
+ return -1;
10774
10863
  } else {
10775
10864
  break;
10776
10865
  }
@@ -11139,15 +11228,13 @@ class TSDemuxer {
11139
11228
  avcSample = this.avcSample = createAVCSample(false, pes.pts, pes.dts, '');
11140
11229
  }
11141
11230
  units.forEach(unit => {
11231
+ var _avcSample2;
11142
11232
  switch (unit.type) {
11143
11233
  // NDR
11144
11234
  case 1:
11145
11235
  {
11236
+ let iskey = false;
11146
11237
  push = true;
11147
- if (!avcSample) {
11148
- avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
11149
- }
11150
- avcSample.frame = true;
11151
11238
  const data = unit.data;
11152
11239
  // only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)
11153
11240
  if (spsfound && data.length > 4) {
@@ -11159,9 +11246,22 @@ class TSDemuxer {
11159
11246
  // I slice: A slice that is not an SI slice that is decoded using intra prediction only.
11160
11247
  // if (sliceType === 2 || sliceType === 7) {
11161
11248
  if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {
11162
- avcSample.key = true;
11249
+ iskey = true;
11250
+ }
11251
+ }
11252
+ if (iskey) {
11253
+ var _avcSample;
11254
+ // if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push
11255
+ if ((_avcSample = avcSample) != null && _avcSample.frame && !avcSample.key) {
11256
+ pushAccessUnit(avcSample, track);
11257
+ avcSample = this.avcSample = null;
11163
11258
  }
11164
11259
  }
11260
+ if (!avcSample) {
11261
+ avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
11262
+ }
11263
+ avcSample.frame = true;
11264
+ avcSample.key = iskey;
11165
11265
  break;
11166
11266
  // IDR
11167
11267
  }
@@ -11169,6 +11269,11 @@ class TSDemuxer {
11169
11269
  case 5:
11170
11270
  push = true;
11171
11271
  // handle PES not starting with AUD
11272
+ // if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push
11273
+ if ((_avcSample2 = avcSample) != null && _avcSample2.frame && !avcSample.key) {
11274
+ pushAccessUnit(avcSample, track);
11275
+ avcSample = this.avcSample = null;
11276
+ }
11172
11277
  if (!avcSample) {
11173
11278
  avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
11174
11279
  }
@@ -11247,14 +11352,14 @@ class TSDemuxer {
11247
11352
  }
11248
11353
  }
11249
11354
  getLastNalUnit(samples) {
11250
- var _avcSample;
11355
+ var _avcSample3;
11251
11356
  let avcSample = this.avcSample;
11252
11357
  let lastUnit;
11253
11358
  // try to fallback to previous sample if current one is empty
11254
11359
  if (!avcSample || avcSample.units.length === 0) {
11255
11360
  avcSample = samples[samples.length - 1];
11256
11361
  }
11257
- if ((_avcSample = avcSample) != null && _avcSample.units) {
11362
+ if ((_avcSample3 = avcSample) != null && _avcSample3.units) {
11258
11363
  const units = avcSample.units;
11259
11364
  lastUnit = units[units.length - 1];
11260
11365
  }
@@ -12759,7 +12864,7 @@ class MP4Remuxer {
12759
12864
  } else {
12760
12865
  logger.warn(`AVC: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected`);
12761
12866
  }
12762
- if (!foundOverlap || nextAvcDts > inputSamples[0].pts) {
12867
+ if (!foundOverlap || nextAvcDts >= inputSamples[0].pts) {
12763
12868
  firstDTS = nextAvcDts;
12764
12869
  const firstPTS = inputSamples[0].pts - delta;
12765
12870
  inputSamples[0].dts = firstDTS;
@@ -13212,8 +13317,8 @@ function flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {
13212
13317
  const sample = track.samples[index];
13213
13318
  // setting id3 pts, dts to relative time
13214
13319
  // using this._initPTS and this._initDTS to calculate relative time
13215
- sample.pts = normalizePts(sample.pts - initPTS.baseTime * 90000 / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13216
- sample.dts = normalizePts(sample.dts - initDTS.baseTime * 90000 / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13320
+ sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13321
+ sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13217
13322
  }
13218
13323
  const samples = track.samples;
13219
13324
  track.samples = [];
@@ -13231,7 +13336,7 @@ function flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {
13231
13336
  const sample = track.samples[index];
13232
13337
  // setting text pts, dts to relative time
13233
13338
  // using this._initPTS and this._initDTS to calculate relative time
13234
- sample.pts = normalizePts(sample.pts - initPTS.baseTime * 90000 / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13339
+ sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
13235
13340
  }
13236
13341
  track.samples.sort((a, b) => a.pts - b.pts);
13237
13342
  const samples = track.samples;
@@ -13380,16 +13485,19 @@ class PassThroughRemuxer {
13380
13485
  initSegment.tracks = this.initTracks;
13381
13486
  this.emitInitSegment = false;
13382
13487
  }
13488
+ const duration = getDuration(data, initData);
13383
13489
  const startDTS = getStartDTS(initData, data);
13384
13490
  const decodeTime = startDTS === null ? timeOffset : startDTS;
13385
- if (isInvalidInitPts(initPTS, decodeTime, timeOffset) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {
13491
+ if (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {
13386
13492
  initSegment.initPTS = decodeTime - timeOffset;
13493
+ if (initPTS && initPTS.timescale === 1) {
13494
+ logger.warn(`Adjusting initPTS by ${initSegment.initPTS - initPTS.baseTime}`);
13495
+ }
13387
13496
  this.initPTS = initPTS = {
13388
13497
  baseTime: initSegment.initPTS,
13389
13498
  timescale: 1
13390
13499
  };
13391
13500
  }
13392
- const duration = getDuration(data, initData);
13393
13501
  const startTime = audioTrack ? decodeTime - initPTS.baseTime / initPTS.timescale : lastEndTime;
13394
13502
  const endTime = startTime + duration;
13395
13503
  offsetStartDTS(initData, data, initPTS.baseTime / initPTS.timescale);
@@ -13430,13 +13538,14 @@ class PassThroughRemuxer {
13430
13538
  return result;
13431
13539
  }
13432
13540
  }
13433
- function isInvalidInitPts(initPTS, startDTS, timeOffset) {
13541
+ function isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {
13434
13542
  if (initPTS === null) {
13435
13543
  return true;
13436
13544
  }
13437
- // InitPTS is invalid when it would cause start time to be negative, or distance from time offset to be more than 1 second
13545
+ // InitPTS is invalid when distance from program would be more than segment duration or a minimum of one second
13546
+ const minDuration = Math.max(duration, 1);
13438
13547
  const startTime = startDTS - initPTS.baseTime / initPTS.timescale;
13439
- return startTime < 0 && Math.abs(startTime - timeOffset) > 1;
13548
+ return Math.abs(startTime - timeOffset) > minDuration;
13440
13549
  }
13441
13550
  function getParsedTrackCodec(track, type) {
13442
13551
  const parsedCodec = track == null ? void 0 : track.codec;
@@ -14911,6 +15020,9 @@ class StreamController extends BaseStreamController {
14911
15020
  }
14912
15021
  this.state = State.IDLE;
14913
15022
  break;
15023
+ } else if (this.hls.nextLoadLevel !== this.level) {
15024
+ this.state = State.IDLE;
15025
+ break;
14914
15026
  }
14915
15027
  break;
14916
15028
  }
@@ -15279,9 +15391,7 @@ class StreamController extends BaseStreamController {
15279
15391
  }
15280
15392
  let sliding = 0;
15281
15393
  if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {
15282
- if (!newDetails.fragments[0]) {
15283
- newDetails.deltaUpdateFailed = true;
15284
- }
15394
+ this.checkLiveUpdate(newDetails);
15285
15395
  if (newDetails.deltaUpdateFailed) {
15286
15396
  return;
15287
15397
  }
@@ -15665,8 +15775,11 @@ class StreamController extends BaseStreamController {
15665
15775
  }
15666
15776
 
15667
15777
  // Avoid buffering if backtracking this fragment
15668
- if (video && remuxResult.independent !== false) {
15669
- if (details) {
15778
+ if (video && details && frag.sn !== 'initSegment') {
15779
+ const prevFrag = details.fragments[frag.sn - 1 - details.startSN];
15780
+ const isFirstFragment = frag.sn === details.startSN;
15781
+ const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;
15782
+ if (remuxResult.independent !== false) {
15670
15783
  const {
15671
15784
  startPTS,
15672
15785
  endPTS,
@@ -15681,7 +15794,7 @@ class StreamController extends BaseStreamController {
15681
15794
  endDTS
15682
15795
  };
15683
15796
  } else {
15684
- if (video.firstKeyFrame && video.independent && chunkMeta.id === 1) {
15797
+ if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {
15685
15798
  this.couldBacktrack = true;
15686
15799
  }
15687
15800
  if (video.dropped && video.independent) {
@@ -15690,9 +15803,12 @@ class StreamController extends BaseStreamController {
15690
15803
  const bufferInfo = this.getMainFwdBufferInfo();
15691
15804
  const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;
15692
15805
  const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;
15693
- if (targetBufferTime < startTime - this.config.maxBufferHole) {
15806
+ if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {
15694
15807
  this.backtrack(frag);
15695
15808
  return;
15809
+ } else if (isFirstInDiscontinuity) {
15810
+ // Mark segment with a gap to avoid loop loading
15811
+ frag.gap = true;
15696
15812
  }
15697
15813
  // Set video stream start to fragment start so that truncated samples do not distort the timeline, and mark it partial
15698
15814
  frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);
@@ -15702,11 +15818,14 @@ class StreamController extends BaseStreamController {
15702
15818
  if (this.backtrackFragment) {
15703
15819
  this.backtrackFragment = frag;
15704
15820
  }
15705
- this.bufferFragmentData(video, frag, part, chunkMeta);
15821
+ this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);
15822
+ } else if (isFirstFragment || isFirstInDiscontinuity) {
15823
+ // Mark segment with a gap to avoid loop loading
15824
+ frag.gap = true;
15825
+ } else {
15826
+ this.backtrack(frag);
15827
+ return;
15706
15828
  }
15707
- } else if (remuxResult.independent === false) {
15708
- this.backtrack(frag);
15709
- return;
15710
15829
  }
15711
15830
  if (audio) {
15712
15831
  const {
@@ -15963,6 +16082,7 @@ class EWMA {
15963
16082
  * Based on the minimum of two exponentially-weighted moving averages with
15964
16083
  * different half-lives.
15965
16084
  */
16085
+
15966
16086
  class EwmaBandWidthEstimator {
15967
16087
  constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {
15968
16088
  this.defaultEstimate_ = void 0;
@@ -16883,10 +17003,8 @@ class AudioStreamController extends BaseStreamController {
16883
17003
  const track = levels[trackId];
16884
17004
  let sliding = 0;
16885
17005
  if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {
17006
+ this.checkLiveUpdate(newDetails);
16886
17007
  const mainDetails = this.mainDetails;
16887
- if (!newDetails.fragments[0]) {
16888
- newDetails.deltaUpdateFailed = true;
16889
- }
16890
17008
  if (newDetails.deltaUpdateFailed || !mainDetails) {
16891
17009
  return;
16892
17010
  }
@@ -17003,9 +17121,12 @@ class AudioStreamController extends BaseStreamController {
17003
17121
  } = data;
17004
17122
  if (frag.type !== PlaylistLevelType.AUDIO) {
17005
17123
  if (!this.loadedmetadata && frag.type === PlaylistLevelType.MAIN) {
17006
- var _ref;
17007
- if ((_ref = this.videoBuffer || this.media) != null && _ref.buffered.length) {
17008
- this.loadedmetadata = true;
17124
+ const bufferable = this.videoBuffer || this.media;
17125
+ if (bufferable) {
17126
+ const bufferedTimeRanges = BufferHelper.getBuffered(bufferable);
17127
+ if (bufferedTimeRanges.length) {
17128
+ this.loadedmetadata = true;
17129
+ }
17009
17130
  }
17010
17131
  }
17011
17132
  return;
@@ -17570,16 +17691,7 @@ class SubtitleStreamController extends BaseStreamController {
17570
17691
  endOffset
17571
17692
  } = data;
17572
17693
  if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {
17573
- const {
17574
- currentTrackId,
17575
- levels
17576
- } = this;
17577
- if (!levels.length || !levels[currentTrackId] || !levels[currentTrackId].details) {
17578
- return;
17579
- }
17580
- const trackDetails = levels[currentTrackId].details;
17581
- const targetDuration = trackDetails.targetduration;
17582
- const endOffsetSubtitles = endOffset - targetDuration;
17694
+ const endOffsetSubtitles = endOffset - 1;
17583
17695
  if (endOffsetSubtitles <= 0) {
17584
17696
  return;
17585
17697
  }
@@ -17775,21 +17887,18 @@ class SubtitleStreamController extends BaseStreamController {
17775
17887
  if (!levels.length || !track || !track.details) {
17776
17888
  return;
17777
17889
  }
17778
-
17779
- // Expand range of subs loaded by one target-duration in either direction to make up for misaligned playlists
17780
- const trackDetails = track.details;
17781
- const targetDuration = trackDetails.targetduration;
17782
17890
  const {
17783
17891
  config
17784
17892
  } = this;
17785
17893
  const currentTime = this.getLoadPosition();
17786
- const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime - targetDuration, config.maxBufferHole);
17894
+ const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);
17787
17895
  const {
17788
17896
  end: targetBufferTime,
17789
17897
  len: bufferLen
17790
17898
  } = bufferedInfo;
17791
17899
  const mainBufferInfo = this.getFwdBufferInfo(this.media, PlaylistLevelType.MAIN);
17792
- const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + targetDuration;
17900
+ const trackDetails = track.details;
17901
+ const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + trackDetails.levelTargetDuration;
17793
17902
  if (bufferLen > maxBufLen) {
17794
17903
  return;
17795
17904
  }
@@ -17799,10 +17908,9 @@ class SubtitleStreamController extends BaseStreamController {
17799
17908
  let foundFrag = null;
17800
17909
  const fragPrevious = this.fragPrevious;
17801
17910
  if (targetBufferTime < end) {
17802
- const {
17803
- maxFragLookUpTolerance
17804
- } = config;
17805
- foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), maxFragLookUpTolerance);
17911
+ const tolerance = config.maxFragLookUpTolerance;
17912
+ const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;
17913
+ foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);
17806
17914
  if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {
17807
17915
  foundFrag = fragments[0];
17808
17916
  }
@@ -17813,6 +17921,14 @@ class SubtitleStreamController extends BaseStreamController {
17813
17921
  return;
17814
17922
  }
17815
17923
  foundFrag = this.mapToInitFragWhenRequired(foundFrag);
17924
+ if (foundFrag.sn !== 'initSegment') {
17925
+ // Load earlier fragment in same discontinuity to make up for misaligned playlists and cues that extend beyond end of segment
17926
+ const curSNIdx = foundFrag.sn - trackDetails.startSN;
17927
+ const prevFrag = fragments[curSNIdx - 1];
17928
+ if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {
17929
+ foundFrag = prevFrag;
17930
+ }
17931
+ }
17816
17932
  if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {
17817
17933
  // only load if fragment is not loaded
17818
17934
  this.loadFragment(foundFrag, track, targetBufferTime);
@@ -20674,6 +20790,7 @@ var VTTCue = (function () {
20674
20790
  /*
20675
20791
  * Source: https://github.com/mozilla/vtt.js/blob/master/dist/vtt.js
20676
20792
  */
20793
+
20677
20794
  class StringDecoder {
20678
20795
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
20679
20796
  decode(data, options) {
@@ -21155,7 +21272,7 @@ function parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, er
21155
21272
  // Uint8Array.prototype.reduce is not implemented in IE11
21156
21273
  const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, '\n').split('\n');
21157
21274
  const cues = [];
21158
- const init90kHz = toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale);
21275
+ const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;
21159
21276
  let cueTime = '00:00.000';
21160
21277
  let timestampMapMPEGTS = 0;
21161
21278
  let timestampMapLOCAL = 0;
@@ -21179,6 +21296,10 @@ function parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, er
21179
21296
  }
21180
21297
  }
21181
21298
  if (webVttMpegTsMapOffset) {
21299
+ if (!initPTS) {
21300
+ parsingError = new Error('Missing initPTS for VTT MPEGTS');
21301
+ return;
21302
+ }
21182
21303
  // If we have MPEGTS, offset = presentation time + discontinuity offset
21183
21304
  cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;
21184
21305
  }
@@ -21674,7 +21795,7 @@ class TimelineController {
21674
21795
  this.captionsTracks = {};
21675
21796
  this.nonNativeCaptionsTracks = {};
21676
21797
  this.textTracks = [];
21677
- this.unparsedVttFrags = this.unparsedVttFrags || [];
21798
+ this.unparsedVttFrags = [];
21678
21799
  this.initPTS = [];
21679
21800
  if (this.cea608Parser1 && this.cea608Parser2) {
21680
21801
  this.cea608Parser1.reset();
@@ -21818,26 +21939,9 @@ class TimelineController {
21818
21939
  frag,
21819
21940
  payload
21820
21941
  } = data;
21821
- const {
21822
- initPTS,
21823
- unparsedVttFrags
21824
- } = this;
21825
21942
  if (frag.type === PlaylistLevelType.SUBTITLE) {
21826
21943
  // If fragment is subtitle type, parse as WebVTT.
21827
21944
  if (payload.byteLength) {
21828
- // We need an initial synchronisation PTS. Store fragments as long as none has arrived.
21829
- if (!initPTS[frag.cc]) {
21830
- unparsedVttFrags.push(data);
21831
- if (initPTS.length) {
21832
- // finish unsuccessfully, otherwise the subtitle-stream-controller could be blocked from loading new frags.
21833
- this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
21834
- success: false,
21835
- frag,
21836
- error: new Error('Missing initial subtitle PTS')
21837
- });
21838
- }
21839
- return;
21840
- }
21841
21945
  const decryptData = frag.decryptdata;
21842
21946
  // fragment after decryption has a stats object
21843
21947
  const decrypted = ('stats' in data);
@@ -21856,7 +21960,7 @@ class TimelineController {
21856
21960
  if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {
21857
21961
  this._parseIMSC1(frag, payload);
21858
21962
  } else {
21859
- this._parseVTTs(frag, payload, vttCCs);
21963
+ this._parseVTTs(data);
21860
21964
  }
21861
21965
  }
21862
21966
  } else {
@@ -21886,21 +21990,43 @@ class TimelineController {
21886
21990
  });
21887
21991
  });
21888
21992
  }
21889
- _parseVTTs(frag, payload, vttCCs) {
21993
+ _parseVTTs(data) {
21890
21994
  var _frag$initSegment;
21995
+ const {
21996
+ frag,
21997
+ payload
21998
+ } = data;
21999
+ // We need an initial synchronisation PTS. Store fragments as long as none has arrived
22000
+ const {
22001
+ initPTS,
22002
+ unparsedVttFrags
22003
+ } = this;
22004
+ const maxAvCC = initPTS.length - 1;
22005
+ if (!initPTS[frag.cc] && maxAvCC === -1) {
22006
+ unparsedVttFrags.push(data);
22007
+ return;
22008
+ }
21891
22009
  const hls = this.hls;
21892
22010
  // Parse the WebVTT file contents.
21893
22011
  const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)) : payload;
21894
- parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], vttCCs, frag.cc, frag.start, cues => {
22012
+ parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, cues => {
21895
22013
  this._appendCues(cues, frag.level);
21896
22014
  hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
21897
22015
  success: true,
21898
22016
  frag: frag
21899
22017
  });
21900
22018
  }, error => {
21901
- this._fallbackToIMSC1(frag, payload);
22019
+ const missingInitPTS = error.message === 'Missing initPTS for VTT MPEGTS';
22020
+ if (missingInitPTS) {
22021
+ unparsedVttFrags.push(data);
22022
+ } else {
22023
+ this._fallbackToIMSC1(frag, payload);
22024
+ }
21902
22025
  // Something went wrong while parsing. Trigger event with success false.
21903
22026
  logger.log(`Failed to parse VTT cue: ${error}`);
22027
+ if (missingInitPTS && maxAvCC > frag.cc) {
22028
+ return;
22029
+ }
21904
22030
  hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
21905
22031
  success: false,
21906
22032
  frag: frag,
@@ -21950,10 +22076,6 @@ class TimelineController {
21950
22076
  frag
21951
22077
  } = data;
21952
22078
  if (frag.type === PlaylistLevelType.SUBTITLE) {
21953
- if (!this.initPTS[frag.cc]) {
21954
- this.unparsedVttFrags.push(data);
21955
- return;
21956
- }
21957
22079
  this.onFragLoaded(Events.FRAG_LOADED, data);
21958
22080
  }
21959
22081
  }
@@ -22062,6 +22184,7 @@ function newVTTCCs() {
22062
22184
  /*
22063
22185
  * cap stream level to media size dimension controller
22064
22186
  */
22187
+
22065
22188
  class CapLevelController {
22066
22189
  constructor(hls) {
22067
22190
  this.hls = void 0;
@@ -24085,6 +24208,7 @@ class XhrLoader {
24085
24208
  const stats = this.stats;
24086
24209
  stats.loading.first = 0;
24087
24210
  stats.loaded = 0;
24211
+ stats.aborted = false;
24088
24212
  const xhrSetup = this.xhrSetup;
24089
24213
  if (xhrSetup) {
24090
24214
  Promise.resolve().then(() => {
@@ -24956,7 +25080,7 @@ class Hls {
24956
25080
  * Get the video-dev/hls.js package version.
24957
25081
  */
24958
25082
  static get version() {
24959
- return "1.4.1";
25083
+ return "1.4.13";
24960
25084
  }
24961
25085
 
24962
25086
  /**