@amazon/vinyl 1.2.0 → 1.2.1

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 (289) hide show
  1. package/dist/index.cjs +11 -2
  2. package/dist/index.cjs.map +2 -2
  3. package/dist/index.js +15 -4
  4. package/dist/index.js.map +3 -3
  5. package/dist/test/integ.es5.js +43 -43
  6. package/dist/test/integ.js +70 -2
  7. package/dist/test/integ.js.map +2 -2
  8. package/dist/types/current/ad/AdBreakInfo.d.ts +160 -0
  9. package/dist/types/current/ad/AdBreakInfo.d.ts.map +1 -0
  10. package/dist/types/current/ad/AdBreakInfo.js +5 -0
  11. package/dist/types/current/ad/AdController.d.ts +229 -0
  12. package/dist/types/current/ad/AdController.d.ts.map +1 -0
  13. package/dist/types/current/ad/AdController.js +19 -0
  14. package/dist/types/current/ad/AdControllerImpl.d.ts +146 -0
  15. package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -0
  16. package/dist/types/current/ad/AdControllerImpl.js +705 -0
  17. package/dist/types/current/ad/AdError.d.ts +6 -0
  18. package/dist/types/current/ad/AdError.d.ts.map +1 -0
  19. package/dist/types/current/ad/AdError.js +14 -0
  20. package/dist/types/current/ad/AdsProvider.d.ts +28 -0
  21. package/dist/types/current/ad/AdsProvider.d.ts.map +1 -0
  22. package/dist/types/current/ad/AdsProvider.js +5 -0
  23. package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
  24. package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts.map +1 -0
  25. package/dist/types/current/ad/defaultAdLoadOptionsResolver.js +26 -0
  26. package/dist/types/current/ad/discoverHlsInterstitials.d.ts +22 -0
  27. package/dist/types/current/ad/discoverHlsInterstitials.d.ts.map +1 -0
  28. package/dist/types/current/ad/discoverHlsInterstitials.js +246 -0
  29. package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
  30. package/dist/types/current/drm/DrmControllerImpl.js +11 -1
  31. package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -1
  32. package/dist/types/current/streaming/AudioOptions.d.ts +39 -0
  33. package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -0
  34. package/dist/types/current/streaming/AudioOptions.js +15 -0
  35. package/dist/types/current/streaming/LoadMetric.d.ts +58 -0
  36. package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -0
  37. package/dist/types/current/streaming/LoadMetric.js +5 -0
  38. package/dist/types/current/streaming/ManifestControllerImpl.d.ts +43 -0
  39. package/dist/types/current/streaming/ManifestControllerImpl.d.ts.map +1 -0
  40. package/dist/types/current/streaming/ManifestControllerImpl.js +104 -0
  41. package/dist/types/current/streaming/buffering/codecDenylist.d.ts +23 -0
  42. package/dist/types/current/streaming/buffering/codecDenylist.d.ts.map +1 -0
  43. package/dist/types/current/streaming/buffering/codecDenylist.js +62 -0
  44. package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts +30 -0
  45. package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts.map +1 -0
  46. package/dist/types/current/streaming/createAllowedContentTypesValue.js +43 -0
  47. package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
  48. package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts.map +1 -0
  49. package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.js +75 -0
  50. package/dist/types/current/text/HtmlTextTrackRenderer.d.ts +60 -0
  51. package/dist/types/current/text/HtmlTextTrackRenderer.d.ts.map +1 -0
  52. package/dist/types/current/text/HtmlTextTrackRenderer.js +231 -0
  53. package/dist/types/current/text/SidecarTextTrackController.d.ts +103 -0
  54. package/dist/types/current/text/SidecarTextTrackController.d.ts.map +1 -0
  55. package/dist/types/current/text/SidecarTextTrackController.js +250 -0
  56. package/dist/types/current/text/SidecarTextTrackLoader.d.ts +65 -0
  57. package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -0
  58. package/dist/types/current/text/SidecarTextTrackLoader.js +150 -0
  59. package/dist/types/current/text/TextTrack.d.ts +179 -0
  60. package/dist/types/current/text/TextTrack.d.ts.map +1 -0
  61. package/dist/types/current/text/TextTrack.js +29 -0
  62. package/dist/types/current/text/TextTrackRenderer.d.ts +24 -0
  63. package/dist/types/current/text/TextTrackRenderer.d.ts.map +1 -0
  64. package/dist/types/current/text/TextTrackRenderer.js +5 -0
  65. package/dist/types/current/text/VttCueStyle.d.ts +41 -0
  66. package/dist/types/current/text/VttCueStyle.d.ts.map +1 -0
  67. package/dist/types/current/text/VttCueStyle.js +45 -0
  68. package/dist/types/current/text/discoverDashTextTracks.d.ts +24 -0
  69. package/dist/types/current/text/discoverDashTextTracks.d.ts.map +1 -0
  70. package/dist/types/current/text/discoverDashTextTracks.js +109 -0
  71. package/dist/types/current/text/discoverHlsTextTracks.d.ts +19 -0
  72. package/dist/types/current/text/discoverHlsTextTracks.d.ts.map +1 -0
  73. package/dist/types/current/text/discoverHlsTextTracks.js +49 -0
  74. package/dist/types/current/text/mediaTextTrackProvider.d.ts +34 -0
  75. package/dist/types/current/text/mediaTextTrackProvider.d.ts.map +1 -0
  76. package/dist/types/current/text/mediaTextTrackProvider.js +42 -0
  77. package/dist/types/current/text/parseWebVtt.d.ts +60 -0
  78. package/dist/types/current/text/parseWebVtt.d.ts.map +1 -0
  79. package/dist/types/current/text/parseWebVtt.js +248 -0
  80. package/dist/types/current/text/pickPreferredTextTrack.d.ts +15 -0
  81. package/dist/types/current/text/pickPreferredTextTrack.d.ts.map +1 -0
  82. package/dist/types/current/text/pickPreferredTextTrack.js +71 -0
  83. package/dist/types/current/track/SeekRange.d.ts +9 -0
  84. package/dist/types/current/track/SeekRange.d.ts.map +1 -0
  85. package/dist/types/current/track/SeekRange.js +5 -0
  86. package/dist/types/current/track/hls/HlsManifestData.d.ts +19 -0
  87. package/dist/types/current/track/hls/HlsManifestData.d.ts.map +1 -0
  88. package/dist/types/current/track/hls/HlsManifestData.js +5 -0
  89. package/dist/types/current/track/hls/createHlsManifestProvider.d.ts +6 -0
  90. package/dist/types/current/track/hls/createHlsManifestProvider.d.ts.map +1 -0
  91. package/dist/types/current/track/hls/createHlsManifestProvider.js +9 -0
  92. package/dist/types/current/track/inferLoadOptionsFromUri.d.ts +15 -0
  93. package/dist/types/current/track/inferLoadOptionsFromUri.d.ts.map +1 -0
  94. package/dist/types/current/track/inferLoadOptionsFromUri.js +55 -0
  95. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  96. package/dist/types/current/util/media/codecOverrides.d.ts +33 -0
  97. package/dist/types/current/util/media/codecOverrides.d.ts.map +1 -0
  98. package/dist/types/current/util/media/codecOverrides.js +37 -0
  99. package/dist/types/current/util/media/codecSupport.d.ts +6 -0
  100. package/dist/types/current/util/media/codecSupport.d.ts.map +1 -0
  101. package/dist/types/current/util/media/codecSupport.js +17 -0
  102. package/dist/types/current/util/media/mimeType.d.ts +8 -0
  103. package/dist/types/current/util/media/mimeType.d.ts.map +1 -0
  104. package/dist/types/current/util/media/mimeType.js +13 -0
  105. package/dist/types/ts3.7/ad/AdBreakInfo.d.ts +160 -0
  106. package/dist/types/ts3.7/ad/AdController.d.ts +243 -0
  107. package/dist/types/ts3.7/ad/AdControllerImpl.d.ts +146 -0
  108. package/dist/types/ts3.7/ad/AdError.d.ts +6 -0
  109. package/dist/types/ts3.7/ad/AdsProvider.d.ts +28 -0
  110. package/dist/types/ts3.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
  111. package/dist/types/ts3.7/ad/discoverHlsInterstitials.d.ts +22 -0
  112. package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +1 -1
  113. package/dist/types/ts3.7/streaming/AudioOptions.d.ts +39 -0
  114. package/dist/types/ts3.7/streaming/LoadMetric.d.ts +58 -0
  115. package/dist/types/ts3.7/streaming/ManifestControllerImpl.d.ts +40 -0
  116. package/dist/types/ts3.7/streaming/buffering/codecDenylist.d.ts +23 -0
  117. package/dist/types/ts3.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
  118. package/dist/types/ts3.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
  119. package/dist/types/ts3.7/text/HtmlTextTrackRenderer.d.ts +60 -0
  120. package/dist/types/ts3.7/text/SidecarTextTrackController.d.ts +103 -0
  121. package/dist/types/ts3.7/text/SidecarTextTrackLoader.d.ts +65 -0
  122. package/dist/types/ts3.7/text/TextTrack.d.ts +183 -0
  123. package/dist/types/ts3.7/text/TextTrackRenderer.d.ts +24 -0
  124. package/dist/types/ts3.7/text/VttCueStyle.d.ts +41 -0
  125. package/dist/types/ts3.7/text/discoverDashTextTracks.d.ts +24 -0
  126. package/dist/types/ts3.7/text/discoverHlsTextTracks.d.ts +19 -0
  127. package/dist/types/ts3.7/text/mediaTextTrackProvider.d.ts +34 -0
  128. package/dist/types/ts3.7/text/parseWebVtt.d.ts +60 -0
  129. package/dist/types/ts3.7/text/pickPreferredTextTrack.d.ts +15 -0
  130. package/dist/types/ts3.7/track/SeekRange.d.ts +9 -0
  131. package/dist/types/ts3.7/track/hls/HlsManifestData.d.ts +19 -0
  132. package/dist/types/ts3.7/track/hls/createHlsManifestProvider.d.ts +6 -0
  133. package/dist/types/ts3.7/track/inferLoadOptionsFromUri.d.ts +15 -0
  134. package/dist/types/ts3.7/util/media/codecOverrides.d.ts +33 -0
  135. package/dist/types/ts3.7/util/media/codecSupport.d.ts +6 -0
  136. package/dist/types/ts3.7/util/media/mimeType.d.ts +8 -0
  137. package/dist/types/ts4.1/ad/AdBreakInfo.d.ts +160 -0
  138. package/dist/types/ts4.1/ad/AdController.d.ts +243 -0
  139. package/dist/types/ts4.1/ad/AdControllerImpl.d.ts +146 -0
  140. package/dist/types/ts4.1/ad/AdError.d.ts +6 -0
  141. package/dist/types/ts4.1/ad/AdsProvider.d.ts +28 -0
  142. package/dist/types/ts4.1/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
  143. package/dist/types/ts4.1/ad/discoverHlsInterstitials.d.ts +22 -0
  144. package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +1 -1
  145. package/dist/types/ts4.1/streaming/AudioOptions.d.ts +39 -0
  146. package/dist/types/ts4.1/streaming/LoadMetric.d.ts +58 -0
  147. package/dist/types/ts4.1/streaming/ManifestControllerImpl.d.ts +40 -0
  148. package/dist/types/ts4.1/streaming/buffering/codecDenylist.d.ts +23 -0
  149. package/dist/types/ts4.1/streaming/createAllowedContentTypesValue.d.ts +30 -0
  150. package/dist/types/ts4.1/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
  151. package/dist/types/ts4.1/text/HtmlTextTrackRenderer.d.ts +60 -0
  152. package/dist/types/ts4.1/text/SidecarTextTrackController.d.ts +104 -0
  153. package/dist/types/ts4.1/text/SidecarTextTrackLoader.d.ts +65 -0
  154. package/dist/types/ts4.1/text/TextTrack.d.ts +183 -0
  155. package/dist/types/ts4.1/text/TextTrackRenderer.d.ts +24 -0
  156. package/dist/types/ts4.1/text/VttCueStyle.d.ts +41 -0
  157. package/dist/types/ts4.1/text/discoverDashTextTracks.d.ts +24 -0
  158. package/dist/types/ts4.1/text/discoverHlsTextTracks.d.ts +19 -0
  159. package/dist/types/ts4.1/text/mediaTextTrackProvider.d.ts +34 -0
  160. package/dist/types/ts4.1/text/parseWebVtt.d.ts +60 -0
  161. package/dist/types/ts4.1/text/pickPreferredTextTrack.d.ts +15 -0
  162. package/dist/types/ts4.1/track/SeekRange.d.ts +9 -0
  163. package/dist/types/ts4.1/track/hls/HlsManifestData.d.ts +19 -0
  164. package/dist/types/ts4.1/track/hls/createHlsManifestProvider.d.ts +6 -0
  165. package/dist/types/ts4.1/track/inferLoadOptionsFromUri.d.ts +15 -0
  166. package/dist/types/ts4.1/util/media/codecOverrides.d.ts +33 -0
  167. package/dist/types/ts4.1/util/media/codecSupport.d.ts +6 -0
  168. package/dist/types/ts4.1/util/media/mimeType.d.ts +8 -0
  169. package/dist/types/ts4.7/ad/AdBreakInfo.d.ts +160 -0
  170. package/dist/types/ts4.7/ad/AdController.d.ts +243 -0
  171. package/dist/types/ts4.7/ad/AdControllerImpl.d.ts +146 -0
  172. package/dist/types/ts4.7/ad/AdError.d.ts +6 -0
  173. package/dist/types/ts4.7/ad/AdsProvider.d.ts +28 -0
  174. package/dist/types/ts4.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
  175. package/dist/types/ts4.7/ad/discoverHlsInterstitials.d.ts +22 -0
  176. package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +1 -1
  177. package/dist/types/ts4.7/streaming/AudioOptions.d.ts +39 -0
  178. package/dist/types/ts4.7/streaming/LoadMetric.d.ts +58 -0
  179. package/dist/types/ts4.7/streaming/ManifestControllerImpl.d.ts +43 -0
  180. package/dist/types/ts4.7/streaming/buffering/codecDenylist.d.ts +23 -0
  181. package/dist/types/ts4.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
  182. package/dist/types/ts4.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
  183. package/dist/types/ts4.7/text/HtmlTextTrackRenderer.d.ts +60 -0
  184. package/dist/types/ts4.7/text/SidecarTextTrackController.d.ts +103 -0
  185. package/dist/types/ts4.7/text/SidecarTextTrackLoader.d.ts +65 -0
  186. package/dist/types/ts4.7/text/TextTrack.d.ts +183 -0
  187. package/dist/types/ts4.7/text/TextTrackRenderer.d.ts +24 -0
  188. package/dist/types/ts4.7/text/VttCueStyle.d.ts +41 -0
  189. package/dist/types/ts4.7/text/discoverDashTextTracks.d.ts +24 -0
  190. package/dist/types/ts4.7/text/discoverHlsTextTracks.d.ts +19 -0
  191. package/dist/types/ts4.7/text/mediaTextTrackProvider.d.ts +34 -0
  192. package/dist/types/ts4.7/text/parseWebVtt.d.ts +60 -0
  193. package/dist/types/ts4.7/text/pickPreferredTextTrack.d.ts +15 -0
  194. package/dist/types/ts4.7/track/SeekRange.d.ts +9 -0
  195. package/dist/types/ts4.7/track/hls/HlsManifestData.d.ts +19 -0
  196. package/dist/types/ts4.7/track/hls/createHlsManifestProvider.d.ts +6 -0
  197. package/dist/types/ts4.7/track/inferLoadOptionsFromUri.d.ts +15 -0
  198. package/dist/types/ts4.7/util/media/codecOverrides.d.ts +33 -0
  199. package/dist/types/ts4.7/util/media/codecSupport.d.ts +6 -0
  200. package/dist/types/ts4.7/util/media/mimeType.d.ts +8 -0
  201. package/dist/unit/types/current/ad/AdController.test.d.ts +2 -0
  202. package/dist/unit/types/current/ad/AdController.test.d.ts.map +1 -0
  203. package/dist/unit/types/current/ad/AdController.test.js +10 -0
  204. package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts +2 -0
  205. package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts.map +1 -0
  206. package/dist/unit/types/current/ad/AdControllerImpl.test.js +1456 -0
  207. package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts +2 -0
  208. package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts.map +1 -0
  209. package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.js +56 -0
  210. package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts +2 -0
  211. package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts.map +1 -0
  212. package/dist/unit/types/current/ad/discoverHlsInterstitials.test.js +756 -0
  213. package/dist/unit/types/current/drm/DrmControllerImpl.test.js +66 -1
  214. package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts +2 -0
  215. package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts.map +1 -0
  216. package/dist/unit/types/current/streaming/ManifestControllerImpl.test.js +197 -0
  217. package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts +2 -0
  218. package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts.map +1 -0
  219. package/dist/unit/types/current/streaming/buffering/codecDenylist.test.js +56 -0
  220. package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts +2 -0
  221. package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts.map +1 -0
  222. package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.js +77 -0
  223. package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts +2 -0
  224. package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts.map +1 -0
  225. package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.js +99 -0
  226. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts +2 -0
  227. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts.map +1 -0
  228. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.js +231 -0
  229. package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts +2 -0
  230. package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts.map +1 -0
  231. package/dist/unit/types/current/text/SidecarTextTrackController.test.js +686 -0
  232. package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts +2 -0
  233. package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts.map +1 -0
  234. package/dist/unit/types/current/text/SidecarTextTrackLoader.test.js +365 -0
  235. package/dist/unit/types/current/text/VttCueStyle.test.d.ts +2 -0
  236. package/dist/unit/types/current/text/VttCueStyle.test.d.ts.map +1 -0
  237. package/dist/unit/types/current/text/VttCueStyle.test.js +76 -0
  238. package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts +2 -0
  239. package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts.map +1 -0
  240. package/dist/unit/types/current/text/discoverDashTextTracks.test.js +199 -0
  241. package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts +2 -0
  242. package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts.map +1 -0
  243. package/dist/unit/types/current/text/discoverHlsTextTracks.test.js +177 -0
  244. package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts +2 -0
  245. package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts.map +1 -0
  246. package/dist/unit/types/current/text/mediaTextTrackProvider.test.js +86 -0
  247. package/dist/unit/types/current/text/parseWebVtt.test.d.ts +2 -0
  248. package/dist/unit/types/current/text/parseWebVtt.test.d.ts.map +1 -0
  249. package/dist/unit/types/current/text/parseWebVtt.test.js +393 -0
  250. package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts +2 -0
  251. package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts.map +1 -0
  252. package/dist/unit/types/current/text/pickPreferredTextTrack.test.js +78 -0
  253. package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts +2 -0
  254. package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts.map +1 -0
  255. package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.js +165 -0
  256. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  257. package/dist/unit/types/current/util/media/codecOverrides.test.d.ts +2 -0
  258. package/dist/unit/types/current/util/media/codecOverrides.test.d.ts.map +1 -0
  259. package/dist/unit/types/current/util/media/codecOverrides.test.js +42 -0
  260. package/dist/unit/types/current/util/media/codecSupport.test.d.ts +2 -0
  261. package/dist/unit/types/current/util/media/codecSupport.test.d.ts.map +1 -0
  262. package/dist/unit/types/current/util/media/codecSupport.test.js +26 -0
  263. package/dist/unit/types/current/util/media/mimeType.test.d.ts +2 -0
  264. package/dist/unit/types/current/util/media/mimeType.test.d.ts.map +1 -0
  265. package/dist/unit/types/current/util/media/mimeType.test.js +22 -0
  266. package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts +2 -0
  267. package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts.map +1 -0
  268. package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.js +142 -0
  269. package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts +2 -0
  270. package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts.map +1 -0
  271. package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.js +188 -0
  272. package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts +15 -0
  273. package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts.map +1 -0
  274. package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.js +26 -0
  275. package/dist/vinylTestUtil/types/current/mock/dash/mockDashManifest.d.ts +84 -84
  276. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts +10 -0
  277. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts.map +1 -0
  278. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.js +14 -0
  279. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  280. package/dist/vinylTestUtil/types/ts3.7/mock/ad/MockAdController.d.ts +15 -0
  281. package/dist/vinylTestUtil/types/ts3.7/mock/dash/mockDashManifest.d.ts +84 -84
  282. package/dist/vinylTestUtil/types/ts3.7/mock/text/MockTextTrackController.d.ts +10 -0
  283. package/dist/vinylTestUtil/types/ts4.1/mock/ad/MockAdController.d.ts +15 -0
  284. package/dist/vinylTestUtil/types/ts4.1/mock/dash/mockDashManifest.d.ts +84 -84
  285. package/dist/vinylTestUtil/types/ts4.1/mock/text/MockTextTrackController.d.ts +10 -0
  286. package/dist/vinylTestUtil/types/ts4.7/mock/ad/MockAdController.d.ts +15 -0
  287. package/dist/vinylTestUtil/types/ts4.7/mock/dash/mockDashManifest.d.ts +84 -84
  288. package/dist/vinylTestUtil/types/ts4.7/mock/text/MockTextTrackController.d.ts +10 -0
  289. package/package.json +10 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidecarTextTrackLoader.test.d.ts","sourceRoot":"","sources":["../../../../../test/unit/text/SidecarTextTrackLoader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,365 @@
1
+ /*
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { loadWebVttCues } from '@amazon/vinyl';
6
+ import { Abort, requesterWithRetryRef } from '@amazon/vinyl-util';
7
+ import { MockRequester } from '@amazon/vinyl-util/testUtil';
8
+ describe('loadWebVttCues', () => {
9
+ let requester;
10
+ beforeEach(() => {
11
+ requester = new MockRequester();
12
+ requesterWithRetryRef.set(() => requester);
13
+ });
14
+ function respondText(body, contentType, url) {
15
+ const headers = contentType
16
+ ? new Headers({ 'content-type': contentType })
17
+ : new Headers();
18
+ const response = new Response(body, { headers });
19
+ if (url) {
20
+ Object.defineProperty(response, 'url', { value: url });
21
+ }
22
+ return Promise.resolve(response);
23
+ }
24
+ // Common options: a callback receiving cues, and a playhead that keeps
25
+ // moving forward so the buffer window advances past every segment.
26
+ function streamingOpts(overrides = {}) {
27
+ let now = 0;
28
+ const batches = [];
29
+ return {
30
+ batches,
31
+ options: {
32
+ onCues: (cs) => batches.push(cs.map((c) => ({ text: c.text }))),
33
+ getCurrentTime: () => now,
34
+ advanceTime: (t) => {
35
+ now = t;
36
+ },
37
+ ...overrides,
38
+ },
39
+ };
40
+ }
41
+ it('parses a direct .vtt response with no content-type header', async () => {
42
+ const response = new Response(`WEBVTT\n\n00:00:01.000 --> 00:00:02.000\nplain`, { headers: new Headers() });
43
+ response.headers.delete('content-type');
44
+ requester.request.and.resolveTo(response);
45
+ const { batches, options } = streamingOpts();
46
+ await loadWebVttCues('https://x.test/sub.vtt', options);
47
+ expect(batches.flat().map((c) => c.text)).toEqual(['plain']);
48
+ });
49
+ it('parses a direct .vtt response', async () => {
50
+ const body = `WEBVTT\n\n00:00:01.000 --> 00:00:02.000\ndirect`;
51
+ requester.request.and.resolveTo(respondText(body, 'text/vtt'));
52
+ const { batches, options } = streamingOpts();
53
+ await loadWebVttCues('https://x.test/sub.vtt', options);
54
+ expect(batches.flat().map((c) => c.text)).toEqual(['direct']);
55
+ });
56
+ it('treats application/x-mpegurl content-type as a media playlist', async () => {
57
+ const playlistText = `#EXTM3U
58
+ #EXT-X-VERSION:3
59
+ #EXT-X-TARGETDURATION:10
60
+ #EXTINF:10.0,
61
+ seg.vtt
62
+ #EXT-X-ENDLIST
63
+ `;
64
+ const segmentText = `WEBVTT\n\n00:00:01.000 --> 00:00:02.000\nfrom-segment`;
65
+ let call = 0;
66
+ requester.request.and.callFake(() => {
67
+ call++;
68
+ if (call === 1) {
69
+ return respondText(playlistText, 'application/vnd.apple.mpegurl', 'https://x.test/sub.m3u8');
70
+ }
71
+ return respondText(segmentText, 'text/vtt');
72
+ });
73
+ const { batches, options } = streamingOpts();
74
+ await loadWebVttCues('https://x.test/sub.txt', options);
75
+ expect(batches.flat().map((c) => c.text)).toEqual(['from-segment']);
76
+ });
77
+ it('forwards STYLE blocks parsed from a segment via onStyles', async () => {
78
+ const playlistText = `#EXTM3U
79
+ #EXT-X-TARGETDURATION:10
80
+ #EXTINF:10.0,
81
+ seg.vtt
82
+ #EXT-X-ENDLIST
83
+ `;
84
+ const segmentText = `WEBVTT
85
+
86
+ STYLE
87
+ ::cue { color: red }
88
+
89
+ 00:00:01.000 --> 00:00:02.000
90
+ from-segment`;
91
+ let call = 0;
92
+ requester.request.and.callFake(() => {
93
+ call++;
94
+ if (call === 1) {
95
+ return respondText(playlistText, 'application/vnd.apple.mpegurl', 'https://x.test/sub.m3u8');
96
+ }
97
+ return respondText(segmentText, 'text/vtt');
98
+ });
99
+ const styleBatches = [];
100
+ const { options } = streamingOpts({
101
+ onStyles: (styles) => styleBatches.push([...styles]),
102
+ });
103
+ await loadWebVttCues('https://x.test/sub.m3u8', options);
104
+ expect(styleBatches).toEqual([['::cue { color: red }']]);
105
+ });
106
+ it('falls back to the request URI when response.url is empty (body sniffed)', async () => {
107
+ const playlistText = `#EXTM3U
108
+ #EXT-X-VERSION:3
109
+ #EXT-X-TARGETDURATION:10
110
+ #EXTINF:10.0,
111
+ 0.vtt
112
+ #EXT-X-ENDLIST
113
+ `;
114
+ const segText = `WEBVTT\n\n00:00:00.000 --> 00:00:01.000\nfb`;
115
+ let call = 0;
116
+ requester.request.and.callFake(() => {
117
+ call++;
118
+ if (call === 1)
119
+ return respondText(playlistText, 'application/vnd.apple.mpegurl');
120
+ return respondText(segText);
121
+ });
122
+ // No .m3u8 extension → sniffed via body. Response.url omitted so the
123
+ // fallback branch (response.url || uri) is exercised.
124
+ const { batches, options } = streamingOpts();
125
+ await loadWebVttCues('https://x.test/playlist', options);
126
+ expect(batches.flat().map((c) => c.text)).toEqual(['fb']);
127
+ });
128
+ it('uses response.url when set (m3u8 fetch redirect)', async () => {
129
+ const playlistText = `#EXTM3U
130
+ #EXT-X-VERSION:3
131
+ #EXT-X-TARGETDURATION:10
132
+ #EXTINF:10.0,
133
+ 0.vtt
134
+ #EXT-X-ENDLIST
135
+ `;
136
+ const segText = `WEBVTT\n\n00:00:00.000 --> 00:00:01.000\nseg`;
137
+ let call = 0;
138
+ requester.request.and.callFake(() => {
139
+ call++;
140
+ if (call === 1) {
141
+ return respondText(playlistText, 'application/vnd.apple.mpegurl', 'https://cdn.example.com/redirected/sub.m3u8');
142
+ }
143
+ return respondText(segText);
144
+ });
145
+ const { options } = streamingOpts();
146
+ await loadWebVttCues('https://x.test/sub.m3u8', options);
147
+ const segUrl = requester.request.calls.argsFor(1)[0];
148
+ expect(String(segUrl)).toBe('https://cdn.example.com/redirected/0.vtt');
149
+ });
150
+ it('uses response.url when set (sniffed body)', async () => {
151
+ const playlistText = `#EXTM3U
152
+ #EXT-X-VERSION:3
153
+ #EXT-X-TARGETDURATION:10
154
+ #EXTINF:10.0,
155
+ 0.vtt
156
+ #EXT-X-ENDLIST
157
+ `;
158
+ const segText = `WEBVTT\n\n00:00:00.000 --> 00:00:01.000\nseg`;
159
+ let call = 0;
160
+ requester.request.and.callFake(() => {
161
+ call++;
162
+ if (call === 1) {
163
+ return respondText(playlistText, undefined, 'https://cdn.example.com/redirected/sub');
164
+ }
165
+ return respondText(segText);
166
+ });
167
+ const { options } = streamingOpts();
168
+ await loadWebVttCues('https://x.test/sub', options);
169
+ const segUrl = requester.request.calls.argsFor(1)[0];
170
+ expect(String(segUrl)).toBe('https://cdn.example.com/redirected/0.vtt');
171
+ });
172
+ it('detects a media playlist by .m3u8 URL extension', async () => {
173
+ const playlistText = `#EXTM3U
174
+ #EXT-X-VERSION:3
175
+ #EXT-X-TARGETDURATION:10
176
+ #EXTINF:10.0,
177
+ 0.vtt
178
+ #EXT-X-ENDLIST
179
+ `;
180
+ const segText = `WEBVTT\n\n00:00:01.000 --> 00:00:02.000\nseg`;
181
+ let call = 0;
182
+ requester.request.and.callFake(() => {
183
+ call++;
184
+ if (call === 1) {
185
+ return respondText(playlistText, 'application/vnd.apple.mpegurl');
186
+ }
187
+ return respondText(segText);
188
+ });
189
+ const { batches, options } = streamingOpts();
190
+ await loadWebVttCues('https://x.test/sub.m3u8', options);
191
+ expect(batches.flat().map((c) => c.text)).toEqual(['seg']);
192
+ });
193
+ it('fetches segments incrementally in playhead-first order', async () => {
194
+ // 4 segments × 5s each. Playhead at 12s selects segment c (10-15s)
195
+ // first because its midpoint is closest to the playhead.
196
+ const playlistBody = `#EXTM3U
197
+ #EXT-X-TARGETDURATION:5
198
+ #EXTINF:5.0,
199
+ a.vtt
200
+ #EXTINF:5.0,
201
+ b.vtt
202
+ #EXTINF:5.0,
203
+ c.vtt
204
+ #EXTINF:5.0,
205
+ d.vtt
206
+ #EXT-X-ENDLIST
207
+ `;
208
+ const fetched = [];
209
+ let call = 0;
210
+ requester.request.and.callFake((url) => {
211
+ call++;
212
+ if (call === 1)
213
+ return respondText(playlistBody);
214
+ const path = String(url).split('/').pop();
215
+ fetched.push(path);
216
+ return respondText(`WEBVTT\n\n00:00:00.000 --> 00:00:01.000\n${path}`);
217
+ });
218
+ const abort = new Abort();
219
+ const batches = [];
220
+ const promise = loadWebVttCues('https://x.test/sub.m3u8', {
221
+ onCues: (cs) => batches.push(cs.map((c) => c.text)),
222
+ getCurrentTime: () => 12,
223
+ abort,
224
+ });
225
+ // Let the loader consume every segment in the window, then abort.
226
+ await new Promise((r) => setTimeout(r, 50));
227
+ abort.abort();
228
+ await promise;
229
+ expect(fetched[0]).toBe('c.vtt');
230
+ expect(batches[0]).toEqual(['c.vtt']);
231
+ });
232
+ it('substitutes EXT-X-DEFINE:IMPORT variables in segment URIs', async () => {
233
+ const playlistBody = `#EXTM3U
234
+ #EXT-X-DEFINE:IMPORT="prefix"
235
+ #EXT-X-TARGETDURATION:5
236
+ #EXTINF:5.0,
237
+ {$prefix}0.vtt
238
+ #EXT-X-ENDLIST
239
+ `;
240
+ const segText = `WEBVTT\n\n00:00:00.000 --> 00:00:05.000\nhello`;
241
+ let call = 0;
242
+ requester.request.and.callFake((url) => {
243
+ call++;
244
+ if (call === 1)
245
+ return respondText(playlistBody);
246
+ expect(String(url)).toBe('https://cdn.example.com/0.vtt');
247
+ return respondText(segText);
248
+ });
249
+ const { batches, options } = streamingOpts();
250
+ await loadWebVttCues('https://x.test/sub.m3u8', {
251
+ ...options,
252
+ variables: { prefix: 'https://cdn.example.com/' },
253
+ });
254
+ expect(batches.flat().map((c) => c.text)).toEqual(['hello']);
255
+ });
256
+ it('re-evaluates playhead between segment fetches for seek responsiveness', async () => {
257
+ const playlistBody = `#EXTM3U
258
+ #EXT-X-TARGETDURATION:5
259
+ #EXTINF:5.0,
260
+ a.vtt
261
+ #EXTINF:5.0,
262
+ b.vtt
263
+ #EXTINF:5.0,
264
+ c.vtt
265
+ #EXTINF:5.0,
266
+ d.vtt
267
+ #EXT-X-ENDLIST
268
+ `;
269
+ const fetched = [];
270
+ let currentTime = 0;
271
+ let call = 0;
272
+ requester.request.and.callFake((url) => {
273
+ call++;
274
+ if (call === 1)
275
+ return respondText(playlistBody);
276
+ const path = String(url).split('/').pop();
277
+ fetched.push(path);
278
+ // Seek to the end after seg0; abort will fire after seg3.
279
+ if (fetched.length === 1)
280
+ currentTime = 17;
281
+ return respondText(`WEBVTT\n\n00:00:00.000 --> 00:00:01.000\n${path}`);
282
+ });
283
+ const abort = new Abort();
284
+ const promise = loadWebVttCues('https://x.test/sub.m3u8', {
285
+ onCues: () => { },
286
+ getCurrentTime: () => currentTime,
287
+ abort,
288
+ });
289
+ // Let the loader fetch until it idles (no segments in window).
290
+ await new Promise((r) => setTimeout(r, 50));
291
+ abort.abort();
292
+ await promise;
293
+ // First fetch was seg0 (nearest 0s). Then seek → 17s makes seg3
294
+ // (mid=17.5) the closest of the remaining {1, 2, 3}.
295
+ expect(fetched[0]).toBe('a.vtt');
296
+ expect(fetched[1]).toBe('d.vtt');
297
+ });
298
+ it('honors abort during idle polling when playhead is outside every window', async () => {
299
+ // 2 segments at 10s+ but playhead sits at 100s (well past). No
300
+ // segment intersects the [-2, +10] buffer window, so the loader
301
+ // idles. Aborting must resolve the load promptly.
302
+ const playlistBody = `#EXTM3U
303
+ #EXT-X-TARGETDURATION:5
304
+ #EXTINF:5.0,
305
+ a.vtt
306
+ #EXTINF:5.0,
307
+ b.vtt
308
+ #EXT-X-ENDLIST
309
+ `;
310
+ let call = 0;
311
+ requester.request.and.callFake(() => {
312
+ call++;
313
+ if (call === 1)
314
+ return respondText(playlistBody);
315
+ fail('no segment fetch expected');
316
+ return respondText('');
317
+ });
318
+ const abort = new Abort();
319
+ const promise = loadWebVttCues('https://x.test/sub.m3u8', {
320
+ onCues: () => { },
321
+ getCurrentTime: () => 100,
322
+ abort,
323
+ });
324
+ // Give the polling loop a moment to enter its wait.
325
+ await new Promise((r) => setTimeout(r, 20));
326
+ abort.abort();
327
+ await promise; // should not hang
328
+ expect(call).toBe(1);
329
+ });
330
+ it('respects a custom lookAhead window', async () => {
331
+ // With lookAhead=1, only segment 0 (0..5s) overlaps [-2, 1].
332
+ // Segment 1 (5..10s) is outside the window and never fetched
333
+ // because the playhead never advances.
334
+ const playlistBody = `#EXTM3U
335
+ #EXT-X-TARGETDURATION:5
336
+ #EXTINF:5.0,
337
+ a.vtt
338
+ #EXTINF:5.0,
339
+ b.vtt
340
+ #EXT-X-ENDLIST
341
+ `;
342
+ let call = 0;
343
+ const fetched = [];
344
+ requester.request.and.callFake((url) => {
345
+ call++;
346
+ if (call === 1)
347
+ return respondText(playlistBody);
348
+ fetched.push(String(url).split('/').pop());
349
+ return respondText(`WEBVTT\n\n00:00:00.000 --> 00:00:01.000\nx`);
350
+ });
351
+ const abort = new Abort();
352
+ const promise = loadWebVttCues('https://x.test/sub.m3u8', {
353
+ onCues: () => { },
354
+ getCurrentTime: () => 0,
355
+ lookAhead: 1,
356
+ abort,
357
+ });
358
+ // Let a.vtt fetch, then let the loader enter its idle poll before
359
+ // aborting so the remaining segment stays pending.
360
+ await new Promise((r) => setTimeout(r, 20));
361
+ abort.abort();
362
+ await promise;
363
+ expect(fetched).toEqual(['a.vtt']);
364
+ });
365
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=VttCueStyle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VttCueStyle.test.d.ts","sourceRoot":"","sources":["../../../../../test/unit/text/VttCueStyle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ /*
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { applyVttCueStyle, isVttCue } from '@amazon/vinyl';
6
+ describe('VttCueStyle', () => {
7
+ describe('isVttCue', () => {
8
+ let original;
9
+ beforeEach(() => {
10
+ original = globalThis.VTTCue;
11
+ });
12
+ afterEach(() => {
13
+ ;
14
+ globalThis.VTTCue = original;
15
+ });
16
+ it('is true for a VTTCue instance', () => {
17
+ class FakeVttCue {
18
+ }
19
+ ;
20
+ globalThis.VTTCue = FakeVttCue;
21
+ expect(isVttCue(new FakeVttCue())).toBe(true);
22
+ });
23
+ it('is false for a non-VTTCue cue', () => {
24
+ class FakeVttCue {
25
+ }
26
+ ;
27
+ globalThis.VTTCue = FakeVttCue;
28
+ expect(isVttCue({})).toBe(false);
29
+ });
30
+ it('is false when VTTCue is unavailable', () => {
31
+ ;
32
+ globalThis.VTTCue = undefined;
33
+ expect(isVttCue({})).toBe(false);
34
+ });
35
+ });
36
+ describe('applyVttCueStyle', () => {
37
+ it('applies every provided property', () => {
38
+ const cue = {};
39
+ const style = {
40
+ align: 'start',
41
+ line: 5,
42
+ lineAlign: 'center',
43
+ position: 10,
44
+ positionAlign: 'center',
45
+ size: 90,
46
+ snapToLines: false,
47
+ vertical: 'rl',
48
+ };
49
+ applyVttCueStyle(cue, style);
50
+ expect(cue).toEqual({
51
+ align: 'start',
52
+ line: 5,
53
+ lineAlign: 'center',
54
+ position: 10,
55
+ positionAlign: 'center',
56
+ size: 90,
57
+ snapToLines: false,
58
+ vertical: 'rl',
59
+ });
60
+ });
61
+ it('accepts the `auto` keyword for line and position', () => {
62
+ const cue = {};
63
+ applyVttCueStyle(cue, {
64
+ line: 'auto',
65
+ position: 'auto',
66
+ });
67
+ expect(cue.line).toBe('auto');
68
+ expect(cue.position).toBe('auto');
69
+ });
70
+ it('leaves unset properties untouched', () => {
71
+ const cue = { size: 100 };
72
+ applyVttCueStyle(cue, {});
73
+ expect(cue).toEqual({ size: 100 });
74
+ });
75
+ });
76
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=discoverDashTextTracks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoverDashTextTracks.test.d.ts","sourceRoot":"","sources":["../../../../../test/unit/text/discoverDashTextTracks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,199 @@
1
+ /*
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { discoverDashTextTracks } from '@amazon/vinyl';
6
+ import { parseDashManifest } from '@amazon/vinyl-mpd-parser';
7
+ describe('discoverDashTextTracks', () => {
8
+ const baseUrl = 'https://example.com/dash/';
9
+ function manifest(adaptationSets) {
10
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>
11
+ <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" mediaPresentationDuration="PT60S" minBufferTime="PT2S">
12
+ <Period>
13
+ ${adaptationSets}
14
+ </Period>
15
+ </MPD>`;
16
+ return parseDashManifest(xml);
17
+ }
18
+ it('discovers a text AdaptationSet by contentType', () => {
19
+ const m = manifest(`
20
+ <AdaptationSet contentType="text" lang="en" mimeType="text/vtt">
21
+ <Representation id="en-sub" bandwidth="100">
22
+ <BaseURL>subs/en.vtt</BaseURL>
23
+ </Representation>
24
+ </AdaptationSet>`);
25
+ const result = discoverDashTextTracks(m, baseUrl);
26
+ expect(result.length).toBe(1);
27
+ expect(result[0]).toEqual(jasmine.objectContaining({
28
+ kind: 'subtitles',
29
+ language: 'en',
30
+ uri: 'https://example.com/dash/subs/en.vtt',
31
+ mimeType: 'text/vtt',
32
+ }));
33
+ });
34
+ it('discovers a text AdaptationSet by mimeType when contentType is absent', () => {
35
+ const m = manifest(`
36
+ <AdaptationSet mimeType="text/vtt" lang="es">
37
+ <Representation id="es-sub" bandwidth="100">
38
+ <BaseURL>es.vtt</BaseURL>
39
+ </Representation>
40
+ </AdaptationSet>`);
41
+ const result = discoverDashTextTracks(m, baseUrl);
42
+ expect(result.length).toBe(1);
43
+ expect(result[0].language).toBe('es');
44
+ });
45
+ it('classifies kind=captions when role=caption is set', () => {
46
+ const m = manifest(`
47
+ <AdaptationSet contentType="text" lang="en" mimeType="text/vtt">
48
+ <Role schemeIdUri="urn:mpeg:dash:role:2011" value="caption"/>
49
+ <Representation id="en-cap" bandwidth="100">
50
+ <BaseURL>cc.vtt</BaseURL>
51
+ </Representation>
52
+ </AdaptationSet>`);
53
+ const result = discoverDashTextTracks(m, baseUrl);
54
+ expect(result[0].kind).toBe('captions');
55
+ });
56
+ it('marks default when role=main is set', () => {
57
+ const m = manifest(`
58
+ <AdaptationSet contentType="text" lang="en" mimeType="text/vtt">
59
+ <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
60
+ <Representation id="r" bandwidth="100">
61
+ <BaseURL>main.vtt</BaseURL>
62
+ </Representation>
63
+ </AdaptationSet>`);
64
+ const result = discoverDashTextTracks(m, baseUrl);
65
+ expect(result[0].default).toBeTrue();
66
+ });
67
+ it('marks forced when role=forced_subtitle is set', () => {
68
+ const m = manifest(`
69
+ <AdaptationSet contentType="text" lang="en" mimeType="text/vtt">
70
+ <Role schemeIdUri="urn:mpeg:dash:role:2011" value="forced_subtitle"/>
71
+ <Representation id="r" bandwidth="100">
72
+ <BaseURL>f.vtt</BaseURL>
73
+ </Representation>
74
+ </AdaptationSet>`);
75
+ const result = discoverDashTextTracks(m, baseUrl);
76
+ expect(result[0].forced).toBeTrue();
77
+ expect(result[0].characteristics).toEqual(['forced_subtitle']);
78
+ });
79
+ it('surfaces role and accessibility values as characteristics', () => {
80
+ const m = manifest(`
81
+ <AdaptationSet contentType="text" lang="en" mimeType="text/vtt">
82
+ <Role schemeIdUri="urn:mpeg:dash:role:2011" value="caption"/>
83
+ <Accessibility schemeIdUri="urn:tva:metadata:cs:AudioPurposeCS:2007" value="2"/>
84
+ <Representation id="r" bandwidth="100">
85
+ <BaseURL>c.vtt</BaseURL>
86
+ </Representation>
87
+ </AdaptationSet>`);
88
+ const result = discoverDashTextTracks(m, baseUrl);
89
+ expect(result[0].forced).toBeFalse();
90
+ expect(result[0].characteristics).toEqual(['caption', '2']);
91
+ });
92
+ it('skips AdaptationSets that are not text', () => {
93
+ const m = manifest(`
94
+ <AdaptationSet contentType="audio" mimeType="audio/mp4">
95
+ <Representation id="a" bandwidth="48000"/>
96
+ </AdaptationSet>`);
97
+ expect(discoverDashTextTracks(m, baseUrl)).toEqual([]);
98
+ });
99
+ it('skips text AdaptationSets carrying segmented codecs (stpp/wvtt)', () => {
100
+ const m = manifest(`
101
+ <AdaptationSet contentType="text" mimeType="application/mp4" codecs="stpp">
102
+ <Representation id="r" bandwidth="100">
103
+ <BaseURL>stpp.mp4</BaseURL>
104
+ </Representation>
105
+ </AdaptationSet>`);
106
+ expect(discoverDashTextTracks(m, baseUrl)).toEqual([]);
107
+ });
108
+ it('falls back to representation id when no BaseURL is set on representation', () => {
109
+ const m = manifest(`
110
+ <AdaptationSet contentType="text" mimeType="text/vtt" lang="fr">
111
+ <BaseURL>subs/</BaseURL>
112
+ <Representation id="fr-sub" bandwidth="100"/>
113
+ </AdaptationSet>`);
114
+ const result = discoverDashTextTracks(m, baseUrl);
115
+ expect(result.length).toBe(1);
116
+ expect(result[0].uri).toBe('https://example.com/dash/subs/fr-sub.vtt');
117
+ });
118
+ it('uses manifest path when AdaptationSet has no BaseURL', () => {
119
+ const noTrailingSlashBase = 'https://example.com/manifest.mpd';
120
+ const m = manifest(`
121
+ <AdaptationSet contentType="text" mimeType="text/vtt" lang="fr">
122
+ <Representation id="r" bandwidth="100"/>
123
+ </AdaptationSet>`);
124
+ // Without any BaseURL, the manifest URL is used as the base; since it
125
+ // doesn't end with a slash, the discoverer falls back to that path
126
+ // verbatim, which is rarely useful but should not throw.
127
+ expect(discoverDashTextTracks(m, noTrailingSlashBase)[0].uri).toBe(noTrailingSlashBase);
128
+ });
129
+ it('respects nested BaseURL chain', () => {
130
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>
131
+ <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" mediaPresentationDuration="PT60S" minBufferTime="PT2S">
132
+ <BaseURL>https://cdn.example.com/v1/</BaseURL>
133
+ <Period>
134
+ <BaseURL>p0/</BaseURL>
135
+ <AdaptationSet contentType="text" mimeType="text/vtt" lang="ja">
136
+ <BaseURL>texts/</BaseURL>
137
+ <Representation id="ja" bandwidth="100">
138
+ <BaseURL>ja.vtt</BaseURL>
139
+ </Representation>
140
+ </AdaptationSet>
141
+ </Period>
142
+ </MPD>`;
143
+ const result = discoverDashTextTracks(parseDashManifest(xml), baseUrl);
144
+ expect(result[0].uri).toBe('https://cdn.example.com/v1/p0/texts/ja.vtt');
145
+ });
146
+ it('returns multiple tracks across periods', () => {
147
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>
148
+ <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" mediaPresentationDuration="PT120S" minBufferTime="PT2S">
149
+ <Period>
150
+ <AdaptationSet contentType="text" mimeType="text/vtt" lang="en">
151
+ <Representation id="en" bandwidth="100">
152
+ <BaseURL>en.vtt</BaseURL>
153
+ </Representation>
154
+ </AdaptationSet>
155
+ </Period>
156
+ <Period start="PT60S">
157
+ <AdaptationSet contentType="text" mimeType="text/vtt" lang="de">
158
+ <Representation id="de" bandwidth="100">
159
+ <BaseURL>de.vtt</BaseURL>
160
+ </Representation>
161
+ </AdaptationSet>
162
+ </Period>
163
+ </MPD>`;
164
+ const result = discoverDashTextTracks(parseDashManifest(xml), baseUrl);
165
+ expect(result.length).toBe(2);
166
+ });
167
+ it('falls back to representation id as label when language is absent', () => {
168
+ const m = manifest(`
169
+ <AdaptationSet contentType="text" mimeType="text/vtt">
170
+ <Representation id="my-id" bandwidth="100">
171
+ <BaseURL>x.vtt</BaseURL>
172
+ </Representation>
173
+ </AdaptationSet>`);
174
+ const result = discoverDashTextTracks(m, baseUrl);
175
+ expect(result[0].language).toBeNull();
176
+ expect(result[0].label).toBe('my-id');
177
+ });
178
+ it('handles a Period with no AdaptationSet', () => {
179
+ const xml = `<?xml version="1.0" encoding="UTF-8"?>
180
+ <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" mediaPresentationDuration="PT60S" minBufferTime="PT2S">
181
+ <Period/>
182
+ </MPD>`;
183
+ expect(discoverDashTextTracks(parseDashManifest(xml), baseUrl)).toEqual([]);
184
+ });
185
+ it('handles a text AdaptationSet with no Representation', () => {
186
+ const m = manifest(`
187
+ <AdaptationSet contentType="text" mimeType="text/vtt"/>`);
188
+ expect(discoverDashTextTracks(m, baseUrl)).toEqual([]);
189
+ });
190
+ it('treats missing mimeType as sidecar-eligible', () => {
191
+ const m = manifest(`
192
+ <AdaptationSet contentType="text" lang="en">
193
+ <Representation id="r" bandwidth="100">
194
+ <BaseURL>r.vtt</BaseURL>
195
+ </Representation>
196
+ </AdaptationSet>`);
197
+ expect(discoverDashTextTracks(m, baseUrl).length).toBe(1);
198
+ });
199
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=discoverHlsTextTracks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoverHlsTextTracks.test.d.ts","sourceRoot":"","sources":["../../../../../test/unit/text/discoverHlsTextTracks.test.ts"],"names":[],"mappings":""}