@iwsdk/core 1.0.0-rc.0 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/asset/asset-manager.js.map +1 -1
  2. package/dist/asset/cache-manager.js.map +1 -1
  3. package/dist/asset/loaders/audio-loader.js.map +1 -1
  4. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  5. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  6. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  7. package/dist/asset/loaders/texture-loader.js.map +1 -1
  8. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  9. package/dist/audio/audio-pool.js.map +1 -1
  10. package/dist/audio/audio-system.js.map +1 -1
  11. package/dist/audio/audio-utils.js.map +1 -1
  12. package/dist/audio/audio.js.map +1 -1
  13. package/dist/camera/camera-source.js.map +1 -1
  14. package/dist/camera/camera-system.js.map +1 -1
  15. package/dist/camera/camera-utils.js.map +1 -1
  16. package/dist/camera/types.js.map +1 -1
  17. package/dist/depth/depth-occludable.js.map +1 -1
  18. package/dist/depth/depth-sensing-system.js.map +1 -1
  19. package/dist/depth/depth-textures.js.map +1 -1
  20. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  21. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  22. package/dist/ecs/builtin-components.js.map +1 -1
  23. package/dist/ecs/component-editor-metadata.js.map +1 -1
  24. package/dist/ecs/component-manifest.js.map +1 -1
  25. package/dist/ecs/entity.js.map +1 -1
  26. package/dist/ecs/system.js.map +1 -1
  27. package/dist/ecs/world.js.map +1 -1
  28. package/dist/environment/dome-gradient.js.map +1 -1
  29. package/dist/environment/dome-texture.js.map +1 -1
  30. package/dist/environment/environment-system.js.map +1 -1
  31. package/dist/environment/gradient-environment.js.map +1 -1
  32. package/dist/environment/ibl-gradient.js.map +1 -1
  33. package/dist/environment/ibl-texture.js.map +1 -1
  34. package/dist/environment/scene-ar-environment.js.map +1 -1
  35. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  36. package/dist/environment-raycast/raycast-target.js.map +1 -1
  37. package/dist/gaze/gaze-system.d.ts +207 -0
  38. package/dist/gaze/gaze-system.d.ts.map +1 -0
  39. package/dist/gaze/gaze-system.js +168 -0
  40. package/dist/gaze/gaze-system.js.map +1 -0
  41. package/dist/gaze/index.d.ts +8 -0
  42. package/dist/gaze/index.d.ts.map +1 -0
  43. package/dist/grab/distance-grabbable.js.map +1 -1
  44. package/dist/grab/grab-helpers.d.ts +7 -6
  45. package/dist/grab/grab-helpers.d.ts.map +1 -1
  46. package/dist/grab/grab-helpers.js +12 -7
  47. package/dist/grab/grab-helpers.js.map +1 -1
  48. package/dist/grab/grab-system.d.ts.map +1 -1
  49. package/dist/grab/grab-system.js +2 -1
  50. package/dist/grab/grab-system.js.map +1 -1
  51. package/dist/grab/grab-warnings.js.map +1 -1
  52. package/dist/grab/grabbed.js.map +1 -1
  53. package/dist/grab/handles.d.ts +10 -1
  54. package/dist/grab/handles.d.ts.map +1 -1
  55. package/dist/grab/handles.js +29 -6
  56. package/dist/grab/handles.js.map +1 -1
  57. package/dist/grab/index.js.map +1 -1
  58. package/dist/grab/one-hand-grabbable.js.map +1 -1
  59. package/dist/grab/pointer-events-patch.js.map +1 -1
  60. package/dist/grab/two-hands-grabbable.js.map +1 -1
  61. package/dist/index.d.ts +1 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +4 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/init/browser-camera.js.map +1 -1
  66. package/dist/init/player-camera.js.map +1 -1
  67. package/dist/init/session-grant.js.map +1 -1
  68. package/dist/init/world-initializer.d.ts +49 -0
  69. package/dist/init/world-initializer.d.ts.map +1 -1
  70. package/dist/init/world-initializer.js +23 -11
  71. package/dist/init/world-initializer.js.map +1 -1
  72. package/dist/init/xr.d.ts +14 -0
  73. package/dist/init/xr.d.ts.map +1 -1
  74. package/dist/init/xr.js +19 -0
  75. package/dist/init/xr.js.map +1 -1
  76. package/dist/input/canvas-pointer-system.js.map +1 -1
  77. package/dist/input/input-actions.js.map +1 -1
  78. package/dist/input/input-manager.js.map +1 -1
  79. package/dist/input/input-system.d.ts +3 -0
  80. package/dist/input/input-system.d.ts.map +1 -1
  81. package/dist/input/input-system.js +72 -6
  82. package/dist/input/input-system.js.map +1 -1
  83. package/dist/input/state-tags.d.ts.map +1 -1
  84. package/dist/input/state-tags.js +2 -0
  85. package/dist/input/state-tags.js.map +1 -1
  86. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  87. package/dist/input/stateful-keyboard.js.map +1 -1
  88. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  89. package/dist/layers/xr-layer-init.js.map +1 -1
  90. package/dist/layers/xr-layer-state.js.map +1 -1
  91. package/dist/layers/xr-layer-system.js.map +1 -1
  92. package/dist/layers/xr-layer-transform.js.map +1 -1
  93. package/dist/layers/xr-quad-layer.js.map +1 -1
  94. package/dist/level/level-component-applier.js.map +1 -1
  95. package/dist/level/level-player-rig.js.map +1 -1
  96. package/dist/level/level-root.js.map +1 -1
  97. package/dist/level/level-scene-environment.js.map +1 -1
  98. package/dist/level/level-scene-json-importer.js.map +1 -1
  99. package/dist/level/level-scene-material.js.map +1 -1
  100. package/dist/level/level-scene-object.js.map +1 -1
  101. package/dist/level/level-scene-primitive.js.map +1 -1
  102. package/dist/level/level-system.js.map +1 -1
  103. package/dist/level/level-tag.js.map +1 -1
  104. package/dist/lighting/light-binding.js.map +1 -1
  105. package/dist/lighting/light-components.js.map +1 -1
  106. package/dist/lighting/light-system.js.map +1 -1
  107. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  108. package/dist/locomotion/locomotion-environment.js.map +1 -1
  109. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  110. package/dist/locomotion/locomotion.js.map +1 -1
  111. package/dist/locomotion/materials/line.js.map +1 -1
  112. package/dist/locomotion/slide.js.map +1 -1
  113. package/dist/locomotion/teleport.js.map +1 -1
  114. package/dist/locomotion/turn.js.map +1 -1
  115. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  116. package/dist/mcp/mcp-runtime.js.map +1 -1
  117. package/dist/mcp/scene-tools.js.map +1 -1
  118. package/dist/mcp/ui-debug-tools.js.map +1 -1
  119. package/dist/physics/physics-runtime.js.map +1 -1
  120. package/dist/physics/physics-system.js.map +1 -1
  121. package/dist/physics/physics-transport.js.map +1 -1
  122. package/dist/physics/physics-worker-protocol.js.map +1 -1
  123. package/dist/physics/physics-worker-utils.js.map +1 -1
  124. package/dist/physics/physics-worker.js.map +1 -1
  125. package/dist/physics/physicsBody.js.map +1 -1
  126. package/dist/physics/physicsManipulation.js.map +1 -1
  127. package/dist/physics/physicsShape.js.map +1 -1
  128. package/dist/physics/utils.js.map +1 -1
  129. package/dist/project/normalize.d.ts.map +1 -1
  130. package/dist/project/normalize.js +11 -0
  131. package/dist/project/normalize.js.map +1 -1
  132. package/dist/project/paths.js.map +1 -1
  133. package/dist/project/types.d.ts +32 -2
  134. package/dist/project/types.d.ts.map +1 -1
  135. package/dist/project/types.js.map +1 -1
  136. package/dist/project/validation.d.ts.map +1 -1
  137. package/dist/project/validation.js +65 -1
  138. package/dist/project/validation.js.map +1 -1
  139. package/dist/runtime/three.js.map +1 -1
  140. package/dist/scene-understanding/anchor.js.map +1 -1
  141. package/dist/scene-understanding/mesh.js.map +1 -1
  142. package/dist/scene-understanding/plane.js.map +1 -1
  143. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  144. package/dist/schemas/iwsdk-project.v1.schema.json +45 -3
  145. package/dist/transform/synced-euler.js.map +1 -1
  146. package/dist/transform/synced-quaternion.js.map +1 -1
  147. package/dist/transform/synced-vector3.js.map +1 -1
  148. package/dist/transform/transform-component.js.map +1 -1
  149. package/dist/transform/transform-utils.js.map +1 -1
  150. package/dist/transform/transform.js.map +1 -1
  151. package/dist/ui/document.js.map +1 -1
  152. package/dist/ui/follow-component.js.map +1 -1
  153. package/dist/ui/follow.js.map +1 -1
  154. package/dist/ui/panel-components.js.map +1 -1
  155. package/dist/ui/screenspace-component.js.map +1 -1
  156. package/dist/ui/screenspace.js.map +1 -1
  157. package/dist/ui/ui.js.map +1 -1
  158. package/dist/ui/uikitml-asset.js.map +1 -1
  159. package/dist/ui/uikitml.js.map +1 -1
  160. package/dist/version.d.ts +1 -1
  161. package/dist/version.js +1 -1
  162. package/dist/version.js.map +1 -1
  163. package/dist/visibility/visibility-component.js.map +1 -1
  164. package/dist/visibility/visibility.js.map +1 -1
  165. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"asset-manager.js","sources":["../../src/asset/asset-manager.ts"],"sourcesContent":[null],"names":["cloneObject3D"],"mappings":"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"}
1
+ {"version":3,"file":"asset-manager.js","sources":["../../src/asset/asset-manager.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { clone as cloneObject3D } from 'three/examples/jsm/utils/SkeletonUtils.js';\nimport type { World } from '../ecs/world.js';\nimport {\n Box3,\n BoxGeometry,\n BufferGeometry,\n CapsuleGeometry,\n CylinderGeometry,\n LoadingManager,\n Mesh,\n MeshStandardMaterial,\n Object3D,\n SphereGeometry,\n Texture,\n WebGLRenderer,\n} from '../runtime/index.js';\nimport { CacheManager } from './cache-manager.js';\nimport { AudioAssetLoader } from './loaders/audio-loader.js';\nimport {\n assertAssetLoadTimeout,\n DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n} from './loaders/cached-asset-load.js';\nimport {\n DEFAULT_MAX_MODEL_PAYLOAD_BYTES,\n DEFAULT_MAX_TOTAL_MODEL_PAYLOAD_BYTES,\n disposeGLTFResources,\n GetGLTFOptions,\n GLTFAssetLoader,\n} from './loaders/gltf-loader.js';\nimport { HDRTextureAssetLoader } from './loaders/hdr-texture-loader.js';\nimport { TextureAssetLoader } from './loaders/texture-loader.js';\nimport { UIKitMLAssetLoader } from './loaders/uikitml-loader.js';\n\nexport type { GetGLTFOptions } from './loaders/gltf-loader.js';\nexport {\n DEFAULT_MAX_MODEL_PAYLOAD_BYTES,\n DEFAULT_MAX_TOTAL_MODEL_PAYLOAD_BYTES,\n GLTFPayloadLimitError,\n} from './loaders/gltf-loader.js';\nexport {\n AssetLoadTimeoutError,\n DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n} from './loaders/cached-asset-load.js';\n\n/** Payload ceilings applied to detached model resource preflight. */\nexport interface GLTFLoadTransactionLimits {\n maxModelPayloadBytes?: number;\n maxTotalModelPayloadBytes?: number;\n}\n\nexport interface StagedGLTFLoad {\n gltf: GLTF;\n payloadBytes: number;\n source: 'cache' | 'detached';\n url: string;\n}\n\n/**\n * Asset types supported by the {@link AssetManager}.\n * @category Assets\n */\nexport enum AssetType {\n GLTF = 'gltf', // 3D models (cached)\n Audio = 'audio', // Audio buffers (cached)\n Texture = 'texture', // 3D textures (cached)\n HDRTexture = 'hdr-texture', // HDR/EXR equirect textures (cached)\n UIKitML = 'uikitml', // Spatial UI documents (cached source)\n}\n\nexport interface LoadableAssetManifestEntry {\n url: string;\n type: AssetType;\n priority?: 'critical' | 'background' | 'lazy';\n /** Human-readable label used by authoring tools. */\n name?: string;\n}\n\nexport type AssetManifestEntry = LoadableAssetManifestEntry | Object3D;\n\n/**\n * Application asset catalog. Parentless Object3D entries are immutable\n * renderable prototypes; URL entries are loaded and cached by type.\n * @category Assets\n */\nexport interface AssetManifest {\n [key: string]: AssetManifestEntry;\n}\n\n/** Non-enumerable marker carried by manifests created with defineAssets. */\nexport const ASSET_MANIFEST_BRAND: unique symbol = Symbol(\n '@iwsdk/core/asset-manifest/v1',\n);\n\nexport type DefinedAssetManifest<T extends AssetManifest = AssetManifest> =\n Readonly<T> & {\n readonly [ASSET_MANIFEST_BRAND]: 1;\n };\n\n/**\n * Declare the complete application asset catalog shared by runtime/editor.\n * The returned container is frozen; entry objects and Three.js prototypes are\n * intentionally left mutable and retain their original identities.\n */\nexport function defineAssets<const T extends AssetManifest>(\n assets: T,\n): DefinedAssetManifest<T> {\n if (assets == null || typeof assets !== 'object' || Array.isArray(assets)) {\n throw new Error('Asset manifest must be an object');\n }\n for (const [id, entry] of Object.entries(assets)) {\n if (id.trim().length === 0) {\n throw new Error('Asset IDs must not be blank');\n }\n assertAssetManifestEntry(id, entry);\n }\n const manifest = { ...assets } as DefinedAssetManifest<T>;\n Object.defineProperty(manifest, ASSET_MANIFEST_BRAND, {\n configurable: false,\n enumerable: false,\n value: 1,\n writable: false,\n });\n return Object.freeze(manifest);\n}\n\n/** Structured identity for critical, background, and on-demand failures. */\nexport class AssetLoadError extends Error {\n constructor(\n readonly assetId: string,\n readonly url: string,\n readonly cause: unknown,\n ) {\n super(\n `Failed to load asset \"${assetId}\" from \"${url}\": ${errorMessage(cause)}`,\n );\n this.name = 'AssetLoadError';\n }\n}\n\nexport interface RenderableAssetInfo {\n id: string;\n kind: 'gltf' | 'primitive' | 'procedural';\n name: string;\n bounds?: {\n min: [number, number, number];\n max: [number, number, number];\n };\n}\n\n/** Asset metadata exposed to authoring tools. */\nexport interface AuthoringAssetInfo extends Omit<RenderableAssetInfo, 'kind'> {\n kind: 'gltf' | 'primitive' | 'procedural' | 'uikitml';\n url?: string;\n}\n\nconst BUILTIN_PRIMITIVE_ASSETS: AssetManifest = Object.freeze({\n 'primitive-box': createPrimitivePrototype(\n 'Box',\n new BoxGeometry(0.5, 0.5, 0.5),\n ),\n 'primitive-capsule': createPrimitivePrototype(\n 'Capsule',\n new CapsuleGeometry(0.2, 0.5, 4, 12),\n ),\n 'primitive-cylinder': createPrimitivePrototype(\n 'Cylinder',\n new CylinderGeometry(0.25, 0.25, 0.6, 24),\n ),\n 'primitive-sphere': createPrimitivePrototype(\n 'Sphere',\n new SphereGeometry(0.3, 24, 16),\n ),\n});\n\nexport interface AssetRegistryOptions {\n instantiateUIKitML?: (assetId: string) => Promise<Object3D>;\n}\n\n/**\n * World-owned view of the application's renderable asset manifest.\n *\n * The registry never places registered prototypes into a scene. Each request\n * returns a hierarchy clone while retaining shared geometry and material\n * references, matching the existing glTF cache behavior.\n */\nexport class RenderableAssetRegistry {\n private readonly manifest: AssetManifest;\n\n constructor(\n manifest: AssetManifest = {},\n private readonly options: AssetRegistryOptions = {},\n ) {\n this.manifest = { ...BUILTIN_PRIMITIVE_ASSETS, ...manifest };\n for (const [id, entry] of Object.entries(this.manifest)) {\n if (isObject3DManifestEntry(entry) && entry.parent != null) {\n throw new Error(\n `Renderable asset prototype \"${id}\" must not have a parent`,\n );\n }\n }\n AssetManager.registerManifest(this.manifest);\n }\n\n async preload(): Promise<void> {\n await AssetManager.preloadAssets(this.manifest);\n }\n\n has(id: string): boolean {\n return this.kind(id) != null;\n }\n\n /** Return whether an id instantiates as a conventional model hierarchy. */\n hasRenderable(id: string): boolean {\n return isRenderableManifestEntry(this.manifest[id]);\n }\n\n /** Return whether an id is available to authoring, including UIKitML. */\n hasAuthoringAsset(id: string): boolean {\n return this.kind(id) != null;\n }\n\n /** Resolve the authoring kind for a manifest id. */\n kind(id: string): AuthoringAssetInfo['kind'] | undefined {\n const entry = this.manifest[id];\n if (entry == null) {\n return undefined;\n }\n if (isObject3DManifestEntry(entry)) {\n return isPrimitivePrototype(entry) ? 'primitive' : 'procedural';\n }\n if (entry.type === AssetType.GLTF) {\n return 'gltf';\n }\n if (entry.type === AssetType.UIKitML) {\n return 'uikitml';\n }\n return undefined;\n }\n\n list(): RenderableAssetInfo[] {\n const result: RenderableAssetInfo[] = [];\n for (const [id, entry] of Object.entries(this.manifest)) {\n if (isObject3DManifestEntry(entry)) {\n result.push({\n bounds: boundsForPrototype(entry),\n id,\n kind: isPrimitivePrototype(entry) ? 'primitive' : 'procedural',\n name: entry.name || id,\n });\n } else if (entry.type === AssetType.GLTF) {\n result.push({\n bounds: this.bounds(id),\n id,\n kind: 'gltf',\n name: entry.name || id,\n });\n }\n }\n return result;\n }\n\n /** List placeable model and UIKitML assets for authoring tools. */\n catalog(): AuthoringAssetInfo[] {\n const result: AuthoringAssetInfo[] = this.list();\n for (const [id, entry] of Object.entries(this.manifest)) {\n if (!isObject3DManifestEntry(entry) && entry.type === AssetType.UIKitML) {\n result.push({\n id,\n kind: 'uikitml',\n name: entry.name || id,\n url: entry.url,\n });\n }\n }\n return result;\n }\n\n bounds(id: string): RenderableAssetInfo['bounds'] | undefined {\n const entry = this.manifest[id];\n if (entry == null) {\n return undefined;\n }\n if (isObject3DManifestEntry(entry)) {\n return boundsForPrototype(entry);\n }\n if (entry.type !== AssetType.GLTF) {\n return undefined;\n }\n const gltf = AssetManager.getGLTF(id, { shared: true });\n return gltf == null ? undefined : boundsForPrototype(gltf.scene);\n }\n\n async instantiate<T extends Object3D = Object3D>(id: string): Promise<T> {\n const entry = this.manifest[id];\n if (entry == null) {\n throw new Error(`Unknown renderable asset \"${id}\"`);\n }\n if (isObject3DManifestEntry(entry)) {\n return cloneObject3D(entry) as unknown as T;\n }\n if (entry.type === AssetType.UIKitML) {\n if (this.options.instantiateUIKitML == null) {\n throw new Error(`UIKitML asset \"${id}\" requires the spatialUI feature`);\n }\n if (entry.priority === 'lazy') {\n await AssetManager.loadUIKitMLById(id);\n }\n return this.options.instantiateUIKitML(id) as Promise<T>;\n }\n if (entry.type !== AssetType.GLTF) {\n throw new Error(`Manifest entry \"${id}\" is not a renderable asset`);\n }\n await AssetManager.loadGLTFById(id);\n const gltf = AssetManager.getGLTF(id);\n if (gltf == null) {\n throw new Error(`Renderable glTF asset \"${id}\" failed to load`);\n }\n return gltf.scene as unknown as T;\n }\n}\n\n/** Loader-level options for GLTF/HDR loaders. @category Assets */\nexport interface AssetManagerOptions {\n dracoDecoderPath: string;\n ktx2TranscoderPath: string;\n /** Finite upper bound for every critical/background/on-demand load. */\n loadTimeoutMs: number;\n}\n\n/**\n * Centralized asset loader with caching and priority‑based preloading.\n *\n * @remarks\n * - Initializes loader instances against a shared `LoadingManager`.\n * - `preloadAssets` loads critical assets first (blocking), then starts background ones.\n * - Use `getGLTF`/`getTexture`/`getAudio` to retrieve cached results by key.\n * @category Assets\n */\nexport class AssetManager {\n static loadingManager: LoadingManager;\n static world: World;\n private static loadTimeoutMs = DEFAULT_ASSET_LOAD_TIMEOUT_MS;\n private static readonly manifestEntries = new Map<\n string,\n LoadableAssetManifestEntry\n >();\n\n /**\n * Initialize loaders and bind to the current world/renderer.\n */\n static init(\n renderer: WebGLRenderer,\n world: World,\n options: Partial<AssetManagerOptions> = {},\n ) {\n this.world = world;\n this.loadingManager = new LoadingManager();\n this.manifestEntries.clear();\n this.loadTimeoutMs = options.loadTimeoutMs ?? DEFAULT_ASSET_LOAD_TIMEOUT_MS;\n assertAssetLoadTimeout(this.loadTimeoutMs);\n\n // Initialize all specialized loaders\n AudioAssetLoader.init(this.loadingManager);\n GLTFAssetLoader.init(this.loadingManager, renderer, options);\n TextureAssetLoader.init(this.loadingManager);\n HDRTextureAssetLoader.init(this.loadingManager);\n }\n\n /** Configure the finite timeout used by subsequent asset loads. */\n static setLoadTimeout(timeoutMs: number): void {\n assertAssetLoadTimeout(timeoutMs);\n this.loadTimeoutMs = timeoutMs;\n }\n\n /** Register catalog identity without starting network requests. */\n static registerManifest(manifest: AssetManifest): void {\n this.manifestEntries.clear();\n for (const [id, entry] of Object.entries(manifest)) {\n if (isObject3DManifestEntry(entry)) {\n continue;\n }\n this.manifestEntries.set(id, entry);\n CacheManager.setKeyToUrl(id, entry.url);\n }\n }\n\n /** Preload assets with critical/background prioritization. */\n static async preloadAssets(manifest: AssetManifest): Promise<void> {\n this.registerManifest(manifest);\n const loadableAssets = Object.entries(manifest).filter(\n (entry): entry is [string, LoadableAssetManifestEntry] =>\n !isObject3DManifestEntry(entry[1]),\n );\n const criticalAssets = loadableAssets.filter(([_, config]) => {\n return config.priority !== 'background' && config.priority !== 'lazy';\n });\n\n const backgroundAssets = loadableAssets.filter(([_, config]) => {\n return config.priority === 'background';\n });\n\n const criticalPromises = criticalAssets.map(([key, config]) => {\n return this.loadAssetByType(config.url, config.type, key);\n });\n await Promise.all(criticalPromises);\n\n backgroundAssets.forEach(([key, config]) => {\n this.loadAssetByType(config.url, config.type, key).catch((err) =>\n console.warn(`Background asset failed: ${key}`, err),\n );\n });\n }\n\n private static async loadAssetByType(\n url: string,\n type: AssetType,\n assetId: string = url,\n ): Promise<GLTF | AudioBuffer | Texture | string> {\n CacheManager.setKeyToUrl(assetId, url);\n try {\n switch (type) {\n case AssetType.GLTF:\n return await GLTFAssetLoader.loadGLTF(\n url,\n assetId,\n this.loadTimeoutMs,\n );\n case AssetType.Audio:\n return await AudioAssetLoader.loadAudio(url, this.loadTimeoutMs);\n case AssetType.Texture:\n return await TextureAssetLoader.loadTexture(url, this.loadTimeoutMs);\n case AssetType.HDRTexture:\n return await HDRTextureAssetLoader.loadHDRTexture(\n url,\n this.loadTimeoutMs,\n );\n case AssetType.UIKitML:\n return await UIKitMLAssetLoader.loadUIKitML(\n url,\n assetId,\n false,\n this.loadTimeoutMs,\n );\n default:\n throw new Error(`Unsupported asset type: ${type}`);\n }\n } catch (cause) {\n if (cause instanceof AssetLoadError) {\n throw cause;\n }\n throw new AssetLoadError(assetId, url, cause);\n }\n }\n\n /** Load one registered manifest entry by asset ID. */\n static async loadAsset(\n assetId: string,\n ): Promise<GLTF | AudioBuffer | Texture | string> {\n const entry = this.requireManifestEntry(assetId);\n return this.loadAssetByType(entry.url, entry.type, assetId);\n }\n\n static async loadGLTFById(assetId: string): Promise<GLTF> {\n return this.loadTypedManifestAsset(\n assetId,\n AssetType.GLTF,\n ) as Promise<GLTF>;\n }\n\n static async loadAudioById(assetId: string): Promise<AudioBuffer> {\n return this.loadTypedManifestAsset(\n assetId,\n AssetType.Audio,\n ) as Promise<AudioBuffer>;\n }\n\n static async loadTextureById(assetId: string): Promise<Texture> {\n return this.loadTypedManifestAsset(\n assetId,\n AssetType.Texture,\n ) as Promise<Texture>;\n }\n\n static async loadHDRTextureById(assetId: string): Promise<Texture> {\n return this.loadTypedManifestAsset(\n assetId,\n AssetType.HDRTexture,\n ) as Promise<Texture>;\n }\n\n static async loadUIKitMLById(assetId: string): Promise<string> {\n return this.loadTypedManifestAsset(\n assetId,\n AssetType.UIKitML,\n ) as Promise<string>;\n }\n\n private static loadTypedManifestAsset(\n assetId: string,\n expectedType: AssetType,\n ): Promise<GLTF | AudioBuffer | Texture | string> {\n const entry = this.requireManifestEntry(assetId);\n if (entry.type !== expectedType) {\n throw new Error(\n `Asset \"${assetId}\" has type \"${entry.type}\", expected \"${expectedType}\"`,\n );\n }\n return this.loadAssetByType(entry.url, entry.type, assetId);\n }\n\n private static requireManifestEntry(\n assetId: string,\n ): LoadableAssetManifestEntry {\n const entry = this.manifestEntries.get(assetId);\n if (entry == null) {\n throw new Error(`Unknown loadable asset \"${assetId}\"`);\n }\n return entry;\n }\n\n /**\n * Load a GLTF by URL; optionally register a logical key.\n *\n * @remarks\n * Resolves with the cached `GLTF` directly. Use {@link AssetManager.getGLTF}\n * after the load resolves to retrieve a clone suitable for placing into\n * multiple entities.\n */\n static loadGLTF(urlOrKey: string, key?: string): Promise<GLTF> {\n const url = key == null ? CacheManager.resolveUrl(urlOrKey) : urlOrKey;\n return this.loadAssetByType(\n url,\n AssetType.GLTF,\n key ?? urlOrKey,\n ) as Promise<GLTF>;\n }\n\n /** Create an isolated glTF load transaction for scene resource preflight. */\n static createGLTFLoadTransaction(\n limits: GLTFLoadTransactionLimits = {},\n ): GLTFLoadTransaction {\n return new GLTFLoadTransaction(limits);\n }\n\n // Scene documents are loaded through World.loadLevel(url).\n\n /** Fetch any cached asset by logical key. */\n static getAsset(key: string): any {\n return CacheManager.getAssetByKey(key);\n }\n\n // Public API Methods - delegate to specialized loaders\n /** Load an AudioBuffer by URL; optionally register a logical key. */\n static async loadAudio(url: string, key?: string): Promise<AudioBuffer> {\n const resolvedUrl = key == null ? CacheManager.resolveUrl(url) : url;\n return this.loadAssetByType(\n resolvedUrl,\n AssetType.Audio,\n key ?? url,\n ) as Promise<AudioBuffer>;\n }\n\n /** Get a cached AudioBuffer by logical key. */\n static getAudio(key: string): AudioBuffer | null {\n return AudioAssetLoader.getAudio(key);\n }\n\n /** Load a Texture by URL; optionally register a logical key. */\n static async loadTexture(url: string, key?: string): Promise<Texture> {\n const resolvedUrl = key == null ? CacheManager.resolveUrl(url) : url;\n return this.loadAssetByType(\n resolvedUrl,\n AssetType.Texture,\n key ?? url,\n ) as Promise<Texture>;\n }\n\n /** Get a cached Texture by logical key. */\n static getTexture(key: string): Texture | null {\n return TextureAssetLoader.getTexture(key);\n }\n\n /** Load and cache UIKitML source by URL or manifest key. */\n static loadUIKitML(\n urlOrKey: string,\n key?: string,\n forceReload = false,\n ): Promise<string> {\n const url = key == null ? CacheManager.resolveUrl(urlOrKey) : urlOrKey;\n const assetId = key ?? urlOrKey;\n CacheManager.setKeyToUrl(assetId, url);\n return UIKitMLAssetLoader.loadUIKitML(\n url,\n assetId,\n forceReload,\n this.loadTimeoutMs,\n ).catch((cause) => {\n throw cause instanceof AssetLoadError\n ? cause\n : new AssetLoadError(assetId, url, cause);\n });\n }\n\n /** Get cached UIKitML source by URL or manifest key. */\n static getUIKitML(keyOrUrl: string): string | null {\n return UIKitMLAssetLoader.getUIKitML(keyOrUrl);\n }\n\n /** Load an HDR equirectangular texture; optionally register a logical key. */\n static async loadHDRTexture(url: string, key?: string): Promise<Texture> {\n const resolvedUrl = key == null ? CacheManager.resolveUrl(url) : url;\n return this.loadAssetByType(\n resolvedUrl,\n AssetType.HDRTexture,\n key ?? url,\n ) as Promise<Texture>;\n }\n\n /**\n * Get a cached GLTF by logical key.\n *\n * @remarks\n * Returns a fresh clone by default (`scene`/`scenes` are new `Object3D`\n * trees; geometries, materials, animations stay shared), so the same key\n * may be safely used for multiple entities. Pass `{ shared: true }` to\n * return the cached instance directly.\n */\n static getGLTF(key: string, options?: GetGLTFOptions): GLTF | null {\n return GLTFAssetLoader.getGLTF(key, options);\n }\n}\n\nfunction isObject3DManifestEntry(entry: AssetManifestEntry): entry is Object3D {\n return (entry as Object3D | undefined)?.isObject3D === true;\n}\n\nconst SUPPORTED_ASSET_TYPE_NAMES = Object.values(AssetType);\nconst SUPPORTED_ASSET_TYPES = new Set<string>(SUPPORTED_ASSET_TYPE_NAMES);\nconst SUPPORTED_ASSET_PRIORITIES = new Set<string>([\n 'critical',\n 'background',\n 'lazy',\n]);\n\nfunction assertAssetManifestEntry(id: string, entry: unknown): void {\n if (isObject3DManifestEntry(entry as AssetManifestEntry)) {\n if ((entry as Object3D).parent != null) {\n throw new Error(\n `Renderable asset prototype \"${id}\" must not have a parent`,\n );\n }\n return;\n }\n if (entry == null || typeof entry !== 'object' || Array.isArray(entry)) {\n throw new Error(\n `Asset manifest entry \"${id}\" must be a URL entry or Object3D prototype`,\n );\n }\n const candidate = entry as Partial<LoadableAssetManifestEntry>;\n if (typeof candidate.url !== 'string' || candidate.url.trim().length === 0) {\n throw new Error(`Asset manifest entry \"${id}\" must have a nonblank URL`);\n }\n if (\n typeof candidate.type !== 'string' ||\n !SUPPORTED_ASSET_TYPES.has(candidate.type)\n ) {\n throw new Error(\n `Asset manifest entry \"${id}\" has unsupported type \"${String(candidate.type)}\". Supported types: ${SUPPORTED_ASSET_TYPE_NAMES.join(', ')}`,\n );\n }\n if (\n candidate.priority !== undefined &&\n !SUPPORTED_ASSET_PRIORITIES.has(candidate.priority)\n ) {\n throw new Error(\n `Asset manifest entry \"${id}\" has unsupported priority \"${String(candidate.priority)}\"`,\n );\n }\n if (candidate.name !== undefined && typeof candidate.name !== 'string') {\n throw new Error(`Asset manifest entry \"${id}\" name must be a string`);\n }\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction createPrimitivePrototype(\n name: string,\n geometry: BufferGeometry,\n): Mesh {\n const prototype = new Mesh(\n geometry,\n new MeshStandardMaterial({\n color: 0x91a4ba,\n metalness: 0.05,\n roughness: 0.72,\n }),\n );\n prototype.name = name;\n prototype.userData.iwsdkAssetKind = 'primitive';\n return prototype;\n}\n\nfunction isPrimitivePrototype(entry: Object3D): boolean {\n return entry.userData.iwsdkAssetKind === 'primitive';\n}\n\nfunction isRenderableManifestEntry(\n entry: AssetManifestEntry | undefined,\n): entry is Object3D | LoadableAssetManifestEntry {\n return (\n entry != null &&\n (isObject3DManifestEntry(entry) || entry.type === AssetType.GLTF)\n );\n}\n\nfunction boundsForPrototype(\n prototype: Object3D,\n): RenderableAssetInfo['bounds'] | undefined {\n const instance = cloneObject3D(prototype);\n instance.updateMatrixWorld(true);\n const bounds = new Box3().setFromObject(instance);\n if (bounds.isEmpty()) {\n return undefined;\n }\n return {\n min: bounds.min.toArray() as [number, number, number],\n max: bounds.max.toArray() as [number, number, number],\n };\n}\n\n/**\n * Stages model resources without mutating shared AssetManager caches. A\n * successful scene commit adopts owned resources; rollback disposes them.\n */\nexport class GLTFLoadTransaction {\n private readonly maxModelPayloadBytes: number;\n private readonly maxTotalModelPayloadBytes: number;\n private readonly stagedByUrl = new Map<string, StagedGLTFLoad>();\n private readonly urlByKey = new Map<string, string>();\n private state: 'open' | 'committed' | 'rolled-back' = 'open';\n private totalPayloadBytes = 0;\n\n constructor(limits: GLTFLoadTransactionLimits = {}) {\n this.maxModelPayloadBytes =\n limits.maxModelPayloadBytes ?? DEFAULT_MAX_MODEL_PAYLOAD_BYTES;\n this.maxTotalModelPayloadBytes =\n limits.maxTotalModelPayloadBytes ?? DEFAULT_MAX_TOTAL_MODEL_PAYLOAD_BYTES;\n assertPositiveByteLimit('maxModelPayloadBytes', this.maxModelPayloadBytes);\n assertPositiveByteLimit(\n 'maxTotalModelPayloadBytes',\n this.maxTotalModelPayloadBytes,\n );\n }\n\n /** Stage one logical key. Repeated URLs share one detached response. */\n async stage(url: string, key: string): Promise<StagedGLTFLoad> {\n this.assertOpen();\n const priorUrl = this.urlByKey.get(key);\n if (priorUrl != null && priorUrl !== url) {\n throw new Error(\n `Staged model key \"${key}\" already refers to \"${priorUrl}\"`,\n );\n }\n let staged = this.stagedByUrl.get(url);\n if (staged == null) {\n const cached = await getSettledCachedGLTF(url);\n if (cached != null) {\n staged = { gltf: cached, payloadBytes: 0, source: 'cache', url };\n } else {\n const loaded = await GLTFAssetLoader.loadGLTFDetached(\n url,\n this.maxModelPayloadBytes,\n );\n if (\n this.totalPayloadBytes + loaded.payloadBytes >\n this.maxTotalModelPayloadBytes\n ) {\n disposeGLTFResources(loaded.gltf);\n throw new Error(\n `Staged model payloads total ${\n this.totalPayloadBytes + loaded.payloadBytes\n } bytes; the configured scene limit is ${\n this.maxTotalModelPayloadBytes\n } bytes`,\n );\n }\n staged = {\n gltf: loaded.gltf,\n payloadBytes: loaded.payloadBytes,\n source: 'detached',\n url,\n };\n this.totalPayloadBytes += loaded.payloadBytes;\n }\n this.stagedByUrl.set(url, staged);\n }\n this.urlByKey.set(key, url);\n return staged;\n }\n\n /** Retrieve a clone for materialization without transferring ownership. */\n getGLTF(key: string, options: GetGLTFOptions = {}): GLTF | null {\n const url = this.urlByKey.get(key);\n const staged = url == null ? null : this.stagedByUrl.get(url);\n if (staged == null) {\n return null;\n }\n return options.shared\n ? staged.gltf\n : GLTFAssetLoader.cloneGLTF(staged.gltf);\n }\n\n /** Exact newly fetched primary-response bytes in this transaction. */\n get payloadBytes(): number {\n return this.totalPayloadBytes;\n }\n\n /** Verify cache ownership can transfer synchronously after scene install. */\n assertCanCommit(): void {\n this.assertOpen();\n for (const staged of this.stagedByUrl.values()) {\n const cached = CacheManager.getAsset<GLTF>(staged.url);\n if (staged.source === 'cache') {\n if (cached !== staged.gltf) {\n throw new Error(\n `Cached model \"${staged.url}\" changed during resource preflight`,\n );\n }\n } else if (cached != null || CacheManager.hasPromise(staged.url)) {\n throw new Error(\n `Model \"${staged.url}\" entered the shared cache during resource preflight`,\n );\n }\n }\n }\n\n /** Atomically transfer staged resources and logical keys to the shared cache. */\n commit(): void {\n this.assertCanCommit();\n for (const staged of this.stagedByUrl.values()) {\n if (staged.source === 'detached') {\n CacheManager.setAsset(staged.url, staged.gltf);\n }\n }\n for (const [key, url] of this.urlByKey) {\n CacheManager.setKeyToUrl(key, url);\n }\n this.state = 'committed';\n }\n\n /** Dispose all transaction-owned model resources; cached resources are borrowed. */\n rollback(): void {\n if (this.state !== 'open') {\n return;\n }\n for (const staged of this.stagedByUrl.values()) {\n if (staged.source === 'detached') {\n disposeGLTFResources(staged.gltf);\n }\n }\n this.state = 'rolled-back';\n this.stagedByUrl.clear();\n this.urlByKey.clear();\n }\n\n private assertOpen(): void {\n if (this.state !== 'open') {\n throw new Error(`GLTF load transaction is already ${this.state}`);\n }\n }\n}\n\nasync function getSettledCachedGLTF(url: string): Promise<GLTF | null> {\n const cached = CacheManager.getAsset<GLTF>(url);\n if (cached != null) {\n return cached;\n }\n const inFlight = CacheManager.getPromise<GLTF>(url);\n if (inFlight == null) {\n return null;\n }\n await inFlight;\n return CacheManager.getAsset<GLTF>(url) ?? null;\n}\n\nfunction assertPositiveByteLimit(name: string, value: number): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new Error(`${name} must be a positive safe integer`);\n }\n}\n"],"names":["cloneObject3D"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cache-manager.js","sources":["../../src/asset/cache-manager.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAEH;;;;;;;;;AASG;MACU,YAAY,CAAA;;AAMvB,IAAA,OAAO,WAAW,CAAC,GAAW,EAAE,GAAW,EAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAC7B;;IAGA,OAAO,UAAU,CAAC,QAAgB,EAAA;;QAChC,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ;IAChD;;IAGA,OAAO,UAAU,CAAC,GAAW,EAAA;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC;;IAGA,OAAO,UAAU,CAAI,GAAW,EAAA;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAe;IACjD;;AAGA,IAAA,OAAO,UAAU,CAAI,GAAW,EAAE,OAAmB,EAAA;QACnD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;IACrC;;AAGA,IAAA,OAAO,aAAa,CAAC,GAAW,EAAE,QAA2B,EAAA;AAC3D,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC/D,YAAA,OAAO,KAAK;QACd;QACA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;IACtC;;IAGA,OAAO,QAAQ,CAAC,GAAW,EAAA;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5B;;IAGA,OAAO,QAAQ,CAAI,GAAW,EAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAM;IACjC;;AAGA,IAAA,OAAO,QAAQ,CAAI,GAAW,EAAE,KAAQ,EAAA;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC5B;;IAGA,OAAO,WAAW,CAAC,QAAgB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrD;;IAGA,OAAO,aAAa,CAAC,GAAW,EAAA;;QAE9B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B;;QAGA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC,IAAI,GAAG,EAAE;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B;AAEA,QAAA,OAAO,SAAS;IAClB;;AAGA,IAAA,OAAO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACvB;;AA9Ee,YAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAe;AAC9B,YAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAwB;AAC9C,YAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAkB;;;;"}
1
+ {"version":3,"file":"cache-manager.js","sources":["../../src/asset/cache-manager.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Central cache for assets and in-flight loads used by {@link AssetManager}.\n *\n * @remarks\n * - Tracks a key→URL registry so callers may refer to assets by logical keys.\n * - De-duplicates concurrent requests via a promise cache.\n * - Stores resolved assets for fast reuse.\n *\n * @category Assets\n */\nexport class CacheManager {\n private static cache = new Map<string, any>();\n private static promiseCache = new Map<string, Promise<any>>();\n private static keyToUrl = new Map<string, string>();\n\n /** Record a logical key → URL mapping. */\n static setKeyToUrl(key: string, url: string): void {\n this.keyToUrl.set(key, url);\n }\n\n /** Resolve a key or pass-through a URL. */\n static resolveUrl(urlOrKey: string): string {\n return this.keyToUrl.get(urlOrKey) ?? urlOrKey;\n }\n\n /** True if an in-flight promise exists for URL. */\n static hasPromise(url: string): boolean {\n return this.promiseCache.has(url);\n }\n\n /** Get the in-flight promise for URL (if any). */\n static getPromise<T>(url: string): Promise<T> | undefined {\n return this.promiseCache.get(url) as Promise<T>;\n }\n\n /** Store an in-flight promise for URL. */\n static setPromise<T>(url: string, promise: Promise<T>): void {\n this.promiseCache.set(url, promise);\n }\n\n /** Remove an in-flight promise, optionally only when it is still current. */\n static deletePromise(url: string, expected?: Promise<unknown>): boolean {\n if (expected != null && this.promiseCache.get(url) !== expected) {\n return false;\n }\n return this.promiseCache.delete(url);\n }\n\n /** True if an asset has been cached for URL. */\n static hasAsset(url: string): boolean {\n return this.cache.has(url);\n }\n\n /** Retrieve a cached asset by URL. */\n static getAsset<T>(url: string): T | undefined {\n return this.cache.get(url) as T;\n }\n\n /** Store an asset by URL. */\n static setAsset<T>(url: string, asset: T): void {\n this.cache.set(url, asset);\n }\n\n /** Remove one cached asset by logical key or URL. */\n static deleteAsset(keyOrUrl: string): boolean {\n return this.cache.delete(this.resolveUrl(keyOrUrl));\n }\n\n /** Lookup asset by logical key or direct URL. */\n static getAssetByKey(key: string): any {\n // First check if this is a URL (direct cache access)\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n\n // Otherwise, look up the URL from the key registry\n const url = this.keyToUrl.get(key);\n if (url) {\n return this.cache.get(url);\n }\n\n return undefined;\n }\n\n /** Clear caches (useful during tests). */\n static clear(): void {\n this.cache.clear();\n this.promiseCache.clear();\n this.keyToUrl.clear();\n }\n}\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAEH;;;;;;;;;AASG;MACU,YAAY,CAAA;;AAMvB,IAAA,OAAO,WAAW,CAAC,GAAW,EAAE,GAAW,EAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAC7B;;IAGA,OAAO,UAAU,CAAC,QAAgB,EAAA;;QAChC,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ;IAChD;;IAGA,OAAO,UAAU,CAAC,GAAW,EAAA;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC;;IAGA,OAAO,UAAU,CAAI,GAAW,EAAA;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAe;IACjD;;AAGA,IAAA,OAAO,UAAU,CAAI,GAAW,EAAE,OAAmB,EAAA;QACnD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;IACrC;;AAGA,IAAA,OAAO,aAAa,CAAC,GAAW,EAAE,QAA2B,EAAA;AAC3D,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC/D,YAAA,OAAO,KAAK;QACd;QACA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;IACtC;;IAGA,OAAO,QAAQ,CAAC,GAAW,EAAA;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5B;;IAGA,OAAO,QAAQ,CAAI,GAAW,EAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAM;IACjC;;AAGA,IAAA,OAAO,QAAQ,CAAI,GAAW,EAAE,KAAQ,EAAA;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC5B;;IAGA,OAAO,WAAW,CAAC,QAAgB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrD;;IAGA,OAAO,aAAa,CAAC,GAAW,EAAA;;QAE9B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B;;QAGA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC,IAAI,GAAG,EAAE;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B;AAEA,QAAA,OAAO,SAAS;IAClB;;AAGA,IAAA,OAAO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACvB;;AA9Ee,YAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAe;AAC9B,YAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAwB;AAC9C,YAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAkB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"audio-loader.js","sources":["../../../src/asset/loaders/audio-loader.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AASH;;;;AAIG;MACU,gBAAgB,CAAA;IAG3B,OAAO,IAAI,CAAC,cAA8B,EAAA;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC;IACpD;;AAGA,IAAA,OAAO,SAAS,CACd,QAAgB,EAChB,SAAS,GAAG,6BAA6B,EAAA;QAEzC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC7C,QAAA,OAAO,eAAe,CAAC;AACrB,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;YACxD,CAAC;YACD,SAAS;YACT,GAAG;AACJ,SAAA,CAAC;IACJ;;IAGA,OAAO,QAAQ,CAAC,GAAW,EAAA;QACzB,OAAQ,YAAY,CAAC,aAAa,CAAC,GAAG,CAAiB,IAAI,IAAI;IACjE;AACD;;;;"}
1
+ {"version":3,"file":"audio-loader.js","sources":["../../../src/asset/loaders/audio-loader.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AudioLoader, LoadingManager } from '../../runtime/index.js';\nimport { CacheManager } from '../cache-manager.js';\nimport {\n DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n loadCachedAsset,\n} from './cached-asset-load.js';\n\n/**\n * Audio buffer loader with de-duplication and caching.\n *\n * @category Assets\n */\nexport class AudioAssetLoader {\n private static audioLoader: AudioLoader;\n\n static init(loadingManager: LoadingManager): void {\n this.audioLoader = new AudioLoader(loadingManager);\n }\n\n /** Load an AudioBuffer (URL or logical key), returning a cached instance when possible. */\n static loadAudio(\n urlOrKey: string,\n timeoutMs = DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n ): Promise<AudioBuffer> {\n const url = CacheManager.resolveUrl(urlOrKey);\n return loadCachedAsset({\n load: (resolve, reject) => {\n this.audioLoader.load(url, resolve, undefined, reject);\n },\n timeoutMs,\n url,\n });\n }\n\n /** Get a cached AudioBuffer by logical key. */\n static getAudio(key: string): AudioBuffer | null {\n return (CacheManager.getAssetByKey(key) as AudioBuffer) || null;\n }\n}\n"],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AASH;;;;AAIG;MACU,gBAAgB,CAAA;IAG3B,OAAO,IAAI,CAAC,cAA8B,EAAA;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC;IACpD;;AAGA,IAAA,OAAO,SAAS,CACd,QAAgB,EAChB,SAAS,GAAG,6BAA6B,EAAA;QAEzC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC7C,QAAA,OAAO,eAAe,CAAC;AACrB,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;YACxD,CAAC;YACD,SAAS;YACT,GAAG;AACJ,SAAA,CAAC;IACJ;;IAGA,OAAO,QAAQ,CAAC,GAAW,EAAA;QACzB,OAAQ,YAAY,CAAC,aAAa,CAAC,GAAG,CAAiB,IAAI,IAAI;IACjE;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"cached-asset-load.js","sources":["../../../src/asset/loaders/cached-asset-load.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cached-asset-load.js","sources":["../../../src/asset/loaders/cached-asset-load.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { CacheManager } from '../cache-manager.js';\n\n/** Default upper bound for one asset load. @category Assets */\nexport const DEFAULT_ASSET_LOAD_TIMEOUT_MS = 30_000;\n\n/** Low-level timeout raised by an individual asset loader. */\nexport class AssetLoadTimeoutError extends Error {\n constructor(\n readonly url: string,\n readonly timeoutMs: number,\n ) {\n super(`Asset load timed out after ${timeoutMs} ms: ${url}`);\n this.name = 'AssetLoadTimeoutError';\n }\n}\n\nexport interface CachedAssetLoadOptions<T> {\n /** Dispose a late result that arrives after its request timed out. */\n discard?: (asset: T) => void;\n /** Start the underlying loader. The optional return value cancels it. */\n load: (\n resolve: (asset: T) => void,\n reject: (error: unknown) => void,\n ) => (() => void) | void;\n /** Replace, rather than join, an existing in-flight request. */\n replacePending?: boolean;\n timeoutMs?: number;\n url: string;\n}\n\n/**\n * Run one cache-backed load with request de-duplication and a finite timeout.\n *\n * Late callbacks are ignored after timeout and cannot publish into the cache.\n * A loader may provide `discard` to release resources created by such a late\n * callback. Replaced requests still settle for their original callers, but\n * only the currently registered request may update shared cache state.\n */\nexport function loadCachedAsset<T>({\n discard,\n load,\n replacePending = false,\n timeoutMs = DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n url,\n}: CachedAssetLoadOptions<T>): Promise<T> {\n assertAssetLoadTimeout(timeoutMs);\n\n if (!replacePending) {\n const pending = CacheManager.getPromise<T>(url);\n if (pending != null) {\n return pending;\n }\n const cached = CacheManager.getAsset<T>(url);\n if (cached != null) {\n return Promise.resolve(cached);\n }\n }\n\n let active = true;\n let cancel: (() => void) | void;\n let resolvePromise!: (asset: T) => void;\n let rejectPromise!: (error: unknown) => void;\n const promise = new Promise<T>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n\n CacheManager.setPromise(url, promise);\n const timer = setTimeout(() => {\n if (!active) {\n return;\n }\n active = false;\n try {\n cancel?.();\n } catch {\n // Timeout identity wins; cancellation is best-effort cleanup only.\n }\n CacheManager.deletePromise(url, promise);\n rejectPromise(new AssetLoadTimeoutError(url, timeoutMs));\n }, timeoutMs);\n\n const resolve = (asset: T): void => {\n if (!active) {\n discard?.(asset);\n return;\n }\n active = false;\n clearTimeout(timer);\n if (CacheManager.getPromise(url) === promise) {\n CacheManager.setAsset(url, asset);\n CacheManager.deletePromise(url, promise);\n }\n resolvePromise(asset);\n };\n\n const reject = (error: unknown): void => {\n if (!active) {\n return;\n }\n active = false;\n clearTimeout(timer);\n CacheManager.deletePromise(url, promise);\n rejectPromise(error);\n };\n\n try {\n cancel = load(resolve, reject);\n } catch (error) {\n reject(error);\n }\n return promise;\n}\n\nexport function assertAssetLoadTimeout(timeoutMs: number): void {\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new Error('Asset load timeout must be a positive finite number');\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gltf-loader.js","sources":["../../../src/asset/loaders/gltf-loader.ts"],"sourcesContent":[null],"names":["cloneSkinned"],"mappings":"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"}
1
+ {"version":3,"file":"gltf-loader.js","sources":["../../../src/asset/loaders/gltf-loader.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n MAX_SCENE_MODEL_PAYLOAD_BYTES,\n MAX_SCENE_TOTAL_MODEL_PAYLOAD_BYTES,\n} from '@iwsdk/scene-composition';\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js';\nimport { clone as cloneSkinned } from 'three/examples/jsm/utils/SkeletonUtils.js';\nimport {\n Group,\n LoadingManager,\n Material,\n Object3D,\n REVISION,\n Texture,\n WebGLRenderer,\n} from '../../runtime/index.js';\nimport { CacheManager } from '../cache-manager.js';\nimport {\n DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n loadCachedAsset,\n} from './cached-asset-load.js';\n\n/** Default maximum combined response size for one staged model. */\nexport const DEFAULT_MAX_MODEL_PAYLOAD_BYTES = MAX_SCENE_MODEL_PAYLOAD_BYTES;\n\n/** Default maximum combined primary-response size for staged scene models. */\nexport const DEFAULT_MAX_TOTAL_MODEL_PAYLOAD_BYTES =\n MAX_SCENE_TOTAL_MODEL_PAYLOAD_BYTES;\n\n/** Exact response-byte result from a detached, non-caching glTF load. */\nexport interface DetachedGLTFLoad {\n gltf: GLTF;\n payloadBytes: number;\n}\n\n/** Error raised when an actual model response exceeds its configured ceiling. */\nexport class GLTFPayloadLimitError extends Error {\n constructor(\n readonly url: string,\n readonly actualBytes: number,\n readonly limitBytes: number,\n ) {\n super(\n `Model payload \"${url}\" is ${actualBytes} bytes; the configured limit is ${limitBytes} bytes`,\n );\n this.name = 'GLTFPayloadLimitError';\n }\n}\n\n/** Options for retrieving a cached GLTF. @category Assets */\nexport interface GetGLTFOptions {\n /**\n * If true, return the cached GLTF directly (shared across calls).\n * Default `false`: returns a fresh clone whose `scene`/`scenes` are new\n * `Object3D` trees, allowing the same key to be used for multiple entities.\n * Geometries, materials, and animation clips remain shared by reference.\n */\n shared?: boolean;\n}\n\nconst THREE_PATH = `https://unpkg.com/three@0.${REVISION}.0`;\n\n/**\n * GLTF loader with DRACO/KTX2 support, de-duplication, and caching.\n *\n * @category Assets\n */\nexport class GLTFAssetLoader {\n private static gltfLoader: GLTFLoader;\n private static dracoLoader: DRACOLoader;\n private static ktx2Loader: KTX2Loader;\n\n /**\n * Initialize loader instances and configure decoders/transcoders.\n * @param loadingManager Shared Three.js `LoadingManager`.\n * @param renderer Renderer used to detect KTX2 support.\n * @param options Optional decoder/transcoder paths (fall back to CDN paths matching Three r{REVISION}).\n */\n static init(\n loadingManager: LoadingManager,\n renderer: WebGLRenderer,\n options: {\n dracoDecoderPath?: string;\n ktx2TranscoderPath?: string;\n } = {},\n ): void {\n // Initialize DRACO loader\n this.dracoLoader = new DRACOLoader(loadingManager).setDecoderPath(\n options.dracoDecoderPath ?? `${THREE_PATH}/examples/jsm/libs/draco/gltf/`,\n );\n\n // Initialize KTX2 loader\n this.ktx2Loader = new KTX2Loader(loadingManager)\n .setTranscoderPath(\n options.ktx2TranscoderPath ?? `${THREE_PATH}/examples/jsm/libs/basis/`,\n )\n .detectSupport(renderer);\n\n // Initialize GLTF loader with compression support\n this.gltfLoader = new GLTFLoader(loadingManager)\n .setDRACOLoader(this.dracoLoader)\n .setKTX2Loader(this.ktx2Loader);\n }\n\n /**\n * Load a GLTF by URL, caching the result; optionally register a logical key.\n *\n * @remarks\n * Resolves with the cached `GLTF` instance directly. To retrieve a clone\n * suitable for placing into multiple entities, call {@link GLTFAssetLoader.getGLTF}\n * (or `AssetManager.getGLTF`) by key after the load resolves.\n */\n static loadGLTF(\n urlOrKey: string,\n key?: string,\n timeoutMs = DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n ): Promise<GLTF> {\n const url = CacheManager.resolveUrl(urlOrKey);\n if (key) {\n CacheManager.setKeyToUrl(key, url);\n }\n return loadCachedAsset({\n discard: disposeGLTFResources,\n load: (resolve, reject) => {\n this.gltfLoader.load(\n url,\n resolve,\n () => {}, // progress callback\n reject,\n );\n },\n timeoutMs,\n url,\n });\n }\n\n /**\n * Fetch and parse a glTF without touching the shared URL, promise, or key\n * caches. The glTF/GLB response plus external glTF buffers and images are\n * measured from their actual decoded bytes; `Content-Length` is used only as\n * an early rejection signal.\n */\n static async loadGLTFDetached(\n url: string,\n maxPayloadBytes = DEFAULT_MAX_MODEL_PAYLOAD_BYTES,\n ): Promise<DetachedGLTFLoad> {\n const primary = await fetchResponseBytes(url, maxPayloadBytes);\n let payloadBytes = primary.bytes.byteLength;\n let parseBytes = primary.bytes;\n const objectUrls: string[] = [];\n try {\n if (!isGLB(primary.bytes)) {\n const json = tryParseGLTFJson(primary.bytes);\n if (json != null) {\n const dependencies = collectExternalGLTFDependencies(json);\n const objectUrlByUri = new Map<string, string>();\n for (const dependency of dependencies) {\n let objectUrl = objectUrlByUri.get(dependency.uri);\n if (objectUrl == null) {\n const resolvedUrl = resolveDependencyUrl(dependency.uri, url);\n let loaded: FetchedResponseBytes;\n try {\n loaded = await fetchResponseBytes(\n resolvedUrl,\n maxPayloadBytes - payloadBytes,\n );\n } catch (error) {\n if (error instanceof GLTFPayloadLimitError) {\n throw new GLTFPayloadLimitError(\n url,\n payloadBytes + error.actualBytes,\n maxPayloadBytes,\n );\n }\n throw error;\n }\n payloadBytes += loaded.bytes.byteLength;\n const dependencyPayload = new ArrayBuffer(\n loaded.bytes.byteLength,\n );\n new Uint8Array(dependencyPayload).set(loaded.bytes);\n objectUrl = URL.createObjectURL(\n new Blob([dependencyPayload], {\n type: loaded.contentType ?? 'application/octet-stream',\n }),\n );\n objectUrls.push(objectUrl);\n objectUrlByUri.set(dependency.uri, objectUrl);\n }\n dependency.owner.uri = objectUrl;\n }\n parseBytes = new TextEncoder().encode(JSON.stringify(json));\n }\n }\n const resourcePath = url.slice(0, Math.max(0, url.lastIndexOf('/') + 1));\n const payload = new ArrayBuffer(parseBytes.byteLength);\n new Uint8Array(payload).set(parseBytes);\n const gltf = await this.gltfLoader.parseAsync(payload, resourcePath);\n return { gltf, payloadBytes };\n } finally {\n objectUrls.forEach((objectUrl) => URL.revokeObjectURL(objectUrl));\n }\n }\n\n /** Clone a glTF object tree while retaining its renderer resources by reference. */\n static cloneGLTF(gltf: GLTF): GLTF {\n return {\n ...gltf,\n scene: cloneSkinned(gltf.scene) as Group,\n scenes: gltf.scenes.map((scene) => cloneSkinned(scene) as Group),\n };\n }\n\n /**\n * Get a cached GLTF by logical key.\n *\n * @remarks\n * By default, returns a fresh clone: `scene` and `scenes` are new\n * `Object3D` trees (correctly handling `SkinnedMesh`/`Bone` hierarchies),\n * while geometries, materials, `animations`, `cameras`, `asset`,\n * `parser`, and `userData` remain shared by reference. This makes it\n * safe to call `getGLTF(key)` once per entity — adding the result's\n * `scene` to multiple parents will not silently re-parent a single\n * shared object.\n *\n * Pass `{ shared: true }` to return the cached `GLTF` directly (the\n * pre-0.4.x behavior), e.g. for framework code that intentionally\n * mutates the canonical instance.\n */\n static getGLTF(key: string, options: GetGLTFOptions = {}): GLTF | null {\n const cached = CacheManager.getAssetByKey(key) as GLTF | undefined;\n if (!cached) {\n return null;\n }\n if (options.shared) {\n return cached;\n }\n return this.cloneGLTF(cached);\n }\n}\n\n/** Dispose every renderer resource reachable from a detached glTF scene tree. */\nexport function disposeGLTFResources(gltf: GLTF): void {\n const geometries = new Set<{ dispose(): void }>();\n const materials = new Set<Material>();\n const textures = new Set<Texture>();\n const visited = new Set<unknown>();\n const visitValue = (value: unknown): void => {\n if (value == null || typeof value !== 'object' || visited.has(value)) {\n return;\n }\n visited.add(value);\n if ((value as Texture).isTexture === true) {\n textures.add(value as Texture);\n return;\n }\n if (Array.isArray(value)) {\n value.forEach(visitValue);\n return;\n }\n for (const nested of Object.values(value as Record<string, unknown>)) {\n visitValue(nested);\n }\n };\n const roots = new Set<Object3D>([gltf.scene, ...gltf.scenes]);\n for (const root of roots) {\n root.traverse((object) => {\n const renderable = object as Object3D & {\n geometry?: { dispose(): void };\n material?: Material | Material[];\n skeleton?: { boneTexture?: Texture };\n };\n if (renderable.geometry?.dispose != null) {\n geometries.add(renderable.geometry);\n }\n const objectMaterials = Array.isArray(renderable.material)\n ? renderable.material\n : renderable.material != null\n ? [renderable.material]\n : [];\n for (const material of objectMaterials) {\n materials.add(material);\n visitValue(material);\n }\n visitValue(renderable.skeleton?.boneTexture);\n });\n }\n textures.forEach((texture) => texture.dispose());\n materials.forEach((material) => material.dispose());\n geometries.forEach((geometry) => geometry.dispose());\n}\n\nfunction parseContentLength(value: string | null): number | null {\n if (value == null || !/^\\d+$/.test(value)) {\n return null;\n }\n const bytes = Number(value);\n return Number.isSafeInteger(bytes) ? bytes : null;\n}\n\ninterface FetchedResponseBytes {\n bytes: Uint8Array;\n contentType: string | null;\n}\n\ninterface ExternalGLTFDependency {\n owner: { uri: string };\n uri: string;\n}\n\nasync function fetchResponseBytes(\n url: string,\n maxPayloadBytes: number,\n): Promise<FetchedResponseBytes> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Failed to load model resource \"${url}\": ${response.status} ${response.statusText}`,\n );\n }\n const declaredBytes = parseContentLength(\n response.headers.get('content-length'),\n );\n if (declaredBytes != null && declaredBytes > maxPayloadBytes) {\n await response.body?.cancel().catch(() => {});\n throw new GLTFPayloadLimitError(url, declaredBytes, maxPayloadBytes);\n }\n return {\n bytes: await readResponseBytes(response, url, maxPayloadBytes),\n contentType: response.headers.get('content-type'),\n };\n}\n\nfunction isGLB(bytes: Uint8Array): boolean {\n return (\n bytes.byteLength >= 4 &&\n bytes[0] === 0x67 &&\n bytes[1] === 0x6c &&\n bytes[2] === 0x54 &&\n bytes[3] === 0x46\n );\n}\n\nfunction tryParseGLTFJson(bytes: Uint8Array): Record<string, unknown> | null {\n try {\n const value = JSON.parse(new TextDecoder().decode(bytes));\n return value != null && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\nfunction collectExternalGLTFDependencies(\n json: Record<string, unknown>,\n): ExternalGLTFDependency[] {\n const dependencies: ExternalGLTFDependency[] = [];\n for (const collectionName of ['buffers', 'images'] as const) {\n const collection = json[collectionName];\n if (!Array.isArray(collection)) {\n continue;\n }\n for (const value of collection) {\n if (\n value != null &&\n typeof value === 'object' &&\n typeof (value as { uri?: unknown }).uri === 'string' &&\n !isEmbeddedGLTFUri((value as { uri: string }).uri)\n ) {\n dependencies.push({\n owner: value as { uri: string },\n uri: (value as { uri: string }).uri,\n });\n }\n }\n }\n return dependencies;\n}\n\nfunction isEmbeddedGLTFUri(uri: string): boolean {\n return uri.startsWith('data:') || uri.startsWith('blob:');\n}\n\nfunction resolveDependencyUrl(uri: string, modelUrl: string): string {\n const base =\n globalThis.location == null\n ? new URL(modelUrl, 'https://iwsdk.local/')\n : new URL(modelUrl, globalThis.location.href);\n return new URL(uri, base).href;\n}\n\nasync function readResponseBytes(\n response: Response,\n url: string,\n maxPayloadBytes: number,\n): Promise<Uint8Array> {\n if (response.body == null) {\n const bytes = new Uint8Array(await response.arrayBuffer());\n assertPayloadWithinLimit(url, bytes.byteLength, maxPayloadBytes);\n return bytes;\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let byteLength = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n if (value == null) {\n continue;\n }\n byteLength += value.byteLength;\n assertPayloadWithinLimit(url, byteLength, maxPayloadBytes);\n chunks.push(value);\n }\n } catch (error) {\n await reader.cancel().catch(() => {});\n throw error;\n } finally {\n reader.releaseLock();\n }\n const bytes = new Uint8Array(byteLength);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nfunction assertPayloadWithinLimit(\n url: string,\n actualBytes: number,\n limitBytes: number,\n): void {\n if (actualBytes > limitBytes) {\n throw new GLTFPayloadLimitError(url, actualBytes, limitBytes);\n }\n}\n"],"names":["cloneSkinned"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hdr-texture-loader.js","sources":["../../../src/asset/loaders/hdr-texture-loader.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAAA;;;;;AAKG;AAeH;;AAEG;MACU,qBAAqB,CAAA;IAIhC,OAAO,IAAI,CAAC,cAA8B,EAAA;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,cAAc,CAAC;IAChD;;AAGA,IAAA,OAAO,cAAc,CACnB,QAAgB,EAChB,SAAS,GAAG,6BAA6B,EAAA;QAEzC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;;AAE7C,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;;;AAGpB,YAAA,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,CAAA,0CAAA,EAA6C,GAAG,CAAA,CAAE,CAAC,CAC9D;QACH;AAEA,QAAA,OAAO,eAAe,CAAC;YACrB,OAAO,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;AACxB,gBAAA,MAAM,MAAM,GAAG,CAAC,OAAgB,KAAI;AAClC,oBAAA,OAAO,CAAC,OAAO,GAAG,gCAAgC;oBAClD,OAAO,CAAC,OAAO,CAAC;AAClB,gBAAA,CAAC;gBACD,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;gBACrD;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;gBACrD;YACF,CAAC;YACD,SAAS;YACT,GAAG;AACJ,SAAA,CAAC;IACJ;AACD;;;;"}
1
+ {"version":3,"file":"hdr-texture-loader.js","sources":["../../../src/asset/loaders/hdr-texture-loader.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { EXRLoader } from 'three/examples/jsm/loaders/EXRLoader.js';\nimport { HDRLoader } from 'three/examples/jsm/loaders/HDRLoader.js';\nimport {\n EquirectangularReflectionMapping,\n LoadingManager,\n Texture,\n} from '../../runtime/index.js';\nimport { CacheManager } from '../cache-manager.js';\nimport {\n DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n loadCachedAsset,\n} from './cached-asset-load.js';\n\n/** HDR equirectangular texture loader with de-duplication and caching.\n * @category Assets\n */\nexport class HDRTextureAssetLoader {\n private static hdrLoader: HDRLoader;\n private static exrLoader: EXRLoader;\n\n static init(loadingManager: LoadingManager): void {\n this.hdrLoader = new HDRLoader(loadingManager);\n this.exrLoader = new EXRLoader(loadingManager);\n }\n\n /** Load an HDR `.hdr`/`.exr` texture by URL, returning a cached instance when possible. */\n static loadHDRTexture(\n urlOrKey: string,\n timeoutMs = DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n ): Promise<Texture> {\n const url = CacheManager.resolveUrl(urlOrKey);\n // Normalize extension\n const u = url.toLowerCase();\n const isEXR = u.endsWith('.exr');\n const isHDR = u.endsWith('.hdr');\n\n if (!isEXR && !isHDR) {\n // Fall back to standard texture loader if the extension is not HDR/EXR\n // but keep API compatibility for callers that route through here.\n return Promise.reject(\n new Error(`Unsupported HDR texture extension in url: ${url}`),\n );\n }\n\n return loadCachedAsset({\n discard: (texture) => texture.dispose(),\n load: (resolve, reject) => {\n const onLoad = (texture: Texture) => {\n texture.mapping = EquirectangularReflectionMapping;\n resolve(texture);\n };\n if (isEXR) {\n this.exrLoader.load(url, onLoad, undefined, reject);\n } else {\n this.hdrLoader.load(url, onLoad, undefined, reject);\n }\n },\n timeoutMs,\n url,\n });\n }\n}\n"],"names":[],"mappings":";;;;;;;AAAA;;;;;AAKG;AAeH;;AAEG;MACU,qBAAqB,CAAA;IAIhC,OAAO,IAAI,CAAC,cAA8B,EAAA;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,cAAc,CAAC;IAChD;;AAGA,IAAA,OAAO,cAAc,CACnB,QAAgB,EAChB,SAAS,GAAG,6BAA6B,EAAA;QAEzC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;;AAE7C,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;;;AAGpB,YAAA,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,CAAA,0CAAA,EAA6C,GAAG,CAAA,CAAE,CAAC,CAC9D;QACH;AAEA,QAAA,OAAO,eAAe,CAAC;YACrB,OAAO,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;AACxB,gBAAA,MAAM,MAAM,GAAG,CAAC,OAAgB,KAAI;AAClC,oBAAA,OAAO,CAAC,OAAO,GAAG,gCAAgC;oBAClD,OAAO,CAAC,OAAO,CAAC;AAClB,gBAAA,CAAC;gBACD,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;gBACrD;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;gBACrD;YACF,CAAC;YACD,SAAS;YACT,GAAG;AACJ,SAAA,CAAC;IACJ;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"texture-loader.js","sources":["../../../src/asset/loaders/texture-loader.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AASH;;;;AAIG;MACU,kBAAkB,CAAA;IAG7B,OAAO,IAAI,CAAC,cAA8B,EAAA;QACxC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,cAAc,CAAC;IACxD;;AAGA,IAAA,OAAO,WAAW,CAChB,QAAgB,EAChB,SAAS,GAAG,6BAA6B,EAAA;QAEzC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC7C,QAAA,OAAO,eAAe,CAAC;YACrB,OAAO,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;AACxB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;YAC1D,CAAC;YACD,SAAS;YACT,GAAG;AACJ,SAAA,CAAC;IACJ;;IAGA,OAAO,UAAU,CAAC,GAAW,EAAA;QAC3B,OAAQ,YAAY,CAAC,aAAa,CAAC,GAAG,CAAa,IAAI,IAAI;IAC7D;AACD;;;;"}
1
+ {"version":3,"file":"texture-loader.js","sources":["../../../src/asset/loaders/texture-loader.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { LoadingManager, Texture, TextureLoader } from '../../runtime/index.js';\nimport { CacheManager } from '../cache-manager.js';\nimport {\n DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n loadCachedAsset,\n} from './cached-asset-load.js';\n\n/**\n * Texture loader with de-duplication and caching.\n *\n * @category Assets\n */\nexport class TextureAssetLoader {\n private static textureLoader: TextureLoader;\n\n static init(loadingManager: LoadingManager): void {\n this.textureLoader = new TextureLoader(loadingManager);\n }\n\n /** Load a texture (URL or logical key), returning a cached instance when possible. */\n static loadTexture(\n urlOrKey: string,\n timeoutMs = DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n ): Promise<Texture> {\n const url = CacheManager.resolveUrl(urlOrKey);\n return loadCachedAsset({\n discard: (texture) => texture.dispose(),\n load: (resolve, reject) => {\n this.textureLoader.load(url, resolve, undefined, reject);\n },\n timeoutMs,\n url,\n });\n }\n\n /** Get a cached texture by logical key. */\n static getTexture(key: string): Texture | null {\n return (CacheManager.getAssetByKey(key) as Texture) || null;\n }\n}\n"],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AASH;;;;AAIG;MACU,kBAAkB,CAAA;IAG7B,OAAO,IAAI,CAAC,cAA8B,EAAA;QACxC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,cAAc,CAAC;IACxD;;AAGA,IAAA,OAAO,WAAW,CAChB,QAAgB,EAChB,SAAS,GAAG,6BAA6B,EAAA;QAEzC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC7C,QAAA,OAAO,eAAe,CAAC;YACrB,OAAO,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;AACxB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;YAC1D,CAAC;YACD,SAAS;YACT,GAAG;AACJ,SAAA,CAAC;IACJ;;IAGA,OAAO,UAAU,CAAC,GAAW,EAAA;QAC3B,OAAQ,YAAY,CAAC,aAAa,CAAC,GAAG,CAAa,IAAI,IAAI;IAC7D;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"uikitml-loader.js","sources":["../../../src/asset/loaders/uikitml-loader.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAQH;MACa,kBAAkB,CAAA;AAC7B,IAAA,aAAa,WAAW,CACtB,QAAgB,EAChB,GAAY,EACZ,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,6BAA6B,EAAA;QAEzC,IAAI,GAAG,EAAE;AACP,YAAA,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;QACzC;QACA,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC7C,IAAI,WAAW,EAAE;AACf,YAAA,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC;QAC/B;AACA,QAAA,OAAO,eAAe,CAAC;AACrB,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;gBACxB,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1D,qBAAA,IAAI,CAAC,OAAO,QAAQ,KAAI;;AACvB,oBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,wBAAA,MAAM,IAAI,KAAK,CACb,CAAA,wBAAA,EAA2B,GAAG,CAAA,EAAA,EAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAA,CAAA,CAAG,CAC7E;oBACH;AACA,oBAAA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE;AAC9D,oBAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;oBACpC,IACE,+CAA+C,CAAC,IAAI,CAClD,WAAW,CAAC,IAAI,EAAE,CACnB;AACD,wBAAA,2CAA2C,CAAC,IAAI,CAAC,MAAM,CAAC,EACxD;wBACA,MAAM,IAAI,KAAK,CACb,CAAA,wBAAA,EAA2B,GAAG,CAAA,8BAAA,EAAiC,WAAW,IAAI,SAAS,CAAA,+FAAA,CAAiG,CACzL;oBACH;oBACA,OAAO,CAAC,MAAM,CAAC;AACjB,gBAAA,CAAC;qBACA,KAAK,CAAC,MAAM,CAAC;YAClB,CAAC;AACD,YAAA,cAAc,EAAE,WAAW;YAC3B,SAAS;YACT,GAAG;AACJ,SAAA,CAAC;IACJ;IAEA,OAAO,UAAU,CAAC,QAAgB,EAAA;;QAChC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC7C,OAAO,CAAA,EAAA,GAAA,YAAY,CAAC,QAAQ,CAAS,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;IACnD;AACD;;;;"}
1
+ {"version":3,"file":"uikitml-loader.js","sources":["../../../src/asset/loaders/uikitml-loader.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { CacheManager } from '../cache-manager.js';\nimport {\n DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n loadCachedAsset,\n} from './cached-asset-load.js';\n\n/** Cached text loader for UIKitML source assets. */\nexport class UIKitMLAssetLoader {\n static async loadUIKitML(\n urlOrKey: string,\n key?: string,\n forceReload = false,\n timeoutMs = DEFAULT_ASSET_LOAD_TIMEOUT_MS,\n ): Promise<string> {\n if (key) {\n CacheManager.setKeyToUrl(key, urlOrKey);\n }\n const url = CacheManager.resolveUrl(urlOrKey);\n if (forceReload) {\n CacheManager.deleteAsset(url);\n }\n return loadCachedAsset({\n load: (resolve, reject) => {\n (forceReload ? fetch(url, { cache: 'no-store' }) : fetch(url))\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(\n `Failed to load UIKitML: ${url} (${response.status} ${response.statusText})`,\n );\n }\n const contentType = response.headers.get('content-type') ?? '';\n const source = await response.text();\n if (\n /^(text\\/html|application\\/xhtml\\+xml)(?:;|$)/i.test(\n contentType.trim(),\n ) ||\n /^\\s*(?:<!doctype\\s+html\\b|<html(?:\\s|>))/i.test(source)\n ) {\n throw new Error(\n `Failed to load UIKitML: ${url} returned HTML (content-type: ${contentType || 'unknown'}). Check that the asset path exists and is served as UIKitML rather than the app fallback page.`,\n );\n }\n resolve(source);\n })\n .catch(reject);\n },\n replacePending: forceReload,\n timeoutMs,\n url,\n });\n }\n\n static getUIKitML(keyOrUrl: string): string | null {\n const url = CacheManager.resolveUrl(keyOrUrl);\n return CacheManager.getAsset<string>(url) ?? null;\n }\n}\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAQH;MACa,kBAAkB,CAAA;AAC7B,IAAA,aAAa,WAAW,CACtB,QAAgB,EAChB,GAAY,EACZ,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,6BAA6B,EAAA;QAEzC,IAAI,GAAG,EAAE;AACP,YAAA,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;QACzC;QACA,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC7C,IAAI,WAAW,EAAE;AACf,YAAA,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC;QAC/B;AACA,QAAA,OAAO,eAAe,CAAC;AACrB,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;gBACxB,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1D,qBAAA,IAAI,CAAC,OAAO,QAAQ,KAAI;;AACvB,oBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,wBAAA,MAAM,IAAI,KAAK,CACb,CAAA,wBAAA,EAA2B,GAAG,CAAA,EAAA,EAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAA,CAAA,CAAG,CAC7E;oBACH;AACA,oBAAA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE;AAC9D,oBAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;oBACpC,IACE,+CAA+C,CAAC,IAAI,CAClD,WAAW,CAAC,IAAI,EAAE,CACnB;AACD,wBAAA,2CAA2C,CAAC,IAAI,CAAC,MAAM,CAAC,EACxD;wBACA,MAAM,IAAI,KAAK,CACb,CAAA,wBAAA,EAA2B,GAAG,CAAA,8BAAA,EAAiC,WAAW,IAAI,SAAS,CAAA,+FAAA,CAAiG,CACzL;oBACH;oBACA,OAAO,CAAC,MAAM,CAAC;AACjB,gBAAA,CAAC;qBACA,KAAK,CAAC,MAAM,CAAC;YAClB,CAAC;AACD,YAAA,cAAc,EAAE,WAAW;YAC3B,SAAS;YACT,GAAG;AACJ,SAAA,CAAC;IACJ;IAEA,OAAO,UAAU,CAAC,QAAgB,EAAA;;QAChC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC7C,OAAO,CAAA,EAAA,GAAA,YAAY,CAAC,QAAQ,CAAS,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;IACnD;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"audio-pool.js","sources":["../../src/audio/audio-pool.ts"],"sourcesContent":[null],"names":["AmbientAudio"],"mappings":";;;AAAA;;;;;AAKG;AAgCH;;;;;;;;;AASG;MACU,SAAS,CAAA;AAKpB;;;;;;AAMG;AACH,IAAA,WAAA,CACE,QAAuB,EACvB,IAAY,EACZ,UAAmB,EACnB,MAAgB,EAAA;QAdV,IAAA,CAAA,SAAS,GAAQ,EAAE;QACnB,IAAA,CAAA,YAAY,GAAQ,EAAE;AAe5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE;AAC5B,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG;AACZ,kBAAE,IAAI,eAAe,CAAC,QAAQ;AAC9B,kBAAE,IAAIA,KAAY,CAAC,QAAQ,CAAC;AAE9B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAU,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAU,CAAC;QACpC;IACF;;IAGA,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG;AACnC,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,OAAO,CAAC,KAAQ,EAAA;;AAEd,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;YACnB,KAAK,CAAC,IAAI,EAAE;QACd;;AAGA,QAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;;QAGpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B;IACF;;IAGA,UAAU,GAAA;;AAER,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;AACrC,YAAA,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,KAAK,CAAC,IAAI,EAAE;YACd;AACA,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;QACtB;QAEA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;IACzC;;IAGA,OAAO,GAAA;;AAEL,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;AACrC,YAAA,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,KAAK,CAAC,IAAI,EAAE;YACd;YACA,KAAK,CAAC,UAAU,EAAE;QACpB;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAEtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IACxB;;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;IACzD;;IAGA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM;IACjC;;IAGA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AACD;;;;"}
1
+ {"version":3,"file":"audio-pool.js","sources":["../../src/audio/audio-pool.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Audio as AmbientAudio,\n AudioListener,\n Group,\n Object3D,\n PositionalAudio,\n} from '../runtime/index.js';\n\n/**\n * Runtime bookkeeping for a playing audio instance used by {@link AudioSystem}.\n * @category Audio\n */\nexport interface AudioInstance<T extends AmbientAudio | PositionalAudio> {\n audio: T;\n startTime: number;\n fadeStartTime?: number;\n fadeStartVolume?: number;\n fadeDuration?: number;\n isFadingOut?: boolean;\n isFadingIn?: boolean;\n pausedBySessionEnd?: boolean;\n /**\n * Pending timer used to attach the `onended` handler when `audio.source` is\n * not ready immediately. Tracked so it can be cancelled when the instance is\n * released — otherwise a late callback could clobber the `onended` of a\n * pooled audio node that has since been reacquired for a different sound.\n */\n onendedTimeout?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * Fixed-size pool of Three.js `Audio`/`PositionalAudio` objects.\n *\n * @remarks\n * - Pre-allocates a number of audio nodes under a hidden `Group` attached to the parent.\n * - Minimizes GC churn by reusing nodes across playbacks.\n * - Used internally by {@link AudioSystem}, but exposed for advanced scenarios.\n *\n * @category Audio\n */\nexport class AudioPool<T extends AmbientAudio | PositionalAudio> {\n private container: Group;\n private available: T[] = [];\n private allInstances: T[] = [];\n\n /**\n * Create a pool.\n * @param listener AudioListener to attach to each instance.\n * @param size Number of instances to pre‑allocate.\n * @param positional When true, creates `PositionalAudio`; otherwise ambient `Audio`.\n * @param parent Group/Object3D to attach internal container to.\n */\n constructor(\n listener: AudioListener,\n size: number,\n positional: boolean,\n parent: Object3D,\n ) {\n this.container = new Group();\n parent.add(this.container);\n\n // Pre-create audio instances\n for (let i = 0; i < size; i++) {\n const audio = positional\n ? new PositionalAudio(listener)\n : new AmbientAudio(listener);\n\n this.container.add(audio);\n this.available.push(audio as T);\n this.allInstances.push(audio as T);\n }\n }\n\n /** Acquire an available audio node or `null` if exhausted. */\n acquire(): T | null {\n if (this.available.length === 0) {\n return null;\n }\n\n const audio = this.available.pop()!;\n return audio;\n }\n\n /** Stop, reset volume, and return an audio node to the pool. */\n release(audio: T): void {\n // Stop the audio if it's still playing\n if (audio.isPlaying) {\n audio.stop();\n }\n\n // Reset audio state\n audio.setVolume(1.0);\n\n // Return to available pool\n if (!this.available.includes(audio)) {\n this.available.push(audio);\n }\n }\n\n /** Stop and return all nodes to the available pool. */\n releaseAll(): void {\n // Stop all instances and return them to the pool\n for (const audio of this.allInstances) {\n if (audio.isPlaying) {\n audio.stop();\n }\n audio.setVolume(1.0);\n }\n\n this.available = [...this.allInstances];\n }\n\n /** Disconnect and dispose all nodes and the container. */\n dispose(): void {\n // Clean up all audio instances\n for (const audio of this.allInstances) {\n if (audio.isPlaying) {\n audio.stop();\n }\n audio.disconnect();\n }\n\n // Remove from parent\n this.container.removeFromParent();\n this.container.clear();\n\n this.available = [];\n this.allInstances = [];\n }\n\n /** Number of nodes currently checked out. */\n getActiveCount(): number {\n return this.allInstances.length - this.available.length;\n }\n\n /** Total nodes in the pool. */\n getTotalCount(): number {\n return this.allInstances.length;\n }\n\n /** Return all nodes (checked out and available). */\n getAllInstances(): T[] {\n return this.allInstances;\n }\n}\n"],"names":["AmbientAudio"],"mappings":";;;AAAA;;;;;AAKG;AAgCH;;;;;;;;;AASG;MACU,SAAS,CAAA;AAKpB;;;;;;AAMG;AACH,IAAA,WAAA,CACE,QAAuB,EACvB,IAAY,EACZ,UAAmB,EACnB,MAAgB,EAAA;QAdV,IAAA,CAAA,SAAS,GAAQ,EAAE;QACnB,IAAA,CAAA,YAAY,GAAQ,EAAE;AAe5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE;AAC5B,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG;AACZ,kBAAE,IAAI,eAAe,CAAC,QAAQ;AAC9B,kBAAE,IAAIA,KAAY,CAAC,QAAQ,CAAC;AAE9B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAU,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAU,CAAC;QACpC;IACF;;IAGA,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG;AACnC,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,OAAO,CAAC,KAAQ,EAAA;;AAEd,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;YACnB,KAAK,CAAC,IAAI,EAAE;QACd;;AAGA,QAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;;QAGpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B;IACF;;IAGA,UAAU,GAAA;;AAER,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;AACrC,YAAA,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,KAAK,CAAC,IAAI,EAAE;YACd;AACA,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;QACtB;QAEA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;IACzC;;IAGA,OAAO,GAAA;;AAEL,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;AACrC,YAAA,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,KAAK,CAAC,IAAI,EAAE;YACd;YACA,KAAK,CAAC,UAAU,EAAE;QACpB;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAEtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IACxB;;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;IACzD;;IAGA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM;IACjC;;IAGA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"audio-system.js","sources":["../../src/audio/audio-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio-system.js","sources":["../../src/audio/audio-system.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { PositionalAudio, AudioListener, Audio as AmbientAudio } from 'three';\nimport { AssetManager } from '../asset/index.js';\n// Import directly from submodules — not the `../ecs/index.js` barrel — to\n// avoid a value-level import cycle: ecs/index.js re-exports ecs/world.js,\n// which (via its transitive deps) loops back to audio/audio-system.js while\n// it is still being evaluated. That would leave the AudioSource reference\n// captured in `audioEntities.required` as `undefined` at class-body eval time.\nimport { Types } from '../ecs/component.js';\nimport { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport { AudioInstance, AudioPool } from './audio-pool.js';\nimport { AudioSource, InstanceStealPolicy, PlaybackMode } from './audio.js';\n\n/**\n * Runtime audio manager that loads sources, pools players, and applies XR-aware behavior.\n *\n * @remarks\n * - Creates an `AudioListener` on the player head and resumes/suspends the\n * audio context when XR sessions start/end.\n * - Pools `Audio`/`PositionalAudio` instances per entity to minimize allocations\n * and implements play/overlap/fade-restart behaviors.\n * - Optionally culls distant positional audio by a distance multiplier.\n *\n * @category Audio\n */\nexport class AudioSystem extends createSystem(\n {\n audioEntities: { required: [AudioSource] },\n },\n {\n /** Enable distance-based culling for positional audio instances. */\n enableDistanceCulling: { type: Types.Boolean, default: true },\n /** Multiplier applied to `maxDistance` for culling threshold. */\n cullingDistanceMultiplier: { type: Types.Float32, default: 1.5 },\n },\n) {\n private listener!: AudioListener;\n private activeInstances: Map<\n Entity,\n (AudioInstance<AmbientAudio> | AudioInstance<PositionalAudio>)[]\n > = new Map();\n\n init(): void {\n // Create and attach AudioListener to camera\n this.listener = new AudioListener();\n this.player.head.add(this.listener);\n\n // Handle XR session changes\n this.renderer.xr.addEventListener('sessionstart', this.onXRSessionStart);\n this.renderer.xr.addEventListener('sessionend', this.onXRSessionEnd);\n\n // Handle entity lifecycle\n this.queries.audioEntities.subscribe('disqualify', (entity) => {\n this.cleanupEntity(entity);\n });\n }\n\n private onXRSessionStart = () => {\n // Resume audio context when entering XR\n const context = this.listener.context;\n if (context.state === 'suspended') {\n context.resume();\n }\n\n // Resume audio that was paused by session end\n for (const [, instances] of this.activeInstances) {\n instances.forEach((instance) => {\n if (instance.pausedBySessionEnd) {\n instance.audio.play();\n instance.pausedBySessionEnd = false;\n }\n });\n }\n };\n\n private onXRSessionEnd = () => {\n // Pause all active audio when exiting XR\n for (const [, instances] of this.activeInstances) {\n instances.forEach((instance) => {\n if (instance.audio.isPlaying) {\n instance.audio.pause();\n instance.pausedBySessionEnd = true;\n }\n });\n }\n\n // Suspend audio context to save resources\n const context = this.listener.context;\n if (context.state === 'running') {\n context.suspend();\n }\n };\n\n update(_delta: number, _time: number): void {\n const time = _time;\n const entities = this.queries.audioEntities.entities;\n\n // Early exit if no audio entities\n if (entities.size === 0) {\n return;\n }\n\n entities.forEach((entity) => {\n const index = entity.index;\n\n // Handle audio loading\n if (\n !AudioSource.data._loaded[index] &&\n !AudioSource.data._loading[index]\n ) {\n const src = AudioSource.data.src[index];\n if (src) {\n this.loadAudio(entity, src);\n }\n return; // Skip further processing until loaded\n }\n\n // Skip if not loaded yet\n if (!AudioSource.data._loaded[index]) {\n return;\n }\n\n // Create pool if needed\n if (!AudioSource.data._pool[index]) {\n this.createPool(entity);\n }\n\n // Handle playback requests\n this.handlePlaybackRequests(entity, time);\n\n // Update active instances\n this.updateActiveInstances(entity, time);\n\n // Handle autoplay (only trigger once, not loop)\n if (\n AudioSource.data.autoplay[index] &&\n !AudioSource.data._isPlaying[index] &&\n AudioSource.data._playRequested[index] === 0 // Only if not already requested\n ) {\n AudioSource.data._playRequested[index] = 1;\n // Disable autoplay after first trigger to prevent looping\n AudioSource.data.autoplay[index] = 0;\n }\n });\n }\n\n private async loadAudio(entity: Entity, src: string): Promise<void> {\n const index = entity.index;\n AudioSource.data._loading[index] = 1;\n\n try {\n // Try to get from AssetManager cache first (fast path)\n let buffer = AssetManager.getAudio(src);\n\n if (!buffer) {\n // Load if not in cache (handles caching automatically)\n buffer = await AssetManager.loadAudio(src);\n }\n\n // TODO: Add AssetManager.retain(src) when memory management is implemented\n\n AudioSource.data._buffer[index] = buffer;\n AudioSource.data._loaded[index] = 1;\n } catch (error) {\n console.error(`Failed to load audio: ${src}`, error);\n } finally {\n AudioSource.data._loading[index] = 0;\n }\n }\n\n private createPool(entity: Entity): void {\n const index = entity.index;\n const maxInstances = AudioSource.data.maxInstances[index];\n const positional = AudioSource.data.positional[index];\n\n // Get entity's Object3D\n const parent = entity.object3D || this.scene;\n\n // Auto-calculate pool size from maxInstances (no need for separate poolSize config)\n const poolSize = maxInstances;\n\n const pool =\n positional === 1\n ? new AudioPool<PositionalAudio>(this.listener, poolSize, true, parent)\n : new AudioPool<AmbientAudio>(this.listener, poolSize, false, parent);\n AudioSource.data._pool[index] = pool;\n\n // Configure spatial properties for all instances\n if (positional) {\n const positionalPool = pool as AudioPool<PositionalAudio>;\n const instances = positionalPool.getAllInstances();\n instances.forEach((audio) => {\n audio.setRefDistance(AudioSource.data.refDistance[index]);\n audio.setRolloffFactor(AudioSource.data.rolloffFactor[index]);\n audio.setMaxDistance(AudioSource.data.maxDistance[index]);\n audio.setDistanceModel(\n AudioSource.data.distanceModel[index] as DistanceModelType,\n );\n audio.setDirectionalCone(\n AudioSource.data.coneInnerAngle[index],\n AudioSource.data.coneOuterAngle[index],\n AudioSource.data.coneOuterGain[index],\n );\n });\n }\n }\n\n private handlePlaybackRequests(entity: Entity, time: number): void {\n const index = entity.index;\n\n // Handle stop request first\n if (AudioSource.data._stopRequested[index]) {\n this.stopAllInstances(entity);\n AudioSource.data._stopRequested[index] = 0;\n AudioSource.data._playRequested[index] = 0;\n AudioSource.data._pauseRequested[index] = 0;\n return;\n }\n\n // Handle pause request\n if (AudioSource.data._pauseRequested[index]) {\n const fadeOut = AudioSource.data._fadeOut[index];\n this.pauseAllInstances(entity, fadeOut, time);\n AudioSource.data._pauseRequested[index] = 0;\n return;\n }\n\n // Handle play request\n if (\n AudioSource.data._playRequested[index] &&\n AudioSource.data._loaded[index]\n ) {\n const playbackMode = AudioSource.data.playbackMode[index];\n const fadeIn = AudioSource.data._fadeIn[index];\n\n switch (playbackMode) {\n case PlaybackMode.Restart:\n this.playRestart(entity, fadeIn, time);\n break;\n case PlaybackMode.Overlap:\n this.playOverlap(entity, fadeIn, time);\n break;\n case PlaybackMode.Ignore:\n this.playIgnore(entity, fadeIn, time);\n break;\n case PlaybackMode.FadeRestart:\n this.playFadeRestart(entity, time);\n break;\n }\n\n AudioSource.data._playRequested[index] = 0;\n }\n }\n\n private playRestart(entity: Entity, fadeIn: number, time: number): void {\n this.stopAllInstances(entity);\n this.createAndPlayInstance(entity, fadeIn, time);\n }\n\n private playOverlap(entity: Entity, fadeIn: number, time: number): void {\n const index = entity.index;\n const instances = this.activeInstances.get(entity) || [];\n const maxInstances = AudioSource.data.maxInstances[index];\n\n if (instances.length < maxInstances) {\n this.createAndPlayInstance(entity, fadeIn, time);\n } else {\n // Apply steal policy\n const policy = AudioSource.data.instanceStealPolicy[index];\n this.stealInstance(entity, instances, policy, time);\n this.createAndPlayInstance(entity, fadeIn, time);\n }\n }\n\n private playIgnore(entity: Entity, fadeIn: number, time: number): void {\n const instances = this.activeInstances.get(entity) || [];\n\n if (instances.length === 0) {\n this.createAndPlayInstance(entity, fadeIn, time);\n } else {\n }\n }\n\n private playFadeRestart(entity: Entity, time: number): void {\n const index = entity.index;\n const crossfadeDuration = AudioSource.data.crossfadeDuration[index];\n const instances = this.activeInstances.get(entity) || [];\n\n // Fade out existing instances\n instances.forEach((instance) => {\n instance.isFadingOut = true;\n instance.fadeStartTime = time;\n instance.fadeStartVolume = instance.audio.getVolume();\n instance.fadeDuration = crossfadeDuration;\n });\n\n // Start new instance with fade in\n this.createAndPlayInstance(entity, crossfadeDuration, time);\n }\n\n private createAndPlayInstance(\n entity: Entity,\n fadeIn: number,\n time: number,\n ): void {\n const index = entity.index;\n const pool = AudioSource.data._pool[index] as\n | AudioPool<AmbientAudio>\n | AudioPool<PositionalAudio>;\n const buffer = AudioSource.data._buffer[index] as AudioBuffer;\n\n if (!pool || !buffer) {\n return;\n }\n\n const audio = pool.acquire();\n if (!audio) {\n return;\n }\n\n // Set buffer and properties\n audio.setBuffer(buffer);\n const shouldLoop = AudioSource.data.loop[index] === 1;\n audio.setLoop(shouldLoop);\n audio.setVolume(fadeIn > 0 ? 0 : AudioSource.data.volume[index]);\n\n // Create instance tracking\n const instance:\n | AudioInstance<AmbientAudio>\n | AudioInstance<PositionalAudio> = {\n audio,\n startTime: time,\n } as any;\n\n if (fadeIn > 0) {\n instance.isFadingIn = true;\n instance.fadeStartTime = instance.startTime;\n instance.fadeStartVolume = 0;\n instance.fadeDuration = fadeIn;\n }\n\n // Add to active instances\n const instances = this.activeInstances.get(entity) || [];\n instances.push(instance);\n this.activeInstances.set(entity, instances);\n\n // Start playback\n audio.play();\n AudioSource.data._isPlaying[index] = 1;\n\n // Handle onEnded - use audio.source.onended (the only method that works reliably)\n if (audio.source) {\n audio.source.onended = () => {\n this.onInstanceEnded(entity, instance);\n };\n } else {\n // If source not available immediately, try after a short delay. Track the\n // timer on the instance so releaseInstance() can cancel it; otherwise this\n // callback could run after `audio` has been returned to the pool and\n // reacquired for a different sound, clobbering that sound's onended.\n instance.onendedTimeout = setTimeout(() => {\n instance.onendedTimeout = undefined;\n if (audio.source) {\n audio.source.onended = () => {\n this.onInstanceEnded(entity, instance);\n };\n }\n }, 10);\n }\n }\n\n private clearInstanceTimeout(\n instance: AudioInstance<AmbientAudio> | AudioInstance<PositionalAudio>,\n ): void {\n if (instance.onendedTimeout !== undefined) {\n clearTimeout(instance.onendedTimeout);\n instance.onendedTimeout = undefined;\n }\n }\n\n private updateActiveInstances(entity: Entity, time: number): void {\n const instances = this.activeInstances.get(entity);\n if (!instances || instances.length === 0) {\n return;\n }\n\n const index = entity.index;\n const currentTime = time;\n const targetVolume = AudioSource.data.volume[index];\n\n // Update each instance\n for (let i = instances.length - 1; i >= 0; i--) {\n const instance = instances[i];\n\n // Handle fade in\n if (\n instance.isFadingIn &&\n instance.fadeStartTime &&\n instance.fadeDuration\n ) {\n const fadeProgress =\n (currentTime - instance.fadeStartTime) / instance.fadeDuration;\n if (fadeProgress >= 1) {\n instance.audio.setVolume(targetVolume);\n instance.isFadingIn = false;\n } else {\n const currentVolume = targetVolume * fadeProgress;\n instance.audio.setVolume(currentVolume);\n }\n }\n\n // Handle fade out\n if (\n instance.isFadingOut &&\n instance.fadeStartTime &&\n instance.fadeDuration\n ) {\n const fadeProgress =\n (currentTime - instance.fadeStartTime) / instance.fadeDuration;\n if (fadeProgress >= 1) {\n this.releaseInstance(entity, instance, i);\n } else {\n const startVolume = instance.fadeStartVolume || targetVolume;\n const currentVolume = startVolume * (1 - fadeProgress);\n instance.audio.setVolume(currentVolume);\n }\n }\n\n // Update volume if it changed (and not currently fading)\n if (!instance.isFadingIn && !instance.isFadingOut) {\n const currentVolume = instance.audio.getVolume();\n if (Math.abs(currentVolume - targetVolume) > 0.01) {\n instance.audio.setVolume(targetVolume);\n }\n }\n\n // Update spatial properties if they changed\n if (\n AudioSource.data.positional[index] &&\n instance.audio instanceof PositionalAudio\n ) {\n if (\n instance.audio.getRefDistance() !==\n AudioSource.data.refDistance[index]\n ) {\n instance.audio.setRefDistance(AudioSource.data.refDistance[index]);\n }\n instance.audio.setRolloffFactor(AudioSource.data.rolloffFactor[index]);\n instance.audio.setMaxDistance(AudioSource.data.maxDistance[index]);\n }\n }\n\n // Update playing state\n AudioSource.data._isPlaying[index] = instances.length > 0 ? 1 : 0;\n }\n\n private onInstanceEnded(\n entity: Entity,\n instance: AudioInstance<AmbientAudio> | AudioInstance<PositionalAudio>,\n ): void {\n const instances = this.activeInstances.get(entity);\n if (!instances) {\n return;\n }\n\n const instanceIndex = instances.indexOf(instance);\n if (instanceIndex !== -1) {\n this.releaseInstance(entity, instance, instanceIndex);\n }\n }\n\n private releaseInstance(\n entity: Entity,\n instance: AudioInstance<AmbientAudio> | AudioInstance<PositionalAudio>,\n instanceIndex: number,\n ): void {\n const index = entity.index;\n const pool = AudioSource.data._pool[index] as\n | AudioPool<AmbientAudio>\n | AudioPool<PositionalAudio>;\n const instances = this.activeInstances.get(entity)!;\n\n // Cancel any pending onended-attach timer before the audio returns to the pool.\n this.clearInstanceTimeout(instance);\n\n // Release back to pool\n (pool as any).release(instance.audio);\n\n // Remove from active instances\n instances.splice(instanceIndex, 1);\n\n if (instances.length === 0) {\n this.activeInstances.delete(entity);\n AudioSource.data._isPlaying[index] = 0;\n }\n }\n\n private stopAllInstances(entity: Entity): void {\n const instances = this.activeInstances.get(entity);\n if (!instances) {\n return;\n }\n\n const index = entity.index;\n const pool = AudioSource.data._pool[index] as\n | AudioPool<AmbientAudio>\n | AudioPool<PositionalAudio>;\n\n instances.forEach((instance) => {\n this.clearInstanceTimeout(instance);\n (pool as any).release(instance.audio);\n });\n\n this.activeInstances.delete(entity);\n AudioSource.data._isPlaying[index] = 0;\n }\n\n private pauseAllInstances(\n entity: Entity,\n fadeOut: number,\n time: number,\n ): void {\n const instances = this.activeInstances.get(entity);\n if (!instances) {\n return;\n }\n\n if (fadeOut > 0) {\n instances.forEach((instance) => {\n instance.isFadingOut = true;\n instance.fadeStartTime = time;\n instance.fadeStartVolume = instance.audio.getVolume();\n instance.fadeDuration = fadeOut;\n });\n } else {\n instances.forEach((instance) => {\n instance.audio.pause();\n });\n }\n }\n\n private stealInstance(\n entity: Entity,\n instances: (AudioInstance<AmbientAudio> | AudioInstance<PositionalAudio>)[],\n policy: string,\n _time: number,\n ): void {\n if (instances.length === 0) {\n return;\n }\n\n let instanceToSteal:\n | AudioInstance<AmbientAudio>\n | AudioInstance<PositionalAudio>;\n\n switch (policy) {\n case InstanceStealPolicy.Oldest:\n instanceToSteal = instances[0];\n break;\n case InstanceStealPolicy.Quietest:\n instanceToSteal = instances.reduce((quietest, current) =>\n current.audio.getVolume() < quietest.audio.getVolume()\n ? current\n : quietest,\n );\n break;\n case InstanceStealPolicy.Furthest:\n // Implement distance-based stealing using camera position\n const cameraPosition = this.player.head.position;\n instanceToSteal = instances.reduce((furthest, current) => {\n const furthestDistance = furthest.audio.position\n ? cameraPosition.distanceTo(furthest.audio.position)\n : 0;\n const currentDistance = current.audio.position\n ? cameraPosition.distanceTo(current.audio.position)\n : 0;\n\n return currentDistance > furthestDistance ? current : furthest;\n });\n break;\n default:\n instanceToSteal = instances[0];\n }\n\n const instanceIndex = instances.indexOf(instanceToSteal);\n this.releaseInstance(entity, instanceToSteal, instanceIndex);\n }\n\n private cleanupEntity(entity: Entity): void {\n const instances = this.activeInstances.get(entity);\n if (!instances) {\n return;\n }\n\n const index = entity.index;\n const pool = AudioSource.data._pool[index] as\n | (AudioPool<AmbientAudio> | AudioPool<PositionalAudio>)\n | undefined;\n\n if (pool) {\n instances.forEach((instance) => {\n this.clearInstanceTimeout(instance);\n (pool as any).release(instance.audio);\n });\n pool.dispose();\n }\n\n // TODO: Add AssetManager.release(src) when memory management is implemented\n // const src = AudioSource.data.src[index];\n // if (src) AssetManager.release(src);\n\n this.activeInstances.delete(entity);\n }\n\n destroy(): void {\n // Clean up all entities\n for (const [entity] of this.activeInstances) {\n this.cleanupEntity(entity);\n }\n\n // Remove event listeners\n this.renderer.xr.removeEventListener('sessionstart', this.onXRSessionStart);\n this.renderer.xr.removeEventListener('sessionend', this.onXRSessionEnd);\n }\n}\n\n// Type alias for Three.js distance model\ntype DistanceModelType = 'linear' | 'inverse' | 'exponential';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"audio-utils.js","sources":["../../src/audio/audio-utils.ts"],"sourcesContent":[null],"names":["AudioComponent"],"mappings":"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"}
1
+ {"version":3,"file":"audio-utils.js","sources":["../../src/audio/audio-utils.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Entity } from '../ecs/entity.js';\nimport type { World } from '../ecs/world.js';\nimport { AudioSource as AudioComponent } from './audio.js';\n\n/** Utility helpers to control {@link AudioSource} without touching Three audio.\n * @category Audio\n */\nexport class AudioUtils {\n /**\n * Play audio on an entity\n * @param entity - Entity with Audio component\n * @param fadeIn - Fade in duration in seconds\n */\n static play(entity: Entity, fadeIn = 0): void {\n const index = entity.index;\n // Check if entity has audio by checking if data exists\n if (AudioComponent.data.src[index] === undefined) {\n console.warn('Entity does not have Audio component');\n return;\n }\n\n AudioComponent.data._playRequested[index] = 1;\n AudioComponent.data._fadeIn[index] = fadeIn;\n }\n\n /**\n * Pause audio on an entity\n * @param entity - Entity with Audio component\n * @param fadeOut - Fade out duration in seconds\n */\n static pause(entity: Entity, fadeOut = 0): void {\n const index = entity.index;\n if (AudioComponent.data.src[index] === undefined) {\n console.warn('Entity does not have Audio component');\n return;\n }\n\n AudioComponent.data._pauseRequested[index] = 1;\n AudioComponent.data._fadeOut[index] = fadeOut;\n }\n\n /**\n * Stop audio on an entity\n * @param entity - Entity with Audio component\n */\n static stop(entity: Entity): void {\n const index = entity.index;\n if (AudioComponent.data.src[index] === undefined) {\n console.warn('Entity does not have Audio component');\n return;\n }\n\n AudioComponent.data._stopRequested[index] = 1;\n }\n\n /**\n * Check if audio is playing on an entity\n * @param entity - Entity with Audio component\n * @returns True if audio is playing\n */\n static isPlaying(entity: Entity): boolean {\n const index = entity.index;\n if (AudioComponent.data.src[index] === undefined) {\n return false;\n }\n\n return AudioComponent.data._isPlaying[index] === 1;\n }\n\n /**\n * Set volume on an entity's audio\n * @param entity - Entity with Audio component\n * @param volume - Volume level (0.0 to 1.0)\n */\n static setVolume(entity: Entity, volume: number): void {\n const index = entity.index;\n if (AudioComponent.data.src[index] === undefined) {\n console.warn('Entity does not have Audio component');\n return;\n }\n\n AudioComponent.data.volume[index] = Math.max(0, Math.min(1, volume));\n }\n\n /**\n * Get volume from an entity's audio\n * @param entity - Entity with Audio component\n * @returns Current volume level\n */\n static getVolume(entity: Entity): number {\n const index = entity.index;\n if (AudioComponent.data.src[index] === undefined) {\n return 0;\n }\n\n return AudioComponent.data.volume[index];\n }\n\n /**\n * Preload audio for an entity\n * @param entity - Entity with Audio component\n * @returns Promise that resolves when audio is loaded\n */\n static async preload(entity: Entity): Promise<void> {\n const index = entity.index;\n if (AudioComponent.data.src[index] === undefined) {\n throw new Error('Entity does not have Audio component');\n }\n\n // Wait for loading to complete\n return new Promise<void>((resolve) => {\n const checkLoaded = () => {\n if (AudioComponent.data._loaded[index]) {\n resolve();\n } else if (\n !AudioComponent.data._loading[index] &&\n !AudioComponent.data._loaded[index]\n ) {\n // Not loading and not loaded, might need to wait for system update\n setTimeout(checkLoaded, 16);\n } else {\n // Currently loading\n setTimeout(checkLoaded, 16);\n }\n };\n\n checkLoaded();\n });\n }\n\n /**\n * Create a one-shot audio entity that auto-removes after playing\n * @param world - World instance\n * @param src - Audio source path\n * @param options - Additional audio options\n * @returns Created entity\n */\n static createOneShot(\n world: World,\n src: string,\n options: {\n volume?: number;\n positional?: boolean;\n position?: { x: number; y: number; z: number };\n } = {},\n ): Entity {\n const entity = world.createEntity();\n\n entity.addComponent(AudioComponent, {\n src,\n volume: options.volume ?? 1.0,\n positional: options.positional ?? false,\n autoplay: true,\n loop: false,\n });\n\n if (options.positional && options.position) {\n // Would need Transform component\n // entity.addComponent(Transform, { position: options.position });\n }\n\n // Auto-remove entity when sound ends\n // This would be handled by the AudioSystem when detecting ended non-looping sounds\n\n return entity;\n }\n}\n"],"names":["AudioComponent"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"audio.js","sources":["../../src/audio/audio.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio.js","sources":["../../src/audio/audio.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// See audio-system.ts for rationale — import from the subfile, not the\n// `../ecs/index.js` barrel, to keep this module free of the world.js cycle.\nimport { Types, createComponent } from '../ecs/component.js';\n\n/**\n * Playback behavior when a new play is requested.\n *\n * @category Audio\n */\nexport const PlaybackMode = {\n Restart: 'restart',\n Overlap: 'overlap',\n Ignore: 'ignore',\n FadeRestart: 'fade-restart',\n} as const;\n\n/**\n * Policy used when the instance pool is full and a new play is requested.\n *\n * @category Audio\n */\nexport const InstanceStealPolicy = {\n Oldest: 'oldest',\n Quietest: 'quietest',\n Furthest: 'furthest',\n} as const;\n\n/**\n * Distance attenuation model for positional audio.\n *\n * @category Audio\n */\nexport const DistanceModel = {\n Linear: 'linear',\n Inverse: 'inverse',\n Exponential: 'exponential',\n} as const;\n\n/**\n * Configurable audio playback component for positional and ambient sounds.\n *\n * @remarks\n * - The {@link AudioSystem} loads sources via {@link AssetManager} and manages\n * instance pooling, crossfades, and XR session lifecycle.\n * - For positional audio, attach the component to an entity with a valid\n * Object3D; non-positional audio plays from the listener.\n * - Use `_playRequested/_pauseRequested/_stopRequested` to trigger actions\n * without directly reaching into Three.js audio objects.\n *\n * @category Audio\n */\nexport const AudioSource = createComponent(\n 'AudioSource',\n {\n // Core properties PathByFilePickerAttribute\n src: {\n type: Types.FilePath,\n default: '',\n fileTypes: '.mp3,.wav,.ogg,.m4a,.aac',\n subfolder: 'audio',\n }, // URL or cache key for an audio buffer\n volume: { type: Types.Float32, default: 1.0 }, // Linear gain [0..1]\n loop: { type: Types.Boolean, default: false }, // When true, newly created instances loop\n autoplay: { type: Types.Boolean, default: false }, // Trigger a single play on first update after load\n\n // Spatial properties\n positional: { type: Types.Boolean, default: true }, // true: PositionalAudio; false: ambient Audio\n refDistance: { type: Types.Float32, default: 1 }, // Distance at which volume is 1.0\n rolloffFactor: { type: Types.Float32, default: 1 }, // Rolloff curve steepness\n maxDistance: { type: Types.Float32, default: 10000 }, // Distance after which volume is 0\n distanceModel: {\n type: Types.Enum,\n enum: DistanceModel,\n default: DistanceModel.Inverse,\n },\n coneInnerAngle: { type: Types.Float32, default: 360 }, // Degrees of full-volume cone\n coneOuterAngle: { type: Types.Float32, default: 360 }, // Degrees until falloff reaches outer gain\n coneOuterGain: { type: Types.Float32, default: 0 }, // Gain at the edge/outside of the cone\n\n // Playback behavior control\n playbackMode: {\n type: Types.Enum,\n enum: PlaybackMode,\n default: PlaybackMode.Restart,\n }, // Behavior when play is triggered while another instance is active\n maxInstances: { type: Types.Int8, default: 1 }, // Max simultaneous instances in pool\n crossfadeDuration: { type: Types.Float32, default: 0.1 }, // Seconds used for FadeRestart\n instanceStealPolicy: {\n type: Types.Enum,\n enum: InstanceStealPolicy,\n default: InstanceStealPolicy.Oldest,\n }, // Which instance to replace when pool is full\n\n // Playback control flags (internal)\n _playRequested: { type: Types.Boolean, default: false }, // Set true to request play on next update\n _pauseRequested: { type: Types.Boolean, default: false }, // Set true to request pause (optional fade)\n _stopRequested: { type: Types.Boolean, default: false }, // Set true to stop and clear instances\n _fadeIn: { type: Types.Float32, default: 0 }, // Seconds to fade in on next play\n _fadeOut: { type: Types.Float32, default: 0 }, // Seconds to fade out on pause\n\n // Runtime state (managed by AudioSystem)\n _pool: { type: Types.Object, default: undefined }, // Assigned AudioPool for this entity\n _instances: { type: Types.Object, default: undefined }, // Active instance list (internal)\n _isPlaying: { type: Types.Boolean, default: false }, // True if any instance is currently playing\n _buffer: { type: Types.Object, default: undefined }, // Loaded AudioBuffer\n _loaded: { type: Types.Boolean, default: false }, // True once buffer is loaded\n _loading: { type: Types.Boolean, default: false }, // True while buffer is loading\n },\n 'AudioSource playback component for positional and non-positional sounds',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAEH;AACA;AAGA;;;;AAIG;AACI,MAAM,YAAY,GAAG;AAC1B,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,WAAW,EAAE,cAAc;;AAG7B;;;;AAIG;AACI,MAAM,mBAAmB,GAAG;AACjC,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,QAAQ,EAAE,UAAU;;AAGtB;;;;AAIG;AACI,MAAM,aAAa,GAAG;AAC3B,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,WAAW,EAAE,aAAa;;AAG5B;;;;;;;;;;;;AAYG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;;AAEE,IAAA,GAAG,EAAE;QACH,IAAI,EAAE,KAAK,CAAC,QAAQ;AACpB,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,SAAS,EAAE,0BAA0B;AACrC,QAAA,SAAS,EAAE,OAAO;AACnB,KAAA;AACD,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AAC7C,IAAA,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;;AAGjD,IAAA,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAClD,IAAA,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;AAChD,IAAA,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;AAClD,IAAA,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AACpD,IAAA,aAAa,EAAE;QACb,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,aAAa,CAAC,OAAO;AAC/B,KAAA;AACD,IAAA,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AACrD,IAAA,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AACrD,IAAA,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;;AAGlD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY,CAAC,OAAO;AAC9B,KAAA;AACD,IAAA,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;AAC9C,IAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AACxD,IAAA,mBAAmB,EAAE;QACnB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,mBAAmB,CAAC,MAAM;AACpC,KAAA;;AAGD,IAAA,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AACvD,IAAA,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AACxD,IAAA,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AACvD,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;AAC5C,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;;AAG7C,IAAA,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;AACjD,IAAA,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;AACtD,IAAA,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AACnD,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;AACnD,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AAChD,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;CAClD,EACD,yEAAyE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"camera-source.js","sources":["../../src/camera/camera-source.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAKH;;;AAGG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd;;AAEE,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;AAC7C,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY,CAAC,OAAO;AAC9B,KAAA;IACD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IAC5C,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;;AAG7C,IAAA,KAAK,EAAE;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW,CAAC,QAAQ;AAC9B,KAAA;AACD,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AAC9C,IAAA,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AACnD,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;CAC9C,EACD,yCAAyC;;;;"}
1
+ {"version":3,"file":"camera-source.js","sources":["../../src/camera/camera-source.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Types, createComponent } from '../ecs/component.js';\nimport { CameraFacing, CameraState } from './types.js';\n\n/**\n * CameraSource - Component for accessing device cameras\n * Provides VideoTexture for rendering and HTMLVideoElement for advanced use\n */\nexport const CameraSource = createComponent(\n 'CameraSource',\n {\n // Input (set by user)\n deviceId: { type: Types.String, default: '' }, // Empty = auto-select based on facing\n facing: {\n type: Types.Enum,\n enum: CameraFacing,\n default: CameraFacing.Unknown,\n }, // 'front' | 'back' | 'unknown' - used for auto-selection (unknown = any camera)\n width: { type: Types.Int16, default: 1920 },\n height: { type: Types.Int16, default: 1080 },\n frameRate: { type: Types.Int16, default: 30 },\n\n // Output (managed by system, read-only for users)\n state: {\n type: Types.Enum,\n enum: CameraState,\n default: CameraState.Inactive,\n }, // 'inactive' | 'starting' | 'active' | 'error'\n texture: { type: Types.Object, default: null }, // VideoTexture\n videoElement: { type: Types.Object, default: null }, // HTMLVideoElement (for advanced use)\n stream: { type: Types.Object, default: null }, // MediaStream (internal)\n },\n 'Camera video source with texture output',\n);\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAKH;;;AAGG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd;;AAEE,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;AAC7C,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY,CAAC,OAAO;AAC9B,KAAA;IACD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IAC5C,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;;AAG7C,IAAA,KAAK,EAAE;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW,CAAC,QAAQ;AAC9B,KAAA;AACD,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AAC9C,IAAA,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AACnD,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;CAC9C,EACD,yCAAyC;;;;"}