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
@@ -2,30 +2,52 @@ const { promisify } = require("util");
2
2
  const cheerio = require("cheerio");
3
3
  const fs = require("fs");
4
4
  const path = require("path");
5
- const mkdirParent = require("./mkdir_parent.js");
6
- const readTitleFromMD = require("./read_title_from_md.js");
5
+ const buildSearchIndex = require("./build_search_index.js");
7
6
  const convertMDToHTML = require("./convert_MD_to_HMTL.js");
8
7
  const constructTableOfContents = require("./construct_table_of_contents.js");
9
- const constructHTML = require("./construct_html.js");
8
+ const constructHtml = require("./construct_html.js");
9
+ const {
10
+ mkdirParent,
11
+ toUriCompatibleRelativePath,
12
+ } = require("./utils.js");
10
13
 
11
14
  /**
12
15
  * Create and write HTML page output file from the markdown input file.
13
- * @param {string} inputFile - Path to the file input (a Markdown file).
14
- * @param {string} outputFile - Path to the resulting file output (HTML file).
15
- * @param {Object} [options={}]
16
+ * @param {Object} options
16
17
  * @returns {Promise}
17
18
  */
18
- module.exports = async function createDocumentationPage(
19
+ module.exports = async function createDocumentationPage({
20
+ // Absolute path to the root dir where all outputed files will be
21
+ baseOutDir,
22
+ // Relative CSS URIs on this page
23
+ cssUris,
24
+ // Absolute path to the file that should be converted
19
25
  inputFile,
26
+ // Function translating links in Markdown files to an URL form to the right file
27
+ linkTranslator,
28
+ // HTML string for the navbar (the header on the top of the page)
29
+ navBarHtml,
30
+ // Information relative to the next documentation page, `null` if none.
31
+ nextPageInfo,
32
+ // Absolute path where the generated page should be generated.
20
33
  outputFile,
21
- options = {},
22
- ) {
23
- const { css = [],
24
- linkTranslator = (link) => link,
25
- getPageTitle = a => a,
26
- beforeParse,
27
- homeLink,
28
- listLink } = options;
34
+ // Title of the corresponding HTML page
35
+ pageTitle,
36
+ // Information relative to the previous documentation page, `null` if none.
37
+ prevPageInfo,
38
+ // Relative JS URIs on this page
39
+ scriptUris,
40
+ // Array corresponding to the complete search index.
41
+ // It will be completed with data present in this file.
42
+ searchIndex,
43
+ // HTML string for the sidebar
44
+ sidebarHtml,
45
+ }) {
46
+ const rootUrl = toUriCompatibleRelativePath(
47
+ path.resolve(baseOutDir),
48
+ path.dirname(outputFile)
49
+ );
50
+ const outputUrlFromRoot = toUriCompatibleRelativePath(outputFile, baseOutDir);
29
51
 
30
52
  const outputDir = path.dirname(outputFile);
31
53
  let data;
@@ -38,25 +60,30 @@ module.exports = async function createDocumentationPage(
38
60
  return;
39
61
  }
40
62
  const inputDir = path.dirname(inputFile);
41
- const pageTitle = readTitleFromMD(data) || "Untitled Page";
63
+ const { content, tocMd, nbTocElements } = constructTableOfContents(data);
42
64
 
43
- // remove original table of contents if one and generate new one
44
- const toParse = beforeParse != null ?
45
- beforeParse(data) :
46
- data;
47
- const { content, toc } = constructTableOfContents(toParse);
65
+ let contentHtml = await parseMD(content, inputDir, outputDir, linkTranslator);
66
+ const indexForFile = buildSearchIndex(contentHtml);
67
+ searchIndex.push({
68
+ file: outputUrlFromRoot,
69
+ index: indexForFile,
70
+ });
71
+ contentHtml += constructNextPreviousPage(prevPageInfo, nextPageInfo);
48
72
 
49
- const domContent = await parseMD(content,
50
- inputDir,
51
- outputDir,
52
- linkTranslator);
73
+ const tocHtml = nbTocElements > 1 ?
74
+ generateTocbarHtml(tocMd) :
75
+ "";
76
+ const html = constructHtml({
77
+ contentHtml,
78
+ cssUris,
79
+ navBarHtml,
80
+ rootUrl,
81
+ scriptUris,
82
+ sidebarHtml,
83
+ title: pageTitle,
84
+ tocHtml,
85
+ });
53
86
 
54
- const html = constructHTML(getPageTitle(pageTitle),
55
- domContent,
56
- { css,
57
- toc,
58
- homeLink,
59
- listLink });
60
87
  try {
61
88
  await promisify(fs.writeFile)(outputFile, html);
62
89
  } catch (err) {
@@ -80,9 +107,45 @@ async function updateMediaTag(mediaTag, inputDir, outputDir) {
80
107
  const outDir = path.dirname(outputFile);
81
108
  const doesOutDirExists = await promisify(fs.exists)(outDir);
82
109
  if (!doesOutDirExists) {
83
- await mkdirParent(outDir);
110
+ try {
111
+ await mkdirParent(outDir);
112
+ } catch (err) {
113
+ const srcMessage = (err ?? {}).message ?? "Unknown error";
114
+ console.error(`Error: Could not create "${outDir}" directory: ${srcMessage}`);
115
+ process.exit(1);
116
+ }
117
+ }
118
+ const doesOutFileExist = await promisify(fs.exists)(outputFile);
119
+ if (!doesOutFileExist) {
120
+ await promisify(fs.copyFile)(inputFile, outputFile);
121
+ }
122
+ }
123
+
124
+ function constructNextPreviousPage(prevPageInfo, nextPageInfo) {
125
+ if (prevPageInfo === null && nextPageInfo === null) {
126
+ return "";
127
+ }
128
+
129
+ const prevPageElt = createNextPrevElt(prevPageInfo, false);
130
+ const nextPageElt = createNextPrevElt(nextPageInfo, true);
131
+ return `<nav class="next-previous-page-wrapper" aria-label="Navigate between pages">` +
132
+ prevPageElt +
133
+ nextPageElt +
134
+ `</nav>`;
135
+
136
+ function createNextPrevElt(pageInfo, isNext) {
137
+ const base = `<div class="next-or-previous-page${isNext ? " next-page" : ""}">`;
138
+ if (pageInfo === null) {
139
+ return base + "</div>";
140
+ }
141
+ return base +
142
+ `<a class="next-or-previous-page-link" href="${pageInfo.link}">` +
143
+ `<div class="next-or-previous-page-link-label">` +
144
+ (isNext ? "Next" : "Previous") +
145
+ "</div>" +
146
+ `<div class="next-or-previous-page-link-name">${pageInfo.name}</div>` +
147
+ "</a></div>";
84
148
  }
85
- await promisify(fs.copyFile)(inputFile, outputFile);
86
149
  }
87
150
 
88
151
  /**
@@ -100,13 +163,17 @@ async function updateMediaTag(mediaTag, inputDir, outputDir) {
100
163
  */
101
164
  async function parseMD(data, inputDir, outputDir, linkTranslator) {
102
165
  // TODO I don't understand Cheerio/Jquery here, that's plain ugly
103
- // TODO use markdown-it plugin instead
166
+ // use markdown-it plugin instead?
104
167
  const $ = cheerio.load(convertMDToHTML(data));
105
168
 
106
169
  if (linkTranslator) {
107
170
  $("a").each((_, elem) => {
108
171
  const href = $(elem).attr("href");
109
- if (href) {
172
+ if (
173
+ typeof href === "string" &&
174
+ !/^(?:[a-z]+:)/.test(href) &&
175
+ href[0] !== "#"
176
+ ) {
110
177
  $(elem).attr("href", linkTranslator(href));
111
178
  }
112
179
  });
@@ -126,3 +193,18 @@ async function parseMD(data, inputDir, outputDir, linkTranslator) {
126
193
  }
127
194
  return $.html();
128
195
  }
196
+
197
+ /**
198
+ * Construct the table of contents part of the HTML page, containing various
199
+ * links to the current documentation page.
200
+ * @param {string} toc - Markdown for the table of contents under a list form.
201
+ * @returns {string} - sidebar div tag
202
+ */
203
+ function generateTocbarHtml(tocMd) {
204
+ const tocHtml = convertMDToHTML(tocMd);
205
+ return "<div class=\"tocbar-wrapper\">" +
206
+ "<div class=\"tocbar\">" +
207
+ tocHtml +
208
+ "</div>" +
209
+ "</div>";
210
+ }
@@ -0,0 +1,148 @@
1
+ const path = require("path");
2
+ const { encode } = require("html-entities");
3
+ const {
4
+ encodeHtmlAttributeValue,
5
+ toUriCompatibleRelativePath,
6
+ getGithubSvg,
7
+ } = require("./utils");
8
+
9
+ /**
10
+ * Construct HTML element, as a string, which corresponds to the header for
11
+ * the chosen documentation page.
12
+ * @param {Object} config
13
+ * @param {number} currentLinkIdx
14
+ * @param {string} currentPath
15
+ * @param {object} logoInfo
16
+ * @returns {string}
17
+ */
18
+ function generateHeaderHtml(config, currentLinkIdx, currentPath, logoInfo) {
19
+ const { versionInfo, links, linksRightIndex } = config;
20
+ const hamburgerHtml = constructHamburgerMenuHtmlInHeaderBar();
21
+ const logoHtml = constructLogoHtmlInHeaderBar(logoInfo);
22
+ const currentDir = path.dirname(currentPath);
23
+
24
+ const linksHtml = links.map((l, i) => {
25
+ const customClass =
26
+ i === linksRightIndex ? " first-right" :
27
+ i === linksRightIndex - 1 ? " last-left" :
28
+ "";
29
+ switch (l.type) {
30
+ case "local-doc": {
31
+ const relativeUri = toUriCompatibleRelativePath(l.firstPage, currentDir);
32
+ const activeClass = i === currentLinkIdx ? " navbar-active" : "";
33
+ const cleanedHref = encodeHtmlAttributeValue(relativeUri);
34
+ return `<a class="navbar-item${activeClass}${customClass} hideable"` +
35
+ `href="${cleanedHref}">${encode(l.displayName)}</a>`;
36
+ }
37
+ case "external-link": {
38
+ const cleanedHref = encodeHtmlAttributeValue(l.link);
39
+ return `<a class="navbar-item${customClass} hideable"` +
40
+ `href="${cleanedHref}">${encode(l.displayName)}</a>`;
41
+ }
42
+ case "github-link":
43
+ return constructGithubLinkHtmlInHeaderBar(l.link, customClass);
44
+ case "search":
45
+ return constructSearchHtmlInHeaderBar(customClass);
46
+ case "version":
47
+ return constructVersionLinkHtmlInHeaderBar(versionInfo, customClass);
48
+ }
49
+ }).join("\n");
50
+ return `<nav class="navbar-parent">` +
51
+ `<div class="navbar-wrapper">` +
52
+ `<div class="navbar-items">` +
53
+ hamburgerHtml +
54
+ logoHtml +
55
+ linksHtml +
56
+ "</div></div> </nav>";
57
+ }
58
+
59
+ function constructHamburgerMenuHtmlInHeaderBar() {
60
+ return `<button aria-label="Open website index" class="hamburger-opener">` +
61
+ `<svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true">` +
62
+ `<path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" ` +
63
+ `stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg>` +
64
+ "</button>";
65
+ }
66
+
67
+ /**
68
+ * Returns the HTML string corresponding to the current version number, if
69
+ * available, and with the corresponding link, also if available.
70
+ * @param {Object} versionInfo
71
+ * @param {string} customClass
72
+ * @returns {string}
73
+ */
74
+ function constructVersionLinkHtmlInHeaderBar(versionInfo, customClass) {
75
+ if (
76
+ versionInfo === undefined || versionInfo === null ||
77
+ typeof versionInfo.version !== "string"
78
+ ) {
79
+ return "";
80
+ }
81
+ let element = "";
82
+ let hasLink = false;
83
+ const { version } = versionInfo;
84
+ if (typeof versionInfo.link === "string") {
85
+ hasLink = true;
86
+ element += `<a class="navbar-item${customClass}"` +
87
+ `href="${encodeHtmlAttributeValue(versionInfo.link)}">`;
88
+ } else {
89
+ element += `<span class="navbar-item${customClass}">`;
90
+ }
91
+ element += `<span class="version-item">version: ${encode(version)}</span>`;
92
+ element += hasLink ? "</a>" : "</span>";
93
+ return element;
94
+ }
95
+
96
+ /**
97
+ * Returns the HTML string corresponding to the link to the github repository,
98
+ * through a SVG representing Github's logo.
99
+ * @param {string} githubLnk
100
+ * @param {string} customClass
101
+ * @returns {string}
102
+ */
103
+ function constructGithubLinkHtmlInHeaderBar(githubLnk, customClass) {
104
+ const cleanedHref = encodeHtmlAttributeValue(githubLnk);
105
+ return `<a aria-label="Link to repository" class="navbar-item${customClass} hideable" href="${cleanedHref}">` +
106
+ getGithubSvg() +
107
+ "</a>";
108
+ }
109
+
110
+ function constructSearchHtmlInHeaderBar(customClass) {
111
+ return `<span class="navbar-item search-icon${customClass}">` +
112
+ `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" ` +
113
+ `viewBox="0 0 20 20">` +
114
+ `<title>search</title>` +
115
+ `<path d="M19 17l-5.15-5.15a7 7 0 1 0-2 2L17 19zM3.5 8A4.5 4.5 ` +
116
+ `0 1 1 8 12.5 4.5 4.5 0 0 1 3.5 8z"/>` +
117
+ `<script xmlns=""/></svg>` +
118
+ `</span>`;
119
+ }
120
+
121
+ /**
122
+ * Returns the HTML string corresponding to the logo of the current project, if
123
+ * available, and with the corresponding link, also if available.
124
+ * @param {Object|undefined} logoInfo
125
+ * @returns {string}
126
+ */
127
+ function constructLogoHtmlInHeaderBar(logoInfo) {
128
+ if (logoInfo === null || logoInfo === undefined) {
129
+ return "";
130
+ }
131
+
132
+ let logoHtml = "";
133
+ let hasLink = false;
134
+ if (typeof logoInfo.link === "string") {
135
+ hasLink = true;
136
+ logoHtml += `<a href="${encodeHtmlAttributeValue(logoInfo.link)}">`;
137
+ }
138
+ if (typeof logoInfo.url === "string") {
139
+ logoHtml += `<img alt="Logo" class="navbar-item navbar-item-logo"` +
140
+ ` src="${encodeHtmlAttributeValue(logoInfo.url)}" />`;
141
+ }
142
+ if (hasLink) {
143
+ logoHtml += "</a>";
144
+ }
145
+ return logoHtml;
146
+ }
147
+
148
+ module.exports = generateHeaderHtml;
@@ -0,0 +1,116 @@
1
+ const { encode } = require("html-entities");
2
+ const { encodeHtmlAttributeValue } = require("./utils");
3
+
4
+ /**
5
+ * Generate HTML page for the given documentation.
6
+ * @param {Object} args
7
+ * @param {string} args.contentHtml - HTML content for the content of the
8
+ * @param {Array.<string>} args.cssUrls - URLs to the CSS files that should
9
+ * be imported.
10
+ * @param {string|null|undefined} [args.faviconUrl] - Eventual URL to the
11
+ * favicon.
12
+ * `null` or `undefined` if unset.
13
+ * @param {string} options.navBarHtml - HTML strinng for the Navbar (the
14
+ * header).
15
+ * @param {string} options.pageListHtml - HTML string for the complete list of
16
+ * documentation pages with links.
17
+ * @param {string} options.rootUrl - Relative URL for the root of the site.
18
+ * This value is included in a custom script so it can be accessed from other
19
+ * JavaScript files.
20
+ * @param {Array.<string>} args.scriptUrls - URLs to the JS files that should
21
+ * be imported.
22
+ * @param {string} options.sidebarHtml - HTML string for the Sidebar.
23
+ * @param {string} args.title - title of the page.
24
+ * @param {string} options.tocHtml - HTML string for the Table of content.
25
+ * `undefined` if your page has no table of contents.
26
+ * @returns {string} - Whole HTML string for the documentation page.
27
+ */
28
+ function generatePageHtml(
29
+ {
30
+ contentHtml,
31
+ cssUrls,
32
+ faviconUrl,
33
+ navBarHtml,
34
+ pageListHtml,
35
+ rootUrl,
36
+ scriptUrls,
37
+ sidebarHtml,
38
+ title,
39
+ tocHtml,
40
+ }
41
+ ) {
42
+ const styles = constructStylesHtml(cssUrls);
43
+ const scripts = constructScriptsHtml(scriptUrls);
44
+ const faviconHtml = typeof faviconUrl === "string" ?
45
+ `<link rel="icon" type="image/png" href="${encodeHtmlAttributeValue(faviconUrl)}">` :
46
+ "";
47
+ const hamburgerHtml = constructHamburgerBarHtml(pageListHtml);
48
+
49
+ return "<!DOCTYPE html><html lang=\"en\"><head>" +
50
+ "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" +
51
+ "<meta charset=\"utf-8\">" +
52
+ styles +
53
+ "<title>" + encode(title) + "</title>" +
54
+ faviconHtml +
55
+ "</head>" +
56
+ "<body class=\"no-js\">" +
57
+ `<script type="text/javascript">` +
58
+ `document.body.className = "";` +
59
+ `window.rootUrl = "${rootUrl}";` +
60
+ "</script>" +
61
+ "<div class=\"page-wrapper\">" +
62
+ navBarHtml +
63
+ sidebarHtml +
64
+ "<div class=\"content-wrapper\">" +
65
+ "<div class=\"content\">" +
66
+ `<div id="search-wrapper">` +
67
+ `<input type="search" name="search" id="searchbar" ` +
68
+ `placeholder="Search in this documentation" class="active" />` +
69
+ `<div id="search-results"></div>` +
70
+ `</div>` +
71
+ contentHtml +
72
+ `</div>` +
73
+ tocHtml +
74
+ "</div>" +
75
+ "</div>" +
76
+ hamburgerHtml +
77
+ scripts +
78
+ "</body></html>";
79
+ };
80
+
81
+ function constructHamburgerBarHtml(pageListHtml) {
82
+ return `<div class="hamburger-bar">` +
83
+ `<div class="hamburger-header">` +
84
+ `<span class="hamburger-title">Page List</span>` +
85
+ `<button aria-label="Close website index" type="button" class="hamburger-bar-closer">` +
86
+ `<svg viewBox="0 0 15 15" width="21" height="21">` +
87
+ `<g stroke="black" stroke-width="1.2"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g>` +
88
+ `</svg></button>` +
89
+ `</div>` +
90
+ pageListHtml +
91
+ "</div>";
92
+ }
93
+
94
+ /**
95
+ * Returns links to CSS file as an HTML string to be included in the page.
96
+ * @param {Array.<string>} cssUrls - URL to CSS files
97
+ * @returns {string}
98
+ */
99
+ function constructStylesHtml(cssUrls) {
100
+ return cssUrls.map(cssUrl =>
101
+ `<link rel="stylesheet" href="${encodeHtmlAttributeValue(cssUrl)}"/>`)
102
+ .join("");
103
+ }
104
+
105
+ /**
106
+ * @param {Array.<string>} scriptUrls - URL to scripts files
107
+ * @returns {string}
108
+ */
109
+ function constructScriptsHtml(scriptUrls) {
110
+ return scriptUrls.map(scriptUrl =>
111
+ `<script type="text/javascript" src="${encodeHtmlAttributeValue(scriptUrl)}" ` +
112
+ `charset="utf-8"></script>`
113
+ ).join("");
114
+ }
115
+
116
+ module.exports = generatePageHtml;
@@ -0,0 +1,93 @@
1
+ const { encode } = require("html-entities");
2
+ const path = require("path");
3
+ const {
4
+ encodeHtmlAttributeValue,
5
+ getGithubSvg,
6
+ toUriCompatibleRelativePath,
7
+ } = require("./utils");
8
+
9
+ /**
10
+ * Construct exhaustive list of documentation links as an HTML string.
11
+ * @param {Array.<Object>} links
12
+ * @param {number} currentLinkIdx
13
+ * @param {Array.<number>} currentPageIndexes
14
+ * @param {string} currentPath
15
+ * @returns {string}
16
+ */
17
+ function generatePageListHtml(
18
+ links,
19
+ currentLinkIdx,
20
+ currentPageIndexes,
21
+ currentPath
22
+ ) {
23
+ const currentDir = path.dirname(currentPath);
24
+ const linksHtml = links.map((l, linkIdx) => {
25
+ switch (l.type) {
26
+ case "local-doc": {
27
+ const isActiveCat = linkIdx === currentLinkIdx;
28
+ const catActiveClasses = isActiveCat ? " opened active" : "";
29
+
30
+ const catHtml = `<li class="page-list-item">` +
31
+ `<div class="page-list-group${catActiveClasses}">` +
32
+ encode(l.displayName) +
33
+ `</div><ul class="page-list-cat-group">`;
34
+
35
+ return catHtml + l.pages.map((currentPage, pageidx) => {
36
+ const isPageActive = isActiveCat && pageidx === currentPageIndexes[0];
37
+ const { displayName, outputFile } = currentPage;
38
+ if (!currentPage.isPageGroup) {
39
+ const pageActiveClasses = isPageActive ? " active" : "";
40
+ const relativeUri = toUriCompatibleRelativePath(outputFile, currentDir);
41
+ return `<li class="page-list-item${pageActiveClasses}">` +
42
+ `<a href="${encodeHtmlAttributeValue(relativeUri)}">` +
43
+ encode(displayName) +
44
+ `</a></li>`;
45
+ }
46
+ const pageActiveClasses = isPageActive ? " opened active" : "";
47
+ const pageGroupHtml = `<li>` +
48
+ `<div class="page-list-item page-list-group${pageActiveClasses}">` +
49
+ encode(displayName) +
50
+ `</div><ul class="page-list-group-group">`;
51
+ return pageGroupHtml + currentPage.pages.map((currentSubPage, spIdx) => {
52
+ const spActiveClasses = isPageActive && spIdx === currentPageIndexes[1] ?
53
+ " active" : "";
54
+ const { displayName, outputFile } = currentSubPage;
55
+ const relativeUri = toUriCompatibleRelativePath(outputFile, currentDir);
56
+ return `<li class="page-list-item${spActiveClasses}">` +
57
+ `<a href="${encodeHtmlAttributeValue(relativeUri)}">` +
58
+ encode(displayName) +
59
+ `</a></li>`;
60
+ }).join("\n") + "</ul></li>";
61
+ }).join("\n") + "</ul></li>";
62
+ }
63
+
64
+ case "external-link": {
65
+ const cleanedHref = encodeHtmlAttributeValue(l.link);
66
+ return `<li class="page-list-item">` +
67
+ `<a href="${cleanedHref}">` +
68
+ encode(l.displayName) +
69
+ "</a></li>";
70
+ }
71
+
72
+ case "github-link":
73
+ const cleanedHref = encodeHtmlAttributeValue(l.link);
74
+ return `<li class="page-list-item">` +
75
+ `<a aria-label="Link to repository" href="${cleanedHref}">` +
76
+ getGithubSvg() +
77
+ "</a></li>";
78
+
79
+ case "search":
80
+ return "";
81
+
82
+ case "version":
83
+ // TODO?
84
+ return "";
85
+ }
86
+ }).join("\n");
87
+
88
+ return `<ul class="page-list-wrapper">` +
89
+ linksHtml +
90
+ "</ul>";
91
+ };
92
+
93
+ module.exports = generatePageListHtml;
@@ -0,0 +1,88 @@
1
+ const path = require("path");
2
+ const { encode } = require("html-entities");
3
+ const {
4
+ encodeHtmlAttributeValue,
5
+ toUriCompatibleRelativePath,
6
+ } = require("./utils");
7
+
8
+ /**
9
+ * Construct HTML element, as a string, which corresponds to the sidebar for
10
+ * the chosen documentation page.
11
+ * @param {Array.<Object>} pages
12
+ * @param {Array.<number>} currentPageIndexes
13
+ * @param {string} currentPath
14
+ * @param {Object} logoInfo
15
+ * @returns {string}
16
+ */
17
+ function generateSidebarHtml(
18
+ pages,
19
+ currentPageIndexes,
20
+ currentPath,
21
+ logoInfo
22
+ ) {
23
+ const sidebarHeaderHtml = constructSidebarHeaderHtml(logoInfo);
24
+ const links = pages.map((p, i) => {
25
+ const isActive = i === currentPageIndexes[0];
26
+ if (!p.isPageGroup) {
27
+ return generateLiForPage(p, isActive);
28
+ } else {
29
+ const lis = p.pages.map((sp, j) => {
30
+ const isActiveSubPage = isActive && j === currentPageIndexes[1];
31
+ return generateLiForPage(sp, isActiveSubPage);
32
+ }).join("");
33
+ return `<li class="sidebar-item">` +
34
+ `<div class="sidebar-item sidebar-item-group${isActive ? " active opened" : ""}">` +
35
+ encode(p.displayName) +
36
+ "</div>" +
37
+ `<ul>${lis}</ul>` +
38
+ "</li>";
39
+
40
+ }
41
+ }).join("");
42
+ return `<aside class="sidebar-parent">` +
43
+ sidebarHeaderHtml +
44
+ `<div class="sidebar-wrapper">` +
45
+ `<div class="sidebar-items">${links}</div>` +
46
+ "</div>" +
47
+ "</aside>";
48
+
49
+ function generateLiForPage(p, isActive) {
50
+ const relativeUri = toUriCompatibleRelativePath(
51
+ p.outputFile,
52
+ path.dirname(currentPath)
53
+ );
54
+ const activeClass = isActive ? " active" : "";
55
+ const cleanedHref = encodeHtmlAttributeValue(relativeUri);
56
+ return "<li class=\"sidebar-item\">" +
57
+ `<a class="sidebar-link${activeClass}" href="` +
58
+ cleanedHref +
59
+ `">${encode(p.displayName)}</a>` +
60
+ "</li>";
61
+ }
62
+ }
63
+
64
+ /**
65
+ * @param {Object} logoInfo
66
+ * @returns {string}
67
+ */
68
+ function constructSidebarHeaderHtml(logoInfo) {
69
+ let sidebarHeaderHtml = `<div class="sidebar-header">`;
70
+ if (logoInfo !== undefined) {
71
+ let hasLink = false;
72
+ if (typeof logoInfo.link === "string") {
73
+ hasLink = true;
74
+ sidebarHeaderHtml += `<a href="${encodeHtmlAttributeValue(logoInfo.link)}">`;
75
+ }
76
+ if (typeof logoInfo.url === "string") {
77
+ sidebarHeaderHtml += `<img alt="logo" class="sidebar-header-logo"` +
78
+ ` src="${encodeHtmlAttributeValue(logoInfo.url)}" />`;
79
+ }
80
+ if (hasLink) {
81
+ sidebarHeaderHtml += "</a>";
82
+ }
83
+ }
84
+ sidebarHeaderHtml += `</div>`;
85
+ return sidebarHeaderHtml;
86
+ }
87
+
88
+ module.exports = generateSidebarHtml;