rx-player 3.26.1 → 3.26.2

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 (580) hide show
  1. package/.github/workflows/checks.yml +99 -0
  2. package/.github/workflows/sonarcloud_analysis.yml +20 -0
  3. package/CHANGELOG.md +99 -71
  4. package/README.md +19 -18
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
  7. package/dist/_esm5.processed/compat/eme/close_session.js +1 -2
  8. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +1 -2
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -4
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +1 -2
  12. package/dist/_esm5.processed/compat/eme/generate_key_request.js +1 -2
  13. package/dist/_esm5.processed/compat/eme/load_session.js +2 -3
  14. package/dist/_esm5.processed/compat/event_listeners.d.ts +3 -2
  15. package/dist/_esm5.processed/compat/event_listeners.js +8 -14
  16. package/dist/_esm5.processed/compat/make_vtt_cue.js +1 -1
  17. package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
  18. package/dist/_esm5.processed/compat/set_element_src.js +1 -1
  19. package/dist/_esm5.processed/compat/when_loaded_metadata.js +1 -2
  20. package/dist/_esm5.processed/compat/when_media_source_open.js +1 -2
  21. package/dist/_esm5.processed/config.d.ts +3 -8
  22. package/dist/_esm5.processed/config.js +4 -9
  23. package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
  24. package/dist/_esm5.processed/core/abr/abr_manager.js +47 -8
  25. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
  26. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +2 -2
  27. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +3 -3
  28. package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
  29. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +3 -3
  30. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +3 -3
  31. package/dist/_esm5.processed/core/abr/guess_based_chooser.d.ts +95 -0
  32. package/dist/_esm5.processed/core/abr/guess_based_chooser.js +242 -0
  33. package/dist/_esm5.processed/core/abr/index.d.ts +3 -3
  34. package/dist/_esm5.processed/core/abr/last_estimate_storage.d.ts +61 -0
  35. package/dist/_esm5.processed/core/abr/last_estimate_storage.js +37 -0
  36. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +25 -7
  37. package/dist/_esm5.processed/core/abr/network_analyzer.js +68 -31
  38. package/dist/_esm5.processed/core/abr/pending_requests_store.d.ts +56 -28
  39. package/dist/_esm5.processed/core/abr/pending_requests_store.js +9 -7
  40. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +34 -51
  41. package/dist/_esm5.processed/core/abr/representation_estimator.js +111 -52
  42. package/dist/_esm5.processed/core/abr/representation_score_calculator.d.ts +5 -8
  43. package/dist/_esm5.processed/core/abr/representation_score_calculator.js +20 -23
  44. package/dist/_esm5.processed/core/abr/{ewma.d.ts → utils/ewma.d.ts} +0 -0
  45. package/dist/_esm5.processed/core/abr/{ewma.js → utils/ewma.js} +0 -0
  46. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.d.ts → utils/filter_by_bitrate.d.ts} +1 -1
  47. package/dist/_esm5.processed/core/abr/{filter_by_bitrate.js → utils/filter_by_bitrate.js} +1 -1
  48. package/dist/_esm5.processed/core/abr/{filter_by_width.d.ts → utils/filter_by_width.d.ts} +1 -1
  49. package/dist/_esm5.processed/core/abr/{filter_by_width.js → utils/filter_by_width.js} +2 -2
  50. package/dist/_esm5.processed/core/abr/{select_optimal_representation.d.ts → utils/select_optimal_representation.d.ts} +1 -1
  51. package/dist/_esm5.processed/core/abr/{select_optimal_representation.js → utils/select_optimal_representation.js} +1 -1
  52. package/dist/_esm5.processed/core/api/emit_seek_events.d.ts +4 -4
  53. package/dist/_esm5.processed/core/api/emit_seek_events.js +12 -10
  54. package/dist/_esm5.processed/core/api/index.d.ts +3 -1
  55. package/dist/_esm5.processed/core/api/index.js +2 -0
  56. package/dist/_esm5.processed/core/api/option_utils.js +4 -4
  57. package/dist/_esm5.processed/core/api/playback_observer.d.ts +280 -0
  58. package/dist/_esm5.processed/core/api/playback_observer.js +461 -0
  59. package/dist/_esm5.processed/core/api/public_api.d.ts +8 -7
  60. package/dist/_esm5.processed/core/api/public_api.js +98 -94
  61. package/dist/_esm5.processed/core/api/track_choice_manager.js +3 -3
  62. package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +1 -0
  63. package/dist/_esm5.processed/core/eme/attach_media_keys.js +1 -2
  64. package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -5
  65. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js +1 -2
  66. package/dist/_esm5.processed/core/eme/clear_eme_session.js +6 -2
  67. package/dist/_esm5.processed/core/eme/create_session.js +1 -2
  68. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +2 -3
  69. package/dist/_esm5.processed/core/eme/eme_manager.js +4 -5
  70. package/dist/_esm5.processed/core/eme/find_key_system.js +4 -5
  71. package/dist/_esm5.processed/core/eme/get_media_keys.js +2 -3
  72. package/dist/_esm5.processed/core/eme/get_session.js +1 -2
  73. package/dist/_esm5.processed/core/eme/init_media_keys.js +5 -5
  74. package/dist/_esm5.processed/core/eme/session_events_listener.js +6 -7
  75. package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
  76. package/dist/_esm5.processed/core/eme/types.d.ts +12 -4
  77. package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
  78. package/dist/_esm5.processed/core/eme/utils/is_session_usable.js +1 -1
  79. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +3 -4
  80. package/dist/_esm5.processed/core/eme/utils/persistent_sessions_store.js +3 -3
  81. package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
  82. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
  83. package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
  84. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +12 -29
  85. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +3 -7
  86. package/dist/_esm5.processed/core/fetchers/segment/prioritizer.d.ts +53 -53
  87. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +42 -11
  88. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +118 -46
  89. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +21 -20
  90. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +9 -8
  91. package/dist/_esm5.processed/core/init/create_eme_manager.js +1 -2
  92. package/dist/_esm5.processed/core/init/create_media_source.js +3 -4
  93. package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +39 -0
  94. package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +50 -0
  95. package/dist/_esm5.processed/core/init/duration_updater.js +16 -7
  96. package/dist/_esm5.processed/core/init/emit_loaded_event.d.ts +4 -3
  97. package/dist/_esm5.processed/core/init/emit_loaded_event.js +8 -8
  98. package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
  99. package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
  100. package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +32 -31
  101. package/dist/_esm5.processed/core/init/initial_seek_and_play.js +25 -32
  102. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +6 -5
  103. package/dist/_esm5.processed/core/init/initialize_directfile.js +16 -12
  104. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +10 -10
  105. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -12
  106. package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +8 -11
  107. package/dist/_esm5.processed/core/init/load_on_media_source.js +16 -19
  108. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +8 -7
  109. package/dist/_esm5.processed/core/init/stall_avoider.d.ts +4 -6
  110. package/dist/_esm5.processed/core/init/stall_avoider.js +56 -42
  111. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.d.ts +2 -2
  112. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +20 -15
  113. package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
  114. package/dist/_esm5.processed/core/init/types.d.ts +0 -20
  115. package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +5 -4
  116. package/dist/_esm5.processed/core/init/update_playback_rate.js +10 -11
  117. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +4 -4
  118. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +12 -7
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +8 -7
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +9 -10
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +1 -1
  122. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -4
  123. package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
  124. package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +2 -2
  125. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +1 -12
  126. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +10 -10
  127. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
  128. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -13
  129. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +36 -23
  130. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +9 -17
  131. package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +11 -20
  132. package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
  133. package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
  134. package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +5 -6
  135. package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
  136. package/dist/_esm5.processed/core/stream/orchestrator/index.d.ts +2 -2
  137. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +10 -8
  138. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +22 -21
  139. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +6 -4
  140. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +11 -10
  141. package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
  142. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +23 -7
  143. package/dist/_esm5.processed/core/stream/period/period_stream.js +38 -24
  144. package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +5 -4
  145. package/dist/_esm5.processed/core/stream/reload_after_switch.js +8 -7
  146. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +4 -2
  147. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +10 -8
  148. package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +9 -9
  149. package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +10 -12
  150. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +1 -3
  151. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +6 -8
  152. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +3 -7
  153. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +7 -8
  154. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +1 -1
  155. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.d.ts +6 -9
  156. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +7 -8
  157. package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
  158. package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +4 -2
  159. package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +3 -5
  160. package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +6 -4
  161. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -5
  162. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +9 -12
  163. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +30 -21
  164. package/dist/_esm5.processed/errors/error_message.js +1 -1
  165. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +5 -3
  166. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +21 -8
  167. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +2 -3
  168. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +2 -2
  169. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +4 -0
  170. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +1 -1
  171. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
  172. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +17 -6
  173. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +1 -2
  174. package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +1 -2
  175. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
  176. package/dist/_esm5.processed/features/initialize_features.js +47 -44
  177. package/dist/_esm5.processed/index.js +2 -2
  178. package/dist/_esm5.processed/manifest/index.d.ts +2 -2
  179. package/dist/_esm5.processed/manifest/index.js +2 -2
  180. package/dist/_esm5.processed/manifest/representation.js +1 -1
  181. package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
  182. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +24 -3
  183. package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
  184. package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
  185. package/dist/_esm5.processed/manifest/{are_same_content.js → utils.js} +18 -1
  186. package/dist/_esm5.processed/minimal.js +2 -2
  187. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +18 -9
  188. package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +32 -9
  189. package/dist/_esm5.processed/parsers/containers/isobmff/read.d.ts +18 -5
  190. package/dist/_esm5.processed/parsers/containers/isobmff/read.js +28 -6
  191. package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +52 -47
  192. package/dist/_esm5.processed/parsers/images/bif.js +1 -1
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
  194. package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
  195. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +2 -1
  196. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +3 -2
  197. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +2 -1
  198. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +1 -0
  199. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +7 -9
  200. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -1
  201. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +4 -2
  202. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -1
  203. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -5
  204. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +10 -9
  205. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +3 -3
  206. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +6 -1
  207. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +5 -4
  208. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +1 -1
  209. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -4
  210. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +3 -1
  211. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +19 -18
  212. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -1
  213. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +14 -8
  214. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +2 -2
  215. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +7 -8
  216. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +3 -1
  217. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +5 -10
  218. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +3 -1
  219. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +17 -8
  220. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +7 -2
  221. package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +22 -21
  222. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -0
  223. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +9 -9
  224. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +24 -0
  225. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +7 -5
  226. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +12 -9
  227. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +5 -2
  228. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +8 -0
  229. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +11 -2
  230. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +7 -4
  231. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +11 -0
  232. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +7 -1
  233. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +5 -0
  234. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +5 -0
  235. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +13 -0
  236. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +23 -0
  237. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +5 -0
  238. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +6 -0
  239. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +6 -0
  240. package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +1 -1
  241. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +4 -2
  242. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -1
  243. package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
  244. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +3 -1
  245. package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
  246. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +1 -1
  247. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +11 -3
  248. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +5 -5
  249. package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +3 -6
  250. package/dist/_esm5.processed/parsers/texttracks/sami/html.js +2 -2
  251. package/dist/_esm5.processed/parsers/texttracks/sami/native.js +2 -2
  252. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
  253. package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
  254. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +2 -2
  255. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +5 -5
  256. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +2 -2
  257. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  258. package/dist/_esm5.processed/transports/dash/manifest_parser.js +89 -20
  259. package/dist/_esm5.processed/transports/dash/segment_loader.js +1 -1
  260. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  261. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +2 -2
  262. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  263. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  264. package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +1 -1
  265. package/dist/_esm5.processed/transports/smooth/pipelines.js +2 -2
  266. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -3
  267. package/dist/_esm5.processed/transports/types.d.ts +29 -15
  268. package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
  269. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  270. package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
  271. package/dist/_esm5.processed/transports/utils/parse_text_track.js +6 -4
  272. package/dist/_esm5.processed/utils/assert.js +3 -3
  273. package/dist/_esm5.processed/utils/concat_map_latest.js +1 -2
  274. package/dist/_esm5.processed/utils/defer_subscriptions.js +1 -2
  275. package/dist/_esm5.processed/utils/filter_map.js +1 -2
  276. package/dist/_esm5.processed/utils/reference.d.ts +108 -0
  277. package/dist/_esm5.processed/utils/reference.js +137 -0
  278. package/dist/_esm5.processed/utils/request/fetch.d.ts +1 -1
  279. package/dist/_esm5.processed/utils/request/fetch.js +3 -3
  280. package/dist/_esm5.processed/utils/request/xhr.d.ts +1 -1
  281. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  282. package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
  283. package/dist/mpd-parser.wasm +0 -0
  284. package/dist/rx-player.d.ts +1 -15
  285. package/dist/rx-player.js +3666 -2470
  286. package/dist/rx-player.min.d.ts +1 -15
  287. package/dist/rx-player.min.js +1 -1
  288. package/jest.config.js +28 -1
  289. package/package.json +43 -43
  290. package/scripts/build/constants.d.ts +50 -0
  291. package/scripts/build/generate_build.js +1 -189
  292. package/scripts/doc-generator/construct_table_of_contents.js +31 -24
  293. package/scripts/doc-generator/convert_MD_to_HMTL.js +4 -8
  294. package/scripts/doc-generator/create_documentation.js +331 -0
  295. package/scripts/doc-generator/create_documentation_page.js +209 -0
  296. package/scripts/doc-generator/create_page.js +117 -35
  297. package/scripts/doc-generator/generate_header_html.js +148 -0
  298. package/scripts/doc-generator/generate_page_html.js +116 -0
  299. package/scripts/doc-generator/generate_page_list_html.js +93 -0
  300. package/scripts/doc-generator/generate_sidebar_html.js +88 -0
  301. package/scripts/doc-generator/get_search_data_for_content.js +137 -0
  302. package/scripts/doc-generator/index.js +14 -15
  303. package/scripts/doc-generator/parse_doc_configs.js +327 -0
  304. package/scripts/doc-generator/scripts/lunr.js +10 -0
  305. package/scripts/doc-generator/scripts/script.js +451 -0
  306. package/scripts/doc-generator/styles/style.css +712 -144
  307. package/scripts/doc-generator/utils.js +85 -0
  308. package/scripts/fast_demo_build.js +143 -0
  309. package/scripts/generate_documentation_list.js +6 -2
  310. package/scripts/generate_full_demo.js +26 -49
  311. package/scripts/start_demo_web_server.js +14 -4
  312. package/scripts/update-version +1 -1
  313. package/sonar-project.properties +2 -1
  314. package/src/compat/__tests__/add_text_track.test.ts +1 -0
  315. package/src/compat/__tests__/clear_element_src.test.ts +55 -28
  316. package/src/compat/__tests__/set_element_src.test.ts +2 -2
  317. package/src/compat/__tests__/when_loaded_metadata.test.ts +4 -5
  318. package/src/compat/__tests__/when_media_source_open.test.ts +4 -5
  319. package/src/compat/clear_element_src.ts +8 -6
  320. package/src/compat/eme/close_session.ts +3 -5
  321. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  322. package/src/compat/eme/custom_media_keys/index.ts +6 -6
  323. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +6 -3
  324. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +1 -1
  325. package/src/compat/eme/generate_key_request.ts +1 -1
  326. package/src/compat/eme/load_session.ts +4 -6
  327. package/src/compat/event_listeners.ts +12 -21
  328. package/src/compat/on_height_width_change.ts +3 -5
  329. package/src/compat/set_element_src.ts +1 -1
  330. package/src/compat/when_loaded_metadata.ts +1 -1
  331. package/src/compat/when_media_source_open.ts +1 -1
  332. package/src/config.ts +4 -9
  333. package/src/core/abr/README.md +7 -7
  334. package/src/core/abr/abr_manager.ts +62 -21
  335. package/src/core/abr/bandwidth_estimator.ts +1 -1
  336. package/src/core/abr/buffer_based_chooser.ts +8 -6
  337. package/src/core/abr/get_buffer_levels.ts +3 -0
  338. package/src/core/abr/get_estimate_from_buffer_levels.ts +4 -4
  339. package/src/core/abr/guess_based_chooser.ts +308 -0
  340. package/src/core/abr/index.ts +7 -3
  341. package/src/core/abr/last_estimate_storage.ts +79 -0
  342. package/src/core/abr/network_analyzer.ts +74 -31
  343. package/src/core/abr/pending_requests_store.ts +76 -42
  344. package/src/core/abr/representation_estimator.ts +200 -125
  345. package/src/core/abr/representation_score_calculator.ts +33 -26
  346. package/src/core/abr/{__tests__ → utils/__tests__}/ewma.test.ts +0 -0
  347. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_bitrate.test.ts +1 -1
  348. package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_width.test.ts +1 -1
  349. package/src/core/abr/{__tests__ → utils/__tests__}/select_optimal_representation.test.ts +1 -1
  350. package/src/core/abr/{ewma.ts → utils/ewma.ts} +0 -0
  351. package/src/core/abr/{filter_by_bitrate.ts → utils/filter_by_bitrate.ts} +2 -2
  352. package/src/core/abr/{filter_by_width.ts → utils/filter_by_width.ts} +3 -3
  353. package/src/core/abr/{select_optimal_representation.ts → utils/select_optimal_representation.ts} +2 -2
  354. package/src/core/api/README.md +4 -3
  355. package/src/core/api/__tests__/option_utils.test.ts +1 -0
  356. package/src/core/api/emit_seek_events.ts +21 -20
  357. package/src/core/api/index.ts +6 -2
  358. package/src/core/api/playback_observer.ts +768 -0
  359. package/src/core/api/public_api.ts +111 -111
  360. package/src/core/api/track_choice_manager.ts +6 -3
  361. package/src/core/eme/__tests__/__global__/get_license.test.ts +5 -3
  362. package/src/core/eme/__tests__/__global__/init_data.test.ts +11 -12
  363. package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +2 -1
  364. package/src/core/eme/__tests__/__global__/media_keys.test.ts +5 -8
  365. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +8 -6
  366. package/src/core/eme/__tests__/__global__/utils.ts +1 -0
  367. package/src/core/eme/__tests__/init_media_keys.test.ts +6 -65
  368. package/src/core/eme/attach_media_keys.ts +2 -1
  369. package/src/core/eme/check_key_statuses.ts +10 -8
  370. package/src/core/eme/clean_old_loaded_sessions.ts +2 -4
  371. package/src/core/eme/clear_eme_session.ts +6 -1
  372. package/src/core/eme/create_session.ts +3 -5
  373. package/src/core/eme/dispose_media_keys.ts +2 -2
  374. package/src/core/eme/eme_manager.ts +10 -12
  375. package/src/core/eme/find_key_system.ts +3 -5
  376. package/src/core/eme/get_media_keys.ts +4 -6
  377. package/src/core/eme/get_session.ts +2 -4
  378. package/src/core/eme/init_media_keys.ts +9 -9
  379. package/src/core/eme/session_events_listener.ts +14 -15
  380. package/src/core/eme/set_server_certificate.ts +9 -5
  381. package/src/core/eme/types.ts +15 -4
  382. package/src/core/eme/utils/close_session.ts +7 -7
  383. package/src/core/eme/utils/is_session_usable.ts +1 -1
  384. package/src/core/eme/utils/loaded_sessions_store.ts +2 -2
  385. package/src/core/eme/utils/persistent_sessions_store.ts +2 -2
  386. package/src/core/fetchers/index.ts +2 -2
  387. package/src/core/fetchers/manifest/manifest_fetcher.ts +1 -1
  388. package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +3 -4
  389. package/src/core/fetchers/segment/index.ts +2 -2
  390. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +37 -45
  391. package/src/core/fetchers/segment/prioritizer.ts +82 -82
  392. package/src/core/fetchers/segment/segment_fetcher.ts +178 -80
  393. package/src/core/fetchers/segment/segment_fetcher_creator.ts +23 -31
  394. package/src/core/init/create_eme_manager.ts +1 -1
  395. package/src/core/init/create_media_source.ts +5 -7
  396. package/src/core/init/create_stream_playback_observer.ts +88 -0
  397. package/src/core/init/duration_updater.ts +20 -17
  398. package/src/core/init/emit_loaded_event.ts +11 -15
  399. package/src/core/init/end_of_stream.ts +2 -4
  400. package/src/core/init/get_initial_time.ts +0 -1
  401. package/src/core/init/initial_seek_and_play.ts +67 -51
  402. package/src/core/init/initialize_directfile.ts +26 -35
  403. package/src/core/init/initialize_media_source.ts +28 -28
  404. package/src/core/init/load_on_media_source.ts +51 -58
  405. package/src/core/init/manifest_update_scheduler.ts +11 -12
  406. package/src/core/init/stall_avoider.ts +64 -47
  407. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
  408. package/src/core/init/throw_on_media_error.ts +1 -1
  409. package/src/core/init/types.ts +0 -24
  410. package/src/core/init/update_playback_rate.ts +15 -16
  411. package/src/core/segment_buffers/README.md +3 -3
  412. package/src/core/segment_buffers/garbage_collector.ts +15 -11
  413. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -7
  414. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +14 -16
  415. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +1 -1
  416. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  417. package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
  418. package/src/core/segment_buffers/inventory/buffered_history.ts +2 -2
  419. package/src/core/segment_buffers/inventory/segment_inventory.ts +1 -13
  420. package/src/core/stream/adaptation/adaptation_stream.ts +78 -56
  421. package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
  422. package/src/core/stream/adaptation/index.ts +2 -2
  423. package/src/core/stream/index.ts +2 -2
  424. package/src/core/stream/orchestrator/active_period_emitter.ts +6 -8
  425. package/src/core/stream/orchestrator/are_streams_complete.ts +2 -4
  426. package/src/core/stream/orchestrator/index.ts +2 -2
  427. package/src/core/stream/orchestrator/stream_orchestrator.ts +58 -49
  428. package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
  429. package/src/core/stream/period/index.ts +2 -2
  430. package/src/core/stream/period/period_stream.ts +118 -75
  431. package/src/core/stream/reload_after_switch.ts +13 -10
  432. package/src/core/stream/representation/append_segment_to_buffer.ts +20 -16
  433. package/src/core/stream/representation/downloading_queue.ts +21 -24
  434. package/src/core/stream/representation/force_garbage_collection.ts +16 -23
  435. package/src/core/stream/representation/get_buffer_status.ts +9 -11
  436. package/src/core/stream/representation/get_needed_segments.ts +1 -1
  437. package/src/core/stream/representation/get_segment_priority.ts +8 -10
  438. package/src/core/stream/representation/index.ts +2 -2
  439. package/src/core/stream/representation/push_init_segment.ts +19 -16
  440. package/src/core/stream/representation/push_media_segment.ts +21 -17
  441. package/src/core/stream/representation/representation_stream.ts +50 -47
  442. package/src/experimental/features/__tests__/dash_wasm.test.ts +1 -0
  443. package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +32 -17
  444. package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +6 -9
  445. package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +12 -6
  446. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +4 -2
  447. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +2 -2
  448. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +21 -12
  449. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +1 -1
  450. package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
  451. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +4 -2
  452. package/src/features/__tests__/initialize_features.test.ts +191 -101
  453. package/src/features/initialize_features.ts +40 -37
  454. package/src/features/list/__tests__/bif_parser.test.ts +1 -0
  455. package/src/features/list/__tests__/dash.test.ts +1 -0
  456. package/src/features/list/__tests__/directfile.test.ts +1 -0
  457. package/src/features/list/__tests__/eme.test.ts +1 -0
  458. package/src/features/list/__tests__/html_sami_parser.test.ts +1 -0
  459. package/src/features/list/__tests__/html_srt_parser.test.ts +1 -0
  460. package/src/features/list/__tests__/html_text_buffer.test.ts +1 -0
  461. package/src/features/list/__tests__/html_ttml_parser.test.ts +1 -0
  462. package/src/features/list/__tests__/html_vtt_parser.test.ts +1 -0
  463. package/src/features/list/__tests__/image_buffer.test.ts +1 -0
  464. package/src/features/list/__tests__/native_sami_parser.test.ts +1 -0
  465. package/src/features/list/__tests__/native_srt_parser.test.ts +1 -0
  466. package/src/features/list/__tests__/native_text_buffer.test.ts +1 -0
  467. package/src/features/list/__tests__/native_ttml_parser.test.ts +1 -0
  468. package/src/features/list/__tests__/native_vtt_parser.test.ts +1 -0
  469. package/src/features/list/__tests__/smooth.test.ts +1 -0
  470. package/src/index.ts +2 -2
  471. package/src/manifest/__tests__/manifest.test.ts +1 -0
  472. package/src/manifest/index.ts +7 -1
  473. package/src/manifest/representation_index/__tests__/static.test.ts +1 -0
  474. package/src/manifest/representation_index/static.ts +1 -0
  475. package/src/manifest/representation_index/types.ts +25 -3
  476. package/src/manifest/{are_same_content.ts → utils.ts} +26 -9
  477. package/src/minimal.ts +3 -2
  478. package/src/parsers/containers/isobmff/get_box.ts +35 -8
  479. package/src/parsers/containers/isobmff/read.ts +32 -5
  480. package/src/parsers/containers/isobmff/utils.ts +52 -47
  481. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
  482. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +4 -2
  483. package/src/parsers/manifest/dash/common/get_clock_offset.ts +3 -3
  484. package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
  485. package/src/parsers/manifest/dash/common/indexes/base.ts +5 -3
  486. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +1 -0
  487. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +9 -9
  488. package/src/parsers/manifest/dash/common/indexes/list.ts +6 -3
  489. package/src/parsers/manifest/dash/common/indexes/template.ts +13 -6
  490. package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +10 -9
  491. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +13 -5
  492. package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
  493. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  494. package/src/parsers/manifest/dash/common/parse_mpd.ts +21 -13
  495. package/src/parsers/manifest/dash/common/parse_periods.ts +7 -8
  496. package/src/parsers/manifest/dash/common/parse_representation_index.ts +12 -12
  497. package/src/parsers/manifest/dash/common/parse_representations.ts +23 -4
  498. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
  499. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +12 -0
  500. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +13 -9
  501. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +28 -0
  502. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +8 -5
  503. package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +3 -0
  504. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +5 -2
  505. package/src/parsers/manifest/dash/node_parser_types.ts +8 -0
  506. package/src/parsers/manifest/dash/parsers_types.ts +8 -2
  507. package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
  508. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +26 -5
  509. package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
  510. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +7 -4
  511. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +13 -0
  512. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +8 -1
  513. package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +6 -0
  514. package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +6 -0
  515. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +14 -0
  516. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +26 -0
  517. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +6 -0
  518. package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +7 -0
  519. package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +7 -0
  520. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +1 -1
  521. package/src/parsers/manifest/local/representation_index.ts +2 -0
  522. package/src/parsers/manifest/smooth/create_parser.ts +1 -1
  523. package/src/parsers/manifest/smooth/representation_index.ts +3 -1
  524. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +1 -1
  525. package/src/parsers/manifest/utils/index_helpers.ts +21 -11
  526. package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
  527. package/src/parsers/texttracks/sami/html.ts +1 -1
  528. package/src/parsers/texttracks/sami/native.ts +1 -1
  529. package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
  530. package/src/transports/dash/image_pipelines.ts +4 -4
  531. package/src/transports/dash/init_segment_loader.ts +1 -1
  532. package/src/transports/dash/manifest_parser.ts +99 -25
  533. package/src/transports/dash/segment_loader.ts +1 -1
  534. package/src/transports/dash/segment_parser.ts +4 -4
  535. package/src/transports/dash/text_parser.ts +8 -8
  536. package/src/transports/local/segment_loader.ts +2 -2
  537. package/src/transports/local/segment_parser.ts +4 -4
  538. package/src/transports/local/text_parser.ts +8 -8
  539. package/src/transports/metaplaylist/pipelines.ts +11 -11
  540. package/src/transports/smooth/extract_timings_infos.ts +1 -1
  541. package/src/transports/smooth/pipelines.ts +8 -8
  542. package/src/transports/smooth/segment_loader.ts +3 -3
  543. package/src/transports/types.ts +31 -17
  544. package/src/transports/utils/call_custom_manifest_loader.ts +1 -1
  545. package/src/transports/utils/get_isobmff_timing_infos.ts +6 -1
  546. package/src/transports/utils/parse_text_track.ts +4 -2
  547. package/src/typings/globals.d.ts +57 -40
  548. package/src/utils/__tests__/concat_map_latest.test.ts +7 -9
  549. package/src/utils/__tests__/defer_subscriptions.test.ts +4 -4
  550. package/src/utils/__tests__/event_emitter.test.ts +1 -1
  551. package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
  552. package/src/utils/assert.ts +1 -1
  553. package/src/utils/concat_map_latest.ts +2 -4
  554. package/src/utils/defer_subscriptions.ts +1 -1
  555. package/src/utils/filter_map.ts +2 -4
  556. package/src/utils/reference.ts +234 -0
  557. package/src/utils/request/fetch.ts +3 -3
  558. package/src/utils/request/xhr.ts +2 -2
  559. package/src/utils/rx-retry_with_backoff.ts +2 -4
  560. package/tsconfig.json +4 -1
  561. package/tsconfig.modules.json +8 -3
  562. package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
  563. package/dist/_esm5.processed/core/abr/create_filters.js +0 -56
  564. package/dist/_esm5.processed/core/api/clock.d.ts +0 -157
  565. package/dist/_esm5.processed/core/api/clock.js +0 -363
  566. package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
  567. package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -55
  568. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.d.ts +0 -31
  569. package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.js +0 -37
  570. package/scripts/doc-generator/construct_html.js +0 -135
  571. package/scripts/doc-generator/construct_page_list.js +0 -120
  572. package/scripts/doc-generator/create_for_dir.js +0 -151
  573. package/scripts/doc-generator/get_files_to_convert.js +0 -71
  574. package/scripts/doc-generator/mkdir_parent.js +0 -21
  575. package/scripts/doc-generator/read_title_from_md.js +0 -22
  576. package/scripts/doc-generator/remove_toc_from_md.js +0 -20
  577. package/src/core/abr/create_filters.ts +0 -59
  578. package/src/core/api/clock.ts +0 -573
  579. package/src/core/init/create_stream_clock.ts +0 -93
  580. package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
package/jest.config.js CHANGED
@@ -13,7 +13,6 @@ module.exports = {
13
13
  "!**/__tests__/**",
14
14
  ],
15
15
  globals: {
16
- __DEV__: true,
17
16
  "ts-jest": {
18
17
  tsconfig: {
19
18
  target: "es2017",
@@ -36,5 +35,33 @@ module.exports = {
36
35
  ],
37
36
  },
38
37
  },
38
+ __FEATURES__: {
39
+ IS_DISABLED: 0,
40
+ IS_ENABLED: 1,
41
+
42
+ BIF_PARSER: 1,
43
+ DASH: 1,
44
+ DIRECTFILE: 1,
45
+ EME: 1,
46
+ HTML_SAMI: 1,
47
+ HTML_SRT: 1,
48
+ HTML_TTML: 1,
49
+ HTML_VTT: 1,
50
+ LOCAL_MANIFEST: 1,
51
+ METAPLAYLIST: 1,
52
+ NATIVE_SAMI: 1,
53
+ NATIVE_SRT: 1,
54
+ NATIVE_TTML: 1,
55
+ NATIVE_VTT: 1,
56
+ SMOOTH: 1,
57
+ },
58
+ __ENVIRONMENT__: {
59
+ PRODUCTION: 0,
60
+ DEV: 1,
61
+ CURRENT_ENV: 1,
62
+ },
63
+ __LOGGER_LEVEL__: {
64
+ CURRENT_LEVEL: "\"NONE\"",
65
+ },
39
66
  },
40
67
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rx-player",
3
3
  "author": "Canal+",
4
- "version": "3.26.1",
4
+ "version": "3.26.2",
5
5
  "description": "Canal+ HTML5 Video Player",
6
6
  "main": "./dist/rx-player.js",
7
7
  "keywords": [
@@ -37,16 +37,15 @@
37
37
  "build:wasm:debug": "cd ./src/parsers/manifest/dash/wasm-parser && cargo build --target wasm32-unknown-unknown && cp target/wasm32-unknown-unknown/debug/mpd_node_parser.wasm ../../../../../dist/mpd-parser.wasm",
38
38
  "build:wasm:release": "cd ./src/parsers/manifest/dash/wasm-parser && cargo build --target wasm32-unknown-unknown --release && wasm-opt -O3 -o ../../../../../dist/mpd-parser.wasm target/wasm32-unknown-unknown/release/mpd_node_parser.wasm && cd ../../../../../ && npm run wasm-strip",
39
39
  "certificate": "./scripts/generate_certificate",
40
- "check": "npm run check:types && npm run lint && npm run test:unit",
40
+ "check": "npm run check:types && npm run lint",
41
41
  "check:all": "npm run check:types && npm run lint && npm run lint:demo && npm run lint:tests && npm run test && npm run test:memory && node -r esm ./scripts/check_nodejs_import_compatibility.js",
42
42
  "check:appveyor": "npm run check:types && npm run lint && npm run lint:demo && npm run lint:tests && npm run test:appveyor",
43
- "check:travis": "npm run check:types && npm run lint && npm run lint:demo && npm run lint:tests && npm run test:travis",
44
43
  "check:types": "tsc --noEmit --project .",
45
44
  "check:types:watch": "tsc --noEmit --watch --project .",
46
45
  "demo": "node ./scripts/generate_full_demo.js --production-mode",
47
46
  "demo:min": "node ./scripts/generate_full_demo.js --production-mode --minify",
48
47
  "demo:watch": "node ./scripts/generate_full_demo.js --watch --production-mode",
49
- "doc": "rm -rf doc/generated; node ./scripts/doc-generator/index.js doc/ doc/generated",
48
+ "doc": "rm -rf doc/generated; node ./scripts/doc-generator/index.js doc/ doc/generated \"$(cat VERSION)\"",
50
49
  "lint": "eslint src -c .eslintrc.js",
51
50
  "lint:demo": "eslint demo/full/scripts",
52
51
  "lint:tests": "eslint tests/**/*.js",
@@ -54,6 +53,7 @@
54
53
  "prepublishOnly": "npm run build:modular",
55
54
  "standalone": "node ./scripts/run_standalone_demo.js",
56
55
  "start": "node ./scripts/start_demo_web_server.js",
56
+ "s": "node ./scripts/start_demo_web_server.js --fast",
57
57
  "wasm-strip": "node scripts/wasm-strip.js dist/mpd-parser.wasm",
58
58
  "test:appveyor": "npm run test:unit && npm run test:memory",
59
59
  "test:integration": "node tests/integration/run.js --bchromehl --bfirefoxhl",
@@ -63,10 +63,8 @@
63
63
  "test:integration:coverage": "node tests/integration/run.js --bchromehl --bfirefoxhl --coverage",
64
64
  "test:integration:firefox": "node tests/integration/run.js --bfirefox",
65
65
  "test:integration:firefox:watch": "node tests/integration/run.js --bfirefox --watch",
66
- "test:integration:travis": "node tests/integration/run.js --bchromehl",
67
66
  "test:memory": "node tests/memory/run.js --bchromehl",
68
67
  "test:memory:chrome:watch": "node tests/memory/run.js --bchrome --watch",
69
- "test:travis": "npm run test:unit && npm run test:integration:travis",
70
68
  "test:unit": "jest",
71
69
  "test:unit:coverage": "jest --coverage",
72
70
  "update-version": "npm run version --git-tag-version=false",
@@ -79,66 +77,67 @@
79
77
  "dependencies": {
80
78
  "next-tick": "1.1.0",
81
79
  "pinkie": "2.0.4",
82
- "rxjs": "7.3.0"
80
+ "rxjs": "7.4.0"
83
81
  },
84
82
  "devDependencies": {
85
- "@babel/core": "7.15.5",
86
- "@babel/plugin-transform-runtime": "7.15.0",
87
- "@babel/preset-env": "7.15.6",
88
- "@babel/preset-react": "7.14.5",
89
- "@types/chai": "4.2.21",
90
- "@types/jest": "27.0.1",
83
+ "@babel/core": "7.16.7",
84
+ "@babel/plugin-transform-runtime": "7.16.7",
85
+ "@babel/preset-env": "7.16.7",
86
+ "@babel/preset-react": "7.16.7",
87
+ "@types/chai": "4.3.0",
88
+ "@types/jest": "27.4.0",
91
89
  "@types/mocha": "9.0.0",
92
- "@types/node": "16.9.1",
93
- "@types/sinon": "10.0.2",
94
- "@typescript-eslint/eslint-plugin": "4.31.0",
95
- "@typescript-eslint/eslint-plugin-tslint": "4.31.0",
96
- "@typescript-eslint/parser": "4.31.0",
90
+ "@types/node": "17.0.7",
91
+ "@types/sinon": "10.0.6",
92
+ "@typescript-eslint/eslint-plugin": "5.8.1",
93
+ "@typescript-eslint/eslint-plugin-tslint": "5.8.1",
94
+ "@typescript-eslint/parser": "5.8.1",
97
95
  "arraybuffer-loader": "1.0.8",
98
- "babel-loader": "8.2.2",
96
+ "babel-loader": "8.2.3",
99
97
  "chai": "4.3.4",
100
98
  "cheerio": "1.0.0-rc.10",
101
- "core-js": "3.17.3",
102
- "eslint": "7.32.0",
103
- "eslint-plugin-import": "2.24.2",
104
- "eslint-plugin-jsdoc": "36.1.0",
105
- "eslint-plugin-react": "7.25.1",
99
+ "core-js": "3.20.2",
100
+ "esbuild": "0.14.10",
101
+ "eslint": "8.6.0",
102
+ "eslint-plugin-import": "2.25.4",
103
+ "eslint-plugin-jsdoc": "37.5.0",
104
+ "eslint-plugin-react": "7.28.0",
106
105
  "esm": "3.2.25",
107
- "express": "4.17.1",
108
- "highlight.js": "11.2.0",
106
+ "express": "4.17.2",
107
+ "highlight.js": "11.3.1",
108
+ "html-entities": "^2.3.2",
109
109
  "istanbul-instrumenter-loader": "3.0.1",
110
- "jest": "27.2.0",
111
- "karma": "6.3.4",
110
+ "jest": "27.4.5",
111
+ "karma": "6.3.9",
112
112
  "karma-chrome-launcher": "3.1.0",
113
113
  "karma-coverage-istanbul-reporter": "3.0.3",
114
- "karma-firefox-launcher": "2.1.1",
114
+ "karma-firefox-launcher": "2.1.2",
115
115
  "karma-mocha": "2.0.1",
116
- "karma-mocha-reporter": "2.2.5",
117
116
  "karma-webpack": "5.0.0",
118
- "markdown-it": "12.2.0",
119
- "markdown-it-emoji": "2.0.0",
120
- "mocha": "9.1.1",
117
+ "markdown-it": "12.3.0",
118
+ "mocha": "9.1.3",
121
119
  "mocha-loader": "5.1.5",
122
120
  "raw-loader": "4.0.2",
123
121
  "react": "17.0.2",
124
122
  "react-dom": "17.0.2",
125
123
  "regenerator-runtime": "0.13.9",
126
124
  "rimraf": "3.0.2",
127
- "sanitize-html": "2.5.0",
125
+ "sanitize-html": "2.6.1",
128
126
  "semver": "7.3.5",
129
- "sinon": "11.1.2",
130
- "terser-webpack-plugin": "5.2.4",
131
- "ts-jest": "27.0.5",
132
- "ts-loader": "9.2.5",
127
+ "sinon": "12.0.1",
128
+ "terser-webpack-plugin": "5.3.0",
129
+ "ts-jest": "27.1.2",
130
+ "ts-loader": "9.2.6",
133
131
  "tslint": "6.1.3",
134
- "typescript": "4.4.3",
135
- "webpack": "5.52.1",
136
- "webpack-bundle-analyzer": "4.4.2",
137
- "webpack-cli": "4.8.0"
132
+ "typescript": "4.5.4",
133
+ "webpack": "5.65.0",
134
+ "webpack-bundle-analyzer": "4.5.0",
135
+ "webpack-cli": "4.9.1"
138
136
  },
139
137
  "scripts-list": {
140
138
  "Build a demo page (e.g. to test a code change)": {
141
139
  "start": "Build the \"full\" demo (with a UI) with the non-minified RxPlayer and serve it on a local server. Re-build on file updates.",
140
+ "s": "Very fast version of `start` which does not perform type-checking. This script can be useful for quick testing",
142
141
  "demo": "Build the demo in demo/bundle.js",
143
142
  "demo:min": "Build the demo and minify it in demo/bundle.js",
144
143
  "demo:watch": "Build the demo in demo/bundle.js each times the files update.",
@@ -146,9 +145,10 @@
146
145
  "certificate": "Generate a certificate to be able to use HTTPS locally for the demo pages (`npm run start` and `npm run standalone` will then listen to HTTPS requests through a communicated port)"
147
146
  },
148
147
  "Type-check or lint the current code": {
149
- "check": "Check the validity of the src directory by running the linter, type checker and unit tests",
148
+ "check": "Check the validity of the src directory by running the type checker and linter on it",
150
149
  "check:all": "Check the validity of the whole project by running linters, type checkers and every tests",
151
150
  "check:types": "Check TypeScript typings in src",
151
+ "check:types:watch": "Check TypeScript typings in src each time files change",
152
152
  "lint": "Lint rx-player source files",
153
153
  "lint:demo": "Lint demo source files",
154
154
  "lint:tests": "Lint integration tests source files"
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright 2015 CANAL+ Group
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /* eslint-disable @typescript-eslint/naming-convention */
18
+
19
+ // Define build-time constants corresponding to the modular build.
20
+
21
+ declare const enum __LOGGER_LEVEL__ {
22
+ CURRENT_LEVEL = "NONE",
23
+ }
24
+
25
+ declare const enum __ENVIRONMENT__ {
26
+ PRODUCTION = 0,
27
+ DEV = 1,
28
+ CURRENT_ENV = PRODUCTION,
29
+ }
30
+
31
+ declare const enum __FEATURES__ {
32
+ IS_DISABLED = 0,
33
+ IS_ENABLED = 1,
34
+
35
+ BIF_PARSER = IS_DISABLED,
36
+ DASH = IS_DISABLED,
37
+ DIRECTFILE = IS_DISABLED,
38
+ EME = IS_DISABLED,
39
+ HTML_SAMI = IS_DISABLED,
40
+ HTML_SRT = IS_DISABLED,
41
+ HTML_TTML = IS_DISABLED,
42
+ HTML_VTT = IS_DISABLED,
43
+ LOCAL_MANIFEST = IS_DISABLED,
44
+ METAPLAYLIST = IS_DISABLED,
45
+ NATIVE_SAMI = IS_DISABLED,
46
+ NATIVE_SRT = IS_DISABLED,
47
+ NATIVE_TTML = IS_DISABLED,
48
+ NATIVE_VTT = IS_DISABLED,
49
+ SMOOTH = IS_DISABLED,
50
+ }
@@ -41,66 +41,6 @@ const BUILD_ARTEFACTS_TO_REMOVE = [
41
41
  "logger"
42
42
  ];
43
43
 
44
- /**
45
- * In the following tuples:
46
- *
47
- * 1. the first element designates a token/constant used in the code that
48
- * should be replaced.
49
- *
50
- * Because for now, the search and replace operation is performed by sed,
51
- * it needs to be a valid sed-compliant RegExp.
52
- *
53
- * _Note: As GNU sed and BSD sed are not in accordance on the word boundary
54
- * token (\b for GNU sed vs [[:<:]] and [[:>:]] for BSD sed) we just use \<
55
- * and \> here (for respectively starting and ending word boundary) and
56
- * replace with the right character on the corresponding sed call site._
57
- *
58
- * 2. The second element designates what it will be replaced by, as a string.
59
- *
60
- * TODO This is the ugliest part of the build process and should be better
61
- * integrated to TypeScript compilation (in essence, those are compile-time
62
- * constants).
63
- */
64
- const REPLACED_TOKENS_SED_REGXP = [
65
- ["\<__DEV__\>", "false"],
66
- ["\<__LOGGER_LEVEL__\>", "\"NONE\""],
67
- ["\<__FEATURES__\.EME\>", "false"],
68
- ["\<__FEATURES__\.SMOOTH\>", "false"],
69
- ["\<__FEATURES__\.DASH\>", "false"],
70
- ["\<__FEATURES__\.LOCAL_MANIFEST\>", "false"],
71
- ["\<__FEATURES__\.METAPLAYLIST\>", "false"],
72
- ["\<__FEATURES__\.DIRECTFILE\>", "false"],
73
- ["\<__FEATURES__\.HTML_SAMI\>", "false"],
74
- ["\<__FEATURES__\.HTML_SRT\>", "false"],
75
- ["\<__FEATURES__\.HTML_TTML\>", "false"],
76
- ["\<__FEATURES__\.HTML_VTT\>", "false"],
77
- ["\<__FEATURES__\.NATIVE_SAMI\>", "false"],
78
- ["\<__FEATURES__\.NATIVE_SRT\>", "false"],
79
- ["\<__FEATURES__\.NATIVE_TTML\>", "false"],
80
- ["\<__FEATURES__\.NATIVE_VTT\>", "false"],
81
- ["\<__FEATURES__\.BIF_PARSER\>", "false"],
82
- ["\<__RELATIVE_PATH__\.EME_MANAGER\>", "\"../core/eme/index.js\""],
83
- ["\<__RELATIVE_PATH__\.IMAGE_BUFFER\>", "\"../core/segment_buffers/implementations/image/index.js\""],
84
- ["\<__RELATIVE_PATH__\.BIF_PARSER\>", "\"../parsers/images/bif.js\""],
85
- ["\<__RELATIVE_PATH__\.SMOOTH\>", "\"../transports/smooth/index.js\""],
86
- ["\<__RELATIVE_PATH__\.DASH\>", "\"../transports/dash/index.js\""],
87
- ["\<__RELATIVE_PATH__\.DASH_JS_PARSER\>", "\"../parsers/manifest/dash/js-parser/index.js\""],
88
- ["\<__RELATIVE_PATH__\.LOCAL_MANIFEST\>", "\"../transports/local/index.js\""],
89
- ["\<__RELATIVE_PATH__\.METAPLAYLIST\>", "\"../transports/dash/index.js\""],
90
- ["\<__RELATIVE_PATH__\.NATIVE_TEXT_BUFFER\>", "\"../core/segment_buffers/implementations/text/native/index.js\""],
91
- ["\<__RELATIVE_PATH__\.NATIVE_VTT\>", "\"../parsers/texttracks/webvtt/native.js\""],
92
- ["\<__RELATIVE_PATH__\.NATIVE_SRT\>", "\"../parsers/texttracks/srt/native.js\""],
93
- ["\<__RELATIVE_PATH__\.NATIVE_TTML\>", "\"../parsers/texttracks/ttml/native/index.js\""],
94
- ["\<__RELATIVE_PATH__\.NATIVE_SAMI\>", "\"../parsers/texttracks/sami/native.js\""],
95
- ["\<__RELATIVE_PATH__\.HTML_TEXT_BUFFER\>", "\"../core/segment_buffers/implementations/text/html/index.js\""],
96
- ["\<__RELATIVE_PATH__\.HTML_VTT\>", "\"../parsers/texttracks/webvtt/html/index.js\""],
97
- ["\<__RELATIVE_PATH__\.HTML_SRT\>", "\"../parsers/texttracks/srt/html.js\""],
98
- ["\<__RELATIVE_PATH__\.HTML_TTML\>", "\"../parsers/texttracks/ttml/html/index.js\""],
99
- ["\<__RELATIVE_PATH__\.HTML_SAMI\>", "\"../parsers/texttracks/sami/html.js\""],
100
- ["\<__RELATIVE_PATH__\.DIRECTFILE\>", "\"../core/init/directfile.js\""],
101
- ["\<__RELATIVE_PATH__\.MEDIA_ELEMENT_TRACK_CHOICE_MANAGER\>", "\"../core/api/media_element_track_choice_manager.ts\""],
102
- ];
103
-
104
44
  generateBuild();
105
45
 
106
46
  /**
@@ -114,9 +54,6 @@ async function generateBuild() {
114
54
  console.log(" ⚙️ Compiling project with TypeScript...");
115
55
  await compile();
116
56
 
117
- console.log(" ✍️ Replacing compile-time tokens...");
118
- await setCompileTimeConstants();
119
-
120
57
  console.log(" 🚚 Moving built code to its final directory...");
121
58
  await fs.rename(TMP_BUILD_DIR, BUILD_DIR);
122
59
 
@@ -160,65 +97,6 @@ async function compile() {
160
97
  );
161
98
  }
162
99
 
163
- /**
164
- * Now the ugliest part.
165
- * Our TypeScript files contains multiple compile-time constants which is not
166
- * something that TypeScript seems to handle.
167
- *
168
- * Consequently we decided for now to rely on calling find+sed instead to
169
- * replace those tokens post-compilation.
170
- *
171
- * This is ugly for the following reasons:
172
- *
173
- * 1. The token replacement logic is a dumb find-and-replace with no notion of
174
- * the language. Here relying on tsc's AST is preferable because we would
175
- * be sur that only constants are replaced and not possibly random strings.
176
- *
177
- * To prevent most issue, we decided to give specific names to those global
178
- * constants that are highly unlikely to be retrieved in other contexts.
179
- *
180
- * 2. The user has to have both `find` and `sed` installed on his/her/its
181
- * computer.
182
- * Not only that, he/she/it has to run either linux or MacOS.
183
- * Not only that (again), an expected implementation of sed has to be found
184
- * according to the OS.
185
- *
186
- * So yeah, that's risky.
187
- *
188
- * We could develop a platform-independent solution either by:
189
- * - Write a plugin to TypeScript's compiler.
190
- * This is the preferred solution though its API seems to be pretty instable
191
- * according to its documentation, so I'm kind of afraid here that this task
192
- * (which pretty much "just works" today) is going to add much more
193
- * maintenance burden.
194
- *
195
- * - Rely on NodeJS tools. Here the quality seems to not be there from what
196
- * I've seen (I found mostly very slow tools).
197
- *
198
- * For now, my current strategy is to wait until the current logic explodes
199
- * (e.g. causes issues on a dev's computer)!
200
- *
201
- * @returns {Promise}
202
- */
203
- async function setCompileTimeConstants() {
204
- switch (os.type()) {
205
- case "Darwin":
206
- // MacOS:
207
- // MacOS comes with the BSD version of some command line tools, which are
208
- // slightly different from the Linux version. The -i argument on sed
209
- // doesn't work with a zero-length extension. Thus, we declare an extension,
210
- // and then delete back-up unwanted files.
211
- await replaceTokensWithBsdSed();
212
- break;
213
- case "Linux":
214
- // Linux -> let's consider that we have GNU sed here
215
- await replaceTokensWithGnuSed();
216
- break;
217
- default:
218
- throw new Error(`Cannot replace tokens: unrecognized platform "${os.type()}"`);
219
- }
220
- }
221
-
222
100
  /**
223
101
  * @returns {Promise}
224
102
  */
@@ -256,72 +134,6 @@ function removeFile(fileName) {
256
134
  });
257
135
  }
258
136
 
259
- /**
260
- * @returns {Promise}
261
- */
262
- async function replaceTokensWithBsdSed() {
263
- const sedExecCommand =
264
- "sed -i.DELETE -E \"" +
265
- REPLACED_TOKENS_SED_REGXP.reduce((acc, val, idx) => {
266
- const escapedToken = val[0]
267
- .replace(/\</g, "[[:<:]]") // starting word boundary
268
- .replace(/\>/g, "[[:>:]]") // ending word boundary
269
- .replace(/\\/g, "\\\\") // \ by \\ (double escape because in string)
270
- .replace(/\//g, "\\\\/") // / by \\/ (/ is the sed separator)
271
- .replace(/"/g, "\\\""); // " by \"
272
- const escapedReplacement = val[1]
273
- .replace(/\\/g, "\\\\")
274
- .replace(/\//g, "\\\\/")
275
- .replace(/"/g, "\\\"");
276
- if (idx < REPLACED_TOKENS_SED_REGXP.length - 1) {
277
- return acc + `s/${escapedToken}/${escapedReplacement}/g; `
278
- } else {
279
- return acc + `s/${escapedToken}/${escapedReplacement}/g" '{}' \\;`;
280
- }
281
- }, "");
282
- await spawnProm(
283
- `find "${TMP_BUILD_DIR}" -type f -iname '*.js' -exec ${sedExecCommand}`,
284
- [],
285
- (code) => new Error(`Token-replacement process exited with code ${code}`),
286
- );
287
- await spawnProm(
288
- `find "${TMP_BUILD_DIR}" -type f -name "*.DELETE" -delete`,
289
- [],
290
- (code) => new Error(`Token-replacement cleaning process exited with code ${code}`),
291
- );
292
- }
293
-
294
- /**
295
- * @returns {Promise}
296
- */
297
- async function replaceTokensWithGnuSed() {
298
- const sedExecCommand =
299
- "sed -i -E \"" +
300
- REPLACED_TOKENS_SED_REGXP.reduce((acc, val, idx) => {
301
- const escapedToken = val[0]
302
- .replace(/\</g, "\\b") // starting word boundary
303
- .replace(/\>/g, "\\b") // ending word boundary
304
- .replace(/\\/g, "\\\\") // \ by \\ (double escape because in string)
305
- .replace(/\//g, "\\\\/") // / by \\/ (/ is the sed separator)
306
- .replace(/"/g, "\\\""); // " by \"
307
- const escapedReplacement = val[1]
308
- .replace(/\\/g, "\\\\")
309
- .replace(/\//g, "\\\\/")
310
- .replace(/"/g, "\\\"");
311
- if (idx < REPLACED_TOKENS_SED_REGXP.length - 1) {
312
- return acc + `s/${escapedToken}/${escapedReplacement}/g; `
313
- } else {
314
- return acc + `s/${escapedToken}/${escapedReplacement}/g" '{}' \\;`;
315
- }
316
- }, "");
317
-
318
- await spawnProm(
319
- `find "${TMP_BUILD_DIR}" -type f -iname '*.js' -exec ${sedExecCommand}`,
320
- [],
321
- (code) => new Error(`Token-replacement process exited with code ${code}`),
322
- );
323
- }
324
-
325
137
  /**
326
138
  * @param {string} command
327
139
  * @param {Array.<string>} args
@@ -372,7 +184,7 @@ async function replaceTokensInTemplates(fileDest) {
372
184
  await spawnProm(
373
185
  `find "${fileDest}" -type f -name "*.DELETE" -delete`,
374
186
  [],
375
- (code) => new Error(`Template cleaning process exited with code ${cleaningCode}`),
187
+ (code) => new Error(`Template cleaning process exited with code ${code}`),
376
188
  );
377
189
 
378
190
  case "Linux":
@@ -5,15 +5,13 @@
5
5
  * @param {string} md - The markdown content
6
6
  * @returns {string}
7
7
  */
8
- module.exports = function constructTableOfContents(md) {
8
+ function constructTableOfContents(md) {
9
9
  const tocLines = [];
10
10
  const newContent = [];
11
11
  const lines = md.split(/\r\n|\n|\r/);
12
12
 
13
- // Objects used to avoid duplicates
14
- const generatedTitleURIs = {};
15
- const generatedChapterURIs = {};
16
- const generatedSubchapterURIs = {};
13
+ // Object used to avoid duplicates
14
+ const generatedAnchors = {};
17
15
 
18
16
  // The inputed markdown is read line by line.
19
17
  // When a h1, h2 or h3 is encountered in it, add a new list entry
@@ -22,18 +20,14 @@ module.exports = function constructTableOfContents(md) {
22
20
  // add `<a>` links just before the corresponding h1, h2 or h3 elements in the
23
21
  // inputed markdown.
24
22
  // All Markdown parsing done here corresponds to the CommonMark spec (v0.29)
25
- // TODO this should be much more efficient and less error-prone if integrated
26
- // as a markdown-it plugin.
23
+ // TODO this might be more efficient and less error-prone if integrated as a
24
+ // markdown-it plugin.
27
25
  for (let i = 0, len = lines.length; i < len; i++) {
28
26
  if (/^ *# +/.test(lines[i])) {
29
27
  const regExec = /^ *# +(.*)$/.exec(lines[i]);
30
28
  if (regExec && regExec[1]) {
31
29
  const tocLine = regExec[1].replace(/ #* *$/, "").trim();
32
- let uri = "title-" + encodeURI(tocLine);
33
- while (generatedTitleURIs[uri] === true) {
34
- uri += "-bis";
35
- }
36
- generatedTitleURIs[uri] = true;
30
+ let uri = generateAnchorName(tocLine);
37
31
  tocLines.push(`[${tocLine}](#${uri})`);
38
32
  newContent.push(`<a name="${uri}"></a>`);
39
33
  }
@@ -41,11 +35,7 @@ module.exports = function constructTableOfContents(md) {
41
35
  const regExec = /^ *## +(.*)$/.exec(lines[i]);
42
36
  if (regExec && regExec[1]) {
43
37
  const tocLine = regExec[1].replace(/ #* *$/, "").trim();
44
- let uri = "chapter-" + encodeURI(tocLine);
45
- while (generatedChapterURIs[uri] === true) {
46
- uri += "-bis";
47
- }
48
- generatedChapterURIs[uri] = true;
38
+ let uri = generateAnchorName(tocLine);
49
39
  tocLines.push(` - [${tocLine}](#${uri})`);
50
40
  newContent.push(`<a name="${uri}"></a>`);
51
41
  }
@@ -53,17 +43,34 @@ module.exports = function constructTableOfContents(md) {
53
43
  const regExec = /^ *### +(.*)$/.exec(lines[i]);
54
44
  if (regExec && regExec[1]) {
55
45
  const tocLine = regExec[1].replace(/ #* *$/, "").trim();
56
- let uri = "subchapter-" + encodeURI(tocLine);
57
- while (generatedSubchapterURIs[uri] === true) {
58
- uri += "-bis";
59
- }
60
- generatedSubchapterURIs[uri] = true;
46
+ let uri = generateAnchorName(tocLine);
61
47
  tocLines.push(` - [${tocLine}](#${uri})`);
62
48
  newContent.push(`<a name="${uri}"></a>`);
63
49
  }
64
50
  }
65
51
  newContent.push(lines[i]);
66
52
  }
67
- return { toc: tocLines.join("\n"),
68
- content: newContent.join("\n") };
53
+ return {
54
+ tocMd: tocLines.join("\n"),
55
+ nbTocElements: tocLines.length,
56
+ content: newContent.join("\n"),
57
+ };
58
+
59
+ function generateAnchorName(title) {
60
+ const baseUri = encodeURI(title.toLowerCase().replace(/ /g, "_"))
61
+ if (generatedAnchors[baseUri] !== true) {
62
+ generatedAnchors[baseUri] = true;
63
+ return baseUri;
64
+ }
65
+ let i = 1;
66
+ let resultUri;
67
+ do {
68
+ resultUri = `${baseUri}_(${i})`;
69
+ i++;
70
+ } while (generatedAnchors[resultUri] === true);
71
+ generatedAnchors[resultUri] = true;
72
+ return resultUri;
73
+ }
69
74
  };
75
+
76
+ module.exports = constructTableOfContents;
@@ -1,11 +1,12 @@
1
1
  const hljs = require("highlight.js");
2
- const emoji = require("markdown-it-emoji");
3
2
  const md = require("markdown-it")({
4
- highlight: function (str, lang) {
3
+ highlight(str, lang) {
5
4
  if (lang && hljs.getLanguage(lang)) {
6
5
  try {
7
6
  return hljs.highlight(str, { language: lang }).value;
8
- } catch (_) {}
7
+ } catch (_) {
8
+ /* don't care for now */
9
+ }
9
10
  }
10
11
  return "";
11
12
  },
@@ -15,11 +16,6 @@ const md = require("markdown-it")({
15
16
  xhtmlOut: true,
16
17
  });
17
18
 
18
- md.use(emoji);
19
- md.renderer.rules.emoji = function(token, idx) {
20
- return `<span class="emoji emoji_${token[idx].markup}">${token[idx].content}</span>`;
21
- };
22
-
23
19
  /**
24
20
  * Convert the Markdown document given into an HTML page.
25
21
  * @param {string} mdStr