@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.
- package/dist/index.cjs +11 -2
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +15 -4
- package/dist/index.js.map +3 -3
- package/dist/test/integ.es5.js +43 -43
- package/dist/test/integ.js +70 -2
- package/dist/test/integ.js.map +2 -2
- package/dist/types/current/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/current/ad/AdBreakInfo.d.ts.map +1 -0
- package/dist/types/current/ad/AdBreakInfo.js +5 -0
- package/dist/types/current/ad/AdController.d.ts +229 -0
- package/dist/types/current/ad/AdController.d.ts.map +1 -0
- package/dist/types/current/ad/AdController.js +19 -0
- package/dist/types/current/ad/AdControllerImpl.d.ts +146 -0
- package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -0
- package/dist/types/current/ad/AdControllerImpl.js +705 -0
- package/dist/types/current/ad/AdError.d.ts +6 -0
- package/dist/types/current/ad/AdError.d.ts.map +1 -0
- package/dist/types/current/ad/AdError.js +14 -0
- package/dist/types/current/ad/AdsProvider.d.ts +28 -0
- package/dist/types/current/ad/AdsProvider.d.ts.map +1 -0
- package/dist/types/current/ad/AdsProvider.js +5 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts.map +1 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.js +26 -0
- package/dist/types/current/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/current/ad/discoverHlsInterstitials.d.ts.map +1 -0
- package/dist/types/current/ad/discoverHlsInterstitials.js +246 -0
- package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.js +11 -1
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/current/streaming/AudioOptions.d.ts +39 -0
- package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -0
- package/dist/types/current/streaming/AudioOptions.js +15 -0
- package/dist/types/current/streaming/LoadMetric.d.ts +58 -0
- package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -0
- package/dist/types/current/streaming/LoadMetric.js +5 -0
- package/dist/types/current/streaming/ManifestControllerImpl.d.ts +43 -0
- package/dist/types/current/streaming/ManifestControllerImpl.d.ts.map +1 -0
- package/dist/types/current/streaming/ManifestControllerImpl.js +104 -0
- package/dist/types/current/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/current/streaming/buffering/codecDenylist.d.ts.map +1 -0
- package/dist/types/current/streaming/buffering/codecDenylist.js +62 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts.map +1 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.js +43 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts.map +1 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.js +75 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.d.ts.map +1 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.js +231 -0
- package/dist/types/current/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/current/text/SidecarTextTrackController.d.ts.map +1 -0
- package/dist/types/current/text/SidecarTextTrackController.js +250 -0
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -0
- package/dist/types/current/text/SidecarTextTrackLoader.js +150 -0
- package/dist/types/current/text/TextTrack.d.ts +179 -0
- package/dist/types/current/text/TextTrack.d.ts.map +1 -0
- package/dist/types/current/text/TextTrack.js +29 -0
- package/dist/types/current/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/current/text/TextTrackRenderer.d.ts.map +1 -0
- package/dist/types/current/text/TextTrackRenderer.js +5 -0
- package/dist/types/current/text/VttCueStyle.d.ts +41 -0
- package/dist/types/current/text/VttCueStyle.d.ts.map +1 -0
- package/dist/types/current/text/VttCueStyle.js +45 -0
- package/dist/types/current/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/current/text/discoverDashTextTracks.d.ts.map +1 -0
- package/dist/types/current/text/discoverDashTextTracks.js +109 -0
- package/dist/types/current/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/current/text/discoverHlsTextTracks.d.ts.map +1 -0
- package/dist/types/current/text/discoverHlsTextTracks.js +49 -0
- package/dist/types/current/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/current/text/mediaTextTrackProvider.d.ts.map +1 -0
- package/dist/types/current/text/mediaTextTrackProvider.js +42 -0
- package/dist/types/current/text/parseWebVtt.d.ts +60 -0
- package/dist/types/current/text/parseWebVtt.d.ts.map +1 -0
- package/dist/types/current/text/parseWebVtt.js +248 -0
- package/dist/types/current/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/current/text/pickPreferredTextTrack.d.ts.map +1 -0
- package/dist/types/current/text/pickPreferredTextTrack.js +71 -0
- package/dist/types/current/track/SeekRange.d.ts +9 -0
- package/dist/types/current/track/SeekRange.d.ts.map +1 -0
- package/dist/types/current/track/SeekRange.js +5 -0
- package/dist/types/current/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/current/track/hls/HlsManifestData.d.ts.map +1 -0
- package/dist/types/current/track/hls/HlsManifestData.js +5 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.d.ts.map +1 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.js +9 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.d.ts.map +1 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.js +55 -0
- package/dist/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/types/current/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/current/util/media/codecOverrides.d.ts.map +1 -0
- package/dist/types/current/util/media/codecOverrides.js +37 -0
- package/dist/types/current/util/media/codecSupport.d.ts +6 -0
- package/dist/types/current/util/media/codecSupport.d.ts.map +1 -0
- package/dist/types/current/util/media/codecSupport.js +17 -0
- package/dist/types/current/util/media/mimeType.d.ts +8 -0
- package/dist/types/current/util/media/mimeType.d.ts.map +1 -0
- package/dist/types/current/util/media/mimeType.js +13 -0
- package/dist/types/ts3.7/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts3.7/ad/AdController.d.ts +243 -0
- package/dist/types/ts3.7/ad/AdControllerImpl.d.ts +146 -0
- package/dist/types/ts3.7/ad/AdError.d.ts +6 -0
- package/dist/types/ts3.7/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts3.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts3.7/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts3.7/streaming/AudioOptions.d.ts +39 -0
- package/dist/types/ts3.7/streaming/LoadMetric.d.ts +58 -0
- package/dist/types/ts3.7/streaming/ManifestControllerImpl.d.ts +40 -0
- package/dist/types/ts3.7/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts3.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts3.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts3.7/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts3.7/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/ts3.7/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts3.7/text/TextTrack.d.ts +183 -0
- package/dist/types/ts3.7/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts3.7/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts3.7/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts3.7/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts3.7/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts3.7/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts3.7/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts3.7/track/SeekRange.d.ts +9 -0
- package/dist/types/ts3.7/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts3.7/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts3.7/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts3.7/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts3.7/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts3.7/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts4.1/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts4.1/ad/AdController.d.ts +243 -0
- package/dist/types/ts4.1/ad/AdControllerImpl.d.ts +146 -0
- package/dist/types/ts4.1/ad/AdError.d.ts +6 -0
- package/dist/types/ts4.1/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts4.1/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts4.1/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.1/streaming/AudioOptions.d.ts +39 -0
- package/dist/types/ts4.1/streaming/LoadMetric.d.ts +58 -0
- package/dist/types/ts4.1/streaming/ManifestControllerImpl.d.ts +40 -0
- package/dist/types/ts4.1/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts4.1/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts4.1/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts4.1/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts4.1/text/SidecarTextTrackController.d.ts +104 -0
- package/dist/types/ts4.1/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts4.1/text/TextTrack.d.ts +183 -0
- package/dist/types/ts4.1/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts4.1/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts4.1/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts4.1/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts4.1/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts4.1/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts4.1/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts4.1/track/SeekRange.d.ts +9 -0
- package/dist/types/ts4.1/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts4.1/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts4.1/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts4.1/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts4.1/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts4.1/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts4.7/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts4.7/ad/AdController.d.ts +243 -0
- package/dist/types/ts4.7/ad/AdControllerImpl.d.ts +146 -0
- package/dist/types/ts4.7/ad/AdError.d.ts +6 -0
- package/dist/types/ts4.7/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts4.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts4.7/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.7/streaming/AudioOptions.d.ts +39 -0
- package/dist/types/ts4.7/streaming/LoadMetric.d.ts +58 -0
- package/dist/types/ts4.7/streaming/ManifestControllerImpl.d.ts +43 -0
- package/dist/types/ts4.7/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts4.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts4.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts4.7/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts4.7/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/ts4.7/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts4.7/text/TextTrack.d.ts +183 -0
- package/dist/types/ts4.7/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts4.7/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts4.7/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts4.7/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts4.7/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts4.7/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts4.7/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts4.7/track/SeekRange.d.ts +9 -0
- package/dist/types/ts4.7/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts4.7/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts4.7/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts4.7/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts4.7/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts4.7/util/media/mimeType.d.ts +8 -0
- package/dist/unit/types/current/ad/AdController.test.d.ts +2 -0
- package/dist/unit/types/current/ad/AdController.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/AdController.test.js +10 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts +2 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.js +1456 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts +2 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.js +56 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts +2 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.js +756 -0
- package/dist/unit/types/current/drm/DrmControllerImpl.test.js +66 -1
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.js +197 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.js +56 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.js +77 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.js +99 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts +2 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.js +231 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts +2 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.js +686 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts +2 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.js +365 -0
- package/dist/unit/types/current/text/VttCueStyle.test.d.ts +2 -0
- package/dist/unit/types/current/text/VttCueStyle.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/VttCueStyle.test.js +76 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.js +199 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.js +177 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts +2 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.js +86 -0
- package/dist/unit/types/current/text/parseWebVtt.test.d.ts +2 -0
- package/dist/unit/types/current/text/parseWebVtt.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/parseWebVtt.test.js +393 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts +2 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.js +78 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts +2 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts.map +1 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.js +165 -0
- package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/unit/types/current/util/media/codecOverrides.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/codecOverrides.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/codecOverrides.test.js +42 -0
- package/dist/unit/types/current/util/media/codecSupport.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/codecSupport.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/codecSupport.test.js +26 -0
- package/dist/unit/types/current/util/media/mimeType.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/mimeType.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/mimeType.test.js +22 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts +2 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts.map +1 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.js +142 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.js +188 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts.map +1 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.js +26 -0
- package/dist/vinylTestUtil/types/current/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts.map +1 -0
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.js +14 -0
- package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts3.7/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts4.1/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts4.7/mock/text/MockTextTrackController.d.ts +10 -0
- package/package.json +10 -11
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ErrorLevel, ReportableError } from '@amazon/vinyl-util';
|
|
2
|
+
export declare class AdError extends ReportableError {
|
|
3
|
+
get [Symbol.toStringTag](): string;
|
|
4
|
+
constructor(message: string, origin?: string, level?: ErrorLevel);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=AdError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdError.d.ts","sourceRoot":"","sources":["../../../../src/ad/AdError.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAE7E,qBAAa,OAAQ,SAAQ,eAAe;IACxC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;gBAGG,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAA0B,EAClC,KAAK,GAAE,UAA6B;CAK3C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { ErrorLevel, ErrorOrigin, ReportableError } from '@amazon/vinyl-util';
|
|
6
|
+
export class AdError extends ReportableError {
|
|
7
|
+
get [Symbol.toStringTag]() {
|
|
8
|
+
return 'AdError';
|
|
9
|
+
}
|
|
10
|
+
constructor(message, origin = ErrorOrigin.MEDIA, level = ErrorLevel.FATAL) {
|
|
11
|
+
super(message, origin, level);
|
|
12
|
+
Object.setPrototypeOf(this, AdError.prototype);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AnyRecord, ReadonlyEventHost } from '@amazon/vinyl-util';
|
|
2
|
+
import type { TrackAds } from './AdBreakInfo';
|
|
3
|
+
/**
|
|
4
|
+
* Events dispatched by an {@link AdsProvider}.
|
|
5
|
+
*/
|
|
6
|
+
export interface AdsProviderEventMap {
|
|
7
|
+
/**
|
|
8
|
+
* The set of ads has changed; consumers should re-read via
|
|
9
|
+
* {@link AdsProvider.getAds}.
|
|
10
|
+
*/
|
|
11
|
+
readonly adsChange: AnyRecord;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The minimal surface an {@link AdController} needs to source its ad breaks:
|
|
15
|
+
* a resolver for the current break list, plus an `adsChange` event to signal
|
|
16
|
+
* when that list changes. A {@link ReadonlyTrack} satisfies this directly, so
|
|
17
|
+
* the current playing track can be passed as-is; applications may also
|
|
18
|
+
* implement it to supply ads out of band (e.g. from an external ad server).
|
|
19
|
+
*/
|
|
20
|
+
export interface AdsProvider extends ReadonlyEventHost<AdsProviderEventMap> {
|
|
21
|
+
/**
|
|
22
|
+
* Resolves to the provider's current ad breaks. The result may change over
|
|
23
|
+
* the provider's lifetime; each `adsChange` event indicates that a
|
|
24
|
+
* subsequent call may return different breaks.
|
|
25
|
+
*/
|
|
26
|
+
getAds(): Promise<TrackAds>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=AdsProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdsProvider.d.ts","sourceRoot":"","sources":["../../../../src/ad/AdsProvider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAY,SAAQ,iBAAiB,CAAC,mBAAmB,CAAC;IACvE;;;;OAIG;IACH,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC9B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AdInfo } from './AdBreakInfo';
|
|
2
|
+
import type { VinylTrackLoadOptions } from '../track/createVinylTrackFactories';
|
|
3
|
+
import { ReportableError } from '@amazon/vinyl-util';
|
|
4
|
+
export declare function defaultAdLoadOptionsResolver(adInfo: AdInfo): Promise<VinylTrackLoadOptions>;
|
|
5
|
+
/**
|
|
6
|
+
* An error indicating that a method was called with illegal arguments.
|
|
7
|
+
*/
|
|
8
|
+
export declare class UnresolvableAdError extends ReportableError {
|
|
9
|
+
get [Symbol.toStringTag](): string;
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=defaultAdLoadOptionsResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultAdLoadOptionsResolver.d.ts","sourceRoot":"","sources":["../../../../src/ad/defaultAdLoadOptionsResolver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC/E,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEjE,wBAAsB,4BAA4B,CAC9C,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CAShC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACpD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;gBAEW,OAAO,EAAE,MAAM;CAI9B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { createTrackLoadOptionsFromUrl } from '../track/inferLoadOptionsFromUri';
|
|
6
|
+
import { ErrorOrigin, ReportableError } from '@amazon/vinyl-util';
|
|
7
|
+
export async function defaultAdLoadOptionsResolver(adInfo) {
|
|
8
|
+
if (!adInfo.uri)
|
|
9
|
+
throw new UnresolvableAdError('Ad with no URI cannot be played');
|
|
10
|
+
const loadOptions = await createTrackLoadOptionsFromUrl(adInfo.uri);
|
|
11
|
+
if (!loadOptions)
|
|
12
|
+
throw new UnresolvableAdError(`could not infer ad track type from uri ${adInfo.uri}`);
|
|
13
|
+
return loadOptions;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* An error indicating that a method was called with illegal arguments.
|
|
17
|
+
*/
|
|
18
|
+
export class UnresolvableAdError extends ReportableError {
|
|
19
|
+
get [Symbol.toStringTag]() {
|
|
20
|
+
return 'UnresolvableAdError';
|
|
21
|
+
}
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(message, ErrorOrigin.MEDIA);
|
|
24
|
+
Object.setPrototypeOf(this, UnresolvableAdError.prototype);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { HlsMediaPlaylist } from '@amazon/vinyl-hls-parser';
|
|
2
|
+
import type { AdBreakList } from './AdBreakInfo';
|
|
3
|
+
/**
|
|
4
|
+
* Discovers HLS Interstitial ad breaks from a parsed media playlist and maps
|
|
5
|
+
* them to the provider-agnostic {@link AdBreakInfo} model.
|
|
6
|
+
*
|
|
7
|
+
* HLS Interstitials (Apple's SGAI primitive) are carried as EXT-X-DATERANGE
|
|
8
|
+
* tags with `CLASS="com.apple.hls.interstitial"`. Each such range is anchored
|
|
9
|
+
* to a wall-clock `START-DATE`; this function converts that to a media-timeline
|
|
10
|
+
* start time by correlating it with the playlist's EXT-X-PROGRAM-DATE-TIME
|
|
11
|
+
* anchor. When the playlist carries no program date-time, and the range's
|
|
12
|
+
* start-date is not otherwise resolvable, the break is anchored to the start of
|
|
13
|
+
* the timeline (pre-roll) as a best effort.
|
|
14
|
+
*
|
|
15
|
+
* @param playlist The parsed HLS media playlist.
|
|
16
|
+
* @param baseUrl The URL of the media playlist, used to resolve relative
|
|
17
|
+
* `X-ASSET-URI` values.
|
|
18
|
+
* @param contentDuration The total content duration in seconds, if known, used
|
|
19
|
+
* to classify post-rolls. Pass null/undefined for live or unknown durations.
|
|
20
|
+
*/
|
|
21
|
+
export declare function discoverHlsInterstitials(playlist: HlsMediaPlaylist, baseUrl: string, contentDuration?: number | null): Promise<AdBreakList>;
|
|
22
|
+
//# sourceMappingURL=discoverHlsInterstitials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoverHlsInterstitials.d.ts","sourceRoot":"","sources":["../../../../src/ad/discoverHlsInterstitials.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAS9E,OAAO,KAAK,EAER,WAAW,EAMd,MAAM,eAAe,CAAA;AActB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAChC,OAAO,CAAC,WAAW,CAAC,CAmDtB"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { HLS_INTERSTITIAL_CLASS } from '@amazon/vinyl-hls-parser';
|
|
6
|
+
import { memoize, requestWithRetry, resolveUrl, } from '@amazon/vinyl-util';
|
|
7
|
+
/**
|
|
8
|
+
* How close to the start or end of content a break must be to be classified as
|
|
9
|
+
* a pre-roll or post-roll rather than a mid-roll, in seconds.
|
|
10
|
+
*/
|
|
11
|
+
const ROLL_EPSILON = 0.5;
|
|
12
|
+
/**
|
|
13
|
+
* Discovers HLS Interstitial ad breaks from a parsed media playlist and maps
|
|
14
|
+
* them to the provider-agnostic {@link AdBreakInfo} model.
|
|
15
|
+
*
|
|
16
|
+
* HLS Interstitials (Apple's SGAI primitive) are carried as EXT-X-DATERANGE
|
|
17
|
+
* tags with `CLASS="com.apple.hls.interstitial"`. Each such range is anchored
|
|
18
|
+
* to a wall-clock `START-DATE`; this function converts that to a media-timeline
|
|
19
|
+
* start time by correlating it with the playlist's EXT-X-PROGRAM-DATE-TIME
|
|
20
|
+
* anchor. When the playlist carries no program date-time, and the range's
|
|
21
|
+
* start-date is not otherwise resolvable, the break is anchored to the start of
|
|
22
|
+
* the timeline (pre-roll) as a best effort.
|
|
23
|
+
*
|
|
24
|
+
* @param playlist The parsed HLS media playlist.
|
|
25
|
+
* @param baseUrl The URL of the media playlist, used to resolve relative
|
|
26
|
+
* `X-ASSET-URI` values.
|
|
27
|
+
* @param contentDuration The total content duration in seconds, if known, used
|
|
28
|
+
* to classify post-rolls. Pass null/undefined for live or unknown durations.
|
|
29
|
+
*/
|
|
30
|
+
export function discoverHlsInterstitials(playlist, baseUrl, contentDuration) {
|
|
31
|
+
const anchor = findProgramDateTimeAnchor(playlist);
|
|
32
|
+
const breaks = [];
|
|
33
|
+
for (const range of playlist.dateRanges) {
|
|
34
|
+
if (range.classId !== HLS_INTERSTITIAL_CLASS)
|
|
35
|
+
continue;
|
|
36
|
+
const startTime = resolveStartTime(range, anchor);
|
|
37
|
+
if (startTime == null)
|
|
38
|
+
continue;
|
|
39
|
+
const playoutLimit = resolvePlayoutLimit(range);
|
|
40
|
+
let duration = resolveDuration(range);
|
|
41
|
+
if (playoutLimit != null && duration != null)
|
|
42
|
+
duration = Math.min(playoutLimit, duration);
|
|
43
|
+
const cues = parseCues(range);
|
|
44
|
+
const placement = classifyPlacement(startTime, contentDuration, cues);
|
|
45
|
+
const effectiveStartTime = placement === 'preroll' ? 0 : startTime;
|
|
46
|
+
const restrictStr = range.clientAttributes['X-RESTRICT'] ?? '';
|
|
47
|
+
const restrict = parseRestrict(restrictStr);
|
|
48
|
+
// The ads and skip window share one (memoized) asset-list resolution.
|
|
49
|
+
const resolveContent = memoize(() => resolveHlsAssetContent({
|
|
50
|
+
range,
|
|
51
|
+
startTime: effectiveStartTime,
|
|
52
|
+
duration,
|
|
53
|
+
baseUrl,
|
|
54
|
+
}));
|
|
55
|
+
breaks.push({
|
|
56
|
+
id: range.id,
|
|
57
|
+
startTime: effectiveStartTime,
|
|
58
|
+
duration,
|
|
59
|
+
placement,
|
|
60
|
+
once: cues.has('ONCE'),
|
|
61
|
+
resumeOffset: parseResumeOffset(range),
|
|
62
|
+
resolutionTimeOffset: parseResolutionTimeOffset(range),
|
|
63
|
+
playoutLimit,
|
|
64
|
+
ads: async () => (await resolveContent()).ads,
|
|
65
|
+
skipControl: async () => (await resolveContent()).skipControl,
|
|
66
|
+
restrict,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
breaks.sort((a, b) => a.startTime - b.startTime);
|
|
70
|
+
// Discovery is synchronous; ad assets resolve lazily via each break's
|
|
71
|
+
// `ads` ValueProvider. The Promise return keeps the provider-agnostic
|
|
72
|
+
// contract stable for future async discovery (e.g. DASH).
|
|
73
|
+
return Promise.resolve(breaks);
|
|
74
|
+
}
|
|
75
|
+
function findProgramDateTimeAnchor(playlist) {
|
|
76
|
+
let mediaTime = 0;
|
|
77
|
+
for (const seg of playlist.segments) {
|
|
78
|
+
if (seg.programDateTime) {
|
|
79
|
+
const epochMs = Date.parse(seg.programDateTime);
|
|
80
|
+
if (!Number.isNaN(epochMs)) {
|
|
81
|
+
return { epochMs, mediaTime };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
mediaTime += seg.duration;
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Converts a range's wall-clock START-DATE to a media-timeline start time.
|
|
90
|
+
* Returns 0 when there is no program-date-time anchor but the start-date is
|
|
91
|
+
* present (best-effort pre-roll), or null when the start-date is unusable.
|
|
92
|
+
*/
|
|
93
|
+
function resolveStartTime(range, anchor) {
|
|
94
|
+
if (!range.startDate) {
|
|
95
|
+
// END-ON-NEXT ranges may omit START-DATE; without an anchor we cannot
|
|
96
|
+
// place them, so skip.
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const epochMs = Date.parse(range.startDate);
|
|
100
|
+
if (Number.isNaN(epochMs))
|
|
101
|
+
return null;
|
|
102
|
+
if (!anchor) {
|
|
103
|
+
// No program-date-time to correlate against. Treat as a pre-roll.
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
const startTime = anchor.mediaTime + (epochMs - anchor.epochMs) / 1000;
|
|
107
|
+
// Clamp tiny negatives from clock rounding to 0.
|
|
108
|
+
return startTime < 0 && startTime > -ROLL_EPSILON ? 0 : startTime;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Determines a break's duration in seconds. Uses DURATION, else END-DATE span, else
|
|
112
|
+
* PLANNED-DURATION, else null.
|
|
113
|
+
*/
|
|
114
|
+
function resolveDuration(range) {
|
|
115
|
+
if (range.duration != null && !Number.isNaN(range.duration)) {
|
|
116
|
+
return range.duration;
|
|
117
|
+
}
|
|
118
|
+
if (range.endDate && range.startDate) {
|
|
119
|
+
const start = Date.parse(range.startDate);
|
|
120
|
+
const end = Date.parse(range.endDate);
|
|
121
|
+
if (!Number.isNaN(start) && !Number.isNaN(end) && end >= start) {
|
|
122
|
+
return (end - start) / 1000;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (range.plannedDuration != null && !Number.isNaN(range.plannedDuration)) {
|
|
126
|
+
return range.plannedDuration;
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
function resolvePlayoutLimit(range) {
|
|
131
|
+
const playoutLimit = parseFloat(range.clientAttributes['X-PLAYOUT-LIMIT'] ?? '');
|
|
132
|
+
if (Number.isFinite(playoutLimit) && playoutLimit > 0) {
|
|
133
|
+
return playoutLimit;
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Tokenizes the DATERANGE `CUE` attribute, an enumerated-string list of trigger
|
|
139
|
+
* identifiers (e.g. `"PRE,ONCE"`), into an uppercased, trimmed Set. Unknown
|
|
140
|
+
* tokens are preserved but ignored by callers.
|
|
141
|
+
*/
|
|
142
|
+
function parseCues(range) {
|
|
143
|
+
return new Set((range.clientAttributes['CUE'] ?? '')
|
|
144
|
+
.split(',')
|
|
145
|
+
.map((token) => token.trim().toUpperCase())
|
|
146
|
+
.filter(Boolean));
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Parses the signed `X-RESUME-OFFSET` (seconds). Returns null when the attribute
|
|
150
|
+
* is absent (so the controller substitutes the actual playout duration) — a
|
|
151
|
+
* present value of 0 is distinct from absent and is returned as 0.
|
|
152
|
+
*/
|
|
153
|
+
function parseResumeOffset(range) {
|
|
154
|
+
if (!('X-RESUME-OFFSET' in range.clientAttributes))
|
|
155
|
+
return null;
|
|
156
|
+
const value = parseFloat(range.clientAttributes['X-RESUME-OFFSET']);
|
|
157
|
+
return Number.isFinite(value) ? value : null;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parses the `X-RESOLUTION-TIME-OFFSET` (seconds) — how far ahead of the break
|
|
161
|
+
* the client should resolve/preload its assets. Returns null when absent or not
|
|
162
|
+
* a finite non-negative number, so the controller falls back to its configured
|
|
163
|
+
* `preloadAheadTime`.
|
|
164
|
+
*/
|
|
165
|
+
function parseResolutionTimeOffset(range) {
|
|
166
|
+
if (!('X-RESOLUTION-TIME-OFFSET' in range.clientAttributes))
|
|
167
|
+
return null;
|
|
168
|
+
const value = parseFloat(range.clientAttributes['X-RESOLUTION-TIME-OFFSET']);
|
|
169
|
+
return Number.isFinite(value) && value >= 0 ? value : null;
|
|
170
|
+
}
|
|
171
|
+
function classifyPlacement(startTime, contentDuration, cues) {
|
|
172
|
+
// PRE/POST trigger identifiers are authoritative over the proximity
|
|
173
|
+
// heuristic (they may fire outside the range's START-DATE/duration). PRE
|
|
174
|
+
// wins the illegal PRE+POST combination.
|
|
175
|
+
if (cues.has('PRE'))
|
|
176
|
+
return 'preroll';
|
|
177
|
+
if (cues.has('POST'))
|
|
178
|
+
return 'postroll';
|
|
179
|
+
if (startTime <= ROLL_EPSILON)
|
|
180
|
+
return 'preroll';
|
|
181
|
+
if (contentDuration != null &&
|
|
182
|
+
Number.isFinite(contentDuration) &&
|
|
183
|
+
startTime >= contentDuration - ROLL_EPSILON) {
|
|
184
|
+
return 'postroll';
|
|
185
|
+
}
|
|
186
|
+
return 'midroll';
|
|
187
|
+
}
|
|
188
|
+
function resolveHlsAssetContent({ range, startTime, duration, baseUrl, }) {
|
|
189
|
+
const assetUri = range.clientAttributes['X-ASSET-URI'];
|
|
190
|
+
if (assetUri) {
|
|
191
|
+
// A single inline asset carries no skip window.
|
|
192
|
+
return {
|
|
193
|
+
ads: [
|
|
194
|
+
{
|
|
195
|
+
id: `${range.id}-0`,
|
|
196
|
+
startTime,
|
|
197
|
+
duration,
|
|
198
|
+
uri: resolveUrl(assetUri, baseUrl),
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
skipControl: null,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
const assetListUrl = range.clientAttributes['X-ASSET-LIST'];
|
|
205
|
+
if (assetListUrl) {
|
|
206
|
+
return resolveHlsAssetList({
|
|
207
|
+
assetListUrl,
|
|
208
|
+
rangeId: range.id,
|
|
209
|
+
startTime,
|
|
210
|
+
baseUrl,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
return { ads: [], skipControl: null };
|
|
214
|
+
}
|
|
215
|
+
async function resolveHlsAssetList({ assetListUrl, rangeId, startTime, baseUrl, }) {
|
|
216
|
+
const url = resolveUrl(assetListUrl, baseUrl);
|
|
217
|
+
const response = await requestWithRetry(url);
|
|
218
|
+
const json = await response.json();
|
|
219
|
+
const assets = json.ASSETS ?? [];
|
|
220
|
+
const ads = assets.map((asset, i) => {
|
|
221
|
+
return {
|
|
222
|
+
id: `${rangeId}-${i}`,
|
|
223
|
+
startTime,
|
|
224
|
+
duration: asset.DURATION ?? null,
|
|
225
|
+
uri: resolveUrl(asset.URI, baseUrl),
|
|
226
|
+
};
|
|
227
|
+
});
|
|
228
|
+
return { ads, skipControl: parseSkipControl(json['SKIP-CONTROL']) };
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Maps an X-ASSET-LIST `SKIP-CONTROL` object to a {@link SkipControl}, or null
|
|
232
|
+
* when absent or missing a usable offset.
|
|
233
|
+
*/
|
|
234
|
+
function parseSkipControl(control) {
|
|
235
|
+
if (!control)
|
|
236
|
+
return null;
|
|
237
|
+
const offset = Number(control.OFFSET);
|
|
238
|
+
if (!Number.isFinite(offset) || offset < 0)
|
|
239
|
+
return null;
|
|
240
|
+
return { offset, duration: control.DURATION ?? null };
|
|
241
|
+
}
|
|
242
|
+
function parseRestrict(str) {
|
|
243
|
+
const skip = str.includes('SKIP');
|
|
244
|
+
const jump = str.includes('JUMP');
|
|
245
|
+
return { skip, jump };
|
|
246
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrmControllerImpl.d.ts","sourceRoot":"","sources":["../../../../src/drm/DrmControllerImpl.ts"],"names":[],"mappings":"AAKA,OAAO,EAUH,aAAa,
|
|
1
|
+
{"version":3,"file":"DrmControllerImpl.d.ts","sourceRoot":"","sources":["../../../../src/drm/DrmControllerImpl.ts"],"names":[],"mappings":"AAKA,OAAO,EAUH,aAAa,EAKb,KAAK,KAAK,EAKV,KAAK,aAAa,EAIrB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAEH,KAAK,UAAU,EAGlB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EACR,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACR,SAAS,EAET,0BAA0B,EAC1B,eAAe,EACf,qBAAqB,EAExB,MAAM,uBAAuB,CAAA;AAK9B,OAAO,KAAK,EAER,mBAAmB,EACtB,MAAM,mCAAmC,CAAA;AAU1C;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,KAAK,CAAA;AAGjC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;CACvC;AAED,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAA;CAC7C;AAED,qBAAa,iBACT,SAAQ,aAAa,CAAC,qBAAqB,CAC3C,YAAW,aAAa;IAqBpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAnBzB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAED,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAY;IACxC,OAAO,CAAC,OAAO,CAAY;IAE3B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAEvD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAGvB,IAAI,EAAE,qBAAqB,EAC5C,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAgBxC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI;IAWpD,OAAO,KAAK,eAAe,GAE1B;IAED,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,CAExB;IAED,cAAc,IAAI,OAAO;IAInB,WAAW,CACb,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IAS/B,OAAO,CAAC,sBAAsB,CA0B7B;IAED,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CA8BpC;IAED;;;OAGG;YACW,eAAe;IAqB7B;;;;OAIG;YACW,kBAAkB;IAiDhC,qBAAqB,CACjB,OAAO,EAAE,mBAAmB,GAAG,IAAI,EACnC,KAAK,CAAC,EAAE,aAAa,GACtB,IAAI;IASP,mBAAmB,CACf,OAAO,EAAE,mBAAmB,GAAG,IAAI,EACnC,KAAK,CAAC,EAAE,aAAa,GACtB,IAAI;IAQP;;;OAGG;YACW,yBAAyB;IA+BvC;;OAEG;YACW,YAAY;IAiC1B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAyDxC,OAAO,CAAC,wBAAwB;IAiBhC;;OAEG;YACW,gBAAgB;IAmD9B;;OAEG;YACW,cAAc;IA8C5B;;;OAGG;IACH,aAAa;IAKb,OAAO,CAAC,YAAY;IAUpB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAK3B;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB,SAAS,CAAC,eAAe;IAIzB,KAAK;IA2BL,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CASnC;CACJ"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { AbortError, base64ToByteArray, buffersEqual, bufferToByteArray, clone, compareBy, createDisposer, ErrorOrigin, EventHostImpl, isSilentError, logDebug, logVerbose, memoize, noop, normalizeHeadersInit, remove, resolveValueProvider, withTimeout, } from '@amazon/vinyl-util';
|
|
5
|
+
import { AbortError, base64ToByteArray, buffersEqual, bufferToByteArray, clone, compareBy, createDisposer, ErrorOrigin, EventHostImpl, getUserAgentInfo, isSilentError, logDebug, logVerbose, memoize, noop, normalizeHeadersInit, Os, remove, resolveValueProvider, withTimeout, } from '@amazon/vinyl-util';
|
|
6
6
|
import { instanceOf, object } from '@amazon/vinyl-validation';
|
|
7
7
|
import { DrmRobustness, } from './DrmOptions';
|
|
8
8
|
import { DrmError } from './error/DrmError';
|
|
@@ -243,6 +243,16 @@ export class DrmControllerImpl extends EventHostImpl {
|
|
|
243
243
|
}
|
|
244
244
|
else if (contentType === 'audio') {
|
|
245
245
|
config.audioCapabilities = [capability];
|
|
246
|
+
if (getUserAgentInfo().os?.name === Os.CHROME_OS) {
|
|
247
|
+
// Add videoCapabilities to get ChromeOS to enable verified media path
|
|
248
|
+
logDebug(this, 'Adding video avc1 drm capabilities for VMP');
|
|
249
|
+
config.videoCapabilities = [
|
|
250
|
+
{
|
|
251
|
+
contentType: `video/mp4; codecs="avc1.4d401f"`,
|
|
252
|
+
robustness: 'SW_SECURE_DECODE',
|
|
253
|
+
},
|
|
254
|
+
];
|
|
255
|
+
}
|
|
246
256
|
}
|
|
247
257
|
return {
|
|
248
258
|
keySystem,
|
|
@@ -41,7 +41,7 @@ export declare const defaultPlaybackControllerImplOptions: {
|
|
|
41
41
|
* Firefox can but if the playhead reaches the end of track before the media stream is closed, an 'ended' event
|
|
42
42
|
* will never fire.
|
|
43
43
|
*/
|
|
44
|
-
export declare function getMinSeekableBufferDefault():
|
|
44
|
+
export declare function getMinSeekableBufferDefault(): 5 | 2;
|
|
45
45
|
export interface PlaybackControllerImplDeps {
|
|
46
46
|
readonly media: HTMLMediaElement;
|
|
47
47
|
readonly loudnessNormalizationController: LoudnessNormalizationController;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ObjectSchema } from '@amazon/vinyl-validation';
|
|
2
|
+
/**
|
|
3
|
+
* Criteria used to pick which audio rendition to play.
|
|
4
|
+
*/
|
|
5
|
+
export interface AudioSelection {
|
|
6
|
+
/**
|
|
7
|
+
* Preferred language(s) for audio content, as RFC 5646 codes (e.g. `'en'`,
|
|
8
|
+
* `'ja'`, `'fr-CA'`). May be a single tag or an ordered list of tags —
|
|
9
|
+
* earlier entries are preferred, with the best relatedness match kept for
|
|
10
|
+
* each period (audio without a language tag is always kept). `null` (the
|
|
11
|
+
* default) is NOT "no preference": it orders by the platform's
|
|
12
|
+
* `navigator.languages`. To keep every language, this option is not the
|
|
13
|
+
* mechanism — omit language content or pass a tag matching all.
|
|
14
|
+
*/
|
|
15
|
+
readonly language?: string | readonly string[] | null;
|
|
16
|
+
/**
|
|
17
|
+
* Opt in to audio-description (a.k.a. described-video / DVS) audio: audio
|
|
18
|
+
* renditions carrying an accessibility "describes video" characteristic that
|
|
19
|
+
* narrate on-screen action. `false` (the default) keeps them out of the
|
|
20
|
+
* automatic default-audio selection — they are chosen only when this is set.
|
|
21
|
+
* When `true`, a description rendition is preferred where one exists for the
|
|
22
|
+
* selected language. Changing this reselects audio immediately.
|
|
23
|
+
*/
|
|
24
|
+
readonly descriptive?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Declarative audio configuration. Mirrors `VinylOptions.text`: the audio
|
|
28
|
+
* rendition is chosen from {@link selection}; changing it reselects audio
|
|
29
|
+
* immediately.
|
|
30
|
+
*/
|
|
31
|
+
export interface AudioOptions {
|
|
32
|
+
/**
|
|
33
|
+
* The audio selection criteria (language / descriptive).
|
|
34
|
+
*/
|
|
35
|
+
readonly selection?: AudioSelection;
|
|
36
|
+
}
|
|
37
|
+
export declare const defaultAudioOptions: AudioOptions;
|
|
38
|
+
export declare const audioOptionsValidator: ObjectSchema<AudioOptions>;
|
|
39
|
+
//# sourceMappingURL=AudioOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioOptions.d.ts","sourceRoot":"","sources":["../../../../src/streaming/AudioOptions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAErD;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAA;CACtC;AAED,eAAO,MAAM,mBAAmB,EAAE,YAEjC,CAAA;AAOD,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,YAAY,CAE3D,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { array, boolean, object, string } from '@amazon/vinyl-validation';
|
|
6
|
+
export const defaultAudioOptions = {
|
|
7
|
+
selection: { language: null, descriptive: false },
|
|
8
|
+
};
|
|
9
|
+
const audioSelectionValidator = object({
|
|
10
|
+
language: string().or(array(string()).readonly()).orNull().optional(),
|
|
11
|
+
descriptive: boolean().optional(),
|
|
12
|
+
});
|
|
13
|
+
export const audioOptionsValidator = object({
|
|
14
|
+
selection: audioSelectionValidator.optional(),
|
|
15
|
+
});
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Timestamp } from '@amazon/vinyl-util';
|
|
2
|
+
import type { TrackUri } from '../track/Track';
|
|
3
|
+
/**
|
|
4
|
+
* The stage of the track-load journey a {@link LoadSpanMeasurement} describes.
|
|
5
|
+
*
|
|
6
|
+
* - `manifest`: fetching and parsing the DASH/HLS manifest.
|
|
7
|
+
* - `license`: the DRM license request/response exchange.
|
|
8
|
+
* - `initSegment`: fetching the initialization segment.
|
|
9
|
+
* - `firstSegment`: fetching the first media segment.
|
|
10
|
+
*/
|
|
11
|
+
export type LoadSpanKind = 'manifest' | 'license' | 'initSegment' | 'firstSegment';
|
|
12
|
+
/**
|
|
13
|
+
* A timed span for one stage of a track load.
|
|
14
|
+
*
|
|
15
|
+
* Dispatched by the controller that owns the stage. Emitters attribute the span
|
|
16
|
+
* to the track it was measured for at the source (see {@link trackUri}); the
|
|
17
|
+
* player republishes it as a {@link LoadSpanEvent}. When the emitter cannot know
|
|
18
|
+
* the owning track, `trackUri` is omitted and the span is dropped rather than
|
|
19
|
+
* misattributed.
|
|
20
|
+
*/
|
|
21
|
+
export interface LoadSpanMeasurement {
|
|
22
|
+
readonly kind: LoadSpanKind;
|
|
23
|
+
/**
|
|
24
|
+
* When the stage began, as a unix millisecond timestamp.
|
|
25
|
+
*/
|
|
26
|
+
readonly startTime: Timestamp;
|
|
27
|
+
/**
|
|
28
|
+
* When the stage completed, as a unix millisecond timestamp.
|
|
29
|
+
*/
|
|
30
|
+
readonly endTime: Timestamp;
|
|
31
|
+
/**
|
|
32
|
+
* The track this span was measured for, stamped at the source by the
|
|
33
|
+
* emitter that knows which track initiated the load. Omitted only when the
|
|
34
|
+
* initiating track is not yet known (e.g. an encrypted event handled before
|
|
35
|
+
* buffering DRM info is set).
|
|
36
|
+
*/
|
|
37
|
+
readonly trackUri?: TrackUri;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A {@link LoadSpanMeasurement} attributed to the track it was measured for.
|
|
41
|
+
*
|
|
42
|
+
* Emitted on the player as the `loadSpan` event.
|
|
43
|
+
*/
|
|
44
|
+
export interface LoadSpanEvent extends LoadSpanMeasurement {
|
|
45
|
+
readonly trackUri: TrackUri;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Player-level load metric events.
|
|
49
|
+
*/
|
|
50
|
+
export interface LoadMetricEventMap {
|
|
51
|
+
/**
|
|
52
|
+
* A stage of a track load completed. Reports the time span of the stage
|
|
53
|
+
* together with the track it belongs to. Consumers measuring end-to-end
|
|
54
|
+
* load latency key on the first event per `kind` and `trackUri`.
|
|
55
|
+
*/
|
|
56
|
+
readonly loadSpan: LoadSpanEvent;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=LoadMetric.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadMetric.d.ts","sourceRoot":"","sources":["../../../../src/streaming/LoadMetric.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAClB,UAAU,GACV,SAAS,GACT,aAAa,GACb,cAAc,CAAA;AAEpB;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAE3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAE7B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;IAE3B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACtD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;CACnC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type MutableValue } from '@amazon/vinyl-observable';
|
|
2
|
+
import { type EventHandler, type SignalOptions, type Unsubscribe } from '@amazon/vinyl-util';
|
|
3
|
+
import type { ManifestController, ManifestControllerEventMap, ManifestProvider } from './ManifestController';
|
|
4
|
+
export interface ManifestControllerImplDeps<T> {
|
|
5
|
+
readonly manifestProvider: ManifestProvider<T>;
|
|
6
|
+
}
|
|
7
|
+
export declare class ManifestControllerImpl<T> implements ManifestController<Promise<T>> {
|
|
8
|
+
private readonly deps;
|
|
9
|
+
get [Symbol.toStringTag](): string;
|
|
10
|
+
get logPrefix(): string;
|
|
11
|
+
private readonly _data;
|
|
12
|
+
private _error;
|
|
13
|
+
private readonly abortSlot;
|
|
14
|
+
private readonly disposer;
|
|
15
|
+
private readonly events;
|
|
16
|
+
private manifestSpanArmed;
|
|
17
|
+
constructor(deps: ManifestControllerImplDeps<T>);
|
|
18
|
+
on<K extends keyof ManifestControllerEventMap>(type: K, handler: EventHandler<ManifestControllerEventMap[K]>, options?: SignalOptions): Unsubscribe;
|
|
19
|
+
hasAnyListeners(): boolean;
|
|
20
|
+
hasListeners(type: keyof ManifestControllerEventMap): boolean;
|
|
21
|
+
readonly __eventMapType: import("@amazon/vinyl-util").Covariant<ManifestControllerEventMap>;
|
|
22
|
+
/**
|
|
23
|
+
* The most recent error from the manifest provider, or null.
|
|
24
|
+
*/
|
|
25
|
+
get error(): Error | null;
|
|
26
|
+
refresh(): void;
|
|
27
|
+
private requestManifest;
|
|
28
|
+
/**
|
|
29
|
+
* Measures the initial manifest fetch as a load span, re-arming on failure
|
|
30
|
+
* so a recovered load is still measured.
|
|
31
|
+
*/
|
|
32
|
+
private measureLoadSpan;
|
|
33
|
+
reset(): void;
|
|
34
|
+
get value(): Promise<T>;
|
|
35
|
+
get changeId(): number;
|
|
36
|
+
getValue(): Promise<T>;
|
|
37
|
+
onData(callback: (value: Promise<T>, previous?: Promise<T>) => void): () => void;
|
|
38
|
+
map<U>(fn: (value: Promise<T>) => U): import("@amazon/vinyl-observable").ObservableValue<U>;
|
|
39
|
+
pick<K extends keyof NonNullable<Promise<T>>>(key: K): MutableValue<Promise<T>[K]>;
|
|
40
|
+
get disposed(): boolean;
|
|
41
|
+
dispose(): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ManifestControllerImpl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManifestControllerImpl.d.ts","sourceRoot":"","sources":["../../../../src/streaming/ManifestControllerImpl.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAGH,KAAK,YAAY,EAGjB,KAAK,aAAa,EAClB,KAAK,WAAW,EACnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EACR,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EACnB,MAAM,sBAAsB,CAAA;AAE7B,MAAM,WAAW,0BAA0B,CAAC,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;CACjD;AAED,qBAAa,sBAAsB,CAAC,CAAC,CAAE,YAAW,kBAAkB,CAChE,OAAO,CAAC,CAAC,CAAC,CACb;IAgBe,OAAO,CAAC,QAAQ,CAAC,IAAI;IAfjC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;IACzE,OAAO,CAAC,iBAAiB,CAAO;gBAEH,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAMhE,EAAE,CAAC,CAAC,SAAS,MAAM,0BAA0B,EACzC,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,EACpD,OAAO,CAAC,EAAE,aAAa,GACxB,WAAW;IAId,eAAe,IAAI,OAAO;IAI1B,YAAY,CAAC,IAAI,EAAE,MAAM,0BAA0B,GAAG,OAAO;IAI7D,QAAQ,CAAC,cAAc,qEAA6B;IAEpD;;OAEG;IACH,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,CAExB;IAED,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB,KAAK,IAAI,IAAI;IAOb,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAEtB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC;IAItB,MAAM,CACF,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAC7D,MAAM,IAAI;IAIb,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAInC,IAAI,CAAC,CAAC,SAAS,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAIpD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,OAAO,IAAI,IAAI;CAKlB"}
|