@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
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
import { Signal } from '@/core/Signal';
|
|
2
|
+
import { BmFont } from '@/rendering/text/BmFont';
|
|
3
|
+
import { Asset } from './Asset';
|
|
4
|
+
import type { AssetDefinitions, AssetInput, InferAssetResource } from './AssetDefinitions';
|
|
2
5
|
import type { AssetFactory } from './AssetFactory';
|
|
3
6
|
import type { AssetManifest, LoadBundleOptions } from './AssetManifest';
|
|
7
|
+
import { type Assets } from './Assets';
|
|
4
8
|
import type { CacheStore } from './CacheStore';
|
|
5
9
|
import type { CacheStrategy } from './CacheStrategy';
|
|
6
10
|
import type { AssetConstructor } from './FactoryRegistry';
|
|
7
|
-
import {
|
|
11
|
+
import { LoadingQueue } from './LoadingQueue';
|
|
12
|
+
import { BinaryAsset, CsvAsset, FontAsset, ImageAsset, Json, SubtitleAsset, SvgAsset, TextAsset, WasmAsset, XmlAsset } from './tokens';
|
|
8
13
|
/**
|
|
9
14
|
* Any abstract or concrete constructor that can be used as an asset type token
|
|
10
15
|
* with {@link Loader.load} and related methods.
|
|
11
16
|
*/
|
|
12
17
|
export type Loadable = abstract new (...args: any[]) => any;
|
|
18
|
+
/** Maps each key of an `AssetInput` map to its resolved runtime resource type. */
|
|
19
|
+
export type InferLoadedMap<M extends Record<string, AssetInput>> = {
|
|
20
|
+
[K in keyof M]: InferAssetResource<M[K]>;
|
|
21
|
+
};
|
|
13
22
|
/**
|
|
14
23
|
* Maps a {@link Loadable} constructor to the concrete type returned by
|
|
15
24
|
* {@link Loader.load}.
|
|
@@ -19,11 +28,89 @@ export type Loadable = abstract new (...args: any[]) => any;
|
|
|
19
28
|
* their constructor type. All other loadables return the instance type inferred
|
|
20
29
|
* from the constructor.
|
|
21
30
|
*/
|
|
22
|
-
export type LoadReturn<T> = T extends typeof Json ? unknown : T extends typeof TextAsset ? string : T extends typeof SvgAsset ? HTMLImageElement : T extends typeof
|
|
31
|
+
export type LoadReturn<T> = T extends typeof Json ? unknown : T extends typeof TextAsset ? string : T extends typeof SvgAsset ? HTMLImageElement : T extends typeof SubtitleAsset ? VTTCue[] : T extends typeof XmlAsset ? Document : T extends typeof CsvAsset ? string[][] : T extends typeof ImageAsset ? HTMLImageElement : T extends typeof FontAsset ? FontFace : T extends typeof BinaryAsset ? ArrayBuffer : T extends typeof WasmAsset ? WebAssembly.Module : T extends abstract new (...args: any[]) => infer R ? R : never;
|
|
32
|
+
/**
|
|
33
|
+
* Maps file extensions (without leading dot, lower-case) to the asset type
|
|
34
|
+
* returned by {@link Loader.load} when called with a plain path string.
|
|
35
|
+
*
|
|
36
|
+
* Extend via declaration merging to register custom extension → type mappings:
|
|
37
|
+
* ```ts
|
|
38
|
+
* declare module 'exojs' {
|
|
39
|
+
* interface ExtensionTypeMap { tmj: TiledMap; }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export interface ExtensionTypeMap {
|
|
44
|
+
fnt: BmFont;
|
|
45
|
+
woff: FontFace;
|
|
46
|
+
woff2: FontFace;
|
|
47
|
+
ttf: FontFace;
|
|
48
|
+
otf: FontFace;
|
|
49
|
+
}
|
|
50
|
+
type PathExtension<S extends string> = S extends `${string}.${infer E}?${string}` ? Lowercase<E> : S extends `${string}.${infer E}` ? Lowercase<E> : never;
|
|
51
|
+
/**
|
|
52
|
+
* Resolves the return type for {@link Loader.load} when called with a plain
|
|
53
|
+
* path string. Returns `unknown` when the extension is not in
|
|
54
|
+
* {@link ExtensionTypeMap} — the string-path overload rejects such paths at
|
|
55
|
+
* compile time; use the token form (`load(MyType, path)`) instead.
|
|
56
|
+
*/
|
|
57
|
+
export type LoadByPath<S extends string> = PathExtension<S> extends keyof ExtensionTypeMap ? ExtensionTypeMap[PathExtension<S>] : unknown;
|
|
58
|
+
/**
|
|
59
|
+
* Constrains a {@link Loadable} token against the types registered for a
|
|
60
|
+
* given path's extension. When the extension is in {@link ExtensionTypeMap},
|
|
61
|
+
* `T` must produce a value assignable to the registered union — otherwise
|
|
62
|
+
* resolves to `never`, triggering a compile-time error.
|
|
63
|
+
*
|
|
64
|
+
* For paths with an unregistered extension the constraint is skipped and any
|
|
65
|
+
* `T` is accepted (runtime behaviour is unchanged).
|
|
66
|
+
*
|
|
67
|
+
* ```ts
|
|
68
|
+
* // ExtensionTypeMap: { ogg: Sound | Video }
|
|
69
|
+
* loader.load(Sound, 'effect.ogg') // ✓ Sound ∈ Sound | Video
|
|
70
|
+
* loader.load(BitmapText, 'effect.ogg') // ✗ BitmapText ∉ Sound | Video
|
|
71
|
+
* loader.load(Sound, 'theme.custom') // ✓ .custom not in map → unconstrained
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export type ConstrainedLoadable<T extends abstract new (...args: any[]) => any, S extends string> = PathExtension<S> extends keyof ExtensionTypeMap ? (LoadReturn<T> extends ExtensionTypeMap[PathExtension<S>] ? T : never) : T;
|
|
75
|
+
/**
|
|
76
|
+
* Context object passed to custom asset-type load handlers registered via
|
|
77
|
+
* {@link Loader.registerAssetType}.
|
|
78
|
+
*
|
|
79
|
+
* The `fetch*` helpers route through the loader's configured cache strategy
|
|
80
|
+
* and IDB stores, giving custom handlers the same caching behaviour as
|
|
81
|
+
* built-in asset types.
|
|
82
|
+
*/
|
|
83
|
+
export interface AssetLoaderContext {
|
|
84
|
+
/** The owning {@link Loader} instance. */
|
|
85
|
+
readonly loader: Loader;
|
|
86
|
+
/**
|
|
87
|
+
* The identity key for this load — `id:<typeId>:<discriminator>`.
|
|
88
|
+
* Useful for diagnostics; also equals the key used for in-flight dedup.
|
|
89
|
+
*/
|
|
90
|
+
readonly identityKey: string;
|
|
91
|
+
/** Fetches `source` as UTF-8 text, routing through the loader's cache/IDB. */
|
|
92
|
+
fetchText(source: string): Promise<string>;
|
|
93
|
+
/** Fetches `source` as an `ArrayBuffer`, routing through the loader's cache/IDB. */
|
|
94
|
+
fetchArrayBuffer(source: string): Promise<ArrayBuffer>;
|
|
95
|
+
/**
|
|
96
|
+
* Fetches `source` as parsed JSON, routing through the loader's cache/IDB.
|
|
97
|
+
* Supply `T` to narrow the return type at the call site.
|
|
98
|
+
*/
|
|
99
|
+
fetchJson<T = unknown>(source: string): Promise<T>;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Accepted value types in the homogeneous batch load API.
|
|
103
|
+
*
|
|
104
|
+
* Either a raw source string or a flat config object containing at least
|
|
105
|
+
* `source` plus any type-specific extra fields.
|
|
106
|
+
*/
|
|
107
|
+
export type BatchValue = string | ({
|
|
108
|
+
source: string;
|
|
109
|
+
} & Record<string, unknown>);
|
|
23
110
|
/**
|
|
24
111
|
* Construction options for {@link Loader}.
|
|
25
112
|
*
|
|
26
|
-
* `
|
|
113
|
+
* `basePath` is prepended to relative asset paths at fetch time.
|
|
27
114
|
* `cache` accepts one or more {@link CacheStore} instances. `cacheStrategy`
|
|
28
115
|
* picks the policy used to consult them — defaults to
|
|
29
116
|
* {@link CacheFirstStrategy} (check stores → network → write back).
|
|
@@ -31,8 +118,8 @@ export type LoadReturn<T> = T extends typeof Json ? unknown : T extends typeof T
|
|
|
31
118
|
* (default `6`).
|
|
32
119
|
*/
|
|
33
120
|
export interface LoaderOptions {
|
|
34
|
-
|
|
35
|
-
|
|
121
|
+
basePath?: string;
|
|
122
|
+
fetchOptions?: RequestInit;
|
|
36
123
|
cache?: CacheStore | readonly CacheStore[];
|
|
37
124
|
cacheStrategy?: CacheStrategy;
|
|
38
125
|
concurrency?: number;
|
|
@@ -59,12 +146,13 @@ export interface LoaderOptions {
|
|
|
59
146
|
*
|
|
60
147
|
* @example
|
|
61
148
|
* ```ts
|
|
62
|
-
* const loader = new Loader({
|
|
149
|
+
* const loader = new Loader({ basePath: '/assets/', cache: new IndexedDbStore('game') });
|
|
63
150
|
* const texture = await loader.load(Texture, 'hero.png');
|
|
64
151
|
* ```
|
|
65
152
|
*/
|
|
66
153
|
export declare class Loader {
|
|
67
154
|
private readonly _registry;
|
|
155
|
+
private readonly _assetTypeMap;
|
|
68
156
|
private readonly _resources;
|
|
69
157
|
private readonly _manifest;
|
|
70
158
|
private readonly _bundles;
|
|
@@ -73,8 +161,13 @@ export declare class Loader {
|
|
|
73
161
|
private readonly _preventStoreKeys;
|
|
74
162
|
private readonly _stores;
|
|
75
163
|
private readonly _cacheStrategy;
|
|
76
|
-
private
|
|
77
|
-
private
|
|
164
|
+
private readonly _aliasKeyToIdentityKey;
|
|
165
|
+
private readonly _identityKeyToAliases;
|
|
166
|
+
private readonly _inFlightByIdentity;
|
|
167
|
+
private readonly _handlerFunctions;
|
|
168
|
+
private readonly _extensionMap;
|
|
169
|
+
private _basePath;
|
|
170
|
+
private _fetchOptions;
|
|
78
171
|
private _concurrency;
|
|
79
172
|
private _nextTypeId;
|
|
80
173
|
private _backgroundQueue;
|
|
@@ -100,6 +193,62 @@ export declare class Loader {
|
|
|
100
193
|
* for the same constructor.
|
|
101
194
|
*/
|
|
102
195
|
register<T>(type: AssetConstructor<T>, factory: AssetFactory<T>): this;
|
|
196
|
+
/**
|
|
197
|
+
* Associates a string type name with a simple load handler.
|
|
198
|
+
*
|
|
199
|
+
* The handler's `load` method receives the full config object (including
|
|
200
|
+
* `source` and every extra field declared via `AssetDefinitions` augmentation)
|
|
201
|
+
* plus a {@link AssetLoaderContext} containing the loader instance.
|
|
202
|
+
*
|
|
203
|
+
* This form is intended for custom asset types that manage their own
|
|
204
|
+
* network access; the persistent cache layer is bypassed.
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```ts
|
|
208
|
+
* loader.registerAssetType('tileMap', {
|
|
209
|
+
* load(config, { loader }) {
|
|
210
|
+
* return loadTileMap({ source: config.source, format: config.format, loader });
|
|
211
|
+
* },
|
|
212
|
+
* });
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
registerAssetType<K extends keyof AssetDefinitions>(typeName: K, handler: {
|
|
216
|
+
/**
|
|
217
|
+
* Optional discriminator for in-flight dedup and identity tracking.
|
|
218
|
+
*
|
|
219
|
+
* Return a string that uniquely identifies the conceptual asset given its
|
|
220
|
+
* full config. The default (when omitted) is `config.source`, which is
|
|
221
|
+
* correct for assets where the source URL alone determines the result.
|
|
222
|
+
* Supply this when extra config fields affect the loaded output — e.g.
|
|
223
|
+
* `\`${config.source}:${config.format}\`` — so that two assets with the
|
|
224
|
+
* same source but different format are kept separate in the in-flight map.
|
|
225
|
+
*/
|
|
226
|
+
getIdentityKey?(config: AssetDefinitions[K]['config']): string;
|
|
227
|
+
load(config: AssetDefinitions[K]['config'], context: AssetLoaderContext): Promise<AssetDefinitions[K]['resource']>;
|
|
228
|
+
}): this;
|
|
229
|
+
/**
|
|
230
|
+
* Associates a string type name (e.g. `'tileMap'`) with the constructor
|
|
231
|
+
* used as the asset token and, optionally, registers a factory for it.
|
|
232
|
+
*
|
|
233
|
+
* Required for declaration-merge extensions of {@link AssetDefinitions}
|
|
234
|
+
* so that `loader.load({ map: { type: 'tileMap', source: '…' } })` works.
|
|
235
|
+
*/
|
|
236
|
+
registerAssetType(typeName: string, ctor: AssetConstructor, factory?: AssetFactory): this;
|
|
237
|
+
/**
|
|
238
|
+
* Associates a file extension with an asset type so that
|
|
239
|
+
* `loader.load('path.ext')` (the single-string overload) can infer the
|
|
240
|
+
* type automatically.
|
|
241
|
+
*
|
|
242
|
+
* `ext` is matched case-insensitively and the leading dot is optional.
|
|
243
|
+
* The type must already have a registered factory (via {@link register} or
|
|
244
|
+
* {@link registerAssetType}).
|
|
245
|
+
*
|
|
246
|
+
* ```ts
|
|
247
|
+
* loader.registerExtension('tmj', TiledMap);
|
|
248
|
+
* const map = await loader.load('world.tmj'); // TiledMap
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
registerExtension(ext: string, type: AssetConstructor): this;
|
|
103
252
|
/**
|
|
104
253
|
* Registers one or more asset aliases in the manifest without immediately
|
|
105
254
|
* loading them.
|
|
@@ -146,6 +295,9 @@ export declare class Loader {
|
|
|
146
295
|
* - **Single path** — resolves with the finished asset.
|
|
147
296
|
* - **Array of paths** — resolves with an ordered array of assets.
|
|
148
297
|
* - **Record** — resolves with a record whose keys match the input keys.
|
|
298
|
+
* - **Asset<T>** — single typed asset reference.
|
|
299
|
+
* - **Assets<M>** — typed asset container; keys become aliases.
|
|
300
|
+
* - **Config map** — inline `{ alias: { type, source, … } }` definition.
|
|
149
301
|
*
|
|
150
302
|
* In-flight and already-loaded assets are de-duplicated: calling `load`
|
|
151
303
|
* for the same (type, alias) pair while a fetch is in progress attaches
|
|
@@ -154,12 +306,37 @@ export declare class Loader {
|
|
|
154
306
|
* Supply a custom `options` object to pass factory-specific configuration
|
|
155
307
|
* (e.g. audio decoding hints or image format overrides).
|
|
156
308
|
*/
|
|
157
|
-
load<T = unknown>(type: typeof Json, path: string, options?: unknown):
|
|
158
|
-
load<T = unknown>(type: typeof Json, paths: readonly string[], options?: unknown):
|
|
159
|
-
load<T = unknown, K extends string = string>(type: typeof Json, items: Readonly<Record<K, string>>, options?: unknown):
|
|
160
|
-
load<T
|
|
161
|
-
load<
|
|
162
|
-
load<
|
|
309
|
+
load<T = unknown>(type: typeof Json, path: string, options?: unknown): LoadingQueue<T>;
|
|
310
|
+
load<T = unknown>(type: typeof Json, paths: readonly string[], options?: unknown): LoadingQueue<T[]>;
|
|
311
|
+
load<T = unknown, K extends string = string>(type: typeof Json, items: Readonly<Record<K, string>>, options?: unknown): LoadingQueue<Record<K, T>>;
|
|
312
|
+
load<T>(asset: Asset<T>): LoadingQueue<T>;
|
|
313
|
+
load<M extends Record<string, AssetInput>>(assets: Assets<M>): LoadingQueue<InferLoadedMap<M>>;
|
|
314
|
+
load<M extends Record<string, AssetInput>>(config: M): LoadingQueue<InferLoadedMap<M>>;
|
|
315
|
+
/**
|
|
316
|
+
* Fetches an asset by path, inferring the type from the file extension.
|
|
317
|
+
*
|
|
318
|
+
* Built-in extension mappings:
|
|
319
|
+
* - `.fnt` → {@link BmFont}
|
|
320
|
+
* - `.woff`, `.woff2`, `.ttf`, `.otf` → `FontFace` (family inferred from filename)
|
|
321
|
+
*
|
|
322
|
+
* Register additional mappings via {@link registerExtension}.
|
|
323
|
+
* Extend the return type by augmenting {@link ExtensionTypeMap}.
|
|
324
|
+
*
|
|
325
|
+
* Paths whose extension is **not** in {@link ExtensionTypeMap} are rejected at
|
|
326
|
+
* compile time — use the token form (`load(MyType, path)`) for unregistered
|
|
327
|
+
* extensions.
|
|
328
|
+
*
|
|
329
|
+
* ```ts
|
|
330
|
+
* const font = await loader.load('fonts/ui.fnt'); // BmFont
|
|
331
|
+
* const face = await loader.load('fonts/Roboto.woff2'); // FontFace, family='Roboto'
|
|
332
|
+
* const bm = await loader.load<BmFont>('fonts/ui.fnt'); // validated cast
|
|
333
|
+
* ```
|
|
334
|
+
*/
|
|
335
|
+
load<R, S extends string>(path: PathExtension<S> extends keyof ExtensionTypeMap ? S : never): LoadingQueue<R>;
|
|
336
|
+
load<S extends string>(path: PathExtension<S> extends keyof ExtensionTypeMap ? S : never): LoadingQueue<LoadByPath<S>>;
|
|
337
|
+
load<T extends Loadable, S extends string>(type: ConstrainedLoadable<T, S>, path: S, options?: unknown): LoadingQueue<LoadReturn<T>>;
|
|
338
|
+
load<T extends Loadable>(type: T, paths: readonly string[], options?: unknown): LoadingQueue<Array<LoadReturn<T>>>;
|
|
339
|
+
load<T extends Loadable, K extends string>(type: T, items: Readonly<Record<K, BatchValue>>, options?: unknown): LoadingQueue<Record<K, LoadReturn<T>>>;
|
|
163
340
|
/**
|
|
164
341
|
* Enqueues all manifest-registered assets that have not yet been loaded
|
|
165
342
|
* into the background fetch queue and begins draining the queue up to
|
|
@@ -206,7 +383,10 @@ export declare class Loader {
|
|
|
206
383
|
* discarded once it arrives rather than written to the store, preventing
|
|
207
384
|
* a stale value from being committed after an explicit unload.
|
|
208
385
|
*/
|
|
386
|
+
unload<T>(asset: Asset<T>): this;
|
|
387
|
+
unload<M extends Record<string, AssetInput>>(assets: Assets<M>): this;
|
|
209
388
|
unload(type: Loadable, alias: string): this;
|
|
389
|
+
private _unloadOne;
|
|
210
390
|
/**
|
|
211
391
|
* Removes all loaded assets from the in-memory store.
|
|
212
392
|
*
|
|
@@ -219,14 +399,14 @@ export declare class Loader {
|
|
|
219
399
|
* Absolute URLs (starting with `http://`, `https://`, or `//`) are
|
|
220
400
|
* passed through unchanged.
|
|
221
401
|
*/
|
|
222
|
-
get
|
|
223
|
-
set
|
|
402
|
+
get basePath(): string;
|
|
403
|
+
set basePath(value: string);
|
|
224
404
|
/**
|
|
225
405
|
* Default `RequestInit` options merged into every `fetch` call.
|
|
226
406
|
* Override per-load with the `options` argument of {@link load}.
|
|
227
407
|
*/
|
|
228
|
-
get
|
|
229
|
-
set
|
|
408
|
+
get fetchOptions(): RequestInit;
|
|
409
|
+
set fetchOptions(value: RequestInit);
|
|
230
410
|
/**
|
|
231
411
|
* Tears down the loader and all resources it owns.
|
|
232
412
|
*
|
|
@@ -237,6 +417,41 @@ export declare class Loader {
|
|
|
237
417
|
destroy(): void;
|
|
238
418
|
private _loadSingle;
|
|
239
419
|
private _loadSingleBackground;
|
|
420
|
+
private _createLoadingQueue;
|
|
421
|
+
/**
|
|
422
|
+
* Loads a single asset from an `Asset<T>` reference using identity-based
|
|
423
|
+
* in-flight deduplication.
|
|
424
|
+
*
|
|
425
|
+
* Multiple aliases that point to the same source share a single network
|
|
426
|
+
* fetch. Each alias is stored independently in `_resources` so that
|
|
427
|
+
* `get(type, alias)` works for all of them.
|
|
428
|
+
*/
|
|
429
|
+
private _loadSingleAsset;
|
|
430
|
+
/**
|
|
431
|
+
* Calls a handler-based custom asset loader and stores the result.
|
|
432
|
+
*
|
|
433
|
+
* Unlike `_fetch`, this does NOT automatically bypass caching — the handler
|
|
434
|
+
* controls caching by calling `context.fetchText` / `context.fetchArrayBuffer`
|
|
435
|
+
* / `context.fetchJson`, which route through the loader's cache strategy.
|
|
436
|
+
*/
|
|
437
|
+
private _fetchWithHandler;
|
|
438
|
+
/**
|
|
439
|
+
* Builds an {@link AssetLoaderContext} for a handler invocation.
|
|
440
|
+
*
|
|
441
|
+
* The `fetch*` helpers on the returned context route through the loader's
|
|
442
|
+
* configured cache strategy and IDB stores, using `source` as the IDB key
|
|
443
|
+
* (so the same URL is never fetched twice regardless of the asset alias).
|
|
444
|
+
*/
|
|
445
|
+
private _buildHandlerContext;
|
|
446
|
+
/**
|
|
447
|
+
* Fetches `source` through the loader's cache strategy with an inline
|
|
448
|
+
* pass-through factory, using `source` as the IDB key.
|
|
449
|
+
*
|
|
450
|
+
* `process` converts the raw `Response` to the storable intermediate form
|
|
451
|
+
* (e.g. `r.text()`, `r.arrayBuffer()`, `r.json()`). `create` is always the
|
|
452
|
+
* identity function — the cached value is returned unchanged.
|
|
453
|
+
*/
|
|
454
|
+
private _contextFetch;
|
|
240
455
|
private _fetch;
|
|
241
456
|
private _drainBackground;
|
|
242
457
|
private _boostFromQueue;
|
|
@@ -254,7 +469,18 @@ export declare class Loader {
|
|
|
254
469
|
private _describeType;
|
|
255
470
|
private _hasResource;
|
|
256
471
|
private _storeResource;
|
|
472
|
+
private _getTypeId;
|
|
257
473
|
private _key;
|
|
474
|
+
private _identityKey;
|
|
475
|
+
/**
|
|
476
|
+
* Resolves the effective identity key for an `Asset<T>` reference, mirroring
|
|
477
|
+
* the logic used in `_loadSingleAsset`.
|
|
478
|
+
*
|
|
479
|
+
* For handler types with `getIdentityKey`, the config-sensitive discriminator
|
|
480
|
+
* is used; otherwise source is the discriminator (same as `_identityKey`).
|
|
481
|
+
*/
|
|
482
|
+
private _resolveAssetIdentityKey;
|
|
258
483
|
private _resolveUrl;
|
|
259
484
|
private _registerBuiltinFactories;
|
|
260
485
|
}
|
|
486
|
+
export {};
|