rx-player 4.0.0-beta.0 → 4.0.0-beta.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.
- package/.eslintrc.js +8 -0
- package/CHANGELOG.md +93 -0
- package/CONTRIBUTING.md +48 -168
- package/FILES.md +40 -92
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/browser_detection.d.ts +25 -12
- package/dist/_esm5.processed/compat/browser_detection.js +85 -38
- package/dist/_esm5.processed/compat/can_reuse_media_keys.js +2 -2
- package/dist/_esm5.processed/compat/eme/close_session.js +2 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +1 -1
- package/dist/_esm5.processed/compat/event_listeners.js +1 -1
- package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.d.ts +21 -0
- package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.js +26 -0
- package/dist/_esm5.processed/config.d.ts +4 -0
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +9 -6
- package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.d.ts +18 -1
- package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.js +106 -25
- package/dist/_esm5.processed/core/adaptive/guess_based_chooser.js +6 -6
- package/dist/_esm5.processed/core/adaptive/network_analyzer.js +8 -5
- package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.d.ts +19 -1
- package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.js +1 -1
- package/dist/_esm5.processed/core/api/debug/buffer_graph.d.ts +28 -0
- package/dist/_esm5.processed/core/api/debug/buffer_graph.js +175 -0
- package/dist/_esm5.processed/core/api/debug/buffer_size_graph.d.ts +10 -0
- package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +104 -0
- package/dist/_esm5.processed/core/api/debug/constants.d.ts +2 -0
- package/dist/_esm5.processed/core/api/debug/constants.js +2 -0
- package/dist/_esm5.processed/core/api/debug/index.d.ts +2 -0
- package/dist/_esm5.processed/core/api/debug/index.js +2 -0
- package/dist/_esm5.processed/core/api/debug/modules/general_info.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/modules/general_info.js +180 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.d.ts +4 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +121 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +35 -0
- package/dist/_esm5.processed/core/api/debug/render.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/render.js +32 -0
- package/dist/_esm5.processed/core/api/debug/utils.d.ts +39 -0
- package/dist/_esm5.processed/core/api/debug/utils.js +57 -0
- package/dist/_esm5.processed/core/api/playback_observer.js +4 -2
- package/dist/_esm5.processed/core/api/public_api.d.ts +60 -3
- package/dist/_esm5.processed/core/api/public_api.js +280 -60
- package/dist/_esm5.processed/core/api/track_management/media_element_tracks_store.js +10 -1
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +13 -1
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +30 -15
- package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +3 -1
- package/dist/_esm5.processed/core/api/track_management/tracks_store.js +67 -152
- package/dist/_esm5.processed/core/api/utils.d.ts +10 -0
- package/dist/_esm5.processed/core/api/utils.js +23 -3
- package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +27 -8
- package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +28 -7
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +1 -1
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +29 -6
- package/dist/_esm5.processed/core/decrypt/session_events_listener.js +42 -32
- package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +4 -0
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +2 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +5 -1
- package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +17 -8
- package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +10 -6
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +5 -4
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +22 -5
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +37 -21
- package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +21 -23
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +17 -7
- package/dist/_esm5.processed/core/init/directfile_content_initializer.js +2 -2
- package/dist/_esm5.processed/core/init/media_source_content_initializer.js +74 -41
- package/dist/_esm5.processed/core/init/types.d.ts +9 -1
- package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.d.ts +28 -1
- package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +24 -11
- package/dist/_esm5.processed/core/init/utils/create_media_source.js +3 -12
- package/dist/_esm5.processed/core/init/utils/end_of_stream.js +6 -3
- package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +2 -1
- package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +9 -5
- package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +2 -1
- package/dist/_esm5.processed/core/init/utils/media_source_duration_updater.d.ts +58 -0
- package/dist/_esm5.processed/core/init/utils/{media_duration_updater.js → media_source_duration_updater.js} +87 -86
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +36 -2
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +83 -3
- package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +6 -4
- package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.d.ts +18 -7
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +38 -50
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +8 -0
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +16 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +8 -0
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +12 -0
- package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +11 -4
- package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +13 -9
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +30 -16
- package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.d.ts +47 -0
- package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.js +70 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +41 -20
- package/dist/_esm5.processed/core/stream/period/period_stream.js +12 -11
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +37 -28
- package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.d.ts +4 -2
- package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +16 -6
- package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.d.ts +3 -2
- package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +8 -8
- package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +2 -3
- package/dist/_esm5.processed/core/stream/utils/create_reload_request.js +1 -1
- package/dist/_esm5.processed/default_config.d.ts +41 -0
- package/dist/_esm5.processed/default_config.js +46 -2
- package/dist/_esm5.processed/errors/index.d.ts +2 -2
- package/dist/_esm5.processed/errors/media_error.d.ts +23 -1
- package/dist/_esm5.processed/errors/media_error.js +18 -5
- package/dist/_esm5.processed/experimental/features/debug_element.d.ts +8 -0
- package/dist/_esm5.processed/experimental/features/debug_element.js +10 -0
- package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
- package/dist/_esm5.processed/experimental/features/index.js +1 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.js +8 -7
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +7 -4
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +24 -12
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/index.js +0 -2
- package/dist/_esm5.processed/features/features_object.js +1 -0
- package/dist/_esm5.processed/features/initialize_features.js +13 -10
- package/dist/_esm5.processed/features/types.d.ts +3 -0
- package/dist/_esm5.processed/manifest/adaptation.d.ts +21 -2
- package/dist/_esm5.processed/manifest/adaptation.js +80 -1
- package/dist/_esm5.processed/manifest/manifest.js +2 -0
- package/dist/_esm5.processed/manifest/period.js +2 -2
- package/dist/_esm5.processed/manifest/representation.d.ts +33 -2
- package/dist/_esm5.processed/manifest/representation.js +32 -4
- package/dist/_esm5.processed/manifest/utils.js +1 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +105 -137
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +25 -5
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -0
- package/dist/_esm5.processed/public_types.d.ts +13 -3
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +1 -1
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +15 -11
- package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -4
- package/dist/_esm5.processed/transports/local/segment_loader.js +13 -26
- package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.d.ts +4 -6
- package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.js +4 -6
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +4 -4
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
- package/dist/_esm5.processed/utils/cancellable_sleep.js +4 -10
- package/dist/_esm5.processed/utils/create_cancellable_promise.d.ts +26 -0
- package/dist/_esm5.processed/utils/create_cancellable_promise.js +52 -0
- package/dist/_esm5.processed/utils/is_null_or_undefined.d.ts +1 -1
- package/dist/_esm5.processed/utils/is_null_or_undefined.js +1 -1
- package/dist/_esm5.processed/utils/reference.js +6 -0
- package/dist/_esm5.processed/utils/request/xhr.js +1 -1
- package/dist/_esm5.processed/utils/task_canceller.d.ts +34 -15
- package/dist/_esm5.processed/utils/task_canceller.js +55 -22
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +5424 -4712
- package/dist/rx-player.min.js +1 -1
- package/jest.config.js +1 -5
- package/package.json +44 -40
- package/scripts/build/constants.d.ts +1 -0
- package/scripts/build/generate_build.js +1 -1
- package/scripts/fast_demo_build.js +40 -40
- package/scripts/generate_full_demo.js +1 -1
- package/sonar-project.properties +1 -1
- package/src/compat/browser_detection.ts +105 -52
- package/src/compat/can_reuse_media_keys.ts +5 -2
- package/src/compat/eme/close_session.ts +2 -2
- package/src/compat/eme/load_session.ts +1 -1
- package/src/compat/event_listeners.ts +1 -1
- package/src/compat/has_issues_with_high_media_source_duration.ts +27 -0
- package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +147 -48
- package/src/core/adaptive/adaptive_representation_selector.ts +11 -6
- package/src/core/adaptive/buffer_based_chooser.ts +144 -26
- package/src/core/adaptive/guess_based_chooser.ts +9 -8
- package/src/core/adaptive/network_analyzer.ts +9 -4
- package/src/core/adaptive/utils/representation_score_calculator.ts +22 -2
- package/src/core/api/debug/buffer_graph.ts +247 -0
- package/src/core/api/debug/buffer_size_graph.ts +130 -0
- package/src/core/api/debug/constants.ts +2 -0
- package/src/core/api/debug/index.ts +3 -0
- package/src/core/api/debug/modules/general_info.ts +184 -0
- package/src/core/api/debug/modules/segment_buffer_content.ts +155 -0
- package/src/core/api/debug/modules/segment_buffer_size.ts +48 -0
- package/src/core/api/debug/render.ts +40 -0
- package/src/core/api/debug/utils.ts +103 -0
- package/src/core/api/playback_observer.ts +5 -2
- package/src/core/api/public_api.ts +334 -73
- package/src/core/api/track_management/media_element_tracks_store.ts +17 -8
- package/src/core/api/track_management/track_dispatcher.ts +37 -14
- package/src/core/api/track_management/tracks_store.ts +77 -167
- package/src/core/api/utils.ts +29 -3
- package/src/core/decrypt/__tests__/__global__/utils.ts +61 -40
- package/src/core/decrypt/attach_media_keys.ts +1 -1
- package/src/core/decrypt/content_decryptor.ts +1 -1
- package/src/core/decrypt/find_key_system.ts +25 -11
- package/src/core/decrypt/session_events_listener.ts +45 -39
- package/src/core/decrypt/utils/check_key_statuses.ts +6 -0
- package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +2 -1
- package/src/core/decrypt/utils/loaded_sessions_store.ts +8 -1
- package/src/core/fetchers/cdn_prioritizer.ts +18 -9
- package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -4
- package/src/core/fetchers/segment/segment_fetcher.ts +36 -14
- package/src/core/fetchers/segment/task_prioritizer.ts +25 -30
- package/src/core/fetchers/utils/schedule_request.ts +18 -7
- package/src/core/init/directfile_content_initializer.ts +2 -1
- package/src/core/init/media_source_content_initializer.ts +89 -50
- package/src/core/init/types.ts +9 -1
- package/src/core/init/utils/content_time_boundaries_observer.ts +48 -12
- package/src/core/init/utils/create_media_source.ts +4 -16
- package/src/core/init/utils/end_of_stream.ts +6 -3
- package/src/core/init/utils/get_loaded_reference.ts +2 -1
- package/src/core/init/utils/initial_seek_and_play.ts +9 -5
- package/src/core/init/utils/initialize_content_decryption.ts +2 -1
- package/src/core/init/utils/{media_duration_updater.ts → media_source_duration_updater.ts} +103 -110
- package/src/core/init/utils/rebuffering_controller.ts +115 -4
- package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +6 -4
- package/src/core/init/utils/throw_on_media_error.ts +1 -1
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +63 -66
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +20 -2
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +16 -0
- package/src/core/segment_buffers/implementations/types.ts +16 -4
- package/src/core/segment_buffers/index.ts +2 -0
- package/src/core/segment_buffers/segment_buffers_store.ts +16 -13
- package/src/core/stream/adaptation/adaptation_stream.ts +33 -19
- package/src/core/stream/adaptation/utils/create_representation_estimator.ts +114 -0
- package/src/core/stream/orchestrator/stream_orchestrator.ts +42 -20
- package/src/core/stream/period/period_stream.ts +13 -11
- package/src/core/stream/representation/representation_stream.ts +49 -37
- package/src/core/stream/representation/utils/append_segment_to_buffer.ts +9 -4
- package/src/core/stream/representation/utils/downloading_queue.ts +16 -4
- package/src/core/stream/representation/utils/push_init_segment.ts +11 -6
- package/src/core/stream/representation/utils/push_media_segment.ts +3 -3
- package/src/core/stream/utils/create_reload_request.ts +1 -1
- package/src/default_config.ts +59 -11
- package/src/errors/__tests__/media_error.test.ts +6 -6
- package/src/errors/index.ts +4 -1
- package/src/errors/media_error.ts +67 -1
- package/src/experimental/features/__tests__/debug_element.test.ts +26 -0
- package/src/experimental/features/debug_element.ts +13 -0
- package/src/experimental/features/index.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/load_and_push_segment.ts +10 -7
- package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -4
- package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +25 -10
- package/src/experimental/tools/mediaCapabilitiesProber/index.ts +0 -4
- package/src/features/__tests__/initialize_features.test.ts +11 -0
- package/src/features/features_object.ts +1 -0
- package/src/features/initialize_features.ts +15 -10
- package/src/features/types.ts +9 -0
- package/src/manifest/__tests__/manifest.test.ts +7 -7
- package/src/manifest/__tests__/period.test.ts +90 -45
- package/src/manifest/adaptation.ts +96 -1
- package/src/manifest/manifest.ts +4 -0
- package/src/manifest/period.ts +4 -2
- package/src/manifest/representation.ts +77 -5
- package/src/manifest/utils.ts +1 -3
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +116 -151
- package/src/parsers/manifest/dash/common/parse_representations.ts +21 -4
- package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +1 -1
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -0
- package/src/parsers/texttracks/ttml/parse_ttml.ts +1 -1
- package/src/public_types.ts +16 -1
- package/src/tools/TextTrackRenderer/text_track_renderer.ts +1 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +31 -22
- package/src/transports/dash/low_latency_segment_loader.ts +2 -2
- package/src/transports/dash/manifest_parser.ts +1 -1
- package/src/transports/dash/segment_loader.ts +4 -4
- package/src/transports/local/segment_loader.ts +14 -30
- package/src/transports/smooth/isobmff/create_boxes.ts +4 -6
- package/src/transports/smooth/segment_loader.ts +4 -4
- package/src/transports/utils/call_custom_manifest_loader.ts +3 -3
- package/src/typings/globals.d.ts +21 -19
- package/src/utils/cancellable_sleep.ts +5 -14
- package/src/utils/create_cancellable_promise.ts +69 -0
- package/src/utils/is_null_or_undefined.ts +1 -1
- package/src/utils/reference.ts +6 -0
- package/src/utils/request/xhr.ts +1 -1
- package/src/utils/task_canceller.ts +63 -34
- package/tsconfig.json +1 -1
- package/tsconfig.modules.json +1 -1
- package/dist/_esm5.processed/core/init/utils/media_duration_updater.d.ts +0 -56
- package/locked_reps.js +0 -46
- package/scripts/doc-generator/construct_table_of_contents.js +0 -76
- package/scripts/doc-generator/convert_MD_to_HMTL.js +0 -26
- package/scripts/doc-generator/create_documentation.js +0 -331
- package/scripts/doc-generator/create_documentation_page.js +0 -209
- package/scripts/doc-generator/create_page.js +0 -210
- package/scripts/doc-generator/generate_header_html.js +0 -147
- package/scripts/doc-generator/generate_page_html.js +0 -115
- package/scripts/doc-generator/generate_page_list_html.js +0 -92
- package/scripts/doc-generator/generate_sidebar_html.js +0 -85
- package/scripts/doc-generator/get_search_data_for_content.js +0 -137
- package/scripts/doc-generator/index.js +0 -34
- package/scripts/doc-generator/parse_doc_configs.js +0 -327
- package/scripts/doc-generator/scripts/lunr.js +0 -10
- package/scripts/doc-generator/scripts/script.js +0 -451
- package/scripts/doc-generator/styles/code.css +0 -99
- package/scripts/doc-generator/styles/style.css +0 -835
- package/scripts/doc-generator/utils.js +0 -74
|
@@ -65,14 +65,14 @@ export default function lowLatencySegmentLoader(
|
|
|
65
65
|
partialChunk = res[1];
|
|
66
66
|
for (let i = 0; i < completeChunks.length; i++) {
|
|
67
67
|
callbacks.onNewChunk(completeChunks[i]);
|
|
68
|
-
if (cancelSignal.isCancelled) {
|
|
68
|
+
if (cancelSignal.isCancelled()) {
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
callbacks.onProgress({ duration: info.duration,
|
|
73
73
|
size: info.size,
|
|
74
74
|
totalSize: info.totalSize });
|
|
75
|
-
if (cancelSignal.isCancelled) {
|
|
75
|
+
if (cancelSignal.isCancelled()) {
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -136,7 +136,7 @@ export default function generateManifestParser(
|
|
|
136
136
|
if (parserResponse.value.warnings.length > 0) {
|
|
137
137
|
onWarnings(parserResponse.value.warnings);
|
|
138
138
|
}
|
|
139
|
-
if (cancelSignal.isCancelled) {
|
|
139
|
+
if (cancelSignal.isCancelled()) {
|
|
140
140
|
return Promise.reject(cancelSignal.cancellationError);
|
|
141
141
|
}
|
|
142
142
|
const manifest = new Manifest(parserResponse.value.parsed, options);
|
|
@@ -150,7 +150,7 @@ export default function generateSegmentLoader(
|
|
|
150
150
|
size? : number | undefined;
|
|
151
151
|
duration? : number | undefined; }
|
|
152
152
|
) => {
|
|
153
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
153
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
154
154
|
return;
|
|
155
155
|
}
|
|
156
156
|
hasFinished = true;
|
|
@@ -166,7 +166,7 @@ export default function generateSegmentLoader(
|
|
|
166
166
|
* @param {*} err - The corresponding error encountered
|
|
167
167
|
*/
|
|
168
168
|
const reject = (err : unknown) : void => {
|
|
169
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
169
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
170
170
|
return;
|
|
171
171
|
}
|
|
172
172
|
hasFinished = true;
|
|
@@ -190,7 +190,7 @@ export default function generateSegmentLoader(
|
|
|
190
190
|
size : number;
|
|
191
191
|
totalSize? : number | undefined; }
|
|
192
192
|
) => {
|
|
193
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
193
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
194
194
|
return;
|
|
195
195
|
}
|
|
196
196
|
callbacks.onProgress({ duration: _args.duration,
|
|
@@ -203,7 +203,7 @@ export default function generateSegmentLoader(
|
|
|
203
203
|
* the "regular" implementation
|
|
204
204
|
*/
|
|
205
205
|
const fallback = () => {
|
|
206
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
206
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
207
207
|
return;
|
|
208
208
|
}
|
|
209
209
|
hasFinished = true;
|
|
@@ -20,11 +20,9 @@ import {
|
|
|
20
20
|
ILocalManifestInitSegmentLoader,
|
|
21
21
|
ILocalManifestSegmentLoader,
|
|
22
22
|
} from "../../parsers/manifest/local";
|
|
23
|
+
import createCancellablePromise from "../../utils/create_cancellable_promise";
|
|
23
24
|
import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
24
|
-
import {
|
|
25
|
-
CancellationError,
|
|
26
|
-
CancellationSignal,
|
|
27
|
-
} from "../../utils/task_canceller";
|
|
25
|
+
import { CancellationSignal } from "../../utils/task_canceller";
|
|
28
26
|
import {
|
|
29
27
|
ISegmentContext,
|
|
30
28
|
ISegmentLoaderCallbacks,
|
|
@@ -41,7 +39,7 @@ function loadInitSegment(
|
|
|
41
39
|
customSegmentLoader : ILocalManifestInitSegmentLoader,
|
|
42
40
|
cancelSignal : CancellationSignal
|
|
43
41
|
) : Promise<ISegmentLoaderResultSegmentLoaded<ArrayBuffer | null>> {
|
|
44
|
-
return
|
|
42
|
+
return createCancellablePromise(cancelSignal, (res, rej) => {
|
|
45
43
|
/** `true` when the custom segmentLoader should not be active anymore. */
|
|
46
44
|
let hasFinished = false;
|
|
47
45
|
|
|
@@ -54,11 +52,10 @@ function loadInitSegment(
|
|
|
54
52
|
size? : number;
|
|
55
53
|
duration? : number;
|
|
56
54
|
}) => {
|
|
57
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
55
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
58
56
|
return;
|
|
59
57
|
}
|
|
60
58
|
hasFinished = true;
|
|
61
|
-
cancelSignal.deregister(abortLoader);
|
|
62
59
|
res({ resultType: "segment-loaded",
|
|
63
60
|
resultData: { responseData: _args.data,
|
|
64
61
|
size: _args.size,
|
|
@@ -70,22 +67,17 @@ function loadInitSegment(
|
|
|
70
67
|
* @param {*} err - The corresponding error encountered
|
|
71
68
|
*/
|
|
72
69
|
const reject = (err? : Error) => {
|
|
73
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
70
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
74
71
|
return;
|
|
75
72
|
}
|
|
76
73
|
hasFinished = true;
|
|
77
|
-
cancelSignal.deregister(abortLoader);
|
|
78
74
|
rej(err);
|
|
79
75
|
};
|
|
80
76
|
|
|
81
77
|
const abort = customSegmentLoader({ resolve, reject });
|
|
82
78
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
* The logic to run when this loader is cancelled while pending.
|
|
86
|
-
* @param {Error} err
|
|
87
|
-
*/
|
|
88
|
-
function abortLoader(err : CancellationError) {
|
|
79
|
+
/** The logic to run when this loader is cancelled while pending. */
|
|
80
|
+
return () => {
|
|
89
81
|
if (hasFinished) {
|
|
90
82
|
return;
|
|
91
83
|
}
|
|
@@ -93,8 +85,7 @@ function loadInitSegment(
|
|
|
93
85
|
if (typeof abort === "function") {
|
|
94
86
|
abort();
|
|
95
87
|
}
|
|
96
|
-
|
|
97
|
-
}
|
|
88
|
+
};
|
|
98
89
|
});
|
|
99
90
|
}
|
|
100
91
|
|
|
@@ -109,7 +100,7 @@ function loadSegment(
|
|
|
109
100
|
customSegmentLoader : ILocalManifestSegmentLoader,
|
|
110
101
|
cancelSignal : CancellationSignal
|
|
111
102
|
) : Promise< ISegmentLoaderResultSegmentLoaded<ArrayBuffer | null>> {
|
|
112
|
-
return
|
|
103
|
+
return createCancellablePromise(cancelSignal, (res, rej) => {
|
|
113
104
|
/** `true` when the custom segmentLoader should not be active anymore. */
|
|
114
105
|
let hasFinished = false;
|
|
115
106
|
|
|
@@ -122,11 +113,10 @@ function loadSegment(
|
|
|
122
113
|
size? : number;
|
|
123
114
|
duration? : number;
|
|
124
115
|
}) => {
|
|
125
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
116
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
126
117
|
return;
|
|
127
118
|
}
|
|
128
119
|
hasFinished = true;
|
|
129
|
-
cancelSignal.deregister(abortLoader);
|
|
130
120
|
res({ resultType: "segment-loaded",
|
|
131
121
|
resultData: { responseData: _args.data,
|
|
132
122
|
size: _args.size,
|
|
@@ -138,11 +128,10 @@ function loadSegment(
|
|
|
138
128
|
* @param {*} err - The corresponding error encountered
|
|
139
129
|
*/
|
|
140
130
|
const reject = (err? : Error) => {
|
|
141
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
131
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
142
132
|
return;
|
|
143
133
|
}
|
|
144
134
|
hasFinished = true;
|
|
145
|
-
cancelSignal.deregister(abortLoader);
|
|
146
135
|
|
|
147
136
|
// Format error and send it
|
|
148
137
|
const castedErr = err as (null | undefined | { message? : string;
|
|
@@ -159,12 +148,8 @@ function loadSegment(
|
|
|
159
148
|
|
|
160
149
|
const abort = customSegmentLoader(segment, { resolve, reject });
|
|
161
150
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
* The logic to run when this loader is cancelled while pending.
|
|
165
|
-
* @param {Error} err
|
|
166
|
-
*/
|
|
167
|
-
function abortLoader(err : CancellationError) {
|
|
151
|
+
/** The logic to run when this loader is cancelled while pending. */
|
|
152
|
+
return () => {
|
|
168
153
|
if (hasFinished) {
|
|
169
154
|
return;
|
|
170
155
|
}
|
|
@@ -172,8 +157,7 @@ function loadSegment(
|
|
|
172
157
|
if (typeof abort === "function") {
|
|
173
158
|
abort();
|
|
174
159
|
}
|
|
175
|
-
|
|
176
|
-
}
|
|
160
|
+
};
|
|
177
161
|
});
|
|
178
162
|
}
|
|
179
163
|
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
* @param {Number} height
|
|
34
34
|
* @param {Number} hRes - horizontal resolution, eg 72
|
|
35
35
|
* @param {Number} vRes - vertical resolution, eg 72
|
|
36
|
-
* @param {string}
|
|
36
|
+
* @param {string} encName
|
|
37
37
|
* @param {Number} colorDepth - eg 24
|
|
38
38
|
* @param {Uint8Array} avcc - Uint8Array representing the avcC atom
|
|
39
39
|
* @returns {Uint8Array}
|
|
@@ -68,7 +68,7 @@ function createAVC1Box(
|
|
|
68
68
|
* @param {Number} height
|
|
69
69
|
* @param {Number} hRes - horizontal resolution, eg 72
|
|
70
70
|
* @param {Number} vRes - vertical resolution, eg 72
|
|
71
|
-
* @param {string}
|
|
71
|
+
* @param {string} encName
|
|
72
72
|
* @param {Number} colorDepth - eg 24
|
|
73
73
|
* @param {Uint8Array} avcc - Uint8Array representing the avcC atom
|
|
74
74
|
* @param {Uint8Array} sinf - Uint8Array representing the sinf atom
|
|
@@ -108,8 +108,6 @@ function createENCVBox(
|
|
|
108
108
|
* @param {Number} packetSize
|
|
109
109
|
* @param {Number} sampleRate
|
|
110
110
|
* @param {Uint8Array} esds - Uint8Array representing the esds atom
|
|
111
|
-
* @param {Uint8Array} [sinf] - Uint8Array representing the sinf atom,
|
|
112
|
-
* only if name == "enca"
|
|
113
111
|
* @returns {Uint8Array}
|
|
114
112
|
*/
|
|
115
113
|
function createMP4ABox(
|
|
@@ -164,7 +162,7 @@ function createENCABox(
|
|
|
164
162
|
}
|
|
165
163
|
|
|
166
164
|
/**
|
|
167
|
-
* @param {
|
|
165
|
+
* @param {Uint8Array} url
|
|
168
166
|
* @returns {Uint8Array}
|
|
169
167
|
*/
|
|
170
168
|
function createDREFBox(url : Uint8Array) : Uint8Array {
|
|
@@ -415,7 +413,7 @@ function createSMHDBox() : Uint8Array {
|
|
|
415
413
|
}
|
|
416
414
|
|
|
417
415
|
/**
|
|
418
|
-
* @param {Array.<Uint8Array>}
|
|
416
|
+
* @param {Array.<Uint8Array>} reps - arrays of Uint8Array,
|
|
419
417
|
* typically [avc1] or [encv, avc1]
|
|
420
418
|
* @returns {Uint8Array}
|
|
421
419
|
*/
|
|
@@ -177,7 +177,7 @@ const generateSegmentLoader = ({
|
|
|
177
177
|
size? : number | undefined;
|
|
178
178
|
duration? : number | undefined;
|
|
179
179
|
}) => {
|
|
180
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
180
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
181
181
|
return;
|
|
182
182
|
}
|
|
183
183
|
hasFinished = true;
|
|
@@ -205,7 +205,7 @@ const generateSegmentLoader = ({
|
|
|
205
205
|
* @param {*} err - The corresponding error encountered
|
|
206
206
|
*/
|
|
207
207
|
const reject = (err : unknown) => {
|
|
208
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
208
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
209
209
|
return;
|
|
210
210
|
}
|
|
211
211
|
hasFinished = true;
|
|
@@ -229,7 +229,7 @@ const generateSegmentLoader = ({
|
|
|
229
229
|
size : number;
|
|
230
230
|
totalSize? : number | undefined; }
|
|
231
231
|
) => {
|
|
232
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
232
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
233
233
|
return;
|
|
234
234
|
}
|
|
235
235
|
callbacks.onProgress({ duration: _args.duration,
|
|
@@ -238,7 +238,7 @@ const generateSegmentLoader = ({
|
|
|
238
238
|
};
|
|
239
239
|
|
|
240
240
|
const fallback = () => {
|
|
241
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
241
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
242
242
|
return;
|
|
243
243
|
}
|
|
244
244
|
hasFinished = true;
|
|
@@ -62,7 +62,7 @@ export default function callCustomManifestLoader(
|
|
|
62
62
|
receivingTime? : number | undefined;
|
|
63
63
|
sendingTime? : number | undefined; }) =>
|
|
64
64
|
{
|
|
65
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
65
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
68
|
hasFinished = true;
|
|
@@ -87,7 +87,7 @@ export default function callCustomManifestLoader(
|
|
|
87
87
|
* @param {*} err - The corresponding error encountered
|
|
88
88
|
*/
|
|
89
89
|
const reject = (err : unknown) : void => {
|
|
90
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
90
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
93
93
|
hasFinished = true;
|
|
@@ -111,7 +111,7 @@ export default function callCustomManifestLoader(
|
|
|
111
111
|
* the "regular" implementation
|
|
112
112
|
*/
|
|
113
113
|
const fallback = () => {
|
|
114
|
-
if (hasFinished || cancelSignal.isCancelled) {
|
|
114
|
+
if (hasFinished || cancelSignal.isCancelled()) {
|
|
115
115
|
return;
|
|
116
116
|
}
|
|
117
117
|
hasFinished = true;
|
package/src/typings/globals.d.ts
CHANGED
|
@@ -20,23 +20,24 @@
|
|
|
20
20
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
21
21
|
|
|
22
22
|
declare const __FEATURES__ : {
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
IS_DISABLED : 0;
|
|
24
|
+
IS_ENABLED : 1;
|
|
25
25
|
|
|
26
|
-
DASH :
|
|
27
|
-
DIRECTFILE :
|
|
28
|
-
EME :
|
|
29
|
-
HTML_SAMI :
|
|
30
|
-
HTML_SRT :
|
|
31
|
-
HTML_TTML :
|
|
32
|
-
HTML_VTT :
|
|
33
|
-
LOCAL_MANIFEST :
|
|
34
|
-
METAPLAYLIST :
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
26
|
+
DASH : 0 | 1;
|
|
27
|
+
DIRECTFILE : 0 | 1;
|
|
28
|
+
EME : 0 | 1;
|
|
29
|
+
HTML_SAMI : 0 | 1;
|
|
30
|
+
HTML_SRT : 0 | 1;
|
|
31
|
+
HTML_TTML : 0 | 1;
|
|
32
|
+
HTML_VTT : 0 | 1;
|
|
33
|
+
LOCAL_MANIFEST : 0 | 1;
|
|
34
|
+
METAPLAYLIST : 0 | 1;
|
|
35
|
+
DEBUG_ELEMENT : 0 | 1;
|
|
36
|
+
NATIVE_SAMI : 0 | 1;
|
|
37
|
+
NATIVE_SRT : 0 | 1;
|
|
38
|
+
NATIVE_TTML : 0 | 1;
|
|
39
|
+
NATIVE_VTT : 0 | 1;
|
|
40
|
+
SMOOTH : 0 | 1;
|
|
40
41
|
} | typeof FEATURES_ENUM;
|
|
41
42
|
|
|
42
43
|
declare const enum FEATURES_ENUM {
|
|
@@ -52,6 +53,7 @@ declare const enum FEATURES_ENUM {
|
|
|
52
53
|
HTML_VTT,
|
|
53
54
|
LOCAL_MANIFEST,
|
|
54
55
|
METAPLAYLIST,
|
|
56
|
+
DEBUG_ELEMENT,
|
|
55
57
|
NATIVE_SAMI,
|
|
56
58
|
NATIVE_SRT,
|
|
57
59
|
NATIVE_TTML,
|
|
@@ -60,9 +62,9 @@ declare const enum FEATURES_ENUM {
|
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
declare const __ENVIRONMENT__ : {
|
|
63
|
-
CURRENT_ENV :
|
|
64
|
-
DEV :
|
|
65
|
-
PRODUCTION :
|
|
65
|
+
CURRENT_ENV : 0 | 1;
|
|
66
|
+
DEV : 0;
|
|
67
|
+
PRODUCTION : 1;
|
|
66
68
|
} | typeof ENVIRONMENT_ENUM;
|
|
67
69
|
|
|
68
70
|
declare const enum ENVIRONMENT_ENUM {
|
|
@@ -14,10 +14,8 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
CancellationSignal,
|
|
20
|
-
} from "./task_canceller";
|
|
17
|
+
import createCancellablePromise from "./create_cancellable_promise";
|
|
18
|
+
import { CancellationSignal } from "./task_canceller";
|
|
21
19
|
|
|
22
20
|
/**
|
|
23
21
|
* Wait the given `delay`, resolving the Promise when finished.
|
|
@@ -36,15 +34,8 @@ export default function cancellableSleep(
|
|
|
36
34
|
delay: number,
|
|
37
35
|
cancellationSignal: CancellationSignal
|
|
38
36
|
) : Promise<void> {
|
|
39
|
-
return
|
|
40
|
-
const timeout = setTimeout(() =>
|
|
41
|
-
|
|
42
|
-
res();
|
|
43
|
-
}, delay);
|
|
44
|
-
const unregisterCancelSignal = cancellationSignal
|
|
45
|
-
.register(function onCancel(cancellationError : CancellationError) {
|
|
46
|
-
clearTimeout(timeout);
|
|
47
|
-
rej(cancellationError);
|
|
48
|
-
});
|
|
37
|
+
return createCancellablePromise(cancellationSignal, (res) => {
|
|
38
|
+
const timeout = setTimeout(() => res(), delay);
|
|
39
|
+
return () => clearTimeout(timeout);
|
|
49
40
|
});
|
|
50
41
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CancellationError,
|
|
3
|
+
CancellationSignal,
|
|
4
|
+
} from "./task_canceller";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns a Promise linked to a `CancellationSignal`, which will reject the
|
|
8
|
+
* corresponding `CancellationError` if that signal emits before the wanted
|
|
9
|
+
* task finishes (either on success or on error).
|
|
10
|
+
*
|
|
11
|
+
* The given callback mimicks the Promise interface with the added possibility
|
|
12
|
+
* of returning a callback which will be called when and if the task is
|
|
13
|
+
* cancelled before being either resolved or rejected.
|
|
14
|
+
* In that case, that logic will be called just before the Promise is rejected
|
|
15
|
+
* with the corresponding `CancellationError`.
|
|
16
|
+
* The point of this callback is to implement aborting logic, such as for
|
|
17
|
+
* example aborting a request.
|
|
18
|
+
*
|
|
19
|
+
* @param {Object} cancellationSignal - The `CancellationSignal` the returned
|
|
20
|
+
* Promise will be linked to.
|
|
21
|
+
* @param {Function} cb - The function implementing the cancellable Promise. Its
|
|
22
|
+
* arguments follow Promise's semantics but it can also return a function which
|
|
23
|
+
* will be called when and if `cancellationSignal` emits before either arguments
|
|
24
|
+
* are called.
|
|
25
|
+
* @returns {Promise} - The created Promise, which will resolve when and if the
|
|
26
|
+
* first argument to `cb` is called first and reject either if the second
|
|
27
|
+
* argument to `cb` is called first or if the given `CancellationSignal` emits
|
|
28
|
+
* before either of the two previous conditions.
|
|
29
|
+
*/
|
|
30
|
+
export default function createCancellablePromise<T>(
|
|
31
|
+
cancellationSignal : CancellationSignal,
|
|
32
|
+
cb : (
|
|
33
|
+
resolve : (val : T) => void,
|
|
34
|
+
reject : (err : unknown) => void,
|
|
35
|
+
) => (() => void) | void
|
|
36
|
+
) : Promise<T> {
|
|
37
|
+
let abortingLogic : (() => void) | void;
|
|
38
|
+
return new Promise((res, rej) => {
|
|
39
|
+
if (cancellationSignal.cancellationError !== null) {
|
|
40
|
+
// If the signal was already triggered before, do not even call `cb`
|
|
41
|
+
return rej(cancellationSignal.cancellationError);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let hasUnregistered = false;
|
|
45
|
+
abortingLogic = cb(
|
|
46
|
+
function onCancellablePromiseSuccess(val : T) {
|
|
47
|
+
cancellationSignal.deregister(onCancellablePromiseCancellation);
|
|
48
|
+
hasUnregistered = true;
|
|
49
|
+
res(val);
|
|
50
|
+
},
|
|
51
|
+
function onCancellablePromiseFailure(err : unknown) {
|
|
52
|
+
cancellationSignal.deregister(onCancellablePromiseCancellation);
|
|
53
|
+
hasUnregistered = true;
|
|
54
|
+
rej(err);
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
if (!hasUnregistered) {
|
|
59
|
+
cancellationSignal.register(onCancellablePromiseCancellation);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function onCancellablePromiseCancellation(error : CancellationError) {
|
|
63
|
+
if (abortingLogic !== undefined) {
|
|
64
|
+
abortingLogic();
|
|
65
|
+
}
|
|
66
|
+
rej(error);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* not always understood by newcomers to the code, and which can be overused when
|
|
21
21
|
* only one of the possibility can arise.
|
|
22
22
|
* @param {*} x
|
|
23
|
-
* @returns {
|
|
23
|
+
* @returns {boolean}
|
|
24
24
|
*/
|
|
25
25
|
export default function isNullOrUndefined(x : unknown) : x is null | undefined | void {
|
|
26
26
|
return x === null || x === undefined;
|
package/src/utils/reference.ts
CHANGED
|
@@ -294,6 +294,9 @@ export default function createSharedReference<T>(
|
|
|
294
294
|
options.clearSignal.register(unlisten);
|
|
295
295
|
|
|
296
296
|
function unlisten() : void {
|
|
297
|
+
if (options?.clearSignal !== undefined) {
|
|
298
|
+
options.clearSignal.deregister(unlisten);
|
|
299
|
+
}
|
|
297
300
|
if (cbObj.hasBeenCleared) {
|
|
298
301
|
return;
|
|
299
302
|
}
|
|
@@ -339,6 +342,9 @@ export default function createSharedReference<T>(
|
|
|
339
342
|
finish,
|
|
340
343
|
};
|
|
341
344
|
function finish() {
|
|
345
|
+
if (cancelSignal !== undefined) {
|
|
346
|
+
cancelSignal.deregister(finish);
|
|
347
|
+
}
|
|
342
348
|
isFinished = true;
|
|
343
349
|
const clonedCbs = cbs.slice();
|
|
344
350
|
for (const cbObj of clonedCbs) {
|