@editframe/elements 0.16.8-beta.0 → 0.18.3-beta.0
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/README.md +30 -0
- package/dist/DecoderResetFrequency.test.d.ts +1 -0
- package/dist/DecoderResetRecovery.test.d.ts +1 -0
- package/dist/DelayedLoadingState.d.ts +48 -0
- package/dist/DelayedLoadingState.integration.test.d.ts +1 -0
- package/dist/DelayedLoadingState.js +113 -0
- package/dist/DelayedLoadingState.test.d.ts +1 -0
- package/dist/EF_FRAMEGEN.d.ts +10 -1
- package/dist/EF_FRAMEGEN.js +199 -179
- package/dist/EF_INTERACTIVE.js +2 -6
- package/dist/EF_RENDERING.js +1 -3
- package/dist/LoadingDebounce.test.d.ts +1 -0
- package/dist/LoadingIndicator.browsertest.d.ts +0 -0
- package/dist/ManualScrubTest.test.d.ts +1 -0
- package/dist/ScrubResolvedFlashing.test.d.ts +1 -0
- package/dist/ScrubTrackManager.d.ts +96 -0
- package/dist/ScrubTrackManager.test.d.ts +1 -0
- package/dist/VideoSeekFlashing.browsertest.d.ts +0 -0
- package/dist/VideoStuckDiagnostic.test.d.ts +1 -0
- package/dist/elements/CrossUpdateController.js +13 -15
- package/dist/elements/EFAudio.browsertest.d.ts +0 -0
- package/dist/elements/EFAudio.d.ts +22 -3
- package/dist/elements/EFAudio.js +60 -43
- package/dist/elements/EFCaptions.js +337 -373
- package/dist/elements/EFImage.d.ts +1 -0
- package/dist/elements/EFImage.js +73 -91
- package/dist/elements/EFMedia/AssetIdMediaEngine.d.ts +18 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.js +41 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.test.d.ts +1 -0
- package/dist/elements/EFMedia/AssetMediaEngine.d.ts +47 -0
- package/dist/elements/EFMedia/AssetMediaEngine.js +116 -0
- package/dist/elements/EFMedia/BaseMediaEngine.d.ts +55 -0
- package/dist/elements/EFMedia/BaseMediaEngine.js +96 -0
- package/dist/elements/EFMedia/BaseMediaEngine.test.d.ts +1 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.browsertest.d.ts +1 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +43 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.js +159 -0
- package/dist/elements/EFMedia/JitMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/JitMediaEngine.d.ts +31 -0
- package/dist/elements/EFMedia/JitMediaEngine.js +62 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.d.ts +16 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +48 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +138 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +16 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +22 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.d.ts +7 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +24 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +18 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +16 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +104 -0
- package/dist/elements/EFMedia/services/AudioElementFactory.browsertest.d.ts +1 -0
- package/dist/elements/EFMedia/services/AudioElementFactory.d.ts +22 -0
- package/dist/elements/EFMedia/services/AudioElementFactory.js +72 -0
- package/dist/elements/EFMedia/services/MediaSourceService.browsertest.d.ts +1 -0
- package/dist/elements/EFMedia/services/MediaSourceService.d.ts +47 -0
- package/dist/elements/EFMedia/services/MediaSourceService.js +73 -0
- package/dist/elements/EFMedia/shared/AudioSpanUtils.d.ts +7 -0
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js +54 -0
- package/dist/elements/EFMedia/shared/BufferUtils.d.ts +70 -0
- package/dist/elements/EFMedia/shared/BufferUtils.js +89 -0
- package/dist/elements/EFMedia/shared/MediaTaskUtils.d.ts +23 -0
- package/dist/elements/EFMedia/shared/RenditionHelpers.browsertest.d.ts +1 -0
- package/dist/elements/EFMedia/shared/RenditionHelpers.d.ts +19 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.d.ts +1 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.d.ts +18 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +60 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.test.d.ts +1 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.d.ts +16 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +46 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.js +16 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.d.ts +3 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.js +27 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.d.ts +7 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.js +25 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.js +18 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.js +16 -0
- package/dist/elements/EFMedia.browsertest.d.ts +1 -0
- package/dist/elements/EFMedia.d.ts +95 -66
- package/dist/elements/EFMedia.js +204 -683
- package/dist/elements/EFSourceMixin.js +31 -48
- package/dist/elements/EFTemporal.d.ts +2 -1
- package/dist/elements/EFTemporal.js +266 -360
- package/dist/elements/EFTimegroup.d.ts +14 -1
- package/dist/elements/EFTimegroup.js +337 -323
- package/dist/elements/EFVideo.browsertest.d.ts +0 -0
- package/dist/elements/EFVideo.d.ts +123 -4
- package/dist/elements/EFVideo.js +308 -111
- package/dist/elements/EFWaveform.js +375 -411
- package/dist/elements/FetchMixin.js +14 -24
- package/dist/elements/MediaController.d.ts +30 -0
- package/dist/elements/SampleBuffer.d.ts +14 -0
- package/dist/elements/SampleBuffer.js +52 -0
- package/dist/elements/TargetController.js +130 -156
- package/dist/elements/TimegroupController.js +17 -19
- package/dist/elements/durationConverter.js +15 -4
- package/dist/elements/parseTimeToMs.js +4 -10
- package/dist/elements/printTaskStatus.d.ts +2 -0
- package/dist/elements/updateAnimations.js +39 -59
- package/dist/getRenderInfo.d.ts +2 -2
- package/dist/getRenderInfo.js +59 -67
- package/dist/gui/ContextMixin.js +150 -288
- package/dist/gui/EFConfiguration.js +27 -43
- package/dist/gui/EFFilmstrip.d.ts +3 -3
- package/dist/gui/EFFilmstrip.js +440 -620
- package/dist/gui/EFFitScale.d.ts +2 -2
- package/dist/gui/EFFitScale.js +112 -135
- package/dist/gui/EFFocusOverlay.js +45 -61
- package/dist/gui/EFPreview.js +30 -49
- package/dist/gui/EFScrubber.js +78 -99
- package/dist/gui/EFTimeDisplay.js +49 -70
- package/dist/gui/EFToggleLoop.js +17 -34
- package/dist/gui/EFTogglePlay.js +37 -58
- package/dist/gui/EFWorkbench.js +66 -88
- package/dist/gui/TWMixin.js +2 -48
- package/dist/gui/TWMixin2.js +31 -0
- package/dist/gui/efContext.js +2 -6
- package/dist/gui/fetchContext.js +1 -3
- package/dist/gui/focusContext.js +1 -3
- package/dist/gui/focusedElementContext.js +2 -6
- package/dist/gui/playingContext.js +1 -4
- package/dist/gui/services/ElementConnectionManager.browsertest.d.ts +1 -0
- package/dist/gui/services/ElementConnectionManager.d.ts +59 -0
- package/dist/gui/services/ElementConnectionManager.js +128 -0
- package/dist/gui/services/PlaybackController.browsertest.d.ts +1 -0
- package/dist/gui/services/PlaybackController.d.ts +103 -0
- package/dist/gui/services/PlaybackController.js +290 -0
- package/dist/index.js +5 -30
- package/dist/msToTimeCode.js +11 -13
- package/dist/services/MediaSourceManager.d.ts +62 -0
- package/dist/services/MediaSourceManager.js +211 -0
- package/dist/style.css +2 -1
- package/dist/transcoding/cache/CacheManager.d.ts +73 -0
- package/dist/transcoding/cache/RequestDeduplicator.d.ts +29 -0
- package/dist/transcoding/cache/RequestDeduplicator.js +53 -0
- package/dist/transcoding/cache/RequestDeduplicator.test.d.ts +1 -0
- package/dist/transcoding/types/index.d.ts +242 -0
- package/dist/transcoding/utils/MediaUtils.d.ts +9 -0
- package/dist/transcoding/utils/UrlGenerator.d.ts +26 -0
- package/dist/transcoding/utils/UrlGenerator.js +45 -0
- package/dist/transcoding/utils/constants.d.ts +27 -0
- package/dist/utils/LRUCache.d.ts +34 -0
- package/dist/utils/LRUCache.js +115 -0
- package/package.json +4 -3
- package/src/elements/EFAudio.browsertest.ts +709 -0
- package/src/elements/EFAudio.ts +59 -15
- package/src/elements/EFCaptions.browsertest.ts +0 -1
- package/src/elements/EFImage.browsertest.ts +42 -1
- package/src/elements/EFImage.ts +23 -3
- package/src/elements/EFMedia/AssetIdMediaEngine.test.ts +222 -0
- package/src/elements/EFMedia/AssetIdMediaEngine.ts +70 -0
- package/src/elements/EFMedia/AssetMediaEngine.ts +210 -0
- package/src/elements/EFMedia/BaseMediaEngine.test.ts +164 -0
- package/src/elements/EFMedia/BaseMediaEngine.ts +170 -0
- package/src/elements/EFMedia/BufferedSeekingInput.browsertest.ts +400 -0
- package/src/elements/EFMedia/BufferedSeekingInput.ts +267 -0
- package/src/elements/EFMedia/JitMediaEngine.browsertest.ts +165 -0
- package/src/elements/EFMedia/JitMediaEngine.ts +110 -0
- package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.ts +554 -0
- package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.ts +81 -0
- package/src/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts +241 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.ts +59 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.ts +23 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.ts +55 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInputTask.ts +35 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.ts +42 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.ts +34 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.ts +23 -0
- package/src/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts +174 -0
- package/src/elements/EFMedia/services/AudioElementFactory.browsertest.ts +325 -0
- package/src/elements/EFMedia/services/AudioElementFactory.ts +119 -0
- package/src/elements/EFMedia/services/MediaSourceService.browsertest.ts +257 -0
- package/src/elements/EFMedia/services/MediaSourceService.ts +102 -0
- package/src/elements/EFMedia/shared/AudioSpanUtils.ts +128 -0
- package/src/elements/EFMedia/shared/BufferUtils.ts +310 -0
- package/src/elements/EFMedia/shared/MediaTaskUtils.ts +44 -0
- package/src/elements/EFMedia/shared/RenditionHelpers.browsertest.ts +247 -0
- package/src/elements/EFMedia/shared/RenditionHelpers.ts +79 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.ts +128 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.test.ts +233 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.ts +89 -0
- package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.ts +555 -0
- package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.ts +79 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.ts +59 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.ts +23 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.ts +55 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInputTask.ts +45 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSeekTask.ts +44 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.ts +57 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.ts +32 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.ts +56 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.ts +23 -0
- package/src/elements/EFMedia.browsertest.ts +696 -271
- package/src/elements/EFMedia.ts +218 -776
- package/src/elements/EFTemporal.browsertest.ts +0 -1
- package/src/elements/EFTemporal.ts +13 -3
- package/src/elements/EFTimegroup.browsertest.ts +6 -3
- package/src/elements/EFTimegroup.ts +221 -27
- package/src/elements/EFVideo.browsertest.ts +758 -0
- package/src/elements/EFVideo.ts +418 -68
- package/src/elements/EFWaveform.ts +5 -5
- package/src/elements/MediaController.ts +98 -0
- package/src/elements/SampleBuffer.ts +97 -0
- package/src/elements/printTaskStatus.ts +16 -0
- package/src/elements/updateAnimations.ts +6 -0
- package/src/gui/ContextMixin.ts +23 -104
- package/src/gui/TWMixin.ts +10 -3
- package/src/gui/services/ElementConnectionManager.browsertest.ts +263 -0
- package/src/gui/services/ElementConnectionManager.ts +224 -0
- package/src/gui/services/PlaybackController.browsertest.ts +437 -0
- package/src/gui/services/PlaybackController.ts +521 -0
- package/src/services/MediaSourceManager.ts +333 -0
- package/src/transcoding/cache/CacheManager.ts +208 -0
- package/src/transcoding/cache/RequestDeduplicator.test.ts +170 -0
- package/src/transcoding/cache/RequestDeduplicator.ts +65 -0
- package/src/transcoding/types/index.ts +265 -0
- package/src/transcoding/utils/MediaUtils.ts +63 -0
- package/src/transcoding/utils/UrlGenerator.ts +68 -0
- package/src/transcoding/utils/constants.ts +36 -0
- package/src/utils/LRUCache.ts +153 -0
- package/test/EFVideo.framegen.browsertest.ts +127 -0
- package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__91e8a522f950809b9f09f4173113b4b0/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__91e8a522f950809b9f09f4173113b4b0/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0b3b2b1c8933f7fcf8a9ecaa88d58b41/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0b3b2b1c8933f7fcf8a9ecaa88d58b41/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/data.bin +1 -0
- package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/metadata.json +19 -0
- package/test/createJitTestClips.ts +425 -0
- package/test/recordReplayProxyPlugin.js +302 -0
- package/test/useAssetMSW.ts +49 -0
- package/test/useMSW.ts +44 -0
- package/types.json +1 -1
- package/dist/gui/TWMixin.css.js +0 -4
- /package/dist/elements/{TargetController.test.d.ts → TargetController.browsertest.d.ts} +0 -0
- /package/src/elements/{TargetController.test.ts → TargetController.browsertest.ts} +0 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types and interfaces for JIT Transcoding System
|
|
3
|
+
*/
|
|
4
|
+
export interface QualityPreset {
|
|
5
|
+
name: string;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
videoBitrate: number;
|
|
9
|
+
audioBitrate: number;
|
|
10
|
+
audioChannels: number;
|
|
11
|
+
audioSampleRate: number;
|
|
12
|
+
audioCodec: "aac";
|
|
13
|
+
}
|
|
14
|
+
export type RenditionId = "high" | "medium" | "low" | "audio" | "scrub";
|
|
15
|
+
export interface VideoMetadata {
|
|
16
|
+
url: string;
|
|
17
|
+
durationMs: number;
|
|
18
|
+
streams: Array<{
|
|
19
|
+
index: number;
|
|
20
|
+
type: "video" | "audio" | "subtitle" | "other";
|
|
21
|
+
codecName: string;
|
|
22
|
+
duration: number;
|
|
23
|
+
durationMs: number;
|
|
24
|
+
width?: number;
|
|
25
|
+
height?: number;
|
|
26
|
+
frameRate?: {
|
|
27
|
+
num: number;
|
|
28
|
+
den: number;
|
|
29
|
+
};
|
|
30
|
+
channels?: number;
|
|
31
|
+
sampleRate?: number;
|
|
32
|
+
}>;
|
|
33
|
+
presets: string[];
|
|
34
|
+
segmentDuration: number;
|
|
35
|
+
supportedFormats: string[];
|
|
36
|
+
extractedAt: string;
|
|
37
|
+
}
|
|
38
|
+
export interface JitTranscodingConfig {
|
|
39
|
+
baseUrl: string;
|
|
40
|
+
defaultQuality: keyof QualityPresets;
|
|
41
|
+
segmentCacheSize: number;
|
|
42
|
+
enableNetworkAdaptation: boolean;
|
|
43
|
+
enablePrefetch: boolean;
|
|
44
|
+
prefetchSegments: number;
|
|
45
|
+
}
|
|
46
|
+
export interface QualityPresets {
|
|
47
|
+
low: QualityPreset;
|
|
48
|
+
medium: QualityPreset;
|
|
49
|
+
high: QualityPreset;
|
|
50
|
+
scrub: QualityPreset;
|
|
51
|
+
}
|
|
52
|
+
export interface NetworkCondition {
|
|
53
|
+
bandwidth: number;
|
|
54
|
+
rtt: number;
|
|
55
|
+
connectionType: string;
|
|
56
|
+
}
|
|
57
|
+
export interface SegmentInfo {
|
|
58
|
+
url: string;
|
|
59
|
+
startTimeMs: number;
|
|
60
|
+
durationMs: number;
|
|
61
|
+
quality: string;
|
|
62
|
+
cached: boolean;
|
|
63
|
+
}
|
|
64
|
+
export interface ManifestVideoRendition {
|
|
65
|
+
/** Unique identifier for the video rendition */
|
|
66
|
+
id: string;
|
|
67
|
+
/** Duration of each segment in milliseconds */
|
|
68
|
+
segmentDuration: number;
|
|
69
|
+
/** Duration of each segment in milliseconds */
|
|
70
|
+
segmentDurationMs: number;
|
|
71
|
+
/** Video width in pixels */
|
|
72
|
+
width: number;
|
|
73
|
+
/** Video height in pixels */
|
|
74
|
+
height: number;
|
|
75
|
+
/** Target bitrate in bits per second */
|
|
76
|
+
bitrate: number;
|
|
77
|
+
/** Video codec string (e.g., "avc1.640029") */
|
|
78
|
+
codec: string;
|
|
79
|
+
/** Container format (e.g., "video/mp4") */
|
|
80
|
+
container: string;
|
|
81
|
+
/** Complete MIME type with codecs */
|
|
82
|
+
mimeType: string;
|
|
83
|
+
/** Optional frame rate */
|
|
84
|
+
frameRate?: number;
|
|
85
|
+
/** Optional profile indication */
|
|
86
|
+
profile?: string;
|
|
87
|
+
/** Optional level indication */
|
|
88
|
+
level?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface ManifestAudioRendition {
|
|
91
|
+
/** Unique identifier for the audio rendition */
|
|
92
|
+
id: string;
|
|
93
|
+
/** Duration of each segment in milliseconds */
|
|
94
|
+
segmentDuration: number;
|
|
95
|
+
/** Duration of each segment in milliseconds */
|
|
96
|
+
segmentDurationMs: number;
|
|
97
|
+
/** Number of audio channels */
|
|
98
|
+
channels: number;
|
|
99
|
+
/** Sample rate in Hz */
|
|
100
|
+
sampleRate: number;
|
|
101
|
+
/** Target bitrate in bits per second */
|
|
102
|
+
bitrate: number;
|
|
103
|
+
/** Audio codec string (e.g., "mp4a.40.2") */
|
|
104
|
+
codec: string;
|
|
105
|
+
/** Container format (e.g., "audio/mp4") */
|
|
106
|
+
container: string;
|
|
107
|
+
/** Complete MIME type with codecs */
|
|
108
|
+
mimeType: string;
|
|
109
|
+
/** Optional language code */
|
|
110
|
+
language?: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* CMAF Manifest Response Structure
|
|
114
|
+
* Matches the server response from /api/v1/transcode/manifest.json
|
|
115
|
+
*/
|
|
116
|
+
export interface ManifestResponse {
|
|
117
|
+
/** Manifest version for compatibility tracking */
|
|
118
|
+
version: string;
|
|
119
|
+
/** Type of manifest (e.g., "cmaf", "dash", "hls") */
|
|
120
|
+
type: string;
|
|
121
|
+
/** Original source URL for the media */
|
|
122
|
+
sourceUrl: string;
|
|
123
|
+
/** Total duration of the content in milliseconds */
|
|
124
|
+
duration: number;
|
|
125
|
+
/** Total duration of the content in milliseconds */
|
|
126
|
+
durationMs: number;
|
|
127
|
+
/** Duration of each segment in milliseconds */
|
|
128
|
+
segmentDuration: number;
|
|
129
|
+
/** Base URL for all relative URLs */
|
|
130
|
+
baseUrl: string;
|
|
131
|
+
/** Video renditions available for adaptive streaming */
|
|
132
|
+
videoRenditions: ManifestVideoRendition[];
|
|
133
|
+
/** Audio renditions available for adaptive streaming */
|
|
134
|
+
audioRenditions: ManifestAudioRendition[];
|
|
135
|
+
/** URL templates for segment access */
|
|
136
|
+
endpoints: {
|
|
137
|
+
/** Initialization segment URL template with {rendition} placeholder */
|
|
138
|
+
initSegment: string;
|
|
139
|
+
/** Media segment URL template with {rendition} and {segmentId} placeholders */
|
|
140
|
+
mediaSegment: string;
|
|
141
|
+
};
|
|
142
|
+
/** JIT transcoding specific information */
|
|
143
|
+
jitInfo: {
|
|
144
|
+
/** Whether parallel transcoding is supported */
|
|
145
|
+
parallelTranscodingSupported: boolean;
|
|
146
|
+
/** Expected transcoding latency in milliseconds */
|
|
147
|
+
expectedTranscodeLatency: number;
|
|
148
|
+
/** Total number of segments */
|
|
149
|
+
segmentCount: number;
|
|
150
|
+
};
|
|
151
|
+
/** Optional timescale for the media timeline */
|
|
152
|
+
timescale?: number;
|
|
153
|
+
/** Optional start number for segments */
|
|
154
|
+
startNumber?: number;
|
|
155
|
+
/** Optional minimum buffer time in milliseconds */
|
|
156
|
+
minBufferTime?: number;
|
|
157
|
+
/** Optional suggested presentation delay in milliseconds */
|
|
158
|
+
suggestedPresentationDelay?: number;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Cache statistics interface
|
|
162
|
+
*/
|
|
163
|
+
export interface CacheStats {
|
|
164
|
+
size: number;
|
|
165
|
+
maxSize: number;
|
|
166
|
+
hitRate: number;
|
|
167
|
+
efficiency: number;
|
|
168
|
+
totalRequests: number;
|
|
169
|
+
recentKeys: string[];
|
|
170
|
+
}
|
|
171
|
+
export interface AudioRendition {
|
|
172
|
+
id?: RenditionId;
|
|
173
|
+
trackId: number | undefined;
|
|
174
|
+
src: string;
|
|
175
|
+
segmentDurationMs?: number;
|
|
176
|
+
}
|
|
177
|
+
export interface VideoRendition {
|
|
178
|
+
id?: RenditionId;
|
|
179
|
+
trackId: number | undefined;
|
|
180
|
+
src: string;
|
|
181
|
+
segmentDurationMs?: number;
|
|
182
|
+
startTimeOffsetMs?: number;
|
|
183
|
+
}
|
|
184
|
+
export interface MediaEngine {
|
|
185
|
+
durationMs: number;
|
|
186
|
+
src: string;
|
|
187
|
+
audioRendition?: AudioRendition;
|
|
188
|
+
videoRendition?: VideoRendition;
|
|
189
|
+
templates: {
|
|
190
|
+
initSegment: string;
|
|
191
|
+
mediaSegment: string;
|
|
192
|
+
};
|
|
193
|
+
fetchInitSegment: (rendition: {
|
|
194
|
+
id?: RenditionId;
|
|
195
|
+
trackId: number | undefined;
|
|
196
|
+
src: string;
|
|
197
|
+
}, signal: AbortSignal) => Promise<ArrayBuffer>;
|
|
198
|
+
fetchMediaSegment: (segmentId: number, rendition: {
|
|
199
|
+
id?: RenditionId;
|
|
200
|
+
trackId: number | undefined;
|
|
201
|
+
src: string;
|
|
202
|
+
}, signal?: AbortSignal) => Promise<ArrayBuffer>;
|
|
203
|
+
computeSegmentId: (desiredSeekTimeMs: number, rendition: {
|
|
204
|
+
id?: RenditionId;
|
|
205
|
+
trackId: number | undefined;
|
|
206
|
+
src: string;
|
|
207
|
+
segmentDurationMs?: number;
|
|
208
|
+
}) => number | undefined;
|
|
209
|
+
/**
|
|
210
|
+
* Get the video rendition, or throws if no video rendition is available
|
|
211
|
+
*/
|
|
212
|
+
getVideoRendition: () => VideoRendition;
|
|
213
|
+
/**
|
|
214
|
+
* Get the audio rendition, or throws if no audio rendition is available
|
|
215
|
+
*/
|
|
216
|
+
getAudioRendition: () => AudioRendition;
|
|
217
|
+
/**
|
|
218
|
+
* Calculate audio segments needed for a time range
|
|
219
|
+
* Each media engine implements this based on their segment structure
|
|
220
|
+
*/
|
|
221
|
+
calculateAudioSegmentRange: (fromMs: number, toMs: number, rendition: AudioRendition, durationMs: number) => SegmentTimeRange[];
|
|
222
|
+
}
|
|
223
|
+
interface InitSegmentPath {
|
|
224
|
+
path: string;
|
|
225
|
+
pos: number;
|
|
226
|
+
size: number;
|
|
227
|
+
}
|
|
228
|
+
export interface InitSegmentPaths {
|
|
229
|
+
audio?: InitSegmentPath;
|
|
230
|
+
video?: InitSegmentPath;
|
|
231
|
+
}
|
|
232
|
+
export interface AudioSpan {
|
|
233
|
+
startMs: number;
|
|
234
|
+
endMs: number;
|
|
235
|
+
blob: Blob;
|
|
236
|
+
}
|
|
237
|
+
export interface SegmentTimeRange {
|
|
238
|
+
segmentId: number;
|
|
239
|
+
startMs: number;
|
|
240
|
+
endMs: number;
|
|
241
|
+
}
|
|
242
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media type detection utilities
|
|
3
|
+
*/
|
|
4
|
+
export declare function isAudioUrl(url: string): boolean;
|
|
5
|
+
export declare function isVideoUrl(url: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Check if URL is eligible for JIT transcoding
|
|
8
|
+
*/
|
|
9
|
+
export declare function isJitTranscodeEligible(url: string): boolean;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RenditionId } from '../types/index.js';
|
|
2
|
+
import { MediaEngine } from '../types/index.ts';
|
|
3
|
+
export declare class UrlGenerator {
|
|
4
|
+
private baseUrl;
|
|
5
|
+
constructor(baseUrl: () => string);
|
|
6
|
+
/**
|
|
7
|
+
* Generate video segment URL
|
|
8
|
+
*/
|
|
9
|
+
generateSegmentUrl(segmentId: "init" | number, renditionId: RenditionId, metadata: MediaEngine): string;
|
|
10
|
+
/**
|
|
11
|
+
* Generate init segment URL
|
|
12
|
+
*/
|
|
13
|
+
generateInitSegmentUrl(mediaUrl: string, rendition: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generate manifest URL
|
|
16
|
+
*/
|
|
17
|
+
generateManifestUrl(mediaUrl: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate track fragment index URL
|
|
20
|
+
*/
|
|
21
|
+
generateTrackFragmentIndexUrl(mediaUrl: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Generate quality presets URL
|
|
24
|
+
*/
|
|
25
|
+
generatePresetsUrl(): string;
|
|
26
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var UrlGenerator = class {
|
|
2
|
+
constructor(baseUrl) {
|
|
3
|
+
this.baseUrl = baseUrl;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Generate video segment URL
|
|
7
|
+
*/
|
|
8
|
+
generateSegmentUrl(segmentId, renditionId, metadata) {
|
|
9
|
+
const audioRendition = metadata.audioRendition;
|
|
10
|
+
const videoRendition = metadata.videoRendition;
|
|
11
|
+
const rendition = audioRendition ?? videoRendition;
|
|
12
|
+
if (!rendition) {
|
|
13
|
+
console.error("Rendition not found", metadata);
|
|
14
|
+
throw new Error(`Rendition ${renditionId} not found`);
|
|
15
|
+
}
|
|
16
|
+
const template = segmentId === "init" ? metadata.templates.initSegment : metadata.templates.mediaSegment;
|
|
17
|
+
return template.replace("{rendition}", renditionId).replace("{segmentId}", segmentId.toString()).replace("{src}", metadata.src).replace("{trackId}", rendition.trackId?.toString() ?? "");
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate init segment URL
|
|
21
|
+
*/
|
|
22
|
+
generateInitSegmentUrl(mediaUrl, rendition) {
|
|
23
|
+
return `${this.baseUrl()}/api/v1/transcode/${rendition}/init.m4s?url=${encodeURIComponent(mediaUrl)}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Generate manifest URL
|
|
27
|
+
*/
|
|
28
|
+
generateManifestUrl(mediaUrl) {
|
|
29
|
+
return `${this.baseUrl()}/api/v1/transcode/manifest.json?url=${encodeURIComponent(mediaUrl)}`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Generate track fragment index URL
|
|
33
|
+
*/
|
|
34
|
+
generateTrackFragmentIndexUrl(mediaUrl) {
|
|
35
|
+
const normalizedSrc = mediaUrl.startsWith("/") ? mediaUrl.slice(1) : mediaUrl;
|
|
36
|
+
return `/@ef-track-fragment-index/${normalizedSrc}`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generate quality presets URL
|
|
40
|
+
*/
|
|
41
|
+
generatePresetsUrl() {
|
|
42
|
+
return `${this.baseUrl()}/api/v1/transcode/presets`;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
export { UrlGenerator };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { QualityPresets } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Segment duration constants (in milliseconds)
|
|
4
|
+
*/
|
|
5
|
+
export declare const SEGMENT_DURATION_VIDEO_MS = 2000;
|
|
6
|
+
export declare const SEGMENT_DURATION_AUDIO_MS = 15000;
|
|
7
|
+
export declare const SEGMENT_DURATION_SCRUB_MS = 30000;
|
|
8
|
+
/**
|
|
9
|
+
* Default cache sizes for different media types
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_CACHE_SIZE_VIDEO = 50;
|
|
12
|
+
export declare const DEFAULT_CACHE_SIZE_AUDIO = 20;
|
|
13
|
+
/**
|
|
14
|
+
* Default prefetch settings
|
|
15
|
+
*/
|
|
16
|
+
export declare const DEFAULT_PREFETCH_SEGMENTS_VIDEO = 3;
|
|
17
|
+
export declare const DEFAULT_PREFETCH_SEGMENTS_AUDIO = 2;
|
|
18
|
+
/**
|
|
19
|
+
* Retry configuration
|
|
20
|
+
*/
|
|
21
|
+
export declare const RETRY_MAX_ATTEMPTS = 3;
|
|
22
|
+
export declare const RETRY_BASE_DELAY_MS = 500;
|
|
23
|
+
/**
|
|
24
|
+
* Default service configuration
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_BASE_URL = "http://localhost:3000";
|
|
27
|
+
export declare const DEFAULT_QUALITY: keyof QualityPresets;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A simple LRU (Least Recently Used) cache implementation
|
|
3
|
+
*/
|
|
4
|
+
export declare class LRUCache<K, V> {
|
|
5
|
+
private cache;
|
|
6
|
+
private readonly maxSize;
|
|
7
|
+
constructor(maxSize: number);
|
|
8
|
+
get(key: K): V | undefined;
|
|
9
|
+
set(key: K, value: V): void;
|
|
10
|
+
has(key: K): boolean;
|
|
11
|
+
delete(key: K): boolean;
|
|
12
|
+
clear(): void;
|
|
13
|
+
get size(): number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Size-aware LRU cache that tracks memory usage in bytes
|
|
17
|
+
* Evicts entries when total size exceeds the maximum
|
|
18
|
+
*/
|
|
19
|
+
export declare class SizeAwareLRUCache<K> {
|
|
20
|
+
private cache;
|
|
21
|
+
private sizes;
|
|
22
|
+
private currentSize;
|
|
23
|
+
private readonly maxSizeBytes;
|
|
24
|
+
constructor(maxSizeBytes: number);
|
|
25
|
+
get(key: K): Promise<ArrayBuffer> | undefined;
|
|
26
|
+
set(key: K, value: Promise<ArrayBuffer>): void;
|
|
27
|
+
private evictIfNecessary;
|
|
28
|
+
has(key: K): boolean;
|
|
29
|
+
delete(key: K): boolean;
|
|
30
|
+
clear(): void;
|
|
31
|
+
get size(): number;
|
|
32
|
+
get currentSizeBytes(): number;
|
|
33
|
+
get maxSize(): number;
|
|
34
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A simple LRU (Least Recently Used) cache implementation
|
|
3
|
+
*/
|
|
4
|
+
var LRUCache = class {
|
|
5
|
+
constructor(maxSize) {
|
|
6
|
+
this.cache = /* @__PURE__ */ new Map();
|
|
7
|
+
this.maxSize = maxSize;
|
|
8
|
+
}
|
|
9
|
+
get(key) {
|
|
10
|
+
const value = this.cache.get(key);
|
|
11
|
+
if (value) {
|
|
12
|
+
this.cache.delete(key);
|
|
13
|
+
this.cache.set(key, value);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
set(key, value) {
|
|
18
|
+
if (this.cache.has(key)) this.cache.delete(key);
|
|
19
|
+
else if (this.cache.size >= this.maxSize) {
|
|
20
|
+
const firstKey = this.cache.keys().next().value;
|
|
21
|
+
if (firstKey) this.cache.delete(firstKey);
|
|
22
|
+
}
|
|
23
|
+
this.cache.set(key, value);
|
|
24
|
+
}
|
|
25
|
+
has(key) {
|
|
26
|
+
return this.cache.has(key);
|
|
27
|
+
}
|
|
28
|
+
delete(key) {
|
|
29
|
+
return this.cache.delete(key);
|
|
30
|
+
}
|
|
31
|
+
clear() {
|
|
32
|
+
this.cache.clear();
|
|
33
|
+
}
|
|
34
|
+
get size() {
|
|
35
|
+
return this.cache.size;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Size-aware LRU cache that tracks memory usage in bytes
|
|
40
|
+
* Evicts entries when total size exceeds the maximum
|
|
41
|
+
*/
|
|
42
|
+
var SizeAwareLRUCache = class {
|
|
43
|
+
constructor(maxSizeBytes) {
|
|
44
|
+
this.cache = /* @__PURE__ */ new Map();
|
|
45
|
+
this.sizes = /* @__PURE__ */ new Map();
|
|
46
|
+
this.currentSize = 0;
|
|
47
|
+
this.maxSizeBytes = maxSizeBytes;
|
|
48
|
+
}
|
|
49
|
+
get(key) {
|
|
50
|
+
const value = this.cache.get(key);
|
|
51
|
+
if (value) {
|
|
52
|
+
const size = this.sizes.get(key) || 0;
|
|
53
|
+
this.cache.delete(key);
|
|
54
|
+
this.cache.set(key, value);
|
|
55
|
+
this.sizes.delete(key);
|
|
56
|
+
this.sizes.set(key, size);
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
set(key, value) {
|
|
61
|
+
if (this.cache.has(key)) {
|
|
62
|
+
const oldSize = this.sizes.get(key) || 0;
|
|
63
|
+
this.currentSize -= oldSize;
|
|
64
|
+
this.cache.delete(key);
|
|
65
|
+
this.sizes.delete(key);
|
|
66
|
+
}
|
|
67
|
+
const sizeTrackingPromise = value.then((buffer) => {
|
|
68
|
+
const bufferSize = buffer.byteLength;
|
|
69
|
+
this.sizes.set(key, bufferSize);
|
|
70
|
+
this.currentSize += bufferSize;
|
|
71
|
+
this.evictIfNecessary();
|
|
72
|
+
return buffer;
|
|
73
|
+
}).catch((error) => {
|
|
74
|
+
this.cache.delete(key);
|
|
75
|
+
this.sizes.delete(key);
|
|
76
|
+
throw error;
|
|
77
|
+
});
|
|
78
|
+
this.cache.set(key, sizeTrackingPromise);
|
|
79
|
+
}
|
|
80
|
+
evictIfNecessary() {
|
|
81
|
+
while (this.currentSize > this.maxSizeBytes && this.cache.size > 0) {
|
|
82
|
+
const firstKey = this.cache.keys().next().value;
|
|
83
|
+
if (firstKey) {
|
|
84
|
+
const size = this.sizes.get(firstKey) || 0;
|
|
85
|
+
this.currentSize -= size;
|
|
86
|
+
this.cache.delete(firstKey);
|
|
87
|
+
this.sizes.delete(firstKey);
|
|
88
|
+
} else break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
has(key) {
|
|
92
|
+
return this.cache.has(key);
|
|
93
|
+
}
|
|
94
|
+
delete(key) {
|
|
95
|
+
const size = this.sizes.get(key) || 0;
|
|
96
|
+
this.currentSize -= size;
|
|
97
|
+
this.sizes.delete(key);
|
|
98
|
+
return this.cache.delete(key);
|
|
99
|
+
}
|
|
100
|
+
clear() {
|
|
101
|
+
this.cache.clear();
|
|
102
|
+
this.sizes.clear();
|
|
103
|
+
this.currentSize = 0;
|
|
104
|
+
}
|
|
105
|
+
get size() {
|
|
106
|
+
return this.cache.size;
|
|
107
|
+
}
|
|
108
|
+
get currentSizeBytes() {
|
|
109
|
+
return this.currentSize;
|
|
110
|
+
}
|
|
111
|
+
get maxSize() {
|
|
112
|
+
return this.maxSizeBytes;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
export { LRUCache, SizeAwareLRUCache };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@editframe/elements",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.3-beta.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -27,12 +27,13 @@
|
|
|
27
27
|
"license": "UNLICENSED",
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@bramus/style-observer": "^1.3.0",
|
|
30
|
-
"@editframe/assets": "0.
|
|
30
|
+
"@editframe/assets": "0.18.3-beta.0",
|
|
31
31
|
"@lit/context": "^1.1.2",
|
|
32
32
|
"@lit/task": "^1.0.1",
|
|
33
33
|
"d3": "^7.9.0",
|
|
34
34
|
"debug": "^4.3.5",
|
|
35
35
|
"lit": "^3.1.4",
|
|
36
|
+
"mediabunny": "^1.1.1",
|
|
36
37
|
"mp4box": "^0.5.2",
|
|
37
38
|
"zod": "^3.24.1"
|
|
38
39
|
},
|
|
@@ -43,7 +44,7 @@
|
|
|
43
44
|
"autoprefixer": "^10.4.19",
|
|
44
45
|
"rollup-plugin-tsconfig-paths": "^1.5.2",
|
|
45
46
|
"typescript": "^5.5.4",
|
|
46
|
-
"vite-plugin-dts": "^4.
|
|
47
|
+
"vite-plugin-dts": "^4.5.4",
|
|
47
48
|
"vite-tsconfig-paths": "^4.3.2"
|
|
48
49
|
}
|
|
49
50
|
}
|