@codexo/exojs 0.8.3 → 0.9.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/CHANGELOG.md +107 -0
- package/README.md +26 -5
- package/dist/esm/animation/Tween.d.ts +20 -3
- package/dist/esm/animation/Tween.js +16 -8
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +16 -1
- package/dist/esm/animation/TweenManager.js +27 -2
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +2 -0
- package/dist/esm/audio/AudioAnalyser.js +24 -9
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +1 -0
- package/dist/esm/audio/AudioBus.js +8 -4
- package/dist/esm/audio/AudioBus.js.map +1 -1
- package/dist/esm/audio/AudioListener.d.ts +1 -0
- package/dist/esm/audio/AudioListener.js +7 -5
- package/dist/esm/audio/AudioListener.js.map +1 -1
- package/dist/esm/audio/AudioManager.d.ts +8 -2
- package/dist/esm/audio/AudioManager.js +14 -1
- package/dist/esm/audio/AudioManager.js.map +1 -1
- package/dist/esm/audio/BeatDetector.d.ts +2 -0
- package/dist/esm/audio/BeatDetector.js +27 -661
- package/dist/esm/audio/BeatDetector.js.map +1 -1
- package/dist/esm/audio/Music.d.ts +1 -0
- package/dist/esm/audio/Music.js +7 -3
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/OscillatorSound.d.ts +1 -0
- package/dist/esm/audio/OscillatorSound.js +7 -3
- package/dist/esm/audio/OscillatorSound.js.map +1 -1
- package/dist/esm/audio/Sound.d.ts +1 -0
- package/dist/esm/audio/Sound.js +7 -3
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/audio-context.d.ts +2 -2
- package/dist/esm/audio/audio-context.js +4 -4
- package/dist/esm/audio/audio-context.js.map +1 -1
- package/dist/esm/audio/filters/ChorusFilter.d.ts +1 -0
- package/dist/esm/audio/filters/ChorusFilter.js +7 -3
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -1
- package/dist/esm/audio/filters/CompressorFilter.d.ts +1 -0
- package/dist/esm/audio/filters/CompressorFilter.js +7 -3
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -1
- package/dist/esm/audio/filters/DelayFilter.d.ts +1 -0
- package/dist/esm/audio/filters/DelayFilter.js +7 -3
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -1
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +1 -0
- package/dist/esm/audio/filters/EqualizerFilter.js +7 -3
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -1
- package/dist/esm/audio/filters/GranularFilter.js +1 -86
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -1
- package/dist/esm/audio/filters/HighpassFilter.d.ts +1 -0
- package/dist/esm/audio/filters/HighpassFilter.js +7 -3
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/LowpassFilter.d.ts +1 -0
- package/dist/esm/audio/filters/LowpassFilter.js +7 -3
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/PitchShiftFilter.js +1 -71
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -1
- package/dist/esm/audio/filters/ReverbFilter.d.ts +1 -0
- package/dist/esm/audio/filters/ReverbFilter.js +7 -3
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -1
- package/dist/esm/audio/filters/VocoderFilter.js +1 -89
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -1
- package/dist/esm/audio/filters/WorkletFilter.d.ts +2 -0
- package/dist/esm/audio/filters/WorkletFilter.js +10 -5
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -1
- package/dist/esm/audio/index.d.ts +15 -10
- package/dist/esm/audio/worklet/registerWorklet.d.ts +1 -1
- package/dist/esm/audio/worklet/registerWorklet.js +2 -2
- package/dist/esm/audio/worklet/registerWorklet.js.map +1 -1
- package/dist/esm/audio/worklets/beat-detector.worklet.d.ts +1 -0
- package/dist/esm/audio/worklets/beat-detector.worklet.js +647 -0
- package/dist/esm/audio/worklets/beat-detector.worklet.js.map +1 -0
- package/dist/esm/audio/worklets/granular.worklet.d.ts +1 -0
- package/dist/esm/audio/worklets/granular.worklet.js +89 -0
- package/dist/esm/audio/worklets/granular.worklet.js.map +1 -0
- package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts +1 -0
- package/dist/esm/audio/worklets/pitch-shift.worklet.js +74 -0
- package/dist/esm/audio/worklets/pitch-shift.worklet.js.map +1 -0
- package/dist/esm/audio/worklets/vocoder.worklet.d.ts +1 -0
- package/dist/esm/audio/worklets/vocoder.worklet.js +92 -0
- package/dist/esm/audio/worklets/vocoder.worklet.js.map +1 -0
- package/dist/esm/core/Application.d.ts +62 -24
- package/dist/esm/core/Application.js +116 -40
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Color.d.ts +0 -8
- package/dist/esm/core/Color.js +0 -24
- package/dist/esm/core/Color.js.map +1 -1
- package/dist/esm/core/Scene.d.ts +32 -72
- package/dist/esm/core/Scene.js +56 -36
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +11 -25
- package/dist/esm/core/SceneManager.js +37 -100
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +28 -14
- package/dist/esm/core/SceneNode.js +66 -33
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Signal.d.ts +24 -28
- package/dist/esm/core/Signal.js +64 -50
- package/dist/esm/core/Signal.js.map +1 -1
- package/dist/esm/core/Timer.d.ts +1 -0
- package/dist/esm/core/Timer.js +3 -0
- package/dist/esm/core/Timer.js.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.js +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
- package/dist/esm/debug/HitTestLayer.js +1 -1
- package/dist/esm/debug/HitTestLayer.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.js +1 -2
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.js +1 -2
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.js +1 -2
- package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
- package/dist/esm/index.js +23 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +1 -0
- package/dist/esm/input/InputManager.js +30 -3
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +5 -2
- package/dist/esm/input/InteractionManager.js +29 -18
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/Pointer.js +3 -2
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/internal/interactionManagerRegistry.d.ts +9 -0
- package/dist/esm/input/internal/interactionManagerRegistry.js +10 -0
- package/dist/esm/input/internal/interactionManagerRegistry.js.map +1 -0
- package/dist/esm/math/AbstractVector.d.ts +1 -7
- package/dist/esm/math/AbstractVector.js +6 -20
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/Circle.js +0 -2
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/Collision.d.ts +9 -3
- package/dist/esm/math/Ellipse.d.ts +2 -5
- package/dist/esm/math/Ellipse.js +10 -7
- package/dist/esm/math/Ellipse.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +1 -1
- package/dist/esm/math/ObservableVector.js +3 -3
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +0 -2
- package/dist/esm/math/Polygon.js +1 -9
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/Rectangle.js +0 -2
- package/dist/esm/math/Rectangle.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts +19 -4
- package/dist/esm/math/collision-detection.js +61 -4
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/swept-collision.d.ts +16 -12
- package/dist/esm/math/swept-collision.js +109 -19
- package/dist/esm/math/swept-collision.js.map +1 -1
- package/dist/esm/particles/ParticleSystem.js +1 -1
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/index.d.ts +1 -0
- package/dist/esm/rendering/CallbackRenderPass.d.ts +1 -0
- package/dist/esm/rendering/CallbackRenderPass.js +1 -0
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/Container.d.ts +2 -1
- package/dist/esm/rendering/Container.js +17 -16
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/RenderBackend.d.ts +1 -0
- package/dist/esm/rendering/RenderNode.d.ts +1 -3
- package/dist/esm/rendering/RenderNode.js +12 -19
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderPass.d.ts +1 -0
- package/dist/esm/rendering/RenderStats.d.ts +9 -0
- package/dist/esm/rendering/RenderStats.js +2 -0
- package/dist/esm/rendering/RenderStats.js.map +1 -1
- package/dist/esm/rendering/RendererRegistry.d.ts +1 -0
- package/dist/esm/rendering/RendererRegistry.js +1 -0
- package/dist/esm/rendering/RendererRegistry.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +23 -0
- package/dist/esm/rendering/View.js +42 -0
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/index.d.ts +89 -59
- package/dist/esm/rendering/mesh/Mesh.js +1 -1
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/mesh/MeshShader.d.ts +1 -0
- package/dist/esm/rendering/mesh/MeshShader.js +1 -0
- package/dist/esm/rendering/mesh/MeshShader.js.map +1 -1
- package/dist/esm/rendering/shader/Shader.d.ts +1 -0
- package/dist/esm/rendering/shader/Shader.js +1 -0
- package/dist/esm/rendering/shader/Shader.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderUniform.d.ts +1 -0
- package/dist/esm/rendering/shader/ShaderUniform.js +1 -0
- package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts +3 -2
- package/dist/esm/rendering/sprite/Sprite.js +15 -13
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/text/AbstractText.d.ts +36 -0
- package/dist/esm/rendering/text/AbstractText.js +49 -0
- package/dist/esm/rendering/text/AbstractText.js.map +1 -0
- package/dist/esm/rendering/text/BitmapText.d.ts +97 -0
- package/dist/esm/rendering/text/BitmapText.js +220 -0
- package/dist/esm/rendering/text/BitmapText.js.map +1 -0
- package/dist/esm/rendering/text/BmFont.d.ts +50 -0
- package/dist/esm/rendering/text/BmFont.js +24 -0
- package/dist/esm/rendering/text/BmFont.js.map +1 -0
- package/dist/esm/rendering/text/GlyphAtlas.d.ts +104 -0
- package/dist/esm/rendering/text/GlyphAtlas.js +347 -0
- package/dist/esm/rendering/text/GlyphAtlas.js.map +1 -0
- package/dist/esm/rendering/text/GlyphAtlasPool.d.ts +40 -0
- package/dist/esm/rendering/text/GlyphAtlasPool.js +67 -0
- package/dist/esm/rendering/text/GlyphAtlasPool.js.map +1 -0
- package/dist/esm/rendering/text/GlyphSdf.d.ts +92 -0
- package/dist/esm/rendering/text/GlyphSdf.js +220 -0
- package/dist/esm/rendering/text/GlyphSdf.js.map +1 -0
- package/dist/esm/rendering/text/HTMLText.d.ts +107 -0
- package/dist/esm/rendering/text/HTMLText.js +284 -0
- package/dist/esm/rendering/text/HTMLText.js.map +1 -0
- package/dist/esm/rendering/text/LayoutOptions.d.ts +30 -0
- package/dist/esm/rendering/text/Text.d.ts +89 -20
- package/dist/esm/rendering/text/Text.js +176 -101
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextLayout.d.ts +20 -8
- package/dist/esm/rendering/text/TextLayout.js +234 -25
- package/dist/esm/rendering/text/TextLayout.js.map +1 -1
- package/dist/esm/rendering/text/TextStyle.d.ts +154 -87
- package/dist/esm/rendering/text/TextStyle.js +257 -203
- package/dist/esm/rendering/text/TextStyle.js.map +1 -1
- package/dist/esm/rendering/text/types.d.ts +73 -13
- package/dist/esm/rendering/texture/Texture.d.ts +1 -0
- package/dist/esm/rendering/texture/Texture.js +1 -0
- package/dist/esm/rendering/texture/Texture.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +3 -1
- package/dist/esm/rendering/types.js +2 -0
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +2 -1
- package/dist/esm/rendering/video/Video.js +9 -5
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +41 -5
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +4 -4
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts +56 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +482 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text-color.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/text-color.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text-msdf.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/text-msdf.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text-sdf.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/text-sdf.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text.vert.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/text.vert.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +16 -8
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js +26 -0
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +2 -2
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +23 -15
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +9 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +70 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +773 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js +96 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js.map +1 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js +68 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js.map +1 -0
- package/dist/esm/resources/Asset.d.ts +23 -0
- package/dist/esm/resources/Asset.js +23 -0
- package/dist/esm/resources/Asset.js.map +1 -0
- package/dist/esm/resources/AssetDefinitions.d.ts +137 -0
- package/dist/esm/resources/Assets.d.ts +35 -0
- package/dist/esm/resources/Assets.js +32 -0
- package/dist/esm/resources/Assets.js.map +1 -0
- package/dist/esm/resources/IndexedDbDatabase.js +17 -1
- package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
- package/dist/esm/resources/IndexedDbStore.js +17 -1
- package/dist/esm/resources/IndexedDbStore.js.map +1 -1
- package/dist/esm/resources/Loader.d.ts +244 -18
- package/dist/esm/resources/Loader.js +456 -50
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/LoadingQueue.d.ts +28 -0
- package/dist/esm/resources/LoadingQueue.js +59 -0
- package/dist/esm/resources/LoadingQueue.js.map +1 -0
- package/dist/esm/resources/factories/BmFontFactory.d.ts +25 -0
- package/dist/esm/resources/factories/BmFontFactory.js +96 -0
- package/dist/esm/resources/factories/BmFontFactory.js.map +1 -0
- package/dist/esm/resources/factories/CsvFactory.d.ts +35 -0
- package/dist/esm/resources/factories/CsvFactory.js +87 -0
- package/dist/esm/resources/factories/CsvFactory.js.map +1 -0
- package/dist/esm/resources/factories/MusicFactory.d.ts +8 -2
- package/dist/esm/resources/factories/MusicFactory.js +25 -14
- package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
- package/dist/esm/resources/factories/SoundFactory.d.ts +2 -2
- package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
- package/dist/esm/resources/factories/SubtitleFactory.d.ts +28 -0
- package/dist/esm/resources/factories/SubtitleFactory.js +203 -0
- package/dist/esm/resources/factories/SubtitleFactory.js.map +1 -0
- package/dist/esm/resources/factories/SvgFactory.d.ts +18 -1
- package/dist/esm/resources/factories/SvgFactory.js +21 -2
- package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
- package/dist/esm/resources/factories/VideoFactory.d.ts +8 -2
- package/dist/esm/resources/factories/VideoFactory.js +27 -20
- package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
- package/dist/esm/resources/factories/XmlFactory.d.ts +24 -0
- package/dist/esm/resources/factories/XmlFactory.js +37 -0
- package/dist/esm/resources/factories/XmlFactory.js.map +1 -0
- package/dist/esm/resources/index.d.ts +8 -1
- package/dist/esm/resources/tokens.d.ts +49 -3
- package/dist/esm/resources/tokens.js +50 -4
- package/dist/esm/resources/tokens.js.map +1 -1
- package/dist/exo.esm.js +6635 -2550
- package/dist/exo.esm.js.map +1 -1
- package/package.json +19 -6
- package/dist/esm/input/interaction-hooks.d.ts +0 -34
- package/dist/esm/input/interaction-hooks.js +0 -35
- package/dist/esm/input/interaction-hooks.js.map +0 -1
- package/dist/esm/rendering/text/DynamicGlyphAtlas.d.ts +0 -33
- package/dist/esm/rendering/text/DynamicGlyphAtlas.js +0 -134
- package/dist/esm/rendering/text/DynamicGlyphAtlas.js.map +0 -1
- package/dist/esm/rendering/text/atlas-singleton.d.ts +0 -7
- package/dist/esm/rendering/text/atlas-singleton.js +0 -17
- package/dist/esm/rendering/text/atlas-singleton.js.map +0 -1
- package/dist/esm/resources/factories/VttFactory.d.ts +0 -24
- package/dist/esm/resources/factories/VttFactory.js +0 -158
- package/dist/esm/resources/factories/VttFactory.js.map +0 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { AbstractAssetFactory } from '../AbstractAssetFactory.js';
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// VTT helpers
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
/**
|
|
7
|
+
* Converts a WebVTT timestamp string (`HH:MM:SS.mmm`, `MM:SS.mmm`, or
|
|
8
|
+
* `SS.mmm`) into a floating-point number of seconds.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
const parseVttTimestamp = (value) => {
|
|
13
|
+
const parts = value.split(':');
|
|
14
|
+
let seconds;
|
|
15
|
+
if (parts.length === 3) {
|
|
16
|
+
seconds = Number(parts[0]) * 3600 + Number(parts[1]) * 60 + Number(parts[2]);
|
|
17
|
+
}
|
|
18
|
+
else if (parts.length === 2) {
|
|
19
|
+
seconds = Number(parts[0]) * 60 + Number(parts[1]);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
seconds = Number(parts[0]);
|
|
23
|
+
}
|
|
24
|
+
return seconds;
|
|
25
|
+
};
|
|
26
|
+
const validAlignValues = new Set(['start', 'center', 'end', 'left', 'right']);
|
|
27
|
+
const validLineAlignValues = new Set(['start', 'center', 'end']);
|
|
28
|
+
const validPositionAlignValues = new Set(['auto', 'line-left', 'center', 'line-right']);
|
|
29
|
+
/**
|
|
30
|
+
* Parses the WebVTT cue-settings tail (`align:center line:80% position:50%`)
|
|
31
|
+
* and applies each recognized setting to the supplied {@link VTTCue}.
|
|
32
|
+
*
|
|
33
|
+
* Unknown keys, malformed values, and unknown enum members are silently
|
|
34
|
+
* skipped so that one bad token does not invalidate an otherwise valid cue.
|
|
35
|
+
* Percent signs on numeric values are tolerated and stripped.
|
|
36
|
+
*
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
const applyCueSettings = (cue, settings) => {
|
|
40
|
+
if (!settings) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
for (const token of settings.split(/\s+/)) {
|
|
44
|
+
const colonIndex = token.indexOf(':');
|
|
45
|
+
if (colonIndex === -1) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const name = token.slice(0, colonIndex);
|
|
49
|
+
const value = token.slice(colonIndex + 1);
|
|
50
|
+
switch (name) {
|
|
51
|
+
case 'vertical':
|
|
52
|
+
if (value === 'rl' || value === 'lr' || value === '') {
|
|
53
|
+
cue.vertical = value;
|
|
54
|
+
}
|
|
55
|
+
break;
|
|
56
|
+
case 'line': {
|
|
57
|
+
if (value === 'auto') {
|
|
58
|
+
cue.line = 'auto';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const [linePart, alignPart] = value.split(',');
|
|
62
|
+
const num = parseFloat(linePart);
|
|
63
|
+
if (!Number.isNaN(num)) {
|
|
64
|
+
cue.line = num;
|
|
65
|
+
}
|
|
66
|
+
if (alignPart !== undefined && validLineAlignValues.has(alignPart)) {
|
|
67
|
+
cue.lineAlign = alignPart;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case 'position': {
|
|
73
|
+
const [posPart, alignPart] = value.split(',');
|
|
74
|
+
const num = parseFloat(posPart);
|
|
75
|
+
if (!Number.isNaN(num)) {
|
|
76
|
+
cue.position = num;
|
|
77
|
+
}
|
|
78
|
+
if (alignPart !== undefined && validPositionAlignValues.has(alignPart)) {
|
|
79
|
+
cue.positionAlign = alignPart;
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case 'size': {
|
|
84
|
+
const num = parseFloat(value);
|
|
85
|
+
if (!Number.isNaN(num)) {
|
|
86
|
+
cue.size = num;
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case 'align':
|
|
91
|
+
if (validAlignValues.has(value)) {
|
|
92
|
+
cue.align = value;
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const parseVtt = (source) => {
|
|
99
|
+
const cues = [];
|
|
100
|
+
const lines = source.replaceAll('\r\n', '\n').replaceAll('\r', '\n').split('\n');
|
|
101
|
+
let i = 0;
|
|
102
|
+
// Skip header and any blank lines/metadata before first cue
|
|
103
|
+
while (i < lines.length && !lines[i].includes('-->')) {
|
|
104
|
+
i++;
|
|
105
|
+
}
|
|
106
|
+
while (i < lines.length) {
|
|
107
|
+
const line = lines[i].trim();
|
|
108
|
+
if (line.includes('-->')) {
|
|
109
|
+
const arrowIndex = line.indexOf('-->');
|
|
110
|
+
const startString = line.slice(0, arrowIndex).trim();
|
|
111
|
+
const rest = line.slice(arrowIndex + 3).trim();
|
|
112
|
+
const restTokens = rest.split(/\s+/);
|
|
113
|
+
const endString = restTokens[0];
|
|
114
|
+
const settingsString = restTokens.slice(1).join(' ');
|
|
115
|
+
const start = parseVttTimestamp(startString);
|
|
116
|
+
const end = parseVttTimestamp(endString);
|
|
117
|
+
i++;
|
|
118
|
+
const textLines = [];
|
|
119
|
+
while (i < lines.length && lines[i].trim() !== '') {
|
|
120
|
+
textLines.push(lines[i]);
|
|
121
|
+
i++;
|
|
122
|
+
}
|
|
123
|
+
const cue = new VTTCue(start, end, textLines.join('\n'));
|
|
124
|
+
applyCueSettings(cue, settingsString);
|
|
125
|
+
cues.push(cue);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
i++;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return cues;
|
|
132
|
+
};
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
// SRT helpers
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
/**
|
|
137
|
+
* Converts an SRT timestamp string (`HH:MM:SS,mmm`) into a floating-point
|
|
138
|
+
* number of seconds.
|
|
139
|
+
*
|
|
140
|
+
* @internal
|
|
141
|
+
*/
|
|
142
|
+
const parseSrtTimestamp = (value) => {
|
|
143
|
+
const normalized = value.trim().replace(',', '.');
|
|
144
|
+
const parts = normalized.split(':');
|
|
145
|
+
return Number(parts[0]) * 3600 + Number(parts[1]) * 60 + Number(parts[2]);
|
|
146
|
+
};
|
|
147
|
+
const parseSrt = (source) => {
|
|
148
|
+
const cues = [];
|
|
149
|
+
const normalized = source.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
|
|
150
|
+
const blocks = normalized.split(/\n[ \t]*\n/);
|
|
151
|
+
for (const block of blocks) {
|
|
152
|
+
const lines = block.trim().split('\n');
|
|
153
|
+
if (lines.length < 2)
|
|
154
|
+
continue;
|
|
155
|
+
let timingIndex = 0;
|
|
156
|
+
if (/^\d+$/.test(lines[0].trim())) {
|
|
157
|
+
timingIndex = 1;
|
|
158
|
+
}
|
|
159
|
+
const timingLine = lines[timingIndex];
|
|
160
|
+
if (!timingLine?.includes('-->'))
|
|
161
|
+
continue;
|
|
162
|
+
const arrowIndex = timingLine.indexOf('-->');
|
|
163
|
+
const start = parseSrtTimestamp(timingLine.slice(0, arrowIndex));
|
|
164
|
+
const end = parseSrtTimestamp(timingLine.slice(arrowIndex + 3));
|
|
165
|
+
const text = lines.slice(timingIndex + 1).join('\n');
|
|
166
|
+
cues.push(new VTTCue(start, end, text));
|
|
167
|
+
}
|
|
168
|
+
return cues;
|
|
169
|
+
};
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
// Factory
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
/**
|
|
174
|
+
* {@link AssetFactory} implementation that parses WebVTT (`.vtt`) and SubRip
|
|
175
|
+
* (`.srt`) subtitle files and produces an array of {@link VTTCue} instances.
|
|
176
|
+
*
|
|
177
|
+
* Format is detected from the file extension of the response URL; unknown
|
|
178
|
+
* extensions default to VTT parsing. VTT cue settings (`align`, `line`,
|
|
179
|
+
* `position`, `size`, `vertical`) are applied; SRT cues retain default
|
|
180
|
+
* positional properties.
|
|
181
|
+
*/
|
|
182
|
+
class SubtitleFactory extends AbstractAssetFactory {
|
|
183
|
+
storageName = 'subtitle';
|
|
184
|
+
/**
|
|
185
|
+
* Reads the response body as UTF-8 text and records the subtitle format
|
|
186
|
+
* derived from the response URL's file extension.
|
|
187
|
+
*/
|
|
188
|
+
async process(response) {
|
|
189
|
+
const text = await response.text();
|
|
190
|
+
const url = response.url.split('?')[0].toLowerCase();
|
|
191
|
+
const fmt = url.endsWith('.srt') ? 'srt' : 'vtt';
|
|
192
|
+
return { fmt, text };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Parses the subtitle text into an ordered array of {@link VTTCue} instances.
|
|
196
|
+
*/
|
|
197
|
+
async create(source) {
|
|
198
|
+
return source.fmt === 'srt' ? parseSrt(source.text) : parseVtt(source.text);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export { SubtitleFactory };
|
|
203
|
+
//# sourceMappingURL=SubtitleFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubtitleFactory.js","sources":["../../../../../src/resources/factories/SubtitleFactory.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { AbstractAssetFactory } from '@/resources/AbstractAssetFactory';
|
|
2
|
+
/** Construction options for {@link SvgFactory.create}. */
|
|
3
|
+
export interface SvgFactoryOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Target render width in pixels. When provided, the value is injected into
|
|
6
|
+
* the root `<svg>` element's `width` attribute before the browser rasterises
|
|
7
|
+
* the image, overriding any intrinsic width declared in the file.
|
|
8
|
+
*
|
|
9
|
+
* SVGs that carry only a `viewBox` (no `width`/`height` attributes) render
|
|
10
|
+
* as a 0×0 image by default; supplying `width` and `height` here fixes that.
|
|
11
|
+
*/
|
|
12
|
+
width?: number;
|
|
13
|
+
/** Target render height in pixels. See {@link width}. */
|
|
14
|
+
height?: number;
|
|
15
|
+
}
|
|
2
16
|
/**
|
|
3
17
|
* {@link AssetFactory} implementation that loads SVG markup and produces a
|
|
4
18
|
* rasterised {@link HTMLImageElement}.
|
|
@@ -17,9 +31,12 @@ export declare class SvgFactory extends AbstractAssetFactory<HTMLImageElement> {
|
|
|
17
31
|
/**
|
|
18
32
|
* Renders the SVG markup into a fully loaded {@link HTMLImageElement}.
|
|
19
33
|
*
|
|
34
|
+
* When `options.width` or `options.height` are provided, the values are
|
|
35
|
+
* injected into the root `<svg>` element before rasterisation so the browser
|
|
36
|
+
* renders at the requested pixel dimensions rather than the intrinsic size.
|
|
20
37
|
* Creates a temporary `image/svg+xml` object URL, assigns it to an `<img>`
|
|
21
38
|
* element, and revokes the URL once loading settles. Rejects on load error
|
|
22
39
|
* or abort.
|
|
23
40
|
*/
|
|
24
|
-
create(source: string): Promise<HTMLImageElement>;
|
|
41
|
+
create(source: string, options?: SvgFactoryOptions): Promise<HTMLImageElement>;
|
|
25
42
|
}
|
|
@@ -20,12 +20,31 @@ class SvgFactory extends AbstractAssetFactory {
|
|
|
20
20
|
/**
|
|
21
21
|
* Renders the SVG markup into a fully loaded {@link HTMLImageElement}.
|
|
22
22
|
*
|
|
23
|
+
* When `options.width` or `options.height` are provided, the values are
|
|
24
|
+
* injected into the root `<svg>` element before rasterisation so the browser
|
|
25
|
+
* renders at the requested pixel dimensions rather than the intrinsic size.
|
|
23
26
|
* Creates a temporary `image/svg+xml` object URL, assigns it to an `<img>`
|
|
24
27
|
* element, and revokes the URL once loading settles. Rejects on load error
|
|
25
28
|
* or abort.
|
|
26
29
|
*/
|
|
27
|
-
async create(source) {
|
|
28
|
-
const
|
|
30
|
+
async create(source, options = {}) {
|
|
31
|
+
const { width, height } = options;
|
|
32
|
+
let svgSource = source;
|
|
33
|
+
if (width !== undefined || height !== undefined) {
|
|
34
|
+
const svgStart = svgSource.indexOf('<svg');
|
|
35
|
+
const tagClose = svgSource.indexOf('>', svgStart);
|
|
36
|
+
if (svgStart !== -1 && tagClose !== -1) {
|
|
37
|
+
const before = svgSource.slice(0, svgStart);
|
|
38
|
+
const attrs = svgSource.slice(svgStart + 4, tagClose); // after '<svg', before '>'
|
|
39
|
+
const after = svgSource.slice(tagClose + 1);
|
|
40
|
+
const cleaned = String(attrs)
|
|
41
|
+
.replaceAll(/\s+width=(?:"[^"]*"|'[^']*')/g, '')
|
|
42
|
+
.replaceAll(/\s+height=(?:"[^"]*"|'[^']*')/g, '');
|
|
43
|
+
const additions = (width !== undefined ? ` width="${width}"` : '') + (height !== undefined ? ` height="${height}"` : '');
|
|
44
|
+
svgSource = `${before}<svg${cleaned}${additions}>${after}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const blob = new Blob([svgSource], { type: 'image/svg+xml' });
|
|
29
48
|
const objectUrl = this.createObjectUrl(blob);
|
|
30
49
|
return new Promise((resolve, reject) => {
|
|
31
50
|
const image = new Image();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SvgFactory.js","sources":["../../../../../src/resources/factories/SvgFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"SvgFactory.js","sources":["../../../../../src/resources/factories/SvgFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAiBA;;;;;;;;AAQG;AACG,MAAO,UAAW,SAAQ,oBAAsC,CAAA;IACpD,WAAW,GAAG,KAAK;AAEnC;;AAEG;IACI,MAAM,OAAO,CAAC,QAAkB,EAAA;AACrC,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;IACxB;AAEA;;;;;;;;;AASG;AACI,IAAA,MAAM,MAAM,CAAC,MAAc,EAAE,UAA6B,EAAE,EAAA;AACjE,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;QACjC,IAAI,SAAS,GAAG,MAAM;QAEtB,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;YAC/C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;YAEjD,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,EAAE,EAAE;gBACtC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC3C,gBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AAE3C,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK;AACzB,qBAAA,UAAU,CAAC,+BAA+B,EAAE,EAAE;AAC9C,qBAAA,UAAU,CAAC,gCAAgC,EAAE,EAAE,CAAC;AACnD,gBAAA,MAAM,SAAS,GAAG,CAAC,KAAK,KAAK,SAAS,GAAG,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,CAAG,GAAG,EAAE,KAAK,MAAM,KAAK,SAAS,GAAG,CAAA,SAAA,EAAY,MAAM,GAAG,GAAG,EAAE,CAAC;gBAExH,SAAS,GAAG,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,OAAO,GAAG,SAAS,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE;YAC5D;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAW;AAC1B,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACjC,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,gBAAgB,CACpB,MAAM,EACN,MAAK;AACH,gBAAA,QAAQ,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC;AAChB,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AAED,YAAA,KAAK,CAAC,GAAG,GAAG,SAAS;AACvB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
|
|
@@ -2,7 +2,8 @@ import type { PlaybackOptions, StreamingLoadEvent } from '@/core/types';
|
|
|
2
2
|
import type { SamplerOptions } from '@/rendering/texture/Sampler';
|
|
3
3
|
import { Video } from '@/rendering/video/Video';
|
|
4
4
|
import { AbstractAssetFactory } from '@/resources/AbstractAssetFactory';
|
|
5
|
-
|
|
5
|
+
/** Construction options for {@link VideoFactory.create}. */
|
|
6
|
+
export interface VideoFactoryOptions {
|
|
6
7
|
/**
|
|
7
8
|
* MIME type for the video blob. Inferred from magic bytes when omitted.
|
|
8
9
|
*/
|
|
@@ -17,6 +18,12 @@ interface VideoFactoryOptions {
|
|
|
17
18
|
playbackOptions?: Partial<PlaybackOptions>;
|
|
18
19
|
/** Sampler parameters forwarded to the {@link Video} instance's texture. */
|
|
19
20
|
samplerOptions?: Partial<SamplerOptions>;
|
|
21
|
+
/**
|
|
22
|
+
* Milliseconds to wait after a `stalled` event before rejecting the load
|
|
23
|
+
* promise. When omitted no timeout is applied and a stalled load will wait
|
|
24
|
+
* indefinitely. Each subsequent `stalled` event resets the timer.
|
|
25
|
+
*/
|
|
26
|
+
stallTimeout?: number;
|
|
20
27
|
}
|
|
21
28
|
/**
|
|
22
29
|
* {@link AssetFactory} implementation that loads video files (MP4, WebM, OGG,
|
|
@@ -52,4 +59,3 @@ export declare class VideoFactory extends AbstractAssetFactory<Video> {
|
|
|
52
59
|
*/
|
|
53
60
|
destroy(): void;
|
|
54
61
|
}
|
|
55
|
-
export {};
|
|
@@ -32,33 +32,40 @@ class VideoFactory extends AbstractAssetFactory {
|
|
|
32
32
|
* load event is received.
|
|
33
33
|
*/
|
|
34
34
|
async create(source, options = {}) {
|
|
35
|
-
const { mimeType, loadEvent, playbackOptions, samplerOptions } = options;
|
|
35
|
+
const { mimeType, loadEvent, playbackOptions, samplerOptions, stallTimeout } = options;
|
|
36
36
|
const blob = new Blob([source], { type: mimeType ?? determineMimeType(source) });
|
|
37
37
|
const objectUrl = this.createObjectUrl(blob);
|
|
38
38
|
return new Promise((resolve, reject) => {
|
|
39
39
|
const video = document.createElement('video');
|
|
40
40
|
this._videoElements.push(video);
|
|
41
|
-
|
|
41
|
+
let stallTimer;
|
|
42
|
+
let settled = false;
|
|
43
|
+
const settle = (fn) => {
|
|
44
|
+
if (settled)
|
|
45
|
+
return;
|
|
46
|
+
settled = true;
|
|
47
|
+
if (stallTimer !== undefined) {
|
|
48
|
+
clearTimeout(stallTimer);
|
|
49
|
+
stallTimer = undefined;
|
|
50
|
+
}
|
|
42
51
|
this.revokeObjectUrl(objectUrl);
|
|
52
|
+
fn();
|
|
43
53
|
};
|
|
44
|
-
video.addEventListener('error', () =>
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
finalize();
|
|
60
|
-
resolve(new Video(video, playbackOptions, samplerOptions));
|
|
61
|
-
}, onceListenerOption);
|
|
54
|
+
video.addEventListener('error', () => settle(() => reject(new Error('Video loading error.'))), onceListenerOption);
|
|
55
|
+
video.addEventListener('abort', () => settle(() => reject(new Error('Video loading error: cancelled.'))), onceListenerOption);
|
|
56
|
+
video.addEventListener('emptied', () => settle(() => reject(new Error('Video loading error: emptied.'))), onceListenerOption);
|
|
57
|
+
video.addEventListener(loadEvent ?? 'canplaythrough', () => settle(() => resolve(new Video(video, playbackOptions, samplerOptions))), onceListenerOption);
|
|
58
|
+
// 'stalled' fires transiently during normal buffering on slow connections and is not
|
|
59
|
+
// treated as an error by default. Supply stallTimeout to reject after a stall persists.
|
|
60
|
+
if (stallTimeout !== undefined) {
|
|
61
|
+
video.addEventListener('stalled', () => {
|
|
62
|
+
if (settled)
|
|
63
|
+
return;
|
|
64
|
+
if (stallTimer !== undefined)
|
|
65
|
+
clearTimeout(stallTimer);
|
|
66
|
+
stallTimer = setTimeout(() => settle(() => reject(new Error('Video loading stalled.'))), stallTimeout);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
62
69
|
video.preload = 'auto';
|
|
63
70
|
video.src = objectUrl;
|
|
64
71
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoFactory.js","sources":["../../../../../src/resources/factories/VideoFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAMA,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"VideoFactory.js","sources":["../../../../../src/resources/factories/VideoFactory.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AbstractAssetFactory } from '@/resources/AbstractAssetFactory';
|
|
2
|
+
/**
|
|
3
|
+
* {@link AssetFactory} implementation that loads XML files and produces a
|
|
4
|
+
* parsed {@link Document} via the browser's built-in {@link DOMParser}.
|
|
5
|
+
*
|
|
6
|
+
* Throws if the response body is not well-formed XML. Use the returned
|
|
7
|
+
* `Document` directly with standard DOM APIs — `doc.querySelector`,
|
|
8
|
+
* `doc.getElementsByTagName`, etc. — or pass it to a format-specific parser
|
|
9
|
+
* (e.g. for Tiled TMX, BMFont, or TexturePacker XML atlas files).
|
|
10
|
+
*/
|
|
11
|
+
export declare class XmlFactory extends AbstractAssetFactory<Document> {
|
|
12
|
+
readonly storageName = "xml";
|
|
13
|
+
/**
|
|
14
|
+
* Reads the response body as a UTF-8 string containing the raw XML markup.
|
|
15
|
+
*/
|
|
16
|
+
process(response: Response): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Parses the XML string into a {@link Document}.
|
|
19
|
+
*
|
|
20
|
+
* Throws if the browser's DOMParser reports a parse error (indicated by a
|
|
21
|
+
* `<parsererror>` element in the returned document).
|
|
22
|
+
*/
|
|
23
|
+
create(source: string): Promise<Document>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AbstractAssetFactory } from '../AbstractAssetFactory.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* {@link AssetFactory} implementation that loads XML files and produces a
|
|
5
|
+
* parsed {@link Document} via the browser's built-in {@link DOMParser}.
|
|
6
|
+
*
|
|
7
|
+
* Throws if the response body is not well-formed XML. Use the returned
|
|
8
|
+
* `Document` directly with standard DOM APIs — `doc.querySelector`,
|
|
9
|
+
* `doc.getElementsByTagName`, etc. — or pass it to a format-specific parser
|
|
10
|
+
* (e.g. for Tiled TMX, BMFont, or TexturePacker XML atlas files).
|
|
11
|
+
*/
|
|
12
|
+
class XmlFactory extends AbstractAssetFactory {
|
|
13
|
+
storageName = 'xml';
|
|
14
|
+
/**
|
|
15
|
+
* Reads the response body as a UTF-8 string containing the raw XML markup.
|
|
16
|
+
*/
|
|
17
|
+
async process(response) {
|
|
18
|
+
return response.text();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parses the XML string into a {@link Document}.
|
|
22
|
+
*
|
|
23
|
+
* Throws if the browser's DOMParser reports a parse error (indicated by a
|
|
24
|
+
* `<parsererror>` element in the returned document).
|
|
25
|
+
*/
|
|
26
|
+
async create(source) {
|
|
27
|
+
const doc = new DOMParser().parseFromString(source, 'text/xml');
|
|
28
|
+
const parseError = doc.querySelector('parsererror');
|
|
29
|
+
if (parseError) {
|
|
30
|
+
throw new Error(`XML parse error: ${parseError.textContent.trim() || 'unknown error'}`);
|
|
31
|
+
}
|
|
32
|
+
return doc;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { XmlFactory };
|
|
37
|
+
//# sourceMappingURL=XmlFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XmlFactory.js","sources":["../../../../../src/resources/factories/XmlFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;;;;;;AAQG;AACG,MAAO,UAAW,SAAQ,oBAA8B,CAAA;IAC5C,WAAW,GAAG,KAAK;AAEnC;;AAEG;IACI,MAAM,OAAO,CAAC,QAAkB,EAAA;AACrC,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;IACxB;AAEA;;;;;AAKG;IACI,MAAM,MAAM,CAAC,MAAc,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC;QAC/D,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC;QAEnD,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,eAAe,CAAA,CAAE,CAAC;QACzF;AAEA,QAAA,OAAO,GAAG;IACZ;AACD;;;;"}
|
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
export * from './AbstractAssetFactory';
|
|
2
|
+
export * from './Asset';
|
|
3
|
+
export * from './AssetDefinitions';
|
|
2
4
|
export * from './AssetFactory';
|
|
3
5
|
export * from './AssetManifest';
|
|
6
|
+
export * from './Assets';
|
|
4
7
|
export * from './CacheFirstStrategy';
|
|
5
8
|
export * from './CacheStore';
|
|
6
9
|
export * from './CacheStrategy';
|
|
7
10
|
export * from './Database';
|
|
8
11
|
export * from './factories/BinaryFactory';
|
|
12
|
+
export * from './factories/BmFontFactory';
|
|
13
|
+
export * from './factories/CsvFactory';
|
|
9
14
|
export * from './factories/FontFactory';
|
|
10
15
|
export * from './factories/ImageFactory';
|
|
11
16
|
export * from './factories/JsonFactory';
|
|
12
17
|
export * from './factories/MusicFactory';
|
|
13
18
|
export * from './factories/SoundFactory';
|
|
19
|
+
export * from './factories/SubtitleFactory';
|
|
14
20
|
export * from './factories/SvgFactory';
|
|
15
21
|
export * from './factories/TextFactory';
|
|
16
22
|
export * from './factories/TextureFactory';
|
|
17
23
|
export * from './factories/VideoFactory';
|
|
18
|
-
export * from './factories/VttFactory';
|
|
19
24
|
export * from './factories/WasmFactory';
|
|
25
|
+
export * from './factories/XmlFactory';
|
|
20
26
|
export * from './FactoryRegistry';
|
|
21
27
|
export * from './IndexedDbDatabase';
|
|
22
28
|
export * from './IndexedDbStore';
|
|
23
29
|
export * from './Loader';
|
|
30
|
+
export * from './LoadingQueue';
|
|
24
31
|
export * from './NetworkOnlyStrategy';
|
|
25
32
|
export * from './tokens';
|
|
26
33
|
export * from './utils';
|
|
@@ -22,9 +22,55 @@ export declare abstract class TextAsset {
|
|
|
22
22
|
export declare abstract class SvgAsset {
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Dispatch token for WebVTT
|
|
25
|
+
* Dispatch token for subtitle loading (WebVTT and SRT).
|
|
26
26
|
*
|
|
27
|
-
* `loader.load(
|
|
27
|
+
* `loader.load(SubtitleAsset, 'subs.vtt')` returns `Promise<VTTCue[]>`.
|
|
28
|
+
* `loader.load(SubtitleAsset, 'subs.srt')` returns `Promise<VTTCue[]>`.
|
|
29
|
+
* Format is detected from the file extension; unknown extensions default to VTT.
|
|
28
30
|
*/
|
|
29
|
-
export declare abstract class
|
|
31
|
+
export declare abstract class SubtitleAsset {
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Dispatch token for XML document loading.
|
|
35
|
+
*
|
|
36
|
+
* `loader.load(XmlAsset, 'data.xml')` returns `Promise<Document>`.
|
|
37
|
+
* Throws if the file cannot be parsed as well-formed XML.
|
|
38
|
+
*/
|
|
39
|
+
export declare abstract class XmlAsset {
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Dispatch token for CSV loading.
|
|
43
|
+
*
|
|
44
|
+
* `loader.load(CsvAsset, 'table.csv')` returns `Promise<string[][]>`.
|
|
45
|
+
* Each inner array is one row; values are raw strings (no type coercion).
|
|
46
|
+
*/
|
|
47
|
+
export declare abstract class CsvAsset {
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Dispatch token for image loading.
|
|
51
|
+
*
|
|
52
|
+
* `loader.load(ImageAsset, 'img.png')` returns `Promise<HTMLImageElement>`.
|
|
53
|
+
*/
|
|
54
|
+
export declare abstract class ImageAsset {
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Dispatch token for font loading.
|
|
58
|
+
*
|
|
59
|
+
* `loader.load(FontAsset, 'font.woff2', { family: 'MyFont' })` returns `Promise<FontFace>`.
|
|
60
|
+
*/
|
|
61
|
+
export declare abstract class FontAsset {
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Dispatch token for binary data loading.
|
|
65
|
+
*
|
|
66
|
+
* `loader.load(BinaryAsset, 'data.bin')` returns `Promise<ArrayBuffer>`.
|
|
67
|
+
*/
|
|
68
|
+
export declare abstract class BinaryAsset {
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Dispatch token for WebAssembly module loading.
|
|
72
|
+
*
|
|
73
|
+
* `loader.load(WasmAsset, 'module.wasm')` returns `Promise<WebAssembly.Module>`.
|
|
74
|
+
*/
|
|
75
|
+
export declare abstract class WasmAsset {
|
|
30
76
|
}
|
|
@@ -22,12 +22,58 @@ class TextAsset {
|
|
|
22
22
|
class SvgAsset {
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Dispatch token for WebVTT
|
|
25
|
+
* Dispatch token for subtitle loading (WebVTT and SRT).
|
|
26
26
|
*
|
|
27
|
-
* `loader.load(
|
|
27
|
+
* `loader.load(SubtitleAsset, 'subs.vtt')` returns `Promise<VTTCue[]>`.
|
|
28
|
+
* `loader.load(SubtitleAsset, 'subs.srt')` returns `Promise<VTTCue[]>`.
|
|
29
|
+
* Format is detected from the file extension; unknown extensions default to VTT.
|
|
28
30
|
*/
|
|
29
|
-
class
|
|
31
|
+
class SubtitleAsset {
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Dispatch token for XML document loading.
|
|
35
|
+
*
|
|
36
|
+
* `loader.load(XmlAsset, 'data.xml')` returns `Promise<Document>`.
|
|
37
|
+
* Throws if the file cannot be parsed as well-formed XML.
|
|
38
|
+
*/
|
|
39
|
+
class XmlAsset {
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Dispatch token for CSV loading.
|
|
43
|
+
*
|
|
44
|
+
* `loader.load(CsvAsset, 'table.csv')` returns `Promise<string[][]>`.
|
|
45
|
+
* Each inner array is one row; values are raw strings (no type coercion).
|
|
46
|
+
*/
|
|
47
|
+
class CsvAsset {
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Dispatch token for image loading.
|
|
51
|
+
*
|
|
52
|
+
* `loader.load(ImageAsset, 'img.png')` returns `Promise<HTMLImageElement>`.
|
|
53
|
+
*/
|
|
54
|
+
class ImageAsset {
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Dispatch token for font loading.
|
|
58
|
+
*
|
|
59
|
+
* `loader.load(FontAsset, 'font.woff2', { family: 'MyFont' })` returns `Promise<FontFace>`.
|
|
60
|
+
*/
|
|
61
|
+
class FontAsset {
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Dispatch token for binary data loading.
|
|
65
|
+
*
|
|
66
|
+
* `loader.load(BinaryAsset, 'data.bin')` returns `Promise<ArrayBuffer>`.
|
|
67
|
+
*/
|
|
68
|
+
class BinaryAsset {
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Dispatch token for WebAssembly module loading.
|
|
72
|
+
*
|
|
73
|
+
* `loader.load(WasmAsset, 'module.wasm')` returns `Promise<WebAssembly.Module>`.
|
|
74
|
+
*/
|
|
75
|
+
class WasmAsset {
|
|
30
76
|
}
|
|
31
77
|
|
|
32
|
-
export { Json, SvgAsset, TextAsset,
|
|
78
|
+
export { BinaryAsset, CsvAsset, FontAsset, ImageAsset, Json, SubtitleAsset, SvgAsset, TextAsset, WasmAsset, XmlAsset };
|
|
33
79
|
//# sourceMappingURL=tokens.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sources":["../../../../src/resources/tokens.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;AAMG;MACmB,IAAI,CAAA;AAAG;AAE7B;;;;AAIG;MACmB,SAAS,CAAA;AAAG;AAElC;;;;AAIG;MACmB,QAAQ,CAAA;AAAG;AAEjC;;;;AAIG;MACmB,
|
|
1
|
+
{"version":3,"file":"tokens.js","sources":["../../../../src/resources/tokens.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;AAMG;MACmB,IAAI,CAAA;AAAG;AAE7B;;;;AAIG;MACmB,SAAS,CAAA;AAAG;AAElC;;;;AAIG;MACmB,QAAQ,CAAA;AAAG;AAEjC;;;;;;AAMG;MACmB,aAAa,CAAA;AAAG;AAEtC;;;;;AAKG;MACmB,QAAQ,CAAA;AAAG;AAEjC;;;;;AAKG;MACmB,QAAQ,CAAA;AAAG;AAEjC;;;;AAIG;MACmB,UAAU,CAAA;AAAG;AAEnC;;;;AAIG;MACmB,SAAS,CAAA;AAAG;AAElC;;;;AAIG;MACmB,WAAW,CAAA;AAAG;AAEpC;;;;AAIG;MACmB,SAAS,CAAA;AAAG;;;;"}
|