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