rx-player 3.26.2 → 3.27.0-dev.20220317

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 (500) hide show
  1. package/.github/workflows/perfs.yml +22 -0
  2. package/CHANGELOG.md +33 -1
  3. package/FILES.md +5 -4
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  6. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  7. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  8. package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
  13. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  14. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  15. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  16. package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
  17. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  18. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  19. package/dist/_esm5.processed/config.d.ts +166 -1080
  20. package/dist/_esm5.processed/config.js +17 -1119
  21. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  22. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  23. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  24. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
  27. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
  28. package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
  29. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  30. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  31. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  32. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
  33. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
  34. package/dist/_esm5.processed/core/api/option_utils.js +19 -6
  35. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  36. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  37. package/dist/_esm5.processed/core/api/public_api.js +72 -33
  38. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
  39. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
  40. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
  41. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  42. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
  43. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  44. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
  45. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  46. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
  47. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  48. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  49. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  50. package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
  51. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
  52. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  53. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
  55. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  56. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  57. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  58. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  60. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  61. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  62. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  63. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  65. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  66. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  67. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
  68. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  69. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  70. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  73. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  74. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
  75. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  76. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  77. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  78. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  79. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  81. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  82. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  83. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  84. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  85. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  86. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  87. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  88. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
  89. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  91. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  92. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  93. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  94. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  95. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  96. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  97. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
  98. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
  99. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
  100. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
  101. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  102. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
  103. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  104. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
  105. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  106. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
  107. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  108. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  109. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  110. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  111. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  112. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  113. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  114. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  115. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  116. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  117. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  118. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
  122. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  123. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  124. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  125. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  126. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  127. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  128. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  129. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  130. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  131. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
  132. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
  133. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  134. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
  135. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  136. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  137. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  138. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  139. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  140. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  141. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  142. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  143. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  144. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  145. package/dist/_esm5.processed/default_config.js +1145 -0
  146. package/dist/_esm5.processed/errors/request_error.js +3 -1
  147. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  148. package/dist/_esm5.processed/experimental/index.js +2 -0
  149. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  150. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  151. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
  152. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  153. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  154. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
  155. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
  156. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  157. package/dist/_esm5.processed/features/features_object.js +1 -1
  158. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  159. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  160. package/dist/_esm5.processed/features/list/eme.js +5 -5
  161. package/dist/_esm5.processed/features/types.d.ts +3 -3
  162. package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
  163. package/dist/_esm5.processed/manifest/adaptation.js +3 -1
  164. package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
  165. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  166. package/dist/_esm5.processed/manifest/period.d.ts +3 -3
  167. package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
  168. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
  169. package/dist/_esm5.processed/manifest/types.d.ts +3 -3
  170. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  171. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  172. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
  173. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  174. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
  175. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  176. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
  177. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
  178. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  179. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  180. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
  181. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
  182. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  183. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  184. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
  185. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
  186. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
  187. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  188. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
  189. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
  190. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
  191. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
  192. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
  194. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
  195. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
  196. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
  197. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  198. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  199. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  200. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  201. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  202. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  203. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
  204. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
  205. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  206. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
  207. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  208. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  209. package/dist/_esm5.processed/public_types.d.ts +2 -2
  210. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
  211. package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
  212. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  213. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  214. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  215. package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
  216. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
  217. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  218. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
  219. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
  220. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
  221. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  222. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
  223. package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
  224. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  225. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  226. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
  227. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  228. package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
  229. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
  230. package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
  231. package/dist/_esm5.processed/transports/types.d.ts +58 -30
  232. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  233. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
  234. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
  235. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  236. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
  237. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  238. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  239. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  240. package/dist/_esm5.processed/utils/reference.js +72 -24
  241. package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
  242. package/dist/_esm5.processed/utils/request/fetch.js +8 -6
  243. package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
  244. package/dist/_esm5.processed/utils/request/xhr.js +3 -2
  245. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
  246. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  247. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  248. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  249. package/dist/rx-player.js +5242 -3190
  250. package/dist/rx-player.min.js +1 -1
  251. package/dummy +1 -0
  252. package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
  253. package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
  254. package/package.json +33 -36
  255. package/scripts/build/templates/experimental/index.d.ts +16 -0
  256. package/scripts/build/templates/experimental/index.js +16 -0
  257. package/scripts/doc-generator/generate_header_html.js +6 -7
  258. package/scripts/doc-generator/generate_page_html.js +3 -4
  259. package/scripts/doc-generator/generate_page_list_html.js +4 -5
  260. package/scripts/doc-generator/generate_sidebar_html.js +4 -7
  261. package/scripts/doc-generator/utils.js +0 -11
  262. package/scripts/generate_demo_list.js +3 -3
  263. package/scripts/generate_documentation_list.js +3 -3
  264. package/scripts/launch_static_server.js +127 -67
  265. package/scripts/run_standalone_demo.js +1 -0
  266. package/scripts/start_demo_web_server.js +1 -0
  267. package/sonar-project.properties +1 -1
  268. package/src/README.md +6 -6
  269. package/src/compat/__tests__/fullscreen.test.ts +7 -7
  270. package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
  271. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  272. package/src/compat/browser_detection.ts +4 -2
  273. package/src/compat/eme/close_session.ts +90 -56
  274. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  275. package/src/compat/eme/custom_media_keys/index.ts +28 -41
  276. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
  277. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
  278. package/src/compat/eme/generate_key_request.ts +25 -33
  279. package/src/compat/eme/load_session.ts +29 -31
  280. package/src/compat/event_listeners.ts +2 -1
  281. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  282. package/src/config.ts +17 -1210
  283. package/src/core/README.md +1 -1
  284. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  285. package/src/core/abr/bandwidth_estimator.ts +4 -4
  286. package/src/core/abr/buffer_based_chooser.ts +85 -20
  287. package/src/core/abr/network_analyzer.ts +6 -7
  288. package/src/core/abr/pending_requests_store.ts +3 -5
  289. package/src/core/abr/representation_estimator.ts +6 -3
  290. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  291. package/src/core/api/__tests__/option_utils.test.ts +17 -17
  292. package/src/core/api/get_player_state.ts +1 -1
  293. package/src/core/api/index.ts +3 -0
  294. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  295. package/src/core/api/option_utils.ts +37 -20
  296. package/src/core/api/playback_observer.ts +12 -8
  297. package/src/core/api/public_api.ts +152 -112
  298. package/src/core/api/track_choice_manager.ts +10 -9
  299. package/src/core/decrypt/README.md +22 -0
  300. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  301. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  302. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  303. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  304. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  305. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
  306. package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
  307. package/src/core/decrypt/clear_on_stop.ts +48 -0
  308. package/src/core/decrypt/content_decryptor.ts +1158 -0
  309. package/src/core/decrypt/create_or_load_session.ts +130 -0
  310. package/src/core/decrypt/create_session.ts +175 -0
  311. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  312. package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
  313. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  314. package/src/core/decrypt/get_media_keys.ts +145 -0
  315. package/src/core/{eme → decrypt}/index.ts +11 -8
  316. package/src/core/decrypt/init_media_keys.ts +51 -0
  317. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  318. package/src/core/decrypt/set_server_certificate.ts +104 -0
  319. package/src/core/{eme → decrypt}/types.ts +129 -259
  320. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  321. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  322. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  323. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  324. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  325. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
  326. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  327. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  328. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  329. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  330. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  331. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  332. package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
  333. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  334. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  335. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  336. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  337. package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
  338. package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
  339. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  340. package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
  341. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  342. package/src/core/init/get_initial_time.ts +2 -1
  343. package/src/core/init/initialize_directfile.ts +19 -22
  344. package/src/core/init/initialize_media_source.ts +43 -106
  345. package/src/core/init/link_drm_and_content.ts +176 -0
  346. package/src/core/init/manifest_update_scheduler.ts +12 -10
  347. package/src/core/init/stall_avoider.ts +6 -5
  348. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  349. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  350. package/src/core/init/stream_events_emitter/types.ts +2 -2
  351. package/src/core/init/types.ts +1 -39
  352. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  353. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
  354. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
  355. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  356. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  357. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  358. package/src/core/stream/events_generators.ts +9 -4
  359. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  360. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  361. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  362. package/src/core/stream/period/period_stream.ts +5 -2
  363. package/src/core/stream/representation/force_garbage_collection.ts +5 -7
  364. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  365. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  366. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  367. package/src/core/stream/representation/push_media_segment.ts +3 -2
  368. package/src/core/stream/representation/representation_stream.ts +30 -7
  369. package/src/core/stream/types.ts +1 -1
  370. package/src/default_config.ts +1241 -0
  371. package/src/errors/request_error.ts +4 -1
  372. package/src/experimental/index.ts +5 -0
  373. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  374. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
  375. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  376. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
  377. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
  378. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  379. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
  380. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
  381. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  382. package/src/features/__tests__/initialize_features.test.ts +2 -2
  383. package/src/features/features_object.ts +1 -1
  384. package/src/features/initialize_features.ts +1 -1
  385. package/src/features/list/__tests__/eme.test.ts +5 -5
  386. package/src/features/list/eme.ts +5 -5
  387. package/src/features/types.ts +3 -10
  388. package/src/manifest/adaptation.ts +6 -4
  389. package/src/manifest/manifest.ts +16 -86
  390. package/src/manifest/period.ts +3 -3
  391. package/src/manifest/representation.ts +38 -5
  392. package/src/manifest/representation_index/types.ts +18 -18
  393. package/src/manifest/types.ts +3 -3
  394. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  395. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  396. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  397. package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
  398. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
  399. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
  400. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  401. package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
  402. package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
  403. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  404. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
  405. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  406. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  407. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
  408. package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
  409. package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
  410. package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
  411. package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
  412. package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
  413. package/src/parsers/manifest/dash/parsers_types.ts +3 -3
  414. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
  415. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
  416. package/src/parsers/manifest/smooth/create_parser.ts +24 -21
  417. package/src/parsers/manifest/smooth/representation_index.ts +14 -14
  418. package/src/parsers/manifest/types.ts +28 -28
  419. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
  420. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
  421. package/src/parsers/manifest/utils/index_helpers.ts +2 -2
  422. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  423. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  424. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  425. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  426. package/src/public_types.ts +5 -1
  427. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
  428. package/src/transports/dash/image_pipelines.ts +4 -1
  429. package/src/transports/dash/init_segment_loader.ts +1 -1
  430. package/src/transports/dash/manifest_parser.ts +1 -1
  431. package/src/transports/dash/segment_loader.ts +7 -7
  432. package/src/transports/dash/segment_parser.ts +8 -1
  433. package/src/transports/dash/text_loader.ts +2 -2
  434. package/src/transports/dash/text_parser.ts +11 -1
  435. package/src/transports/local/segment_loader.ts +4 -4
  436. package/src/transports/local/segment_parser.ts +4 -0
  437. package/src/transports/local/text_parser.ts +8 -0
  438. package/src/transports/metaplaylist/manifest_loader.ts +1 -1
  439. package/src/transports/metaplaylist/pipelines.ts +1 -1
  440. package/src/transports/smooth/pipelines.ts +29 -16
  441. package/src/transports/smooth/segment_loader.ts +8 -8
  442. package/src/transports/types.ts +59 -30
  443. package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
  444. package/src/transports/utils/generate_manifest_loader.ts +1 -1
  445. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  446. package/src/utils/__tests__/flat_map.test.ts +12 -7
  447. package/src/utils/cancellable_sleep.ts +1 -1
  448. package/src/utils/cast_to_observable.ts +1 -2
  449. package/src/utils/deep_merge.ts +46 -0
  450. package/src/utils/reference.ts +116 -23
  451. package/src/utils/request/fetch.ts +17 -15
  452. package/src/utils/request/xhr.ts +11 -8
  453. package/src/utils/rx-from_cancellable_promise.ts +8 -4
  454. package/src/utils/task_canceller.ts +6 -4
  455. package/tsconfig.json +1 -2
  456. package/tsconfig.modules.json +1 -2
  457. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  458. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  459. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  460. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  461. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  462. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  463. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  464. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  465. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  466. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  467. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
  468. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  469. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  470. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  471. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  472. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  473. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  474. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  475. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  476. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  477. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  478. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  479. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  480. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
  481. package/src/core/eme/README.md +0 -26
  482. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  483. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  484. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  485. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  486. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  487. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  488. package/src/core/eme/clear_eme_session.ts +0 -62
  489. package/src/core/eme/create_session.ts +0 -187
  490. package/src/core/eme/dispose_eme.ts +0 -25
  491. package/src/core/eme/dispose_media_keys.ts +0 -46
  492. package/src/core/eme/eme_manager.ts +0 -387
  493. package/src/core/eme/get_media_keys.ts +0 -141
  494. package/src/core/eme/get_session.ts +0 -135
  495. package/src/core/eme/init_media_keys.ts +0 -106
  496. package/src/core/eme/set_server_certificate.ts +0 -115
  497. package/src/core/eme/utils/close_session.ts +0 -113
  498. package/src/core/eme/utils/init_data_store.ts +0 -234
  499. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  500. package/src/core/init/create_eme_manager.ts +0 -95
@@ -373,7 +373,7 @@ export interface IManifestParserResult {
373
373
  * This property should only be set when a unique URL is sufficient to
374
374
  * retrieve the whole data.
375
375
  */
376
- url? : string;
376
+ url? : string | undefined;
377
377
  }
378
378
 
379
379
  /**
@@ -416,11 +416,11 @@ export interface ITextTrackSegmentData {
416
416
  * This is mostly needed for "sami" subtitles, to know which cues can / should
417
417
  * be parsed.
418
418
  */
419
- language? : string;
419
+ language? : string | undefined;
420
420
  /** start time from which the segment apply, in seconds. */
421
- start? : number;
421
+ start? : number | undefined;
422
422
  /** end time until which the segment apply, in seconds. */
423
- end? : number;
423
+ end? : number | undefined;
424
424
  }
425
425
 
426
426
  /** Format under which image data is decodable by the RxPlayer. */
@@ -487,21 +487,21 @@ interface IServerSyncInfos { serverTimestamp : number;
487
487
  clientTime : number; }
488
488
 
489
489
  export interface ITransportOptions {
490
- aggressiveMode? : boolean;
491
- checkMediaSegmentIntegrity? : boolean;
490
+ aggressiveMode? : boolean | undefined;
491
+ checkMediaSegmentIntegrity? : boolean | undefined;
492
492
  lowLatencyMode : boolean;
493
- manifestLoader?: ICustomManifestLoader;
494
- manifestUpdateUrl? : string;
495
- referenceDateTime? : number;
496
- representationFilter? : IRepresentationFilter;
497
- segmentLoader? : ICustomSegmentLoader;
498
- serverSyncInfos? : IServerSyncInfos;
493
+ manifestLoader?: ICustomManifestLoader | undefined;
494
+ manifestUpdateUrl? : string | undefined;
495
+ referenceDateTime? : number | undefined;
496
+ representationFilter? : IRepresentationFilter | undefined;
497
+ segmentLoader? : ICustomSegmentLoader | undefined;
498
+ serverSyncInfos? : IServerSyncInfos | undefined;
499
499
  /* eslint-disable import/no-deprecated */
500
- supplementaryImageTracks? : ISupplementaryImageTrack[];
501
- supplementaryTextTracks? : ISupplementaryTextTrack[];
500
+ supplementaryImageTracks? : ISupplementaryImageTrack[] | undefined;
501
+ supplementaryTextTracks? : ISupplementaryTextTrack[] | undefined;
502
502
  /* eslint-enable import/no-deprecated */
503
503
 
504
- __priv_patchLastSegmentInSidx? : boolean;
504
+ __priv_patchLastSegmentInSidx? : boolean | undefined;
505
505
  }
506
506
 
507
507
  export type ICustomSegmentLoader = (
@@ -521,7 +521,13 @@ export type ICustomSegmentLoader = (
521
521
  duration? : number | undefined; }) => void;
522
522
 
523
523
  reject : (err? : unknown) => void;
524
- fallback? : (() => void) | undefined; }
524
+ fallback : () => void;
525
+ progress : (
526
+ info : { duration : number;
527
+ size : number;
528
+ totalSize? : number | undefined; }
529
+ ) => void;
530
+ }
525
531
  ) =>
526
532
  // returns either the aborting callback or nothing
527
533
  (() => void)|void;
@@ -532,14 +538,15 @@ export type ICustomManifestLoader = (
532
538
 
533
539
  // second argument: callbacks
534
540
  callbacks : { resolve : (args : { data : ILoadedManifestFormat;
535
- sendingTime? : number;
536
- receivingTime? : number;
537
- size? : number;
538
- duration? : number; })
541
+ url? : string | undefined;
542
+ sendingTime? : number | undefined;
543
+ receivingTime? : number | undefined;
544
+ size? : number | undefined;
545
+ duration? : number | undefined; })
539
546
  => void;
540
547
 
541
548
  reject : (err? : Error) => void;
542
- fallback? : () => void; }
549
+ fallback : () => void; }
543
550
  ) =>
544
551
  // returns either the aborting callback or nothing
545
552
  (() => void)|void;
@@ -597,7 +604,7 @@ export interface ISegmentLoadingProgressInformation {
597
604
  /** Size of the data already downloaded, in bytes. */
598
605
  size : number;
599
606
  /** Size of whole data to download (data already-loaded included), in bytes. */
600
- totalSize? : number;
607
+ totalSize? : number | undefined;
601
608
  }
602
609
 
603
610
  /**
@@ -646,19 +653,19 @@ export interface IChunkCompleteInformation {
646
653
  * This property should only be set when a unique URL is sufficient to
647
654
  * retrieve the whole data.
648
655
  */
649
- url? : string;
656
+ url? : string | undefined;
650
657
  /**
651
658
  * Time at which the request began in terms of `performance.now`.
652
659
  * If fetching the corresponding data necessitated to perform multiple
653
660
  * requests, this time corresponds to the first request made.
654
661
  */
655
- sendingTime? : number;
662
+ sendingTime? : number | undefined;
656
663
  /**
657
664
  * Time at which the request ended in terms of `performance.now`.
658
665
  * If fetching the corresponding data necessitated to perform multiple
659
666
  * requests, this time corresponds to the last request to end.
660
667
  */
661
- receivedTime? : number;
668
+ receivedTime? : number | undefined;
662
669
  /** Size in bytes of the loaded data. `undefined` if we don't know. */
663
670
  size : number | undefined;
664
671
  }
@@ -702,7 +709,7 @@ export interface ISegmentParserParsedInitChunk<DataType> {
702
709
  * Timescale metadata found inside this initialization segment.
703
710
  * That timescale might be useful when parsing further merdia segments.
704
711
  */
705
- initTimescale? : number;
712
+ initTimescale? : number | undefined;
706
713
  /**
707
714
  * If set to `true`, some protection information has been found in this
708
715
  * initialization segment and lead the corresponding `Representation`
@@ -715,6 +722,17 @@ export interface ISegmentParserParsedInitChunk<DataType> {
715
722
  * protection initialization data to have been encountered.
716
723
  */
717
724
  protectionDataUpdate : boolean;
725
+ /**
726
+ * Size in bytes of `initializationData`.
727
+ * `undefined` if unknown.
728
+ *
729
+ * Note: In some cases, such as when `initializationData` is under a format
730
+ * whose size is difficult to estimate (e.g. a JavaScript object), the
731
+ * `initializationDataSize` may either be set to `undefined` or, if available,
732
+ * to a sensible estimate (e.g. when a JavaScript object wraps large binary
733
+ * data, `initializationDataSize` may refer to that binary data only).
734
+ */
735
+ initializationDataSize : number | undefined;
718
736
  }
719
737
 
720
738
  /**
@@ -733,6 +751,17 @@ export interface ISegmentParserParsedMediaChunk<DataType> {
733
751
  * `null` if unknown.
734
752
  */
735
753
  chunkInfos : IChunkTimeInfo | null;
754
+ /**
755
+ * Size in bytes of `chunkData`.
756
+ * `undefined` if unknown.
757
+ *
758
+ * Note: In some cases, such as when `chunkData` is under a format whose size
759
+ * is difficult to estimate (e.g. a JavaScript object), the `chunkSize` may
760
+ * either be set to `undefined` or, if available, to a sensible estimate (e.g.
761
+ * when a JavaScript object wraps large binary data, `chunkSize` may refer to
762
+ * that binary data only).
763
+ */
764
+ chunkSize : number | undefined;
736
765
  /**
737
766
  * time offset, in seconds, to add to the absolute timed data defined in
738
767
  * `chunkData` to obtain the "real" wanted effective time.
@@ -757,7 +786,7 @@ export interface ISegmentParserParsedMediaChunk<DataType> {
757
786
  * If set and not empty, then "events" have been encountered in this parsed
758
787
  * chunks.
759
788
  */
760
- inbandEvents? : IInbandEvent[];
789
+ inbandEvents? : IInbandEvent[] | undefined;
761
790
  /**
762
791
  * If set to `true`, then parsing this chunk revealed that the current
763
792
  * Manifest instance needs to be refreshed.
@@ -791,19 +820,19 @@ export interface IRequestedData<T> {
791
820
  * This property should only be set when a unique URL is sufficient to
792
821
  * retrieve the whole data.
793
822
  */
794
- url? : string;
823
+ url? : string | undefined;
795
824
  /**
796
825
  * Time at which the request began in terms of `performance.now`.
797
826
  * If fetching the corresponding data necessitated to perform multiple
798
827
  * requests, this time corresponds to the first request made.
799
828
  */
800
- sendingTime? : number;
829
+ sendingTime? : number | undefined;
801
830
  /**
802
831
  * Time at which the request ended in terms of `performance.now`.
803
832
  * If fetching the corresponding data necessitated to perform multiple
804
833
  * requests, this time corresponds to the last request to end.
805
834
  */
806
- receivedTime? : number;
835
+ receivedTime? : number | undefined;
807
836
  /** Size in bytes of the loaded data. `undefined` if we don't know. */
808
837
  size : number | undefined;
809
838
  }
@@ -14,8 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "pinkie";
18
17
  import { CustomLoaderError } from "../../errors";
18
+ import PPromise from "../../utils/promise";
19
19
  import {
20
20
  CancellationError,
21
21
  CancellationSignal,
@@ -51,11 +51,11 @@ export default function callCustomManifestLoader(
51
51
  * @param {Object} args
52
52
  */
53
53
  const resolve = (_args : { data : ILoadedManifestFormat;
54
- size? : number;
55
- duration? : number;
56
- url? : string;
57
- receivingTime? : number;
58
- sendingTime? : number; }) =>
54
+ size? : number | undefined;
55
+ duration? : number | undefined;
56
+ url? : string | undefined;
57
+ receivingTime? : number | undefined;
58
+ sendingTime? : number | undefined; }) =>
59
59
  {
60
60
  if (hasFinished || cancelSignal.isCancelled) {
61
61
  return;
@@ -66,7 +66,7 @@ function generateRegularManifestLoader(
66
66
  * @returns {Function}
67
67
  */
68
68
  export default function generateManifestLoader(
69
- { customManifestLoader } : { customManifestLoader?: ICustomManifestLoader },
69
+ { customManifestLoader } : { customManifestLoader?: ICustomManifestLoader | undefined },
70
70
  preferredType: "arraybuffer" | "text" | "document"
71
71
  ) : (
72
72
  url : string | undefined,
@@ -0,0 +1,48 @@
1
+ import deepMerge from "../deep_merge";
2
+
3
+
4
+ describe("utils - deep_merge", () => {
5
+ it("should return the first argument if no other arguments", () => {
6
+ const obj1 = { a: 1 };
7
+ expect(deepMerge(obj1)).toStrictEqual(obj1);
8
+ });
9
+
10
+ it("should concat if no common key is found", () => {
11
+ const obj1 = { a: 1 };
12
+ const obj2 = { b: 2 };
13
+ const result = { a: 1, b: 2 };
14
+ expect(deepMerge(obj1, obj2)).toStrictEqual(result);
15
+ });
16
+
17
+ it("should override the 1st object with the second", () => {
18
+ const obj1 = { a: 1 };
19
+ const obj2 = { a: 2 };
20
+ const result = { a: 2 };
21
+ expect(deepMerge(obj1, obj2)).toStrictEqual(result);
22
+ });
23
+
24
+ it("should return a deeply merged object", () => {
25
+ const obj1 = { a: { b: 1 } };
26
+ const obj2 = { a: { c: 2 } };
27
+ const result = { a: { b: 1, c: 2 } };
28
+ expect(deepMerge(obj1, obj2)).toStrictEqual(result);
29
+ });
30
+
31
+ it("should be able to merge multiple objects", () => {
32
+ const obj1 = { a: { b: 1 }, d: { e: 1 } };
33
+ const obj2 = { a: { c: 2 } };
34
+ const obj3 = { a: { f: 3 }, d: { g: 2 } };
35
+ const result = {
36
+ a: {
37
+ b: 1,
38
+ c: 2,
39
+ f: 3,
40
+ },
41
+ d: {
42
+ e: 1,
43
+ g: 2,
44
+ },
45
+ };
46
+ expect(deepMerge(obj1, obj2, obj3)).toStrictEqual(result);
47
+ });
48
+ });
@@ -19,12 +19,15 @@
19
19
 
20
20
  import flatMap from "../flat_map";
21
21
 
22
- const proto = Array.prototype as unknown as {
23
- flatMap?<U, This = undefined>(
22
+ interface IProtoWithFlatMap {
23
+ flatMap? : (<U, This = undefined>(
24
24
  callback: (this: This, value: unknown, index: number, array: unknown[]) => U | U[],
25
- thisArg?: This
26
- ): U[];
27
- };
25
+ thisArg?: This | undefined
26
+ ) => U[]) | undefined;
27
+ }
28
+
29
+
30
+ const proto = Array.prototype as unknown as IProtoWithFlatMap;
28
31
 
29
32
  /* eslint-disable @typescript-eslint/unbound-method */
30
33
  const initialFlatMap = proto.flatMap;
@@ -32,7 +35,7 @@ const initialFlatMap = proto.flatMap;
32
35
 
33
36
  describe("utils - starts-with", () => {
34
37
  beforeEach(() => {
35
- proto.flatMap = undefined;
38
+ delete proto.flatMap;
36
39
  });
37
40
 
38
41
  afterEach(() => {
@@ -49,7 +52,9 @@ describe("utils - starts-with", () => {
49
52
  if (typeof initialFlatMap === "function") {
50
53
  it("should call the original flatMap function if available", () => {
51
54
  proto.flatMap = initialFlatMap;
52
- const flatMapSpy = jest.spyOn(proto, "flatMap");
55
+ // TODO find what bother typescript here instead of adding "as any"
56
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
57
+ const flatMapSpy = jest.spyOn(proto as any, "flatMap");
53
58
  const func1 = (x : number) : number[] => [x, x + 1, x - 1];
54
59
  const func2 = (x : number) : string => String(x) + "a";
55
60
  expect(flatMap([1, 2, 3], func1))
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "pinkie";
17
+ import PPromise from "./promise";
18
18
  import {
19
19
  CancellationError,
20
20
  CancellationSignal,
@@ -14,13 +14,13 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import PPromise from "pinkie";
18
17
  import {
19
18
  from as observableFrom,
20
19
  Observable,
21
20
  of as observableOf,
22
21
  } from "rxjs";
23
22
  import isNullOrUndefined from "./is_null_or_undefined";
23
+ import PPromise from "./promise";
24
24
 
25
25
  /**
26
26
  * Try to cast the given value into an observable.
@@ -30,7 +30,6 @@ import isNullOrUndefined from "./is_null_or_undefined";
30
30
  */
31
31
  function castToObservable<T>(value : Observable<T> |
32
32
  Promise<T> |
33
- PPromise<T> |
34
33
  Exclude<T, Observable<T>>) : Observable<T> {
35
34
  if (value instanceof Observable) {
36
35
  return value;
@@ -0,0 +1,46 @@
1
+ import objectAssign from "./object_assign";
2
+
3
+ /**
4
+ * Check if an item is an object
5
+ * @param item
6
+ * @returns {boolean}
7
+ */
8
+ function isObject(item: unknown) : boolean {
9
+ return (item !== null
10
+ && item !== undefined
11
+ && !Array.isArray(item)
12
+ && typeof item === "object");
13
+ }
14
+
15
+ type IDeepPartial<T> = {
16
+ [P in keyof T]?: IDeepPartial<T[P]> ;
17
+ };
18
+
19
+ type ISourcesArgument<T> = Array<IDeepPartial<T>|unknown>;
20
+
21
+ /**
22
+ * Deeply merge nested objects
23
+ * @param target
24
+ * @param sources
25
+ * @returns output : merged object
26
+ */
27
+ export default function deepMerge<T>(target: T, ...sources: ISourcesArgument<T>): T {
28
+ if (sources.length === 0) {
29
+ return target;
30
+ }
31
+ const source = sources.shift() as IDeepPartial<T>;
32
+ if (isObject(target) && isObject(source)) {
33
+ for (const key in source) {
34
+ if (isObject(source[key])) {
35
+ if (target[key] === undefined) {
36
+ objectAssign(target, { [key]: {} });
37
+ }
38
+ const newTarget = target[key];
39
+ deepMerge(newTarget, source[key] as IDeepPartial<typeof newTarget>);
40
+ } else {
41
+ objectAssign(target, { [key]: source[key] });
42
+ }
43
+ }
44
+ }
45
+ return deepMerge(target, ...sources);
46
+ }
@@ -19,6 +19,7 @@ import {
19
19
  Subscriber,
20
20
  } from "rxjs";
21
21
  import log from "../log";
22
+ import { CancellationSignal } from "./task_canceller";
22
23
 
23
24
  /**
24
25
  * A value behind a shared reference, meaning that any update to its value from
@@ -62,6 +63,7 @@ export interface ISharedReference<T> {
62
63
 
63
64
  /** Update the value of this shared reference. */
64
65
  setValue(newVal : T) : void;
66
+ setValueIfChanged(newVal : T) : void;
65
67
 
66
68
  /**
67
69
  * Returns an Observable which synchronously emits the current value (unless
@@ -72,6 +74,25 @@ export interface ISharedReference<T> {
72
74
  */
73
75
  asObservable(skipCurrentValue? : boolean) : Observable<T>;
74
76
 
77
+ /**
78
+ * Allows to register a callback to be called each time the value inside the
79
+ * reference is updated.
80
+ * @param {Function} cb - Callback to be called each time the reference is
81
+ * updated. Takes the new value im argument.
82
+ * @param {Object} [options]
83
+ * @param {Object} [options.clearSignal] - Allows to provide a
84
+ * CancellationSignal which will unregister the callback when it emits.
85
+ * @param {boolean} [options.emitCurrentValue] - If `true`, the callback will
86
+ * also be immediately called with the current value.
87
+ */
88
+ onUpdate(
89
+ cb : (val : T) => void,
90
+ options? : {
91
+ clearSignal?: CancellationSignal;
92
+ emitCurrentValue?: boolean;
93
+ },
94
+ ) : void;
95
+
75
96
  /**
76
97
  * Indicate that no new values will be emitted.
77
98
  * Allows to automatically close all Observables generated from this shared
@@ -103,8 +124,23 @@ export interface ISharedReference<T> {
103
124
  * the code that some logic is not supposed to update the referenced value.
104
125
  */
105
126
  export interface IReadOnlySharedReference<T> {
127
+ /** Get the last value set on that reference. */
106
128
  getValue() : T;
129
+ /**
130
+ * Returns an Observable notifying this reference's value each time it is
131
+ * updated.
132
+ *
133
+ * Also emit its current value on subscription unless its argument is set to
134
+ * `true`.
135
+ */
107
136
  asObservable(skipCurrentValue? : boolean) : Observable<T>;
137
+ onUpdate(
138
+ cb : (val : T) => void,
139
+ options? : {
140
+ clearSignal?: CancellationSignal;
141
+ emitCurrentValue?: boolean;
142
+ },
143
+ ) : void;
108
144
  }
109
145
 
110
146
  /**
@@ -120,19 +156,23 @@ export function createSharedReference<T>(initialValue : T) : ISharedReference<T>
120
156
  let value = initialValue;
121
157
 
122
158
  /**
123
- * List of currently subscribed Observables which listen to the referenced
159
+ * List of currently subscribed listeners which listen to the referenced
124
160
  * value's updates.
125
161
  *
126
- * Contains two properties:
127
- * - `subscriber`: interface through which new value will be communicated.
128
- * - `hasBeenUnsubscribed`: becomes `true` when the Observable becomes
129
- * unsubscribed and thus when it is removed from the `subs` array.
162
+ * Contains three properties:
163
+ * - `trigger`: Function which will be called with the new reference's value
164
+ * once it changes
165
+ * - `complete`: Allows to clean-up the listener, will be called once the
166
+ * reference is finished.
167
+ * - `hasBeenCleared`: becomes `true` when the Observable becomes
168
+ * unsubscribed and thus when it is removed from the `cbs` array.
130
169
  * Adding this property allows to detect when a previously-added
131
170
  * Observable has since been unsubscribed e.g. as a side-effect during a
132
171
  * function call.
133
172
  */
134
- const subs : Array<{ subscriber : Subscriber<T>;
135
- hasBeenUnsubscribed : boolean; }> = [];
173
+ const cbs : Array<{ trigger : (a: T) => void;
174
+ complete : () => void;
175
+ hasBeenCleared : boolean; }> = [];
136
176
 
137
177
  let isFinished = false;
138
178
 
@@ -160,14 +200,14 @@ export function createSharedReference<T>(initialValue : T) : ISharedReference<T>
160
200
  }
161
201
  value = newVal;
162
202
 
163
- if (subs.length === 0) {
203
+ if (cbs.length === 0) {
164
204
  return;
165
205
  }
166
- const clonedSubs = subs.slice();
167
- for (const subObj of clonedSubs) {
206
+ const clonedCbs = cbs.slice();
207
+ for (const cbObj of clonedCbs) {
168
208
  try {
169
- if (!subObj.hasBeenUnsubscribed) {
170
- subObj.subscriber.next(newVal);
209
+ if (!cbObj.hasBeenCleared) {
210
+ cbObj.trigger(newVal);
171
211
  }
172
212
  } catch (_) {
173
213
  /* nothing */
@@ -175,6 +215,11 @@ export function createSharedReference<T>(initialValue : T) : ISharedReference<T>
175
215
  }
176
216
  },
177
217
 
218
+ setValueIfChanged(newVal : T) : void {
219
+ if (newVal !== value) {
220
+ this.setValue(newVal);
221
+ }
222
+ },
178
223
 
179
224
  /**
180
225
  * Returns an Observable which synchronously emits the current value (unless
@@ -192,24 +237,72 @@ export function createSharedReference<T>(initialValue : T) : ISharedReference<T>
192
237
  obs.complete();
193
238
  return undefined;
194
239
  }
195
- const subObj = { subscriber: obs,
196
- hasBeenUnsubscribed: false };
197
- subs.push(subObj);
240
+ const cbObj = { trigger: obs.next.bind(obs),
241
+ complete: obs.complete.bind(obs),
242
+ hasBeenCleared: false };
243
+ cbs.push(cbObj);
198
244
  return () => {
199
245
  /**
200
246
  * Code in here can still be running while this is happening.
201
- * Set `hasBeenUnsubscribed` to `true` to avoid still using the
247
+ * Set `hasBeenCleared` to `true` to avoid still using the
202
248
  * `subscriber` from this object.
203
249
  */
204
- subObj.hasBeenUnsubscribed = true;
205
- const indexOf = subs.indexOf(subObj);
250
+ cbObj.hasBeenCleared = true;
251
+ const indexOf = cbs.indexOf(cbObj);
206
252
  if (indexOf >= 0) {
207
- subs.splice(indexOf, 1);
253
+ cbs.splice(indexOf, 1);
208
254
  }
209
255
  };
210
256
  });
211
257
  },
212
258
 
259
+ /**
260
+ * Allows to register a callback to be called each time the value inside the
261
+ * reference is updated.
262
+ * @param {Function} cb - Callback to be called each time the reference is
263
+ * updated. Takes the new value im argument.
264
+ * @param {Object} [options]
265
+ * @param {Object} [options.clearSignal] - Allows to provide a
266
+ * CancellationSignal which will unregister the callback when it emits.
267
+ * @param {boolean} [options.emitCurrentValue] - If `true`, the callback will
268
+ * also be immediately called with the current value.
269
+ */
270
+ onUpdate(
271
+ cb : (val : T) => void,
272
+ options? : {
273
+ clearSignal?: CancellationSignal;
274
+ emitCurrentValue?: boolean;
275
+ }
276
+ ) : void {
277
+ if (options?.emitCurrentValue === true) {
278
+ cb(value);
279
+ }
280
+ if (isFinished) {
281
+ return ;
282
+ }
283
+ const cbObj = { trigger: cb,
284
+ complete: unlisten,
285
+ hasBeenCleared: false };
286
+ cbs.push(cbObj);
287
+ if (options?.clearSignal === undefined) {
288
+ return;
289
+ }
290
+ options.clearSignal.register(unlisten);
291
+
292
+ function unlisten() : void {
293
+ /**
294
+ * Code in here can still be running while this is happening.
295
+ * Set `hasBeenCleared` to `true` to avoid still using the
296
+ * `subscriber` from this object.
297
+ */
298
+ cbObj.hasBeenCleared = true;
299
+ const indexOf = cbs.indexOf(cbObj);
300
+ if (indexOf >= 0) {
301
+ cbs.splice(indexOf, 1);
302
+ }
303
+ }
304
+ },
305
+
213
306
  /**
214
307
  * Indicate that no new values will be emitted.
215
308
  * Allows to automatically close all Observables generated from this shared
@@ -217,11 +310,11 @@ export function createSharedReference<T>(initialValue : T) : ISharedReference<T>
217
310
  */
218
311
  finish() : void {
219
312
  isFinished = true;
220
- const clonedSubs = subs.slice();
221
- for (const subObj of clonedSubs) {
313
+ const clonedCbs = cbs.slice();
314
+ for (const cbObj of clonedCbs) {
222
315
  try {
223
- if (!subObj.hasBeenUnsubscribed) {
224
- subObj.subscriber.complete();
316
+ if (!cbObj.hasBeenCleared) {
317
+ cbObj.complete();
225
318
  }
226
319
  } catch (_) {
227
320
  /* nothing */