@carbonenginejs/runtime 0.1.0-alpha.0 → 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -125
- package/dist/audio/index.js +8 -1
- package/dist/audio/index.js.map +1 -1
- package/dist/audio/trinity/audio/AudActionLog/AudActionLogCB.js +84 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionLogCB.js.map +1 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecord.js +14 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecord.js.map +1 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordExecuteActionOnPlayingID.js +26 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordExecuteActionOnPlayingID.js.map +1 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordPostEvent.js +27 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordPostEvent.js.map +1 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordSetRTPC.js +27 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordSetRTPC.js.map +1 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordSetState.js +25 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordSetState.js.map +1 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordSetSwitch.js +26 -0
- package/dist/audio/trinity/audio/AudActionLog/AudActionRecordSetSwitch.js.map +1 -0
- package/dist/audio/trinity/audio/AudActionLog/IAudActionLog.js +58 -0
- package/dist/audio/trinity/audio/AudActionLog/IAudActionLog.js.map +1 -0
- package/dist/audio/trinity/audio/AudManager.js +1 -1
- package/dist/audio/trinity/audio/AudManager.js.map +1 -1
- package/dist/audio/trinity/audio/{AudObstructionOcclusion.js → AudObstructionOcclusion/AudObstructionOcclusion.js} +8 -52
- package/dist/audio/trinity/audio/AudObstructionOcclusion/AudObstructionOcclusion.js.map +1 -0
- package/dist/audio/trinity/audio/AudObstructionOcclusion/EmitterState.js +17 -0
- package/dist/audio/trinity/audio/AudObstructionOcclusion/EmitterState.js.map +1 -0
- package/dist/audio/trinity/audio/AudObstructionOcclusion/FadingValue.js +46 -0
- package/dist/audio/trinity/audio/AudObstructionOcclusion/FadingValue.js.map +1 -0
- package/dist/audio/trinity/index.js +8 -1
- package/dist/audio/trinity/index.js.map +1 -1
- package/dist/character/CjsCharacterAppearanceConstruction.js +5 -0
- package/dist/character/CjsCharacterAppearanceConstruction.js.map +1 -1
- package/dist/character/CjsCharacterAppearanceManager.js +14 -0
- package/dist/character/CjsCharacterAppearanceManager.js.map +1 -1
- package/dist/character/CjsCharacterFoundationConstruction.js +5 -0
- package/dist/character/CjsCharacterFoundationConstruction.js.map +1 -1
- package/dist/character/CjsCharacterTexturePolicy.js +5 -0
- package/dist/character/CjsCharacterTexturePolicy.js.map +1 -1
- package/dist/character/gles/CjsCharacterGlesAppearanceAL.js +17 -0
- package/dist/character/gles/CjsCharacterGlesAppearanceAL.js.map +1 -1
- package/dist/character/gles/CjsCharacterGlesAtlasRenderer.js +2 -0
- package/dist/character/gles/CjsCharacterGlesAtlasRenderer.js.map +1 -1
- package/dist/character/gles/CjsCharacterGlesFoundationTranslator.js +5 -0
- package/dist/character/gles/CjsCharacterGlesFoundationTranslator.js.map +1 -1
- package/dist/character/gles/CjsCharacterGlesLegacyConstructionTranslator.js +5 -0
- package/dist/character/gles/CjsCharacterGlesLegacyConstructionTranslator.js.map +1 -1
- package/dist/character/gles/CjsCharacterGlesMorphDeformation.js +2 -0
- package/dist/character/gles/CjsCharacterGlesMorphDeformation.js.map +1 -1
- package/dist/character/gles/CjsCharacterGlesPaletteCompatibility.js +5 -0
- package/dist/character/gles/CjsCharacterGlesPaletteCompatibility.js.map +1 -1
- package/dist/character/gles/CjsCharacterGlesTriangleCoverage.js +5 -0
- package/dist/character/gles/CjsCharacterGlesTriangleCoverage.js.map +1 -1
- package/dist/character/webgl2/CjsCharacterWebgl2EffectRouter.js +9 -0
- package/dist/character/webgl2/CjsCharacterWebgl2EffectRouter.js.map +1 -1
- package/dist/global/blue/CjsScriptCallback.js +142 -0
- package/dist/global/blue/CjsScriptCallback.js.map +1 -0
- package/dist/global/blue/index.js +2 -0
- package/dist/global/blue/index.js.map +1 -0
- package/dist/global/consts/renderContext/formats.js +51 -1
- package/dist/global/consts/renderContext/formats.js.map +1 -1
- package/dist/global/consts/renderContext/index.js +2 -2
- package/dist/global/consts/renderContext/renderStates.js +16 -1
- package/dist/global/consts/renderContext/renderStates.js.map +1 -1
- package/dist/global/contracts/index.js +0 -1
- package/dist/global/contracts/index.js.map +1 -1
- package/dist/global/index.js +4 -3
- package/dist/global/index.js.map +1 -1
- package/dist/global/math/index.js +2 -0
- package/dist/global/math/index.js.map +1 -1
- package/dist/global/math/mesh.js +70 -16
- package/dist/global/math/mesh.js.map +1 -1
- package/dist/global/math/noise.js +47 -68
- package/dist/global/math/noise.js.map +1 -1
- package/dist/global/math/pool.js +18 -3
- package/dist/global/math/pool.js.map +1 -1
- package/dist/global/math/random.js +52 -0
- package/dist/global/math/random.js.map +1 -0
- package/dist/global/math/tri3.js +18 -4
- package/dist/global/math/tri3.js.map +1 -1
- package/dist/global/schema/CjsSchema.js +20 -2
- package/dist/global/schema/CjsSchema.js.map +1 -1
- package/dist/global/schema/hydration.js +14 -0
- package/dist/global/schema/hydration.js.map +1 -1
- package/dist/global/utils/bytes.js +22 -4
- package/dist/global/utils/bytes.js.map +1 -1
- package/dist/global/utils/checksum.js +80 -0
- package/dist/global/utils/checksum.js.map +1 -0
- package/dist/global/utils/errors/CjsCancellationError.js +36 -0
- package/dist/global/utils/errors/CjsCancellationError.js.map +1 -0
- package/dist/global/utils/errors/CjsError.js +21 -52
- package/dist/global/utils/errors/CjsError.js.map +1 -1
- package/dist/global/utils/errors/abort.js +1 -1
- package/dist/global/utils/errors/abort.js.map +1 -1
- package/dist/global/utils/errors/index.js +2 -1
- package/dist/global/utils/errors/index.js.map +1 -1
- package/dist/global/utils/index.js +4 -2
- package/dist/global/utils/index.js.map +1 -1
- package/dist/index.js +95 -35
- package/dist/index.js.map +1 -1
- package/dist/input/Tr2MainWindow.js +7 -9
- package/dist/input/Tr2MainWindow.js.map +1 -1
- package/dist/resource/CjsResMan.js +33 -39
- package/dist/resource/CjsResMan.js.map +1 -1
- package/dist/resource/CjsResource.js +19 -5
- package/dist/resource/CjsResource.js.map +1 -1
- package/dist/resource/audio/AudioGeometryResData.js +22 -27
- package/dist/resource/audio/AudioGeometryResData.js.map +1 -1
- package/dist/resource/audio/CjsAudioRes.js +4 -5
- package/dist/resource/audio/CjsAudioRes.js.map +1 -1
- package/dist/resource/format/CjsBitReader.js +263 -0
- package/dist/resource/format/CjsBitReader.js.map +1 -0
- package/dist/resource/format/CjsByteReader.js +130 -125
- package/dist/resource/format/CjsByteReader.js.map +1 -1
- package/dist/resource/format/CjsFormat.js +11 -4
- package/dist/resource/format/CjsFormat.js.map +1 -1
- package/dist/resource/format/CjsFormatError.js +37 -1
- package/dist/resource/format/CjsFormatError.js.map +1 -1
- package/dist/resource/format/CjsResourceProbe.js +41 -37
- package/dist/resource/format/CjsResourceProbe.js.map +1 -1
- package/dist/resource/format/carbonRecordGuard.js +33 -0
- package/dist/resource/format/carbonRecordGuard.js.map +1 -0
- package/dist/resource/format/imageSignatures.js +202 -0
- package/dist/resource/format/imageSignatures.js.map +1 -0
- package/dist/resource/format/index.js +2 -1
- package/dist/resource/format/index.js.map +1 -1
- package/dist/resource/format/jsonPolicies.js +180 -0
- package/dist/resource/format/jsonPolicies.js.map +1 -0
- package/dist/resource/formats/black/core/helpers.js +18 -29
- package/dist/resource/formats/black/core/helpers.js.map +1 -1
- package/dist/resource/formats/bnk/CjsBnkFormat.js +4 -3
- package/dist/resource/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/resource/formats/bnk/core/WwiseCursor.js +218 -0
- package/dist/resource/formats/bnk/core/WwiseCursor.js.map +1 -0
- package/dist/resource/formats/bnk/core/busNodes.js +2 -1
- package/dist/resource/formats/bnk/core/busNodes.js.map +1 -1
- package/dist/resource/formats/bnk/core/effectNodes.js +2 -1
- package/dist/resource/formats/bnk/core/effectNodes.js.map +1 -1
- package/dist/resource/formats/bnk/core/eventAction.js +15 -93
- package/dist/resource/formats/bnk/core/eventAction.js.map +1 -1
- package/dist/resource/formats/bnk/core/globalSettings.js +19 -94
- package/dist/resource/formats/bnk/core/globalSettings.js.map +1 -1
- package/dist/resource/formats/bnk/core/helpers.js +2 -48
- package/dist/resource/formats/bnk/core/helpers.js.map +1 -1
- package/dist/resource/formats/bnk/core/musicNodes.js +42 -134
- package/dist/resource/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/resource/formats/bnk/core/nodeBase.js +20 -111
- package/dist/resource/formats/bnk/core/nodeBase.js.map +1 -1
- package/dist/resource/formats/bnk/core/sfxNodes.js +2 -1
- package/dist/resource/formats/bnk/core/sfxNodes.js.map +1 -1
- package/dist/resource/formats/cmf/CjsCmfFormat.js +242 -228
- package/dist/resource/formats/cmf/CjsCmfFormat.js.map +1 -1
- package/dist/resource/formats/cmf/core/binary.js +54 -60
- package/dist/resource/formats/cmf/core/binary.js.map +1 -1
- package/dist/resource/formats/dds/CjsDdsFormat.js +5 -3
- package/dist/resource/formats/dds/CjsDdsFormat.js.map +1 -1
- package/dist/resource/formats/dds/core/bc6h.js +16 -18
- package/dist/resource/formats/dds/core/bc6h.js.map +1 -1
- package/dist/resource/formats/dds/core/bc7.js +28 -24
- package/dist/resource/formats/dds/core/bc7.js.map +1 -1
- package/dist/resource/formats/dds/core/helpers.js +7 -133
- package/dist/resource/formats/dds/core/helpers.js.map +1 -1
- package/dist/resource/formats/dxbc/CjsDxbcFormat.js +3 -2
- package/dist/resource/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/resource/formats/dxbc/core/helpers.js +4 -32
- package/dist/resource/formats/dxbc/core/helpers.js.map +1 -1
- package/dist/resource/formats/fbx/CjsFbxFormat.js +11 -0
- package/dist/resource/formats/fbx/CjsFbxFormat.js.map +1 -1
- package/dist/resource/formats/fbx/core/helpers.js +18 -12
- package/dist/resource/formats/fbx/core/helpers.js.map +1 -1
- package/dist/resource/formats/flac/CjsFlacFormat.js +4 -9
- package/dist/resource/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/resource/formats/flac/core/helpers.js +1 -62
- package/dist/resource/formats/flac/core/helpers.js.map +1 -1
- package/dist/resource/formats/gif/CjsGifFormat.js +4 -9
- package/dist/resource/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/resource/formats/gif/core/helpers.js +1 -63
- package/dist/resource/formats/gif/core/helpers.js.map +1 -1
- package/dist/resource/formats/gltf/CjsGltfFormat.js +4 -3
- package/dist/resource/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/resource/formats/gltf/core/helpers.js +3 -19
- package/dist/resource/formats/gltf/core/helpers.js.map +1 -1
- package/dist/resource/formats/gr2/CjsGr2Format.js +105 -92
- package/dist/resource/formats/gr2/CjsGr2Format.js.map +1 -1
- package/dist/resource/formats/gr2/core/container.js +1 -10
- package/dist/resource/formats/gr2/core/container.js.map +1 -1
- package/dist/resource/formats/gr2/core/helpers.js +24 -35
- package/dist/resource/formats/gr2/core/helpers.js.map +1 -1
- package/dist/resource/formats/gr2/core/shared.js +193 -189
- package/dist/resource/formats/gr2/core/shared.js.map +1 -1
- package/dist/resource/formats/hlsl/CjsHlslFormat.js +4 -3
- package/dist/resource/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/resource/formats/hlsl/core/helpers.js +1 -30
- package/dist/resource/formats/hlsl/core/helpers.js.map +1 -1
- package/dist/resource/formats/jpeg/CjsJpegFormat.js +5 -3
- package/dist/resource/formats/jpeg/CjsJpegFormat.js.map +1 -1
- package/dist/resource/formats/jpeg/core/helpers.js +7 -134
- package/dist/resource/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/resource/formats/mp3/CjsMp3Format.js +4 -9
- package/dist/resource/formats/mp3/CjsMp3Format.js.map +1 -1
- package/dist/resource/formats/mp3/core/helpers.js +1 -64
- package/dist/resource/formats/mp3/core/helpers.js.map +1 -1
- package/dist/resource/formats/mp4/CjsMp4Format.js +4 -9
- package/dist/resource/formats/mp4/CjsMp4Format.js.map +1 -1
- package/dist/resource/formats/mp4/core/helpers.js +1 -73
- package/dist/resource/formats/mp4/core/helpers.js.map +1 -1
- package/dist/resource/formats/obj/CjsObjFormat.js +4 -3
- package/dist/resource/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/resource/formats/obj/core/helpers.js +93 -115
- package/dist/resource/formats/obj/core/helpers.js.map +1 -1
- package/dist/resource/formats/ogg/CjsOggFormat.js +4 -3
- package/dist/resource/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/resource/formats/ogg/core/helpers.js +1 -15
- package/dist/resource/formats/ogg/core/helpers.js.map +1 -1
- package/dist/resource/formats/ogg/core/vorbis.js +138 -144
- package/dist/resource/formats/ogg/core/vorbis.js.map +1 -1
- package/dist/resource/formats/pickle/CjsPickleFormat.js +83 -114
- package/dist/resource/formats/pickle/CjsPickleFormat.js.map +1 -1
- package/dist/resource/formats/png/CjsPngFormat.js +5 -3
- package/dist/resource/formats/png/CjsPngFormat.js.map +1 -1
- package/dist/resource/formats/png/core/helpers.js +13 -152
- package/dist/resource/formats/png/core/helpers.js.map +1 -1
- package/dist/resource/formats/png/core/writer.js +3 -27
- package/dist/resource/formats/png/core/writer.js.map +1 -1
- package/dist/resource/formats/red/core/helpers.js +19 -29
- package/dist/resource/formats/red/core/helpers.js.map +1 -1
- package/dist/resource/formats/stl/CjsStlFormat.js +158 -147
- package/dist/resource/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/resource/formats/stl/core/helpers.js +44 -66
- package/dist/resource/formats/stl/core/helpers.js.map +1 -1
- package/dist/resource/formats/tga/CjsTgaFormat.js +5 -3
- package/dist/resource/formats/tga/CjsTgaFormat.js.map +1 -1
- package/dist/resource/formats/tga/core/helpers.js +7 -153
- package/dist/resource/formats/tga/core/helpers.js.map +1 -1
- package/dist/resource/formats/vta/CjsVtaFormat.js +4 -3
- package/dist/resource/formats/vta/CjsVtaFormat.js.map +1 -1
- package/dist/resource/formats/vta/core/helpers.js +1 -17
- package/dist/resource/formats/vta/core/helpers.js.map +1 -1
- package/dist/resource/formats/wav/CjsWavFormat.js +4 -3
- package/dist/resource/formats/wav/CjsWavFormat.js.map +1 -1
- package/dist/resource/formats/wav/core/helpers.js +1 -15
- package/dist/resource/formats/wav/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgl/CjsWebglFormat.js +4 -3
- package/dist/resource/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +69 -9
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +12 -3
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/resource/formats/webgl/core/helpers.js +39 -68
- package/dist/resource/formats/webgl/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgpu/CjsWebgpuFormat.js +4 -3
- package/dist/resource/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/resource/formats/webgpu/core/helpers.js +4 -30
- package/dist/resource/formats/webgpu/core/helpers.js.map +1 -1
- package/dist/resource/formats/webm/CjsWebmFormat.js +4 -9
- package/dist/resource/formats/webm/CjsWebmFormat.js.map +1 -1
- package/dist/resource/formats/webm/core/helpers.js +1 -73
- package/dist/resource/formats/webm/core/helpers.js.map +1 -1
- package/dist/resource/formats/webp/CjsWebpFormat.js +4 -9
- package/dist/resource/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/resource/formats/webp/core/helpers.js +1 -62
- package/dist/resource/formats/webp/core/helpers.js.map +1 -1
- package/dist/resource/formats/wem/CjsWemFormat.js +4 -3
- package/dist/resource/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/resource/formats/wem/core/bitStream.js +83 -106
- package/dist/resource/formats/wem/core/bitStream.js.map +1 -1
- package/dist/resource/formats/wem/core/codebookLibrary.js +52 -52
- package/dist/resource/formats/wem/core/codebookLibrary.js.map +1 -1
- package/dist/resource/formats/wem/core/helpers.js +1 -15
- package/dist/resource/formats/wem/core/helpers.js.map +1 -1
- package/dist/resource/formats/wem/core/wemToOgg.js +67 -67
- package/dist/resource/formats/wem/core/wemToOgg.js.map +1 -1
- package/dist/resource/geometry/MeshDecalData.js +23 -25
- package/dist/resource/geometry/MeshDecalData.js.map +1 -1
- package/dist/resource/geometry/MeshDecalLodData.js +14 -23
- package/dist/resource/geometry/MeshDecalLodData.js.map +1 -1
- package/dist/resource/geometry/TriGeometryRes.js +299 -284
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResAreaData.js +30 -31
- package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResJointData.js +16 -24
- package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResLodData.js +50 -41
- package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResMeshData.js +32 -32
- package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResSkeletonData.js +14 -23
- package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -1
- package/dist/resource/geometry/TriJointBinding.js +16 -24
- package/dist/resource/geometry/TriJointBinding.js.map +1 -1
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +22 -27
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -1
- package/dist/resource/geometry/TriRtGeometryConstants.js +50 -41
- package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -1
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js +12 -22
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -1
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +30 -31
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -1
- package/dist/resource/index.js +1 -1
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +16 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +26 -28
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +24 -25
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +21 -22
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +25 -26
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +69 -72
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +17 -18
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +42 -43
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2RenderStateSetup.js +26 -5
- package/dist/resource/shader/reflection/Tr2RenderStateSetup.js.map +1 -1
- package/dist/resource/shader/reflection/carbonRecordFields.js +87 -90
- package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -1
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +32 -34
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
- package/dist/resource/texture/CjsTextureArrayRes.js +1 -6
- package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -1
- package/dist/resource/texture/Tr2TextureLodManager.js +35 -27
- package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -1
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +16 -24
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePackChannel.js +16 -24
- package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipeline.js +24 -20
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineParams.js +14 -23
- package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +18 -25
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +11 -16
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +14 -23
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +12 -22
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +38 -26
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -1
- package/dist/resource/worker/CjsResManMainThreadLoader.js +2 -5
- package/dist/resource/worker/CjsResManMainThreadLoader.js.map +1 -1
- package/dist/resource/worker/CjsResManWorkerLoader.js +6 -7
- package/dist/resource/worker/CjsResManWorkerLoader.js.map +1 -1
- package/dist/resource/worker/protocol.js +18 -1
- package/dist/resource/worker/protocol.js.map +1 -1
- package/dist/sof/EveSOF.js +2 -222
- package/dist/sof/EveSOF.js.map +1 -1
- package/dist/sof/SofDocumentBuilder.js +205 -0
- package/dist/sof/SofDocumentBuilder.js.map +1 -0
- package/dist/sof/faction/ErrSOFFactionColorSetTypeNotFound.js +16 -0
- package/dist/sof/faction/ErrSOFFactionColorSetTypeNotFound.js.map +1 -0
- package/dist/sof/faction/ErrSOFFactionColorSetTypeUnknown.js +16 -0
- package/dist/sof/faction/ErrSOFFactionColorSetTypeUnknown.js.map +1 -0
- package/dist/sof/faction/EveSOFDataFactionColorSet.js +3 -27
- package/dist/sof/faction/EveSOFDataFactionColorSet.js.map +1 -1
- package/dist/sof/faction/index.js +3 -1
- package/dist/sof/faction/index.js.map +1 -1
- package/dist/sof/generic/ErrSOFAreaShaderNotFound.js +18 -0
- package/dist/sof/generic/ErrSOFAreaShaderNotFound.js.map +1 -0
- package/dist/sof/generic/ErrSOFDecalShaderNotFound.js +18 -0
- package/dist/sof/generic/ErrSOFDecalShaderNotFound.js.map +1 -0
- package/dist/sof/generic/ErrSOFMaterialPrefixNotFound.js +21 -0
- package/dist/sof/generic/ErrSOFMaterialPrefixNotFound.js.map +1 -0
- package/dist/sof/generic/ErrSOFPatternMaterialPrefixNotFound.js +21 -0
- package/dist/sof/generic/ErrSOFPatternMaterialPrefixNotFound.js.map +1 -0
- package/dist/sof/generic/EveSOFDataGeneric.js +5 -69
- package/dist/sof/generic/EveSOFDataGeneric.js.map +1 -1
- package/dist/sof/generic/index.js +5 -1
- package/dist/sof/generic/index.js.map +1 -1
- package/dist/sof/index.js +23 -7
- package/dist/sof/index.js.map +1 -1
- package/dist/sof/pattern/ErrSOFProjectionNotFound.js +20 -0
- package/dist/sof/pattern/ErrSOFProjectionNotFound.js.map +1 -0
- package/dist/sof/pattern/EveSOFDataPattern.js +2 -17
- package/dist/sof/pattern/EveSOFDataPattern.js.map +1 -1
- package/dist/sof/pattern/index.js +2 -1
- package/dist/sof/pattern/index.js.map +1 -1
- package/dist/sof/shared/ErrSOFAreaTypeNotFound.js +16 -0
- package/dist/sof/shared/ErrSOFAreaTypeNotFound.js.map +1 -0
- package/dist/sof/shared/ErrSOFLogoSetTypeNotFound.js +16 -0
- package/dist/sof/shared/ErrSOFLogoSetTypeNotFound.js.map +1 -0
- package/dist/sof/shared/ErrSOFLogoSetTypeUnknown.js +16 -0
- package/dist/sof/shared/ErrSOFLogoSetTypeUnknown.js.map +1 -0
- package/dist/sof/shared/EveSOFDataArea.js +2 -13
- package/dist/sof/shared/EveSOFDataArea.js.map +1 -1
- package/dist/sof/shared/EveSOFDataLogoSet.js +3 -27
- package/dist/sof/shared/EveSOFDataLogoSet.js.map +1 -1
- package/dist/sof/shared/EveSOFDataParameter.js +2 -146
- package/dist/sof/shared/EveSOFDataParameter.js.map +1 -1
- package/dist/sof/shared/EveSOFDataParameterBool.js +40 -0
- package/dist/sof/shared/EveSOFDataParameterBool.js.map +1 -0
- package/dist/sof/shared/EveSOFDataParameterColor.js +36 -0
- package/dist/sof/shared/EveSOFDataParameterColor.js.map +1 -0
- package/dist/sof/shared/EveSOFDataParameterFloat.js +37 -0
- package/dist/sof/shared/EveSOFDataParameterFloat.js.map +1 -0
- package/dist/sof/shared/EveSOFDataParameterInt.js +37 -0
- package/dist/sof/shared/EveSOFDataParameterInt.js.map +1 -0
- package/dist/sof/shared/EveSOFDataParameterVector2.js +37 -0
- package/dist/sof/shared/EveSOFDataParameterVector2.js.map +1 -0
- package/dist/sof/shared/EveSOFDataParameterVector3.js +37 -0
- package/dist/sof/shared/EveSOFDataParameterVector3.js.map +1 -0
- package/dist/sof/shared/{EveSOFDataSpotlightAttachment.js → EveSOFDataSpotLightAttachment.js} +1 -1
- package/dist/sof/shared/{EveSOFDataSpotlightAttachment.js.map → EveSOFDataSpotLightAttachment.js.map} +1 -1
- package/dist/sof/shared/index.js +13 -4
- package/dist/sof/shared/index.js.map +1 -1
- package/dist/sof/sofDocumentValues.js +33 -0
- package/dist/sof/sofDocumentValues.js.map +1 -0
- package/dist/trinity/controllers/ITr2Controller/ITr2ActionController.js +168 -0
- package/dist/trinity/controllers/ITr2Controller/ITr2ActionController.js.map +1 -0
- package/dist/trinity/controllers/{ITr2Controller.js → ITr2Controller/ITr2Controller.js} +2 -134
- package/dist/trinity/controllers/ITr2Controller/ITr2Controller.js.map +1 -0
- package/dist/trinity/controllers/Tr2Controller.js +2 -1
- package/dist/trinity/controllers/Tr2Controller.js.map +1 -1
- package/dist/trinity/controllers/Tr2ControllerReference.js +2 -1
- package/dist/trinity/controllers/Tr2ControllerReference.js.map +1 -1
- package/dist/trinity/controllers/action/ITr2ControllerAction.js +2 -1
- package/dist/trinity/controllers/action/ITr2ControllerAction.js.map +1 -1
- package/dist/trinity/controllers/action/Tr2ActionSpawnParticles.js +10 -9
- package/dist/trinity/controllers/action/Tr2ActionSpawnParticles.js.map +1 -1
- package/dist/trinity/controllers/expression/CjsControllerExpressionCompileError.js +26 -0
- package/dist/trinity/controllers/expression/CjsControllerExpressionCompileError.js.map +1 -0
- package/dist/trinity/controllers/expression/CjsControllerExpressionEvaluateError.js +24 -0
- package/dist/trinity/controllers/expression/CjsControllerExpressionEvaluateError.js.map +1 -0
- package/dist/trinity/controllers/expression/CjsControllerExpressionParser.js +387 -0
- package/dist/trinity/controllers/expression/CjsControllerExpressionParser.js.map +1 -0
- package/dist/trinity/controllers/expression/CjsControllerExpressionProgram.js +4 -1011
- package/dist/trinity/controllers/expression/CjsControllerExpressionProgram.js.map +1 -1
- package/dist/trinity/controllers/expression/expressionRuntime.js +605 -0
- package/dist/trinity/controllers/expression/expressionRuntime.js.map +1 -0
- package/dist/trinity/controllers/index.js +5 -2
- package/dist/trinity/controllers/index.js.map +1 -1
- package/dist/trinity/controllers/state/ITr2StateMachineStateFinalizer.js +2 -1
- package/dist/trinity/controllers/state/ITr2StateMachineStateFinalizer.js.map +1 -1
- package/dist/trinity/controllers/timeline/Tr2TimelineController.js +2 -1
- package/dist/trinity/controllers/timeline/Tr2TimelineController.js.map +1 -1
- package/dist/trinity/core/ITr2Updateable.js +2 -1
- package/dist/trinity/core/ITr2Updateable.js.map +1 -1
- package/dist/trinity/core/Tr2Blitter.js +6 -3
- package/dist/trinity/core/Tr2Blitter.js.map +1 -1
- package/dist/trinity/core/Tr2Denoiser.js +256 -0
- package/dist/trinity/core/Tr2Denoiser.js.map +1 -0
- package/dist/trinity/core/Tr2GpuResourcePool/GpuResourceHandle.js +115 -0
- package/dist/trinity/core/Tr2GpuResourcePool/GpuResourceHandle.js.map +1 -0
- package/dist/trinity/core/Tr2GpuResourcePool/TextureSize2D.js +79 -0
- package/dist/trinity/core/Tr2GpuResourcePool/TextureSize2D.js.map +1 -0
- package/dist/trinity/core/{Tr2GpuResourcePool.js → Tr2GpuResourcePool/Tr2GpuResourcePool.js} +63 -151
- package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js.map +1 -0
- package/dist/trinity/core/{Tr2QuadRenderer.js → Tr2QuadRenderer/Tr2QuadRenderer.js} +8 -30
- package/dist/trinity/core/Tr2QuadRenderer/Tr2QuadRenderer.js.map +1 -0
- package/dist/trinity/core/Tr2QuadRenderer/Tr2QuadRendererEffectRecord.js +38 -0
- package/dist/trinity/core/Tr2QuadRenderer/Tr2QuadRendererEffectRecord.js.map +1 -0
- package/dist/trinity/core/Tr2RenderUtils.js +20 -3
- package/dist/trinity/core/Tr2RenderUtils.js.map +1 -1
- package/dist/trinity/core/Tr2Renderer.js +146 -1
- package/dist/trinity/core/Tr2Renderer.js.map +1 -1
- package/dist/trinity/core/Tr2ShadowMap.js +135 -14
- package/dist/trinity/core/Tr2ShadowMap.js.map +1 -1
- package/dist/trinity/core/{Tr2TextureArray.js → Tr2TextureArray/Tr2TextureArray.js} +3 -58
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js.map +1 -0
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArrayElement.js +61 -0
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArrayElement.js.map +1 -0
- package/dist/trinity/core/batch/TriRenderBatch/DefaultKeyGenerator.js +26 -0
- package/dist/trinity/core/batch/TriRenderBatch/DefaultKeyGenerator.js.map +1 -0
- package/dist/trinity/core/batch/TriRenderBatch/EffectKeyGenerator.js +29 -0
- package/dist/trinity/core/batch/TriRenderBatch/EffectKeyGenerator.js.map +1 -0
- package/dist/trinity/core/batch/{ITriRenderBatchAccumulator.js → TriRenderBatch/ITriRenderBatchAccumulator.js} +30 -30
- package/dist/trinity/core/batch/TriRenderBatch/ITriRenderBatchAccumulator.js.map +1 -0
- package/dist/trinity/core/batch/{Tr2RenderBatch.js → TriRenderBatch/Tr2RenderBatch.js} +81 -154
- package/dist/trinity/core/batch/TriRenderBatch/Tr2RenderBatch.js.map +1 -0
- package/dist/trinity/core/batch/{TriRenderBatchAccumulator.js → TriRenderBatch/TriRenderBatchAccumulator.js} +7 -38
- package/dist/trinity/core/batch/TriRenderBatch/TriRenderBatchAccumulator.js.map +1 -0
- package/dist/trinity/core/batch/TriRenderBatch/TriRenderBatchAreaBlock.js +61 -0
- package/dist/trinity/core/batch/TriRenderBatch/TriRenderBatchAreaBlock.js.map +1 -0
- package/dist/trinity/core/batch/TriRenderBatch/TriRenderBatchAreaBlocksWithSharedMaterial.js +40 -0
- package/dist/trinity/core/batch/TriRenderBatch/TriRenderBatchAreaBlocksWithSharedMaterial.js.map +1 -0
- package/dist/trinity/core/batch/TriRenderBatchMap.js +6 -1
- package/dist/trinity/core/batch/TriRenderBatchMap.js.map +1 -1
- package/dist/trinity/core/context/Tr2RenderContext.js +75 -57
- package/dist/trinity/core/context/Tr2RenderContext.js.map +1 -1
- package/dist/trinity/core/context/Tr2VisibilityResults/Tr2VisibilityEvent.js +67 -0
- package/dist/trinity/core/context/Tr2VisibilityResults/Tr2VisibilityEvent.js.map +1 -0
- package/dist/trinity/core/context/Tr2VisibilityResults/Tr2VisibilityResults.js +50 -0
- package/dist/trinity/core/context/Tr2VisibilityResults/Tr2VisibilityResults.js.map +1 -0
- package/dist/trinity/core/device/Tr2DepthStencil.js +186 -13
- package/dist/trinity/core/device/Tr2DepthStencil.js.map +1 -1
- package/dist/trinity/core/device/{Tr2RingBuffer.js → Tr2RingBuffer/Tr2RingBuffer.js} +27 -79
- package/dist/trinity/core/device/Tr2RingBuffer/Tr2RingBuffer.js.map +1 -0
- package/dist/trinity/core/device/Tr2RingBuffer/Tr2RingBufferOffsets.js +114 -0
- package/dist/trinity/core/device/Tr2RingBuffer/Tr2RingBufferOffsets.js.map +1 -0
- package/dist/trinity/core/device/{Tr2SuballocatedBuffer.js → Tr2SuballocatedBuffer/Tr2SuballocatedBuffer.js} +5 -59
- package/dist/trinity/core/device/Tr2SuballocatedBuffer/Tr2SuballocatedBuffer.js.map +1 -0
- package/dist/trinity/core/device/Tr2SuballocatedBuffer/Tr2SuballocatedBufferAllocation.js +80 -0
- package/dist/trinity/core/device/Tr2SuballocatedBuffer/Tr2SuballocatedBufferAllocation.js.map +1 -0
- package/dist/trinity/core/index.js +42 -15
- package/dist/trinity/core/index.js.map +1 -1
- package/dist/trinity/core/lighting/Tr2LightManager.js +6 -1
- package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
- package/dist/trinity/core/mesh/{ITr2ImpostorSource.js → ITr2ImpostorSource/ITr2ImpostorSource.js} +6 -28
- package/dist/trinity/core/mesh/ITr2ImpostorSource/ITr2ImpostorSource.js.map +1 -0
- package/dist/trinity/core/mesh/ITr2ImpostorSource/ITr2ImpostorSourceImpostorHash.js +32 -0
- package/dist/trinity/core/mesh/ITr2ImpostorSource/ITr2ImpostorSourceImpostorHash.js.map +1 -0
- package/dist/trinity/core/mesh/{ITr2InstanceData.js → ITr2InstanceData/ITr2InstanceData.js} +5 -29
- package/dist/trinity/core/mesh/ITr2InstanceData/ITr2InstanceData.js.map +1 -0
- package/dist/trinity/core/mesh/ITr2InstanceData/ITr2InstanceDataInstanceData.js +33 -0
- package/dist/trinity/core/mesh/ITr2InstanceData/ITr2InstanceDataInstanceData.js.map +1 -0
- package/dist/trinity/core/mesh/Tr2DirectInstanceData.js +2 -1
- package/dist/trinity/core/mesh/Tr2DirectInstanceData.js.map +1 -1
- package/dist/trinity/core/mesh/Tr2MeshBase.js +7 -1
- package/dist/trinity/core/mesh/Tr2MeshBase.js.map +1 -1
- package/dist/trinity/core/mesh/Tr2RuntimeInstanceData.js +2 -1
- package/dist/trinity/core/mesh/Tr2RuntimeInstanceData.js.map +1 -1
- package/dist/trinity/core/mesh/TriGeometryResAllocations.js +6 -2
- package/dist/trinity/core/mesh/TriGeometryResAllocations.js.map +1 -1
- package/dist/trinity/core/rawData/CjsConstantLayout.js +196 -0
- package/dist/trinity/core/rawData/CjsConstantLayout.js.map +1 -0
- package/dist/trinity/core/rawData/CjsPerFrameLayouts.js +8 -3
- package/dist/trinity/core/rawData/CjsPerFrameLayouts.js.map +1 -1
- package/dist/trinity/core/rawData/CjsPerObjectLayouts.js +40 -732
- package/dist/trinity/core/rawData/CjsPerObjectLayouts.js.map +1 -1
- package/dist/trinity/core/rawData/layouts/CjsEveBasicLayout.js +34 -0
- package/dist/trinity/core/rawData/layouts/CjsEveBasicLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveBoosterSetLayout.js +69 -0
- package/dist/trinity/core/rawData/layouts/CjsEveBoosterSetLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveChildBoosterSetLayout.js +59 -0
- package/dist/trinity/core/rawData/layouts/CjsEveChildBoosterSetLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveChildBulletStormLayout.js +37 -0
- package/dist/trinity/core/rawData/layouts/CjsEveChildBulletStormLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveChildSpherePinLayout.js +44 -0
- package/dist/trinity/core/rawData/layouts/CjsEveChildSpherePinLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveLensflareLayout.js +31 -0
- package/dist/trinity/core/rawData/layouts/CjsEveLensflareLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveMissileWarheadLayout.js +29 -0
- package/dist/trinity/core/rawData/layouts/CjsEveMissileWarheadLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEvePerObjectLayout.js +39 -0
- package/dist/trinity/core/rawData/layouts/CjsEvePerObjectLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSceneStaticParticlesLayout.js +30 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSceneStaticParticlesLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSpaceObjectDecalLayout.js +78 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSpaceObjectDecalLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSpaceObjectLayout.js +169 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSpaceObjectLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSpacePerObjectLayout.js +107 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSpacePerObjectLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSpherePinLayout.js +44 -0
- package/dist/trinity/core/rawData/layouts/CjsEveSpherePinLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveStretch2Layout.js +34 -0
- package/dist/trinity/core/rawData/layouts/CjsEveStretch2Layout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsEveTurretSetLayout.js +82 -0
- package/dist/trinity/core/rawData/layouts/CjsEveTurretSetLayout.js.map +1 -0
- package/dist/trinity/core/rawData/layouts/CjsTr2PerObjectLayout.js +42 -0
- package/dist/trinity/core/rawData/layouts/CjsTr2PerObjectLayout.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveBasicPerObjectData.js +55 -0
- package/dist/trinity/core/rawData/perObjectData/EveBasicPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveBoosterSetPerObjectData.js +59 -0
- package/dist/trinity/core/rawData/perObjectData/EveBoosterSetPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveChildBoosterSetPerObjectData.js +59 -0
- package/dist/trinity/core/rawData/perObjectData/EveChildBoosterSetPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveChildBulletStormPerObjectData.js +55 -0
- package/dist/trinity/core/rawData/perObjectData/EveChildBulletStormPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveChildSpherePinPerObjectData.js +55 -0
- package/dist/trinity/core/rawData/perObjectData/EveChildSpherePinPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveDecalPerObjectData.js +59 -0
- package/dist/trinity/core/rawData/perObjectData/EveDecalPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveLensflarePerObjectData.js +55 -0
- package/dist/trinity/core/rawData/perObjectData/EveLensflarePerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveMissileWarheadPerObjectData.js +55 -0
- package/dist/trinity/core/rawData/perObjectData/EveMissileWarheadPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveSceneStaticParticlesPerObjectData.js +55 -0
- package/dist/trinity/core/rawData/perObjectData/EveSceneStaticParticlesPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveSpherePinPerObjectData.js +55 -0
- package/dist/trinity/core/rawData/perObjectData/EveSpherePinPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/EveTurretSetPerObjectData.js +59 -0
- package/dist/trinity/core/rawData/perObjectData/EveTurretSetPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/StretchPerObjectData.js +55 -0
- package/dist/trinity/core/rawData/perObjectData/StretchPerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/{Tr2PerObjectData.js → perObjectData/Tr2PerObjectData.js} +110 -62
- package/dist/trinity/core/rawData/perObjectData/Tr2PerObjectData.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/Tr2PerObjectDataPSBuffer.js +104 -0
- package/dist/trinity/core/rawData/perObjectData/Tr2PerObjectDataPSBuffer.js.map +1 -0
- package/dist/trinity/core/rawData/perObjectData/Tr2PerObjectDataStandard.js +87 -0
- package/dist/trinity/core/rawData/perObjectData/Tr2PerObjectDataStandard.js.map +1 -0
- package/dist/trinity/core/variable/TriVariable.js +83 -83
- package/dist/trinity/core/variable/TriVariable.js.map +1 -1
- package/dist/trinity/core/vertex/{Tr2VertexDefinition.js → Tr2VertexDefinition/Tr2VertexDefinition.js} +4 -20
- package/dist/trinity/core/vertex/Tr2VertexDefinition/Tr2VertexDefinition.js.map +1 -0
- package/dist/trinity/core/vertex/Tr2VertexDefinition/Tr2VertexDefinitionItem.js +29 -0
- package/dist/trinity/core/vertex/Tr2VertexDefinition/Tr2VertexDefinitionItem.js.map +1 -0
- package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js +116 -36
- package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js.map +1 -1
- package/dist/trinity/curves/curve/Tr2CurveRandomAxisRotation.js +50 -92
- package/dist/trinity/curves/curve/Tr2CurveRandomAxisRotation.js.map +1 -1
- package/dist/trinity/eve/EveModularObjectModifier.js +9 -5
- package/dist/trinity/eve/EveModularObjectModifier.js.map +1 -1
- package/dist/trinity/eve/IEveInheritPropertiesOwner.js +2 -1
- package/dist/trinity/eve/IEveInheritPropertiesOwner.js.map +1 -1
- package/dist/trinity/eve/IEveSpaceObject2.js +2 -1
- package/dist/trinity/eve/IEveSpaceObject2.js.map +1 -1
- package/dist/trinity/eve/IEveTransform.js +2 -1
- package/dist/trinity/eve/IEveTransform.js.map +1 -1
- package/dist/trinity/eve/attachment/banner/EveBannerSet.js +2 -2
- package/dist/trinity/eve/attachment/banner/EveBannerSet.js.map +1 -1
- package/dist/trinity/eve/attachment/booster/EveBoosterSet2.js +109 -133
- package/dist/trinity/eve/attachment/booster/EveBoosterSet2.js.map +1 -1
- package/dist/trinity/eve/attachment/booster/EveBoosterSet2Item.js +40 -0
- package/dist/trinity/eve/attachment/booster/EveBoosterSet2Item.js.map +1 -0
- package/dist/trinity/eve/attachment/booster/EveBoosterSet2Renderable.js +1 -1
- package/dist/trinity/eve/attachment/booster/EveBoosterSet2Renderable.js.map +1 -1
- package/dist/trinity/eve/attachment/decal/DecalMeshCache.js +2 -14
- package/dist/trinity/eve/attachment/decal/DecalMeshCache.js.map +1 -1
- package/dist/trinity/eve/attachment/decal/DecalMeshCacheMeshBuffers.js +18 -0
- package/dist/trinity/eve/attachment/decal/DecalMeshCacheMeshBuffers.js.map +1 -0
- package/dist/trinity/eve/attachment/decal/EveSpaceObjectDecal.js +1 -1
- package/dist/trinity/eve/attachment/decal/EveSpaceObjectDecal.js.map +1 -1
- package/dist/trinity/eve/attachment/haze/EveHazeSet.js +1 -1
- package/dist/trinity/eve/attachment/haze/EveHazeSet.js.map +1 -1
- package/dist/trinity/eve/attachment/plane/EvePlaneSet.js +1 -1
- package/dist/trinity/eve/attachment/plane/EvePlaneSet.js.map +1 -1
- package/dist/trinity/eve/attachment/spotlight/EveSpotlightSet.js +2 -2
- package/dist/trinity/eve/attachment/spotlight/EveSpotlightSet.js.map +1 -1
- package/dist/trinity/eve/attachment/sprite/EveSpriteLineSet.js +1 -1
- package/dist/trinity/eve/attachment/sprite/EveSpriteLineSet.js.map +1 -1
- package/dist/trinity/eve/attachment/sprite/EveSpriteSet.js +4 -2
- package/dist/trinity/eve/attachment/sprite/EveSpriteSet.js.map +1 -1
- package/dist/trinity/eve/attachment/turrets/EveTurretSet.js +143 -139
- package/dist/trinity/eve/attachment/turrets/EveTurretSet.js.map +1 -1
- package/dist/trinity/eve/camera/EveCamera.js +1 -1
- package/dist/trinity/eve/camera/EveCamera.js.map +1 -1
- package/dist/trinity/eve/child/EveChildBoosterSet.js +12 -1
- package/dist/trinity/eve/child/EveChildBoosterSet.js.map +1 -1
- package/dist/trinity/eve/child/EveChildCloud2.js +178 -151
- package/dist/trinity/eve/child/EveChildCloud2.js.map +1 -1
- package/dist/trinity/eve/child/EveChildContainer.js +141 -141
- package/dist/trinity/eve/child/EveChildContainer.js.map +1 -1
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js +87 -0
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js.map +1 -0
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshArea.js +46 -0
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshArea.js.map +1 -0
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshInstance.js +35 -0
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshInstance.js.map +1 -0
- package/dist/trinity/eve/child/{EveChildInstancedMeshes.js → EveChildInstancedMeshes/EveChildInstancedMeshes.js} +42 -163
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js.map +1 -0
- package/dist/trinity/eve/child/EveChildMesh.js +218 -218
- package/dist/trinity/eve/child/EveChildMesh.js.map +1 -1
- package/dist/trinity/eve/child/EveChildPartData/EveChildPartData.js +53 -0
- package/dist/trinity/eve/child/EveChildPartData/EveChildPartData.js.map +1 -0
- package/dist/trinity/eve/child/{EveChildPartData.js → EveChildPartData/EveChildPartDataPartData.js} +9 -45
- package/dist/trinity/eve/child/EveChildPartData/EveChildPartDataPartData.js.map +1 -0
- package/dist/trinity/eve/child/EveChildParticleSystem.js +30 -29
- package/dist/trinity/eve/child/EveChildParticleSystem.js.map +1 -1
- package/dist/trinity/eve/child/EveChildTransform.js +5 -0
- package/dist/trinity/eve/child/EveChildTransform.js.map +1 -1
- package/dist/trinity/eve/child/EveChildTurret.js +7 -0
- package/dist/trinity/eve/child/EveChildTurret.js.map +1 -1
- package/dist/trinity/eve/index.js +10 -4
- package/dist/trinity/eve/index.js.map +1 -1
- package/dist/trinity/eve/lights/Tr2Light.js +5 -0
- package/dist/trinity/eve/lights/Tr2Light.js.map +1 -1
- package/dist/trinity/eve/overlays/overlayBatches.js +6 -1
- package/dist/trinity/eve/overlays/overlayBatches.js.map +1 -1
- package/dist/trinity/eve/particles/static/EveSceneStaticParticles.js +4 -4
- package/dist/trinity/eve/particles/static/EveSceneStaticParticles.js.map +1 -1
- package/dist/trinity/eve/renderable/stretch/EveStretch2.js +76 -71
- package/dist/trinity/eve/renderable/stretch/EveStretch2.js.map +1 -1
- package/dist/trinity/eve/renderable/stretch/EveStretch3.js +1 -1
- package/dist/trinity/eve/renderable/stretch/EveStretch3.js.map +1 -1
- package/dist/trinity/eve/spaceObject/EveShip2.js +3 -3
- package/dist/trinity/eve/spaceObject/EveShip2.js.map +1 -1
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js +408 -407
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js.map +1 -1
- package/dist/trinity/eve/ui/EveTacticalOverlay.js +1 -1
- package/dist/trinity/eve/ui/EveTacticalOverlay.js.map +1 -1
- package/dist/trinity/eve/ui/lines/EveCurveLineSet.js +9 -9
- package/dist/trinity/eve/ui/lines/EveCurveLineSet.js.map +1 -1
- package/dist/trinity/eve/ui/lines/EveLineSet.js +27 -25
- package/dist/trinity/eve/ui/lines/EveLineSet.js.map +1 -1
- package/dist/trinity/eve/ui/tacticalOverlay/EveTacticalTrails.js +3 -2
- package/dist/trinity/eve/ui/tacticalOverlay/EveTacticalTrails.js.map +1 -1
- package/dist/trinity/generated/index.js +0 -1
- package/dist/trinity/generated/index.js.map +1 -1
- package/dist/trinity/generated/trinityCore/index.js +0 -1
- package/dist/trinity/generated/trinityCore/index.js.map +1 -1
- package/dist/trinity/index.js +59 -23
- package/dist/trinity/index.js.map +1 -1
- package/dist/trinity/particle/{ITr2GenericEmitter.js → ITr2GenericEmitter/ITr2GenericEmitter.js} +4 -32
- package/dist/trinity/particle/ITr2GenericEmitter/ITr2GenericEmitter.js.map +1 -0
- package/dist/trinity/particle/ITr2GenericEmitter/ITr2GenericEmitterUpdateArguments.js +36 -0
- package/dist/trinity/particle/ITr2GenericEmitter/ITr2GenericEmitterUpdateArguments.js.map +1 -0
- package/dist/trinity/particle/Tr2ParticleSystem.js +4 -2
- package/dist/trinity/particle/Tr2ParticleSystem.js.map +1 -1
- package/dist/trinity/particle/element/Tr2ParticleElementData.js +15 -4
- package/dist/trinity/particle/element/Tr2ParticleElementData.js.map +1 -1
- package/dist/trinity/particle/emitter/Tr2DynamicEmitter.js +21 -20
- package/dist/trinity/particle/emitter/Tr2DynamicEmitter.js.map +1 -1
- package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js +23 -22
- package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js.map +1 -1
- package/dist/trinity/particle/emitter/Tr2StaticEmitter.js +14 -13
- package/dist/trinity/particle/emitter/Tr2StaticEmitter.js.map +1 -1
- package/dist/trinity/particle/index.js +2 -1
- package/dist/trinity/particle/index.js.map +1 -1
- package/dist/trinity/renderJob/step/TriStepPushRenderTarget.js +7 -1
- package/dist/trinity/renderJob/step/TriStepPushRenderTarget.js.map +1 -1
- package/dist/trinity/shader/Tr2Effect.js +131 -58
- package/dist/trinity/shader/Tr2Effect.js.map +1 -1
- package/dist/trinity/shader/Tr2EffectStateManager.js +17 -5
- package/dist/trinity/shader/Tr2EffectStateManager.js.map +1 -1
- package/dist/trinity/shader/Tr2Material.js +21 -4
- package/dist/trinity/shader/Tr2Material.js.map +1 -1
- package/dist/trinity/shader/material/Tr2EffectPassParameters.js +4 -1
- package/dist/trinity/shader/material/Tr2EffectPassParameters.js.map +1 -1
- package/dist/trinity/shader/parameter/Tr2GeometryBufferParameter.js +2 -2
- package/dist/trinity/shader/parameter/Tr2GeometryBufferParameter.js.map +1 -1
- package/dist/trinityal/Tr2BufferAL/Tr2BufferDescriptionAL.js +79 -0
- package/dist/trinityal/Tr2BufferAL/Tr2BufferDescriptionAL.js.map +1 -0
- package/dist/trinityal/{Tr2DeviceResourceAL.js → Tr2DeviceResourceAL/Tr2BaseDeviceResourceAL.js} +77 -79
- package/dist/trinityal/Tr2DeviceResourceAL/Tr2BaseDeviceResourceAL.js.map +1 -0
- package/dist/trinityal/Tr2DeviceResourceAL/Tr2DeviceResourceAL.js +24 -0
- package/dist/trinityal/Tr2DeviceResourceAL/Tr2DeviceResourceAL.js.map +1 -0
- package/dist/trinityal/Tr2DrawUPHelper.js +2 -1
- package/dist/trinityal/Tr2DrawUPHelper.js.map +1 -1
- package/dist/trinityal/Tr2HalHelperStructures/Tr2MsaaDesc.js +45 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2MsaaDesc.js.map +1 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2SamplerDescription.js +154 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2SamplerDescription.js.map +1 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2SubresourceData.js +48 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2SubresourceData.js.map +1 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureCoordBox.js +75 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureCoordBox.js.map +1 -0
- package/dist/trinityal/{Tr2HalHelperStructures.js → Tr2HalHelperStructures/Tr2TextureSubresource.js} +11 -115
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js.map +1 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2Viewport.js +51 -0
- package/dist/trinityal/Tr2HalHelperStructures/Tr2Viewport.js.map +1 -0
- package/dist/trinityal/{Tr2RenderPassAL.js → Tr2RenderPassAL/Tr2ColorAttachment.js} +5 -28
- package/dist/trinityal/Tr2RenderPassAL/Tr2ColorAttachment.js.map +1 -0
- package/dist/trinityal/Tr2RenderPassAL/Tr2DepthAttachment.js +38 -0
- package/dist/trinityal/Tr2RenderPassAL/Tr2DepthAttachment.js.map +1 -0
- package/dist/trinityal/Tr2ResourceSetAL/Tr2RegisterMapAL.js +80 -0
- package/dist/trinityal/Tr2ResourceSetAL/Tr2RegisterMapAL.js.map +1 -0
- package/dist/trinityal/Tr2ResourceSetAL/Tr2ResourceSetAL.js +76 -0
- package/dist/trinityal/Tr2ResourceSetAL/Tr2ResourceSetAL.js.map +1 -0
- package/dist/trinityal/Tr2ResourceSetAL/Tr2ResourceSetALStub.js +96 -0
- package/dist/trinityal/Tr2ResourceSetAL/Tr2ResourceSetALStub.js.map +1 -0
- package/dist/trinityal/Tr2ResourceSetAL/Tr2ResourceSetDescriptionAL.js +196 -0
- package/dist/trinityal/Tr2ResourceSetAL/Tr2ResourceSetDescriptionAL.js.map +1 -0
- package/dist/trinityal/index.js +22 -9
- package/dist/trinityal/index.js.map +1 -1
- package/dist/trinityal/stub/Tr2BufferALStub.js +86 -141
- package/dist/trinityal/stub/Tr2BufferALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2CapsALStub.js +17 -0
- package/dist/trinityal/stub/Tr2CapsALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2ConstantBufferALStub.js +57 -41
- package/dist/trinityal/stub/Tr2ConstantBufferALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2FenceALStub.js +18 -2
- package/dist/trinityal/stub/Tr2FenceALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2GpuTimerALStub.js +97 -0
- package/dist/trinityal/stub/Tr2GpuTimerALStub.js.map +1 -0
- package/dist/trinityal/stub/Tr2OcclusionQueryALStub.js +124 -0
- package/dist/trinityal/stub/Tr2OcclusionQueryALStub.js.map +1 -0
- package/dist/trinityal/stub/Tr2PipelineStatsQueryALStub/Tr2PipelineStatsQueryALStub.js +146 -0
- package/dist/trinityal/stub/Tr2PipelineStatsQueryALStub/Tr2PipelineStatsQueryALStub.js.map +1 -0
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2BindlessResourcesAL.js +28 -0
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2BindlessResourcesAL.js.map +1 -0
- package/dist/trinityal/stub/{Tr2RenderContextALStub.js → Tr2RenderContextALStub/Tr2RenderContextALStub.js} +70 -75
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js.map +1 -0
- package/dist/trinityal/stub/Tr2SamplerStateALStub.js +47 -31
- package/dist/trinityal/stub/Tr2SamplerStateALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2ShaderALStub.js +61 -45
- package/dist/trinityal/stub/Tr2ShaderALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2ShaderProgramALStub.js +51 -33
- package/dist/trinityal/stub/Tr2ShaderProgramALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2SwapChainALStub.js +61 -45
- package/dist/trinityal/stub/Tr2SwapChainALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2TextureALStub.js +188 -171
- package/dist/trinityal/stub/Tr2TextureALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2VertexLayoutALStub.js +43 -27
- package/dist/trinityal/stub/Tr2VertexLayoutALStub.js.map +1 -1
- package/dist/trinityal/stub/{Tr2VideoAdapterInfoALStub.js → Tr2VideoAdapterInfoStub.js} +16 -1
- package/dist/trinityal/stub/Tr2VideoAdapterInfoStub.js.map +1 -0
- package/dist/trinityal/stub/index.js +8 -4
- package/dist/trinityal/stub/index.js.map +1 -1
- package/dist/trinityal/vertexLayoutMatch.js +2 -2
- package/dist/trinityal/vertexLayoutMatch.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuBufferAL.js +105 -90
- package/dist/trinityal/webgpu/CjsWebgpuBufferAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuCapsAL.js +17 -0
- package/dist/trinityal/webgpu/CjsWebgpuCapsAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuConstantBufferAL.js +15 -0
- package/dist/trinityal/webgpu/CjsWebgpuConstantBufferAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuDevice.js +2 -2
- package/dist/trinityal/webgpu/CjsWebgpuDevice.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +900 -938
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js +56 -60
- package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuSamplerStateAL.js +16 -1
- package/dist/trinityal/webgpu/CjsWebgpuSamplerStateAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js +100 -379
- package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js +330 -0
- package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js.map +1 -0
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +15 -0
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
- package/dist/trinityal/webgpu/core/{constantArena.js → CjsWebgpuConstantArena.js} +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuConstantArena.js.map +1 -0
- package/dist/trinityal/webgpu/core/{batchGroups.js → CjsWebgpuEncodeState.js} +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuEncodeState.js.map +1 -0
- package/dist/trinityal/webgpu/core/{perFrameSource.js → CjsWebgpuPerFrameSource.js} +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuPerFrameSource.js.map +1 -0
- package/dist/trinityal/webgpu/core/{pipelineCache.js → CjsWebgpuPipelineCache.js} +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuPipelineCache.js.map +1 -0
- package/dist/trinityal/webgpu/core/{psoDescription.js → CjsWebgpuPsoDescription.js} +2 -2
- package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js.map +1 -0
- package/dist/trinityal/webgpu/core/{renderTarget.js → CjsWebgpuRenderTarget.js} +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuRenderTarget.js.map +1 -0
- package/dist/trinityal/webgpu/core/{samplerSource.js → CjsWebgpuSamplerSource.js} +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuSamplerSource.js.map +1 -0
- package/dist/trinityal/webgpu/core/{textureSource.js → CjsWebgpuTextureSource.js} +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuTextureSource.js.map +1 -0
- package/dist/trinityal/webgpu/core/{trinityBatchDispatcher.js → CjsWebgpuTrinityBatchDispatcher.js} +4 -4
- package/dist/trinityal/webgpu/core/CjsWebgpuTrinityBatchDispatcher.js.map +1 -0
- package/dist/trinityal/webgpu/core/{trinityBatchResolver.js → CjsWebgpuTrinityBatchResolver.js} +81 -81
- package/dist/trinityal/webgpu/core/CjsWebgpuTrinityBatchResolver.js.map +1 -0
- package/dist/trinityal/webgpu/core/{trinityPassEncoder.js → CjsWebgpuTrinityPassEncoder.js} +2 -2
- package/dist/trinityal/webgpu/core/CjsWebgpuTrinityPassEncoder.js.map +1 -0
- package/dist/trinityal/webgpu/core/{workQueue.js → CjsWebgpuWorkQueue.js} +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js.map +1 -0
- package/dist/trinityal/webgpu/internal.js +12 -11
- package/dist/trinityal/webgpu/internal.js.map +1 -1
- package/docs/audio/reference/classes/trinity.md +44 -34
- package/docs/character/architecture.md +276 -0
- package/docs/character/reference/character-appearance-plans.md +30 -66
- package/docs/character/reference/prepared-libraries.md +14 -30
- package/docs/global/reference/api.md +2 -1
- package/docs/global/reference/classes/README.md +53 -71
- package/docs/global/reference/classes/dropped.md +16 -0
- package/docs/resource/README.md +19 -15
- package/docs/resource/architecture.md +9 -2
- package/docs/resource/concepts/format-capabilities.md +124 -80
- package/docs/resource/concepts/shared-format-helpers.md +94 -0
- package/docs/resource/formats/README.md +230 -224
- package/docs/resource/formats/bitknit2.md +221 -0
- package/docs/resource/formats/carbon-effect-container.md +184 -269
- package/docs/resource/formats/gr2.md +6 -1
- package/docs/resource/formats/schemabound.md +28 -48
- package/docs/resource/formats/static.md +70 -97
- package/docs/resource/formats/webgl/carbon-constant-layouts.md +8 -8
- package/docs/resource/formats/webgl/decl-io.md +165 -256
- package/docs/resource/formats/webgl/memory-structured.md +64 -142
- package/docs/resource/formats/webgl/texture-sample.md +109 -138
- package/docs/resource/formats/webgpu/formats/carbon-webgpu.md +38 -69
- package/docs/resource/formats/webgpu/guides/effect-packaging.md +54 -116
- package/docs/resource/formats/webgpu/reference/api.md +64 -67
- package/docs/resource/formats/webgpu/reference/wgsl-compatibility.md +158 -345
- package/docs/resource/reference/classes/core.md +256 -236
- package/docs/resource/reference/classes/formats.md +1668 -1672
- package/docs/resource/reference/workers.md +4 -2
- package/docs/sof/reference/classes/core.md +1 -1
- package/docs/sof/reference/classes/faction.md +2 -2
- package/docs/sof/reference/classes/generic.md +4 -4
- package/docs/sof/reference/classes/pattern.md +1 -1
- package/docs/sof/reference/classes/shared.md +10 -10
- package/docs/trinity/architecture.md +55 -44
- package/docs/trinity/concepts/generated-class-lifecycle.md +10 -15
- package/docs/trinity/reference/classes/curves-and-utilities.md +496 -506
- package/docs/trinity/reference/classes/dropped.md +0 -189
- package/docs/trinity/reference/classes/eve-runtime.md +8 -8
- package/docs/trinity/reference/classes/generated.md +0 -10
- package/docs/trinity/reference/classes/particle.md +2 -2
- package/docs/trinity/reference/classes/trinity-core.md +1554 -1256
- package/docs/trinity/reference/implementation-status.md +50 -75
- package/docs/trinity/reference/main-semantic-extraction.md +13 -17
- package/docs/trinityal/reference/classes/README.md +77 -27
- package/docs/trinityal/reference/classes/dropped.md +92 -0
- package/docs/trinityal/webgpu/README.md +3 -1
- package/docs/trinityal/webgpu/architecture.md +121 -228
- package/docs/trinityal/webgpu/reference/api.md +5 -5
- package/docs/trinityal/webgpu/reference/classes/README.md +13 -13
- package/format-notices/gr2/NOTICE +18 -12
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +5 -5
- package/package.json +4 -1
- package/dist/audio/trinity/audio/AudActionLog.js +0 -173
- package/dist/audio/trinity/audio/AudActionLog.js.map +0 -1
- package/dist/audio/trinity/audio/AudObstructionOcclusion.js.map +0 -1
- package/dist/global/contracts/CjsScriptCallback.js +0 -94
- package/dist/global/contracts/CjsScriptCallback.js.map +0 -1
- package/dist/trinity/controllers/ITr2Controller.js.map +0 -1
- package/dist/trinity/core/Tr2GpuResourcePool.js.map +0 -1
- package/dist/trinity/core/Tr2QuadRenderer.js.map +0 -1
- package/dist/trinity/core/Tr2TextureArray.js.map +0 -1
- package/dist/trinity/core/batch/ITriRenderBatchAccumulator.js.map +0 -1
- package/dist/trinity/core/batch/Tr2RenderBatch.js.map +0 -1
- package/dist/trinity/core/batch/TriRenderBatchAccumulator.js.map +0 -1
- package/dist/trinity/core/context/CjsShadowMapExecutor.js +0 -43
- package/dist/trinity/core/context/CjsShadowMapExecutor.js.map +0 -1
- package/dist/trinity/core/context/CjsVolumetricsExecutor.js +0 -64
- package/dist/trinity/core/context/CjsVolumetricsExecutor.js.map +0 -1
- package/dist/trinity/core/context/Tr2VisibilityResults.js +0 -109
- package/dist/trinity/core/context/Tr2VisibilityResults.js.map +0 -1
- package/dist/trinity/core/device/Tr2RingBuffer.js.map +0 -1
- package/dist/trinity/core/device/Tr2SuballocatedBuffer.js.map +0 -1
- package/dist/trinity/core/mesh/ITr2ImpostorSource.js.map +0 -1
- package/dist/trinity/core/mesh/ITr2InstanceData.js.map +0 -1
- package/dist/trinity/core/rawData/Tr2PerObjectData.js.map +0 -1
- package/dist/trinity/core/rawData/constantLayout.js +0 -175
- package/dist/trinity/core/rawData/constantLayout.js.map +0 -1
- package/dist/trinity/core/vertex/Tr2VertexDefinition.js.map +0 -1
- package/dist/trinity/eve/child/EveChildInstancedMeshes.js.map +0 -1
- package/dist/trinity/eve/child/EveChildPartData.js.map +0 -1
- package/dist/trinity/generated/trinityCore/Tr2Denoiser.js +0 -47
- package/dist/trinity/generated/trinityCore/Tr2Denoiser.js.map +0 -1
- package/dist/trinity/particle/ITr2GenericEmitter.js.map +0 -1
- package/dist/trinityal/Tr2DeviceResourceAL.js.map +0 -1
- package/dist/trinityal/Tr2HalHelperStructures.js.map +0 -1
- package/dist/trinityal/Tr2RenderPassAL.js.map +0 -1
- package/dist/trinityal/Tr2ResourceSetAL.js +0 -419
- package/dist/trinityal/Tr2ResourceSetAL.js.map +0 -1
- package/dist/trinityal/Tr2SamplerDescription.js +0 -72
- package/dist/trinityal/Tr2SamplerDescription.js.map +0 -1
- package/dist/trinityal/stub/Tr2QueryALStub.js +0 -326
- package/dist/trinityal/stub/Tr2QueryALStub.js.map +0 -1
- package/dist/trinityal/stub/Tr2RenderContextALStub.js.map +0 -1
- package/dist/trinityal/stub/Tr2VideoAdapterInfoALStub.js.map +0 -1
- package/dist/trinityal/webgpu/core/batchGroups.js.map +0 -1
- package/dist/trinityal/webgpu/core/constantArena.js.map +0 -1
- package/dist/trinityal/webgpu/core/perFrameSource.js.map +0 -1
- package/dist/trinityal/webgpu/core/pipelineCache.js.map +0 -1
- package/dist/trinityal/webgpu/core/psoDescription.js.map +0 -1
- package/dist/trinityal/webgpu/core/renderTarget.js.map +0 -1
- package/dist/trinityal/webgpu/core/samplerSource.js.map +0 -1
- package/dist/trinityal/webgpu/core/textureSource.js.map +0 -1
- package/dist/trinityal/webgpu/core/trinityBatchDispatcher.js.map +0 -1
- package/dist/trinityal/webgpu/core/trinityBatchResolver.js.map +0 -1
- package/dist/trinityal/webgpu/core/trinityPassEncoder.js.map +0 -1
- package/dist/trinityal/webgpu/core/workQueue.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sources":["../../../../../../src/resource/formats/gr2/core/shared.js"],"sourcesContent":["/**\n * GR2 shared projection.\n * @author cppctamber\n * `projectShared(fileInfo, version)` returns the normalized plain-object graph\n * consumed independently by GR2 JSON and CMF output.\n * Normalized integer values are dequantized with float32 reciprocals, Real16\n * values are already converted by reader.js, and non-finite floats use zero\n * except for typed transform components, which use the corresponding Granny\n * identity value.\n */\n\nconst fr = Math.fround;\n\n/**\n * Member type ids whose numeric values need conversion for the shared output.\n */\nconst MEMBER_TYPES = Object.freeze({\n Real32: 10, Int8: 11, UInt8: 12, BinormalInt8: 13, NormalUInt8: 14,\n Int16: 15, UInt16: 16, BinormalInt16: 17, NormalUInt16: 18,\n Int32: 19, UInt32: 20, Real16: 21\n});\nconst T = MEMBER_TYPES;\n\n/** Float32 reciprocal used to dequantize NormalUInt8 values. */\nconst INV255_VALUE = fr(1 / 255);\n\n/** Float32 reciprocal used to dequantize NormalUInt16 values. */\nconst INV65535_VALUE = fr(1 / 65535);\n\n/** Float32 reciprocal used to dequantize BinormalInt8 values. */\nconst INV127_VALUE = fr(1 / 127);\n\n/** Float32 reciprocal used to dequantize BinormalInt16 values. */\nconst INV32767_VALUE = fr(1 / 32767);\n\nconst\n INV255 = INV255_VALUE,\n INV65535 = INV65535_VALUE,\n INV127 = INV127_VALUE,\n INV32767 = INV32767_VALUE;\n\n/**\n * Node keys accepted by {@link projectShared}'s `options.classes` map.\n *\n * Each key names one shared projection node shape; the mapped constructor is\n * instantiated with `new` and populated with that node's usual fields instead\n * of a plain object literal.\n */\nexport const CLASS_KEYS = Object.freeze([\n \"Root\", \"Mesh\", \"BoneBinding\", \"IndexGroup\", \"MorphTarget\", \"Model\",\n \"Skeleton\", \"Bone\", \"Animation\", \"TrackGroup\", \"TransformTrack\", \"VectorTrack\", \"Curve\"\n]);\n\n/**\n * Constructors used to hydrate shared projection nodes as class instances.\n *\n * Every key is optional; node types with no matching constructor keep the\n * default plain-object shape. See {@link CLASS_KEYS} for valid keys.\n *\n * @typedef {{[key: string]: new () => object}} Gr2NodeClasses\n */\n\n/**\n * Instantiate and populate a node class, or return the plain props unchanged.\n *\n * @param {Gr2NodeClasses} classes Opt-in node class map.\n * @param {string} key Node key to look up in `classes`.\n * @param {object} props Fields to populate onto the instance.\n * @returns {object} A populated class instance, or `props` when no\n * constructor is registered for `key`.\n */\nfunction build(classes, key, props, hydrationOptions = {})\n{\n const Ctor = classes[key];\n return Ctor ? populate(new Ctor(), props, hydrationOptions) : props;\n}\n\nfunction populate(instance, props, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsGr2Format class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(props, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\n/**\n * Root object emitted in the shared GR2 shape.\n *\n * @typedef {object} Gr2SharedRoot\n * @property {number} grannyFileFormatRevision Granny file format revision.\n * @property {string} grannyFileSource Original source filename, or an empty string.\n * @property {object[]} meshes Mesh records with deinterleaved vertex channels.\n * @property {object[]} models Model records with skeleton and mesh bindings.\n * @property {object[]} animations Animation records and transform tracks.\n */\n\n/**\n * Convert a reflected numeric value to the shared float convention.\n *\n * @param {number} v Raw reflected numeric value.\n * @param {number} memberType Granny member type id.\n * @returns {number} Converted and float32-rounded value.\n */\nfunction convert(v, memberType)\n{\n switch (memberType)\n {\n case T.NormalUInt8:\n return fr(v * INV255);\n\n case T.NormalUInt16:\n return fr(v * INV65535);\n\n case T.BinormalInt8:\n return fr(v * INV127);\n\n case T.BinormalInt16:\n return fr(v * INV32767);\n\n default:\n return fr(v);\n }\n}\n\n/**\n * Replace non-finite untyped numbers with zero.\n *\n * @param {number} v Candidate numeric value.\n * @returns {number} The original finite value, or zero.\n */\nfunction sf(v) { return Number.isFinite(v) ? v : 0; }\n\n/**\n * Copy and dequantize one vertex channel from reflected vertex objects.\n *\n * Missing Granny members return an empty channel.\n *\n * @param {object[]} vertices Reflected vertex array with non-enumerable type metadata.\n * @param {string} memberName Granny vertex member name to copy.\n * @param {number} destWidth Number of components in the emitted channel.\n * @param {boolean} [preserveWidth] Retain an authored three- or four-component width.\n * @returns {number[]} Flat deinterleaved channel values.\n */\nfunction copyChannel(vertices, memberName, destWidth, preserveWidth = false)\n{\n const\n type = vertices.__type || [],\n m = type.find(x => x.name === memberName);\n if (!m) return [];\n const\n srcWidth = m.arrayWidth > 1 ? m.arrayWidth : 1,\n width = preserveWidth && (srcWidth === 3 || srcWidth === 4) ? srcWidth : destWidth,\n n = Math.min(srcWidth, width),\n out = new Array(vertices.length * width).fill(0);\n for (let i = 0; i < vertices.length; i++)\n {\n const\n raw = vertices[i][memberName],\n arr = Array.isArray(raw) ? raw : [ raw ],\n base = i * width;\n for (let k = 0; k < n; k++)\n {\n out[base + k] = sf(convert(arr[k], m.type));\n }\n }\n return out;\n}\n\nconst VERTEX_CHANNELS = Object.freeze([\n [ \"position\", \"Position\", 3 ],\n [ \"blendIndice\", \"BoneIndices\", 4 ],\n [ \"tangent\", \"Tangent\", 4, true ],\n [ \"normal\", \"Normal\", 3 ],\n [ \"texcoord0\", \"TextureCoordinates0\", 2 ],\n [ \"texcoord1\", \"TextureCoordinates1\", 2 ],\n [ \"binormal\", \"Binormal\", 4, true ],\n [ \"blendWeight\", \"BoneWeights\", 4 ]\n]);\n\nfunction emitVertexChannels(vertices)\n{\n const channels = {};\n for (const [ name, memberName, width, preserveWidth ] of VERTEX_CHANNELS)\n {\n channels[name] = copyChannel(vertices, memberName, width, preserveWidth);\n }\n return channels;\n}\n\n/**\n * Flatten reflected scalar-array wrappers into plain JavaScript values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array or already-flat array.\n * @returns {any[]} Plain scalar values.\n */\nfunction scalarArray(a)\n{\n if (!a || !a.length) return [];\n if (typeof a[0] === \"object\" && a[0] !== null)\n {\n const k = Object.keys(a[0])[0];\n return a.map(x => x[k]);\n }\n return a;\n}\n\n/**\n * Granny curve format ids emitted by the shared curve projector.\n */\nconst CURVE_FORMATS = Object.freeze({\n DaKeyframes32f: 0, DaK32fC32f: 1, DaIdentity: 2, DaConstant32f: 3,\n D3Constant32f: 4, D4Constant32f: 5, DaK16uC16u: 6, DaK8uC8u: 7,\n D4nK16uC15u: 8, D4nK8uC7u: 9, D3K16uC16u: 10, D3K8uC8u: 11,\n D9I1K16uC16u: 12, D9I3K16uC16u: 13, D9I1K8uC8u: 14, D9I3K8uC8u: 15,\n D3I1K32fC32f: 16, D3I1K16uC16u: 17, D3I1K8uC8u: 18\n});\nconst F = CURVE_FORMATS;\n\n/**\n * Locate the inline curve-data header inside a reflected curve-data object.\n *\n * @param {object} cd Reflected Granny curve-data object.\n * @returns {{Format: number, Degree: number}|null} Header object when present.\n */\nfunction curveHeader(cd)\n{\n for (const k of Object.keys(cd))\n {\n if (k.startsWith(\"CurveDataHeader\")) return cd[k];\n }\n return null;\n}\n\n/**\n * Convert a reflected scalar array to float32-rounded finite numbers.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @param {number[]} [fallback] Semantic values used cyclically for non-finite\n * components; defaults to zero for untyped data.\n * @returns {number[]} Float array.\n */\nfunction farr(a, fallback = null)\n{\n return scalarArray(a).map((x, index) =>\n {\n const value = fr(x);\n return Number.isFinite(value)\n ? value\n : fallback?.[index % fallback.length] ?? 0;\n });\n}\n\n/**\n * Convert a reflected scalar array to unsigned 32-bit integer values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Unsigned integer array.\n */\nfunction uarr(a) { return scalarArray(a).map(x => x >>> 0); }\n\n/**\n * Project one Granny Curve2 object into shared form.\n *\n * @param {object} curve2 Reflected Granny curve object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Compact curve record with format-specific fields.\n */\nfunction emitCurve(curve2, classes = {}, controlFallback = [ 0 ])\n{\n const cd = curve2 && curve2.CurveData;\n if (!cd) return build(classes, \"Curve\", { format: 0, degree: 0, error: \"no curve data\" });\n const\n h = curveHeader(cd) || { Format: 0, Degree: 0 },\n format = h.Format,\n degree = h.Degree,\n o = { format, degree };\n switch (format)\n {\n case F.DaIdentity:\n break;\n\n case F.DaKeyframes32f:\n o.dimension = cd.Dimension;\n o.controls = farr(cd.Controls, controlFallback);\n break;\n\n case F.DaConstant32f:\n o.controls = farr(cd.Controls, controlFallback);\n break;\n\n case F.D3Constant32f:\n o.controls = farr((cd.Controls || [ 0, 0, 0 ]).slice(0, 3), controlFallback);\n break;\n\n case F.D4Constant32f:\n o.controls = farr((cd.Controls || [ 0, 0, 0, 1 ]).slice(0, 4), controlFallback);\n break;\n\n case F.DaK32fC32f:\n o.knots = farr(cd.Knots);\n o.controls = farr(cd.Controls, controlFallback);\n break;\n\n case F.DaK16uC16u:\n case F.DaK8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScaleOffsets = farr(cd.ControlScaleOffsets);\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D4nK16uC15u:\n case F.D4nK8uC7u:\n o.scaleOffsetTableEntries = cd.ScaleOffsetTableEntries;\n o.oneOverKnotScale = sf(fr(cd.OneOverKnotScale));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3K16uC16u:\n case F.D3K8uC8u:\n case F.D3I1K16uC16u:\n case F.D3I1K8uC8u:\n case F.D9I3K16uC16u:\n case F.D9I3K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3I1K32fC32f:\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = farr(cd.KnotsControls);\n break;\n\n case F.D9I1K16uC16u:\n case F.D9I1K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = [ sf(fr(cd.ControlScale)) ];\n o.controlOffsets = [ sf(fr(cd.ControlOffset)) ];\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n default:\n o.error = `Unknown format ${format}`;\n }\n return build(classes, \"Curve\", o);\n}\n\n/**\n * Convert arbitrary reflected variant data to JSON-safe plain values.\n *\n * @param {any} v Reflected variant value.\n * @returns {JsonValue} JSON-compatible value.\n */\nfunction emitVariant(v)\n{\n if (v === null || v === undefined) return null;\n if (Array.isArray(v)) return v.map(emitVariant);\n if (typeof v === \"object\")\n {\n const o = {};\n for (const k of Object.keys(v))\n {\n o[k] = emitVariant(v[k]);\n }\n return o;\n }\n if (typeof v === \"number\") return Number.isInteger(v) ? v : sf(fr(v));\n return v;\n}\n\n/**\n * Attach converted extended data when the reflected variant is present.\n *\n * @param {object} target Projected GR2 object to mutate.\n * @param {object|null|undefined} ext Reflected extended-data variant.\n * @returns {void}\n */\nfunction addExtendedData(target, ext)\n{\n if (ext !== null && ext !== undefined && typeof ext === \"object\")\n {\n target.extendedData = emitVariant(ext);\n }\n}\n\n/**\n * Project one reflected Granny morph target (blend shape).\n *\n * Morph target vertex data uses the same deinterleaved channel layout as a\n * mesh's primary vertex data.\n *\n * @param {object} mt Reflected Granny `granny_morph_target` object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted morph-target record.\n */\nfunction emitMorphTarget(mt, classes = {})\n{\n const\n vd = mt.VertexData,\n verts = (vd && vd.Vertices) || [];\n return build(classes, \"MorphTarget\", {\n name: mt.ScalarName ?? \"\",\n dataIsDeltas: !!mt.DataIsDeltas,\n vertex: emitVertexChannels(verts)\n });\n}\n\nfunction mappedAnnotationRows(set, vertexCount)\n{\n const\n annotations = set.VertexAnnotations || [],\n map = scalarArray(set.VertexAnnotationIndices),\n rows = [],\n vertexIndices = [];\n\n if (set.IndicesMapFromVertexToAnnotation)\n {\n for (let vertexIndex = 0; vertexIndex < Math.min(map.length, vertexCount); vertexIndex++)\n {\n const annotationIndex = map[vertexIndex];\n if (!Number.isInteger(annotationIndex) || annotationIndex < 0 || annotationIndex >= annotations.length) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n else\n {\n const count = map.length ? Math.min(map.length, annotations.length) : annotations.length;\n for (let annotationIndex = 0; annotationIndex < count; annotationIndex++)\n {\n const vertexIndex = map.length ? map[annotationIndex] : annotationIndex;\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n\n Object.defineProperty(rows, \"__type\", {\n value: annotations.__type || [],\n configurable: true\n });\n\n const identity = rows.length === vertexCount && vertexIndices.every((value, index) => value === index);\n return { rows, vertexIndices: identity ? null : vertexIndices };\n}\n\nfunction emitVertexAnnotationTarget(set, vertexCount, classes = {})\n{\n if (!set || !set.VertexAnnotations?.length) return null;\n\n const mapped = mappedAnnotationRows(set, vertexCount);\n if (!mapped.rows.length) return null;\n\n const target = {\n name: set.Name ?? \"\",\n dataIsDeltas: true,\n vertex: emitVertexChannels(mapped.rows)\n };\n if (mapped.vertexIndices) target.vertexIndices = mapped.vertexIndices;\n return build(classes, \"MorphTarget\", target);\n}\n\n/**\n * Project a reflected Granny mesh.\n *\n * @param {object} mesh Reflected Granny mesh object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted mesh record.\n */\nfunction emitMesh(mesh, classes = {}, rebuildMissingBounds = false)\n{\n const o = {};\n o.name = mesh.Name ?? \"\";\n // Granny files carry no mesh-level AABB (only per-bone OBBs), so these\n // stay zeros unless the caller opts into `rebuildMissingBounds` -\n // then real bounds are computed from the position channel below, per\n // group and for the mesh. Zeros starved every consumer that treats\n // bounds as load-bearing: ccpwgl's logical LOD size-culled every\n // gr2-sourced mesh to nothing the day its visibility gate armed. The\n // old gr2_json path always regenerated from vertices; here it is an\n // option because it walks every referenced vertex once per group.\n o.minBounds = [ 0, 0, 0 ];\n o.maxBounds = [ 0, 0, 0 ];\n\n o.boneBindings = (mesh.BoneBindings || []).map(bb => build(classes, \"BoneBinding\", {\n name: bb.BoneName ?? \"\",\n minBounds: (bb.OBBMin || [ 0, 0, 0 ]).map(x => sf(fr(x))),\n maxBounds: (bb.OBBMax || [ 0, 0, 0 ]).map(x => sf(fr(x)))\n }));\n\n const\n vd = mesh.PrimaryVertexData,\n verts = (vd && vd.Vertices) || [];\n o.vertex = emitVertexChannels(verts);\n o.morphTargets = (mesh.MorphTargets || []).map(mt => emitMorphTarget(mt, classes));\n o.morphTargets.push(...(vd?.VertexAnnotationSets || [])\n .map(set => emitVertexAnnotationTarget(set, verts.length, classes))\n .filter(Boolean));\n\n const\n topo = mesh.PrimaryTopology || {},\n i32arr = scalarArray(topo.Indices),\n i16arr = scalarArray(topo.Indices16),\n groups = topo.Groups || [];\n o.indices = [];\n let indices = null, bpi = 0, meshBounds = null;\n if (i32arr.length) { indices = i32arr; bpi = 4; }\n else if (i16arr.length) { indices = i16arr.map(x => x & 0xffff); bpi = 2; }\n if (indices)\n {\n for (const g of groups)\n {\n const\n faces = new Array(g.TriCount * 3),\n start = g.TriFirst * 3;\n for (let i = 0; i < g.TriCount * 3; i++)\n {\n faces[i] = indices[start + i] >>> 0;\n }\n const group = {\n name: `area_${g.MaterialIndex}`,\n bytesPerIndex: bpi,\n faces\n };\n if (rebuildMissingBounds)\n {\n const bounds = boundsFromFaces(o.vertex.position, faces);\n if (bounds)\n {\n group.minBounds = bounds.min;\n group.maxBounds = bounds.max;\n if (!meshBounds)\n {\n meshBounds = { min: [ ...bounds.min ], max: [ ...bounds.max ] };\n }\n else\n {\n for (let k = 0; k < 3; k++)\n {\n if (bounds.min[k] < meshBounds.min[k]) meshBounds.min[k] = bounds.min[k];\n if (bounds.max[k] > meshBounds.max[k]) meshBounds.max[k] = bounds.max[k];\n }\n }\n }\n }\n o.indices.push(build(classes, \"IndexGroup\", group));\n }\n }\n if (meshBounds)\n {\n o.minBounds = meshBounds.min;\n o.maxBounds = meshBounds.max;\n }\n return build(classes, \"Mesh\", o);\n}\n\n/**\n * Axis-aligned bounds of the positions a face list references.\n *\n * @param {number[]} positions Flat xyz position channel.\n * @param {number[]} faces Vertex indices.\n * @returns {{min: number[], max: number[]}|null} Bounds, or null without data.\n */\nfunction boundsFromFaces(positions, faces)\n{\n if (!positions || !positions.length || !faces.length) return null;\n const\n min = [ Infinity, Infinity, Infinity ],\n max = [ -Infinity, -Infinity, -Infinity ];\n for (let i = 0; i < faces.length; i++)\n {\n const base = faces[i] * 3;\n for (let k = 0; k < 3; k++)\n {\n const v = positions[base + k];\n if (v < min[k]) min[k] = v;\n if (v > max[k]) max[k] = v;\n }\n }\n return Number.isFinite(min[0]) ? { min, max } : null;\n}\n\n\n/**\n * Project a reflected Granny skeleton bone.\n *\n * @param {object} bone Reflected Granny bone object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted bone record.\n */\nfunction emitBone(bone, classes = {})\n{\n const\n t = bone.LocalTransform || bone.Transform ||\n { flags: 0, position: [ 0, 0, 0 ], orientation: [ 0, 0, 0, 1 ], scaleShear: [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ] },\n o = {};\n o.name = bone.Name ?? \"\";\n o.parentIndex = bone.ParentIndex | 0;\n o.flag = t.flags;\n if (t.flags & 1) o.position = farr(t.position, [ 0, 0, 0 ]);\n if (t.flags & 2) o.orientation = farr(t.orientation, [ 0, 0, 0, 1 ]);\n if (t.flags & 4) o.scaleShear = farr(t.scaleShear, [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]);\n addExtendedData(o, bone.ExtendedData);\n return build(classes, \"Bone\", o);\n}\n\n/**\n * Project a reflected Granny skeleton.\n *\n * @param {object|null} skel Reflected Granny skeleton object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted skeleton record.\n */\nfunction emitSkeleton(skel, classes = {})\n{\n const o = {};\n o.name = skel ? (skel.Name ?? \"\") : \"\";\n o.bones = skel ? (skel.Bones || []).map(b => emitBone(b, classes)) : [];\n if (skel) addExtendedData(o, skel.ExtendedData);\n return build(classes, \"Skeleton\", o);\n}\n\n/**\n * Project a reflected Granny model.\n *\n * @param {object} model Reflected Granny model object.\n * @param {object} fileInfo Root reflected Granny file-info object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @param {WeakMap<object, object>} [skeletonCache] Emitted skeleton identity cache.\n * @returns {object} Emitted model record.\n */\nfunction emitModel(model, fileInfo, classes = {}, skeletonCache = new WeakMap())\n{\n const o = {};\n o.name = model.Name ?? \"\";\n if (model.Skeleton && skeletonCache.has(model.Skeleton))\n {\n o.skeleton = skeletonCache.get(model.Skeleton);\n }\n else\n {\n o.skeleton = emitSkeleton(model.Skeleton, classes);\n if (model.Skeleton) skeletonCache.set(model.Skeleton, o.skeleton);\n }\n const meshes = fileInfo.Meshes || [];\n o.meshBindings = (model.MeshBindings || []).map(mb =>\n {\n const idx = meshes.indexOf(mb && mb.Mesh);\n return idx;\n });\n addExtendedData(o, model.ExtendedData);\n return build(classes, \"Model\", o);\n}\n\n/**\n * Project a reflected Granny transform track.\n *\n * @param {object} tt Reflected Granny transform-track object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted transform-track record.\n */\nfunction emitTransformTrack(tt, classes = {})\n{\n // Neither runtime transform consumers nor JSON can use Granny's non-finite\n // controls. Preserve each channel's meaning with Granny's corresponding\n // identity rather than the scalar zero used for untyped data. Knot times\n // remain on the strict finite-zero projection path above.\n return build(classes, \"TransformTrack\", {\n name: tt.Name ?? \"\",\n flags: tt.Flags | 0,\n orientation: emitCurve(tt.OrientationCurve, classes, [ 0, 0, 0, 1 ]),\n position: emitCurve(tt.PositionCurve, classes, [ 0, 0, 0 ]),\n scaleShear: emitCurve(tt.ScaleShearCurve, classes, [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ])\n });\n}\n\n/**\n * Project a reflected Granny vector track.\n *\n * @param {object} vt Reflected Granny vector-track object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted vector-track record.\n */\nfunction emitVectorTrack(vt, classes = {})\n{\n return build(classes, \"VectorTrack\", {\n name: vt.Name ?? \"\",\n dimension: vt.Dimension | 0,\n valueCurve: emitCurve(vt.ValueCurve, classes)\n });\n}\n\n/**\n * Project a reflected Granny track group.\n *\n * @param {object} tg Reflected Granny track-group object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted track-group record.\n */\nfunction emitTrackGroup(tg, classes = {})\n{\n return build(classes, \"TrackGroup\", {\n name: tg.Name ?? \"\",\n transformTracks: (tg.TransformTracks || []).map(tt => emitTransformTrack(tt, classes)),\n vectorTracks: (tg.VectorTracks || []).map(vt => emitVectorTrack(vt, classes))\n });\n}\n\n/**\n * Project a reflected Granny animation.\n *\n * @param {object} anim Reflected Granny animation object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted animation record.\n */\nfunction emitAnimation(anim, classes = {})\n{\n const o = {};\n o.name = anim.Name ?? \"\";\n o.duration = sf(fr(anim.Duration));\n o.timeStep = sf(fr(anim.TimeStep));\n o.oversampling = sf(fr(anim.Oversampling));\n o.defaultLoopCount = anim.DefaultLoopCount | 0;\n o.flags = anim.Flags | 0;\n o.trackGroups = (anim.TrackGroups || []).filter(t => t).map(tg => emitTrackGroup(tg, classes));\n addExtendedData(o, anim.ExtendedData);\n return build(classes, \"Animation\", o);\n}\n\n/**\n * Convert a reflected `granny_file_info` graph into the shared GR2 projection.\n *\n * The key order and numeric conversion rules are stable so downstream tools can\n * compare emitted data.\n *\n * When `options.classes` is given, matching node types are instantiated and\n * populated as class instances instead of plain object literals; an opt-in\n * alternative to walking the returned projection into application-specific\n * classes by hand. See {@link CLASS_KEYS} for the recognized keys.\n *\n * @param {object} fileInfo Reflected `granny_file_info` object from `reader.js`.\n * @param {number} version Granny file format revision.\n * @param {object} [options] Emission options.\n * @param {Gr2NodeClasses} [options.classes] Opt-in node class map.\n * @returns {Gr2SharedRoot} Plain shared projection, or a\n * populated `classes.Root` instance when provided.\n */\nexport function projectShared(fileInfo, version, options = {})\n{\n const { classes = {}, rebuildMissingBounds = false, ...hydrationOptions } = options;\n const skeletonCache = new WeakMap();\n return build(classes, \"Root\", {\n grannyFileFormatRevision: version | 0,\n grannyFileSource: fileInfo.FromFileName ?? \"\",\n meshes: (fileInfo.Meshes || []).filter(m => m).map(m => emitMesh(m, classes, rebuildMissingBounds)),\n models: (fileInfo.Models || []).filter(m => m).map(m => emitModel(m, fileInfo, classes, skeletonCache)),\n animations: (fileInfo.Animations || []).filter(a => a).map(a => emitAnimation(a, classes))\n }, hydrationOptions);\n}\n"],"names":["fr","Math","fround","MEMBER_TYPES","Object","freeze","Real32","Int8","UInt8","BinormalInt8","NormalUInt8","Int16","UInt16","BinormalInt16","NormalUInt16","Int32","UInt32","Real16","T","INV255_VALUE","INV65535_VALUE","INV127_VALUE","INV32767_VALUE","INV255","INV65535","INV127","INV32767","CLASS_KEYS","build","classes","key","props","hydrationOptions","Ctor","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","convert","v","memberType","sf","Number","isFinite","copyChannel","vertices","memberName","destWidth","preserveWidth","type","__type","m","find","x","name","srcWidth","arrayWidth","width","n","min","out","Array","length","fill","i","raw","arr","isArray","base","k","VERTEX_CHANNELS","emitVertexChannels","channels","scalarArray","a","keys","map","CURVE_FORMATS","DaKeyframes32f","DaK32fC32f","DaIdentity","DaConstant32f","D3Constant32f","D4Constant32f","DaK16uC16u","DaK8uC8u","D4nK16uC15u","D4nK8uC7u","D3K16uC16u","D3K8uC8u","D9I1K16uC16u","D9I3K16uC16u","D9I1K8uC8u","D9I3K8uC8u","D3I1K32fC32f","D3I1K16uC16u","D3I1K8uC8u","F","curveHeader","cd","startsWith","farr","fallback","index","value","uarr","emitCurve","curve2","controlFallback","CurveData","format","degree","error","h","Format","Degree","o","dimension","Dimension","controls","Controls","slice","knots","Knots","oneOverKnotScaleTrunc","OneOverKnotScaleTrunc","controlScaleOffsets","ControlScaleOffsets","knotsControls","KnotsControls","scaleOffsetTableEntries","ScaleOffsetTableEntries","oneOverKnotScale","OneOverKnotScale","controlScales","ControlScales","controlOffsets","ControlOffsets","ControlScale","ControlOffset","emitVariant","undefined","isInteger","addExtendedData","target","ext","extendedData","emitMorphTarget","mt","vd","VertexData","verts","Vertices","ScalarName","dataIsDeltas","DataIsDeltas","vertex","mappedAnnotationRows","set","vertexCount","annotations","VertexAnnotations","VertexAnnotationIndices","rows","vertexIndices","IndicesMapFromVertexToAnnotation","vertexIndex","annotationIndex","push","count","defineProperty","configurable","identity","every","emitVertexAnnotationTarget","mapped","Name","emitMesh","mesh","rebuildMissingBounds","minBounds","maxBounds","boneBindings","BoneBindings","bb","BoneName","OBBMin","OBBMax","PrimaryVertexData","morphTargets","MorphTargets","VertexAnnotationSets","filter","Boolean","topo","PrimaryTopology","i32arr","Indices","i16arr","Indices16","groups","Groups","indices","bpi","meshBounds","g","faces","TriCount","start","TriFirst","group","MaterialIndex","bytesPerIndex","bounds","boundsFromFaces","position","max","positions","Infinity","emitBone","bone","t","LocalTransform","Transform","flags","orientation","scaleShear","parentIndex","ParentIndex","flag","ExtendedData","emitSkeleton","skel","bones","Bones","b","emitModel","model","fileInfo","skeletonCache","WeakMap","Skeleton","has","skeleton","get","meshes","Meshes","meshBindings","MeshBindings","mb","idx","indexOf","Mesh","emitTransformTrack","tt","Flags","OrientationCurve","PositionCurve","ScaleShearCurve","emitVectorTrack","vt","valueCurve","ValueCurve","emitTrackGroup","tg","transformTracks","TransformTracks","vectorTracks","VectorTracks","emitAnimation","anim","duration","Duration","timeStep","TimeStep","oversampling","Oversampling","defaultLoopCount","DefaultLoopCount","trackGroups","TrackGroups","projectShared","version","options","grannyFileFormatRevision","grannyFileSource","FromFileName","models","Models","animations","Animations"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shared.js","sources":["../../../../../../src/resource/formats/gr2/core/shared.js"],"sourcesContent":["/**\r\n * GR2 shared projection.\r\n * @author cppctamber\r\n * `projectShared(fileInfo, version)` returns the normalized plain-object graph\r\n * consumed independently by GR2 JSON and CMF output.\r\n * Normalized integer values are dequantized with float32 reciprocals, Real16\r\n * values are already converted by reader.js, and non-finite floats use zero\r\n * except for typed transform components, which use the corresponding Granny\r\n * identity value.\r\n */\r\n\r\nconst fr = Math.fround;\r\n\r\n/**\r\n * Member type ids whose numeric values need conversion for the shared output.\r\n */\r\nconst MEMBER_TYPES = Object.freeze({\r\n Real32: 10, Int8: 11, UInt8: 12, BinormalInt8: 13, NormalUInt8: 14,\r\n Int16: 15, UInt16: 16, BinormalInt16: 17, NormalUInt16: 18,\r\n Int32: 19, UInt32: 20, Real16: 21\r\n});\r\nconst T = MEMBER_TYPES;\r\n\r\n/** Float32 reciprocal used to dequantize NormalUInt8 values. */\r\nconst INV255_VALUE = fr(1 / 255);\r\n\r\n/** Float32 reciprocal used to dequantize NormalUInt16 values. */\r\nconst INV65535_VALUE = fr(1 / 65535);\r\n\r\n/** Float32 reciprocal used to dequantize BinormalInt8 values. */\r\nconst INV127_VALUE = fr(1 / 127);\r\n\r\n/** Float32 reciprocal used to dequantize BinormalInt16 values. */\r\nconst INV32767_VALUE = fr(1 / 32767);\r\n\r\nconst\r\n INV255 = INV255_VALUE,\r\n INV65535 = INV65535_VALUE,\r\n INV127 = INV127_VALUE,\r\n INV32767 = INV32767_VALUE;\r\n\r\n/**\r\n * Node keys accepted by {@link projectShared}'s `options.classes` map.\r\n *\r\n * Each key names one shared projection node shape; the mapped constructor is\r\n * instantiated with `new` and populated with that node's usual fields instead\r\n * of a plain object literal.\r\n */\r\nexport const CLASS_KEYS = Object.freeze([\r\n \"Root\", \"Mesh\", \"BoneBinding\", \"IndexGroup\", \"MorphTarget\", \"Model\",\r\n \"Skeleton\", \"Bone\", \"Animation\", \"TrackGroup\", \"TransformTrack\", \"VectorTrack\", \"Curve\"\r\n]);\r\n\r\n/**\r\n * Constructors used to hydrate shared projection nodes as class instances.\r\n *\r\n * Every key is optional; node types with no matching constructor keep the\r\n * default plain-object shape. See {@link CLASS_KEYS} for valid keys.\r\n *\r\n * @typedef {{[key: string]: new () => object}} Gr2NodeClasses\r\n */\r\n\r\n/**\r\n * Instantiate and populate a node class, or return the plain props unchanged.\r\n *\r\n * @param {Gr2NodeClasses} classes Opt-in node class map.\r\n * @param {string} key Node key to look up in `classes`.\r\n * @param {object} props Fields to populate onto the instance.\r\n * @returns {object} A populated class instance, or `props` when no\r\n * constructor is registered for `key`.\r\n */\r\nfunction build(classes, key, props, hydrationOptions = {})\r\n{\r\n const Ctor = classes[key];\r\n return Ctor ? populate(new Ctor(), props, hydrationOptions) : props;\r\n}\r\n\r\nfunction populate(instance, props, hydrationOptions = {})\r\n{\r\n if (!instance || typeof instance.SetValues !== \"function\")\r\n {\r\n throw new TypeError(\"CjsGr2Format class population requires classes to implement SetValues(values)\");\r\n }\r\n instance.SetValues(props, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\r\n return instance;\r\n}\r\n\r\n/**\r\n * Root object emitted in the shared GR2 shape.\r\n *\r\n * @typedef {object} Gr2SharedRoot\r\n * @property {number} grannyFileFormatRevision Granny file format revision.\r\n * @property {string} grannyFileSource Original source filename, or an empty string.\r\n * @property {object[]} meshes Mesh records with deinterleaved vertex channels.\r\n * @property {object[]} models Model records with skeleton and mesh bindings.\r\n * @property {object[]} animations Animation records and transform tracks.\r\n */\r\n\r\n/**\r\n * Convert a reflected numeric value to the shared float convention.\r\n *\r\n * @param {number} v Raw reflected numeric value.\r\n * @param {number} memberType Granny member type id.\r\n * @returns {number} Converted and float32-rounded value.\r\n */\r\nfunction convert(v, memberType)\r\n{\r\n switch (memberType)\r\n {\r\n case T.NormalUInt8:\r\n return fr(v * INV255);\r\n\r\n case T.NormalUInt16:\r\n return fr(v * INV65535);\r\n\r\n case T.BinormalInt8:\r\n return fr(v * INV127);\r\n\r\n case T.BinormalInt16:\r\n return fr(v * INV32767);\r\n\r\n default:\r\n return fr(v);\r\n }\r\n}\r\n\r\n/**\r\n * Replace non-finite untyped numbers with zero.\r\n *\r\n * @param {number} v Candidate numeric value.\r\n * @returns {number} The original finite value, or zero.\r\n */\r\nfunction sf(v) { return Number.isFinite(v) ? v : 0; }\r\n\r\n/**\r\n * Copy and dequantize one vertex channel from reflected vertex objects.\r\n *\r\n * Missing Granny members return an empty channel.\r\n *\r\n * @param {object[]} vertices Reflected vertex array with non-enumerable type metadata.\r\n * @param {string} memberName Granny vertex member name to copy.\r\n * @param {number} destWidth Number of components in the emitted channel.\r\n * @param {boolean} [preserveWidth] Retain an authored three- or four-component width.\r\n * @returns {number[]} Flat deinterleaved channel values.\r\n */\r\nfunction copyChannel(vertices, memberName, destWidth, preserveWidth = false)\r\n{\r\n const\r\n type = vertices.__type || [],\r\n m = type.find(x => x.name === memberName);\r\n if (!m) return [];\r\n const\r\n srcWidth = m.arrayWidth > 1 ? m.arrayWidth : 1,\r\n width = preserveWidth && (srcWidth === 3 || srcWidth === 4) ? srcWidth : destWidth,\r\n n = Math.min(srcWidth, width),\r\n out = new Array(vertices.length * width).fill(0);\r\n for (let i = 0; i < vertices.length; i++)\r\n {\r\n const\r\n raw = vertices[i][memberName],\r\n arr = Array.isArray(raw) ? raw : [ raw ],\r\n base = i * width;\r\n for (let k = 0; k < n; k++)\r\n {\r\n out[base + k] = sf(convert(arr[k], m.type));\r\n }\r\n }\r\n return out;\r\n}\r\n\r\nconst VERTEX_CHANNELS = Object.freeze([\r\n [ \"position\", \"Position\", 3, true ],\r\n [ \"blendIndice\", \"BoneIndices\", 4 ],\r\n [ \"tangent\", \"Tangent\", 4, true ],\r\n [ \"normal\", \"Normal\", 3 ],\r\n [ \"texcoord0\", \"TextureCoordinates0\", 2, true ],\r\n [ \"texcoord1\", \"TextureCoordinates1\", 2, true ],\r\n [ \"binormal\", \"Binormal\", 4, true ],\r\n [ \"blendWeight\", \"BoneWeights\", 4 ]\r\n]);\r\n\r\nfunction emitVertexChannels(vertices)\r\n{\r\n const channels = {};\r\n for (const [ name, memberName, width, preserveWidth ] of VERTEX_CHANNELS)\r\n {\r\n channels[name] = copyChannel(vertices, memberName, width, preserveWidth);\r\n }\r\n return channels;\r\n}\r\n\r\n/**\r\n * Flatten reflected scalar-array wrappers into plain JavaScript values.\r\n *\r\n * @param {ArrayLike<any>} a Reflected scalar array or already-flat array.\r\n * @returns {any[]} Plain scalar values.\r\n */\r\nfunction scalarArray(a)\r\n{\r\n if (!a || !a.length) return [];\r\n if (typeof a[0] === \"object\" && a[0] !== null)\r\n {\r\n const k = Object.keys(a[0])[0];\r\n return a.map(x => x[k]);\r\n }\r\n return a;\r\n}\r\n\r\n/**\r\n * Granny curve format ids emitted by the shared curve projector.\r\n */\r\nconst CURVE_FORMATS = Object.freeze({\r\n DaKeyframes32f: 0, DaK32fC32f: 1, DaIdentity: 2, DaConstant32f: 3,\r\n D3Constant32f: 4, D4Constant32f: 5, DaK16uC16u: 6, DaK8uC8u: 7,\r\n D4nK16uC15u: 8, D4nK8uC7u: 9, D3K16uC16u: 10, D3K8uC8u: 11,\r\n D9I1K16uC16u: 12, D9I3K16uC16u: 13, D9I1K8uC8u: 14, D9I3K8uC8u: 15,\r\n D3I1K32fC32f: 16, D3I1K16uC16u: 17, D3I1K8uC8u: 18\r\n});\r\nconst F = CURVE_FORMATS;\r\n\r\n/**\r\n * Locate the inline curve-data header inside a reflected curve-data object.\r\n *\r\n * @param {object} cd Reflected Granny curve-data object.\r\n * @returns {{Format: number, Degree: number}|null} Header object when present.\r\n */\r\nfunction curveHeader(cd)\r\n{\r\n for (const k of Object.keys(cd))\r\n {\r\n if (k.startsWith(\"CurveDataHeader\")) return cd[k];\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Convert a reflected scalar array to float32-rounded finite numbers.\r\n *\r\n * @param {ArrayLike<any>} a Reflected scalar array.\r\n * @param {number[]} [fallback] Semantic values used cyclically for non-finite\r\n * components; defaults to zero for untyped data.\r\n * @returns {number[]} Float array.\r\n */\r\nfunction farr(a, fallback = null)\r\n{\r\n return scalarArray(a).map((x, index) =>\r\n {\r\n const value = fr(x);\r\n return Number.isFinite(value)\r\n ? value\r\n : fallback?.[index % fallback.length] ?? 0;\r\n });\r\n}\r\n\r\n/**\r\n * Convert a reflected scalar array to unsigned 32-bit integer values.\r\n *\r\n * @param {ArrayLike<any>} a Reflected scalar array.\r\n * @returns {number[]} Unsigned integer array.\r\n */\r\nfunction uarr(a) { return scalarArray(a).map(x => x >>> 0); }\r\n\r\n/**\r\n * Project one Granny Curve2 object into shared form.\r\n *\r\n * @param {object} curve2 Reflected Granny curve object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Compact curve record with format-specific fields.\r\n */\r\nfunction emitCurve(curve2, classes = {}, controlFallback = [ 0 ])\r\n{\r\n const cd = curve2 && curve2.CurveData;\r\n if (!cd) return build(classes, \"Curve\", { format: 0, degree: 0, error: \"no curve data\" });\r\n const\r\n h = curveHeader(cd) || { Format: 0, Degree: 0 },\r\n format = h.Format,\r\n degree = h.Degree,\r\n o = { format, degree };\r\n switch (format)\r\n {\r\n case F.DaIdentity:\r\n break;\r\n\r\n case F.DaKeyframes32f:\r\n o.dimension = cd.Dimension;\r\n o.controls = farr(cd.Controls, controlFallback);\r\n break;\r\n\r\n case F.DaConstant32f:\r\n o.controls = farr(cd.Controls, controlFallback);\r\n break;\r\n\r\n case F.D3Constant32f:\r\n o.controls = farr((cd.Controls || [ 0, 0, 0 ]).slice(0, 3), controlFallback);\r\n break;\r\n\r\n case F.D4Constant32f:\r\n o.controls = farr((cd.Controls || [ 0, 0, 0, 1 ]).slice(0, 4), controlFallback);\r\n break;\r\n\r\n case F.DaK32fC32f:\r\n o.knots = farr(cd.Knots);\r\n o.controls = farr(cd.Controls, controlFallback);\r\n break;\r\n\r\n case F.DaK16uC16u:\r\n case F.DaK8uC8u:\r\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\r\n o.controlScaleOffsets = farr(cd.ControlScaleOffsets);\r\n o.knotsControls = uarr(cd.KnotsControls);\r\n break;\r\n\r\n case F.D4nK16uC15u:\r\n case F.D4nK8uC7u:\r\n o.scaleOffsetTableEntries = cd.ScaleOffsetTableEntries;\r\n o.oneOverKnotScale = sf(fr(cd.OneOverKnotScale));\r\n o.knotsControls = uarr(cd.KnotsControls);\r\n break;\r\n\r\n case F.D3K16uC16u:\r\n case F.D3K8uC8u:\r\n case F.D3I1K16uC16u:\r\n case F.D3I1K8uC8u:\r\n case F.D9I3K16uC16u:\r\n case F.D9I3K8uC8u:\r\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\r\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\r\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\r\n o.knotsControls = uarr(cd.KnotsControls);\r\n break;\r\n\r\n case F.D3I1K32fC32f:\r\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\r\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\r\n o.knotsControls = farr(cd.KnotsControls);\r\n break;\r\n\r\n case F.D9I1K16uC16u:\r\n case F.D9I1K8uC8u:\r\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\r\n o.controlScales = [ sf(fr(cd.ControlScale)) ];\r\n o.controlOffsets = [ sf(fr(cd.ControlOffset)) ];\r\n o.knotsControls = uarr(cd.KnotsControls);\r\n break;\r\n\r\n default:\r\n o.error = `Unknown format ${format}`;\r\n }\r\n return build(classes, \"Curve\", o);\r\n}\r\n\r\n/**\r\n * Convert arbitrary reflected variant data to JSON-safe plain values.\r\n *\r\n * @param {any} v Reflected variant value.\r\n * @returns {JsonValue} JSON-compatible value.\r\n */\r\nfunction emitVariant(v)\r\n{\r\n if (v === null || v === undefined) return null;\r\n if (Array.isArray(v)) return v.map(emitVariant);\r\n if (typeof v === \"object\")\r\n {\r\n const o = {};\r\n for (const k of Object.keys(v))\r\n {\r\n o[k] = emitVariant(v[k]);\r\n }\r\n return o;\r\n }\r\n if (typeof v === \"number\") return Number.isInteger(v) ? v : sf(fr(v));\r\n return v;\r\n}\r\n\r\n/**\r\n * Attach converted extended data when the reflected variant is present.\r\n *\r\n * @param {object} target Projected GR2 object to mutate.\r\n * @param {object|null|undefined} ext Reflected extended-data variant.\r\n * @returns {void}\r\n */\r\nfunction addExtendedData(target, ext)\r\n{\r\n if (ext !== null && ext !== undefined && typeof ext === \"object\")\r\n {\r\n target.extendedData = emitVariant(ext);\r\n }\r\n}\r\n\r\n/**\r\n * Project one reflected Granny morph target (blend shape).\r\n *\r\n * Morph target vertex data uses the same deinterleaved channel layout as a\r\n * mesh's primary vertex data.\r\n *\r\n * @param {object} mt Reflected Granny `granny_morph_target` object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Emitted morph-target record.\r\n */\r\nfunction emitMorphTarget(mt, classes = {})\r\n{\r\n const\r\n vd = mt.VertexData,\r\n verts = (vd && vd.Vertices) || [];\r\n return build(classes, \"MorphTarget\", {\r\n name: mt.ScalarName ?? \"\",\r\n dataIsDeltas: !!mt.DataIsDeltas,\r\n vertex: emitVertexChannels(verts)\r\n });\r\n}\r\n\r\nfunction mappedAnnotationRows(set, vertexCount)\r\n{\r\n const\r\n annotations = set.VertexAnnotations || [],\r\n map = scalarArray(set.VertexAnnotationIndices),\r\n rows = [],\r\n vertexIndices = [];\r\n\r\n if (set.IndicesMapFromVertexToAnnotation)\r\n {\r\n for (let vertexIndex = 0; vertexIndex < Math.min(map.length, vertexCount); vertexIndex++)\r\n {\r\n const annotationIndex = map[vertexIndex];\r\n if (!Number.isInteger(annotationIndex) || annotationIndex < 0 || annotationIndex >= annotations.length) continue;\r\n rows.push(annotations[annotationIndex]);\r\n vertexIndices.push(vertexIndex);\r\n }\r\n }\r\n else\r\n {\r\n const count = map.length ? Math.min(map.length, annotations.length) : annotations.length;\r\n for (let annotationIndex = 0; annotationIndex < count; annotationIndex++)\r\n {\r\n const vertexIndex = map.length ? map[annotationIndex] : annotationIndex;\r\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\r\n rows.push(annotations[annotationIndex]);\r\n vertexIndices.push(vertexIndex);\r\n }\r\n }\r\n\r\n Object.defineProperty(rows, \"__type\", {\r\n value: annotations.__type || [],\r\n configurable: true\r\n });\r\n\r\n const identity = rows.length === vertexCount && vertexIndices.every((value, index) => value === index);\r\n return { rows, vertexIndices: identity ? null : vertexIndices };\r\n}\r\n\r\nfunction emitVertexAnnotationTarget(set, vertexCount, classes = {})\r\n{\r\n if (!set || !set.VertexAnnotations?.length) return null;\r\n\r\n const mapped = mappedAnnotationRows(set, vertexCount);\r\n if (!mapped.rows.length) return null;\r\n\r\n const target = {\r\n name: set.Name ?? \"\",\r\n dataIsDeltas: true,\r\n vertex: emitVertexChannels(mapped.rows)\r\n };\r\n if (mapped.vertexIndices) target.vertexIndices = mapped.vertexIndices;\r\n return build(classes, \"MorphTarget\", target);\r\n}\r\n\r\n/**\r\n * Project a reflected Granny mesh.\r\n *\r\n * @param {object} mesh Reflected Granny mesh object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Emitted mesh record.\r\n */\r\nfunction emitMesh(mesh, classes = {}, rebuildMissingBounds = false)\r\n{\r\n const o = {};\r\n o.name = mesh.Name ?? \"\";\r\n // Granny files carry no mesh-level AABB (only per-bone OBBs), so these\r\n // stay zeros unless the caller opts into `rebuildMissingBounds` -\r\n // then real bounds are computed from the position channel below, per\r\n // group and for the mesh. Zeros starved every consumer that treats\r\n // bounds as load-bearing: ccpwgl's logical LOD size-culled every\r\n // gr2-sourced mesh to nothing the day its visibility gate armed. The\r\n // old gr2_json path always regenerated from vertices; here it is an\r\n // option because it walks every referenced vertex once per group.\r\n o.minBounds = [ 0, 0, 0 ];\r\n o.maxBounds = [ 0, 0, 0 ];\r\n\r\n o.boneBindings = (mesh.BoneBindings || []).map(bb => build(classes, \"BoneBinding\", {\r\n name: bb.BoneName ?? \"\",\r\n minBounds: (bb.OBBMin || [ 0, 0, 0 ]).map(x => sf(fr(x))),\r\n maxBounds: (bb.OBBMax || [ 0, 0, 0 ]).map(x => sf(fr(x)))\r\n }));\r\n\r\n const\r\n vd = mesh.PrimaryVertexData,\r\n verts = (vd && vd.Vertices) || [];\r\n o.vertex = emitVertexChannels(verts);\r\n // Traffic instance meshes store path IDs in Position.w and animation\r\n // controls in four-wide texture coordinates. Preserve the authored stream\r\n // width; its vertex count cannot be inferred by dividing positions by three.\r\n if (verts.length && o.vertex.position.length !== verts.length * 3) o.vertexCount = verts.length;\r\n o.morphTargets = (mesh.MorphTargets || []).map(mt => emitMorphTarget(mt, classes));\r\n o.morphTargets.push(...(vd?.VertexAnnotationSets || [])\r\n .map(set => emitVertexAnnotationTarget(set, verts.length, classes))\r\n .filter(Boolean));\r\n\r\n const\r\n topo = mesh.PrimaryTopology || {},\r\n i32arr = scalarArray(topo.Indices),\r\n i16arr = scalarArray(topo.Indices16),\r\n groups = topo.Groups || [];\r\n o.indices = [];\r\n let indices = null, bpi = 0, meshBounds = null;\r\n if (i32arr.length) { indices = i32arr; bpi = 4; }\r\n else if (i16arr.length) { indices = i16arr.map(x => x & 0xffff); bpi = 2; }\r\n if (indices)\r\n {\r\n for (const g of groups)\r\n {\r\n const\r\n faces = new Array(g.TriCount * 3),\r\n start = g.TriFirst * 3;\r\n for (let i = 0; i < g.TriCount * 3; i++)\r\n {\r\n faces[i] = indices[start + i] >>> 0;\r\n }\r\n const group = {\r\n name: `area_${g.MaterialIndex}`,\r\n bytesPerIndex: bpi,\r\n faces\r\n };\r\n if (rebuildMissingBounds)\r\n {\r\n const bounds = boundsFromFaces(o.vertex.position, faces, o.vertex.position.length / verts.length);\r\n if (bounds)\r\n {\r\n group.minBounds = bounds.min;\r\n group.maxBounds = bounds.max;\r\n if (!meshBounds)\r\n {\r\n meshBounds = { min: [ ...bounds.min ], max: [ ...bounds.max ] };\r\n }\r\n else\r\n {\r\n for (let k = 0; k < 3; k++)\r\n {\r\n if (bounds.min[k] < meshBounds.min[k]) meshBounds.min[k] = bounds.min[k];\r\n if (bounds.max[k] > meshBounds.max[k]) meshBounds.max[k] = bounds.max[k];\r\n }\r\n }\r\n }\r\n }\r\n o.indices.push(build(classes, \"IndexGroup\", group));\r\n }\r\n }\r\n if (meshBounds)\r\n {\r\n o.minBounds = meshBounds.min;\r\n o.maxBounds = meshBounds.max;\r\n }\r\n return build(classes, \"Mesh\", o);\r\n}\r\n\r\n/**\r\n * Axis-aligned bounds of the positions a face list references.\r\n *\r\n * @param {number[]} positions Flat xyz position channel.\r\n * @param {number[]} faces Vertex indices.\r\n * @returns {{min: number[], max: number[]}|null} Bounds, or null without data.\r\n */\r\nfunction boundsFromFaces(positions, faces, width = 3)\r\n{\r\n if (!positions || !positions.length || !faces.length) return null;\r\n const\r\n min = [ Infinity, Infinity, Infinity ],\r\n max = [ -Infinity, -Infinity, -Infinity ];\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n const base = faces[i] * width;\r\n for (let k = 0; k < 3; k++)\r\n {\r\n const v = positions[base + k];\r\n if (v < min[k]) min[k] = v;\r\n if (v > max[k]) max[k] = v;\r\n }\r\n }\r\n return Number.isFinite(min[0]) ? { min, max } : null;\r\n}\r\n\r\n\r\n/**\r\n * Project a reflected Granny skeleton bone.\r\n *\r\n * @param {object} bone Reflected Granny bone object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Emitted bone record.\r\n */\r\nfunction emitBone(bone, classes = {})\r\n{\r\n const\r\n t = bone.LocalTransform || bone.Transform ||\r\n { flags: 0, position: [ 0, 0, 0 ], orientation: [ 0, 0, 0, 1 ], scaleShear: [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ] },\r\n o = {};\r\n o.name = bone.Name ?? \"\";\r\n o.parentIndex = bone.ParentIndex | 0;\r\n o.flag = t.flags;\r\n if (t.flags & 1) o.position = farr(t.position, [ 0, 0, 0 ]);\r\n if (t.flags & 2) o.orientation = farr(t.orientation, [ 0, 0, 0, 1 ]);\r\n if (t.flags & 4) o.scaleShear = farr(t.scaleShear, [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]);\r\n addExtendedData(o, bone.ExtendedData);\r\n return build(classes, \"Bone\", o);\r\n}\r\n\r\n/**\r\n * Project a reflected Granny skeleton.\r\n *\r\n * @param {object|null} skel Reflected Granny skeleton object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Emitted skeleton record.\r\n */\r\nfunction emitSkeleton(skel, classes = {})\r\n{\r\n const o = {};\r\n o.name = skel ? (skel.Name ?? \"\") : \"\";\r\n o.bones = skel ? (skel.Bones || []).map(b => emitBone(b, classes)) : [];\r\n if (skel) addExtendedData(o, skel.ExtendedData);\r\n return build(classes, \"Skeleton\", o);\r\n}\r\n\r\n/**\r\n * Project a reflected Granny model.\r\n *\r\n * @param {object} model Reflected Granny model object.\r\n * @param {object} fileInfo Root reflected Granny file-info object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @param {WeakMap<object, object>} [skeletonCache] Emitted skeleton identity cache.\r\n * @returns {object} Emitted model record.\r\n */\r\nfunction emitModel(model, fileInfo, classes = {}, skeletonCache = new WeakMap())\r\n{\r\n const o = {};\r\n o.name = model.Name ?? \"\";\r\n if (model.Skeleton && skeletonCache.has(model.Skeleton))\r\n {\r\n o.skeleton = skeletonCache.get(model.Skeleton);\r\n }\r\n else\r\n {\r\n o.skeleton = emitSkeleton(model.Skeleton, classes);\r\n if (model.Skeleton) skeletonCache.set(model.Skeleton, o.skeleton);\r\n }\r\n const meshes = fileInfo.Meshes || [];\r\n o.meshBindings = (model.MeshBindings || []).map(mb =>\r\n {\r\n const idx = meshes.indexOf(mb && mb.Mesh);\r\n return idx;\r\n });\r\n addExtendedData(o, model.ExtendedData);\r\n return build(classes, \"Model\", o);\r\n}\r\n\r\n/**\r\n * Project a reflected Granny transform track.\r\n *\r\n * @param {object} tt Reflected Granny transform-track object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Emitted transform-track record.\r\n */\r\nfunction emitTransformTrack(tt, classes = {})\r\n{\r\n // Neither runtime transform consumers nor JSON can use Granny's non-finite\r\n // controls. Preserve each channel's meaning with Granny's corresponding\r\n // identity rather than the scalar zero used for untyped data. Knot times\r\n // remain on the strict finite-zero projection path above.\r\n return build(classes, \"TransformTrack\", {\r\n name: tt.Name ?? \"\",\r\n flags: tt.Flags | 0,\r\n orientation: emitCurve(tt.OrientationCurve, classes, [ 0, 0, 0, 1 ]),\r\n position: emitCurve(tt.PositionCurve, classes, [ 0, 0, 0 ]),\r\n scaleShear: emitCurve(tt.ScaleShearCurve, classes, [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ])\r\n });\r\n}\r\n\r\n/**\r\n * Project a reflected Granny vector track.\r\n *\r\n * @param {object} vt Reflected Granny vector-track object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Emitted vector-track record.\r\n */\r\nfunction emitVectorTrack(vt, classes = {})\r\n{\r\n return build(classes, \"VectorTrack\", {\r\n name: vt.Name ?? \"\",\r\n dimension: vt.Dimension | 0,\r\n valueCurve: emitCurve(vt.ValueCurve, classes)\r\n });\r\n}\r\n\r\n/**\r\n * Project a reflected Granny track group.\r\n *\r\n * @param {object} tg Reflected Granny track-group object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Emitted track-group record.\r\n */\r\nfunction emitTrackGroup(tg, classes = {})\r\n{\r\n return build(classes, \"TrackGroup\", {\r\n name: tg.Name ?? \"\",\r\n transformTracks: (tg.TransformTracks || []).map(tt => emitTransformTrack(tt, classes)),\r\n vectorTracks: (tg.VectorTracks || []).map(vt => emitVectorTrack(vt, classes))\r\n });\r\n}\r\n\r\n/**\r\n * Project a reflected Granny animation.\r\n *\r\n * @param {object} anim Reflected Granny animation object.\r\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\r\n * @returns {object} Emitted animation record.\r\n */\r\nfunction emitAnimation(anim, classes = {})\r\n{\r\n const o = {};\r\n o.name = anim.Name ?? \"\";\r\n o.duration = sf(fr(anim.Duration));\r\n o.timeStep = sf(fr(anim.TimeStep));\r\n o.oversampling = sf(fr(anim.Oversampling));\r\n o.defaultLoopCount = anim.DefaultLoopCount | 0;\r\n o.flags = anim.Flags | 0;\r\n o.trackGroups = (anim.TrackGroups || []).filter(t => t).map(tg => emitTrackGroup(tg, classes));\r\n addExtendedData(o, anim.ExtendedData);\r\n return build(classes, \"Animation\", o);\r\n}\r\n\r\n/**\r\n * Convert a reflected `granny_file_info` graph into the shared GR2 projection.\r\n *\r\n * The key order and numeric conversion rules are stable so downstream tools can\r\n * compare emitted data.\r\n *\r\n * When `options.classes` is given, matching node types are instantiated and\r\n * populated as class instances instead of plain object literals; an opt-in\r\n * alternative to walking the returned projection into application-specific\r\n * classes by hand. See {@link CLASS_KEYS} for the recognized keys.\r\n *\r\n * @param {object} fileInfo Reflected `granny_file_info` object from `reader.js`.\r\n * @param {number} version Granny file format revision.\r\n * @param {object} [options] Emission options.\r\n * @param {Gr2NodeClasses} [options.classes] Opt-in node class map.\r\n * @returns {Gr2SharedRoot} Plain shared projection, or a\r\n * populated `classes.Root` instance when provided.\r\n */\r\nexport function projectShared(fileInfo, version, options = {})\r\n{\r\n const { classes = {}, rebuildMissingBounds = false, ...hydrationOptions } = options;\r\n const skeletonCache = new WeakMap();\r\n return build(classes, \"Root\", {\r\n grannyFileFormatRevision: version | 0,\r\n grannyFileSource: fileInfo.FromFileName ?? \"\",\r\n meshes: (fileInfo.Meshes || []).filter(m => m).map(m => emitMesh(m, classes, rebuildMissingBounds)),\r\n models: (fileInfo.Models || []).filter(m => m).map(m => emitModel(m, fileInfo, classes, skeletonCache)),\r\n animations: (fileInfo.Animations || []).filter(a => a).map(a => emitAnimation(a, classes))\r\n }, hydrationOptions);\r\n}\r\n"],"names":["fr","Math","fround","MEMBER_TYPES","Object","freeze","Real32","Int8","UInt8","BinormalInt8","NormalUInt8","Int16","UInt16","BinormalInt16","NormalUInt16","Int32","UInt32","Real16","T","INV255_VALUE","INV65535_VALUE","INV127_VALUE","INV32767_VALUE","INV255","INV65535","INV127","INV32767","CLASS_KEYS","build","classes","key","props","hydrationOptions","Ctor","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","convert","v","memberType","sf","Number","isFinite","copyChannel","vertices","memberName","destWidth","preserveWidth","type","__type","m","find","x","name","srcWidth","arrayWidth","width","n","min","out","Array","length","fill","i","raw","arr","isArray","base","k","VERTEX_CHANNELS","emitVertexChannels","channels","scalarArray","a","keys","map","CURVE_FORMATS","DaKeyframes32f","DaK32fC32f","DaIdentity","DaConstant32f","D3Constant32f","D4Constant32f","DaK16uC16u","DaK8uC8u","D4nK16uC15u","D4nK8uC7u","D3K16uC16u","D3K8uC8u","D9I1K16uC16u","D9I3K16uC16u","D9I1K8uC8u","D9I3K8uC8u","D3I1K32fC32f","D3I1K16uC16u","D3I1K8uC8u","F","curveHeader","cd","startsWith","farr","fallback","index","value","uarr","emitCurve","curve2","controlFallback","CurveData","format","degree","error","h","Format","Degree","o","dimension","Dimension","controls","Controls","slice","knots","Knots","oneOverKnotScaleTrunc","OneOverKnotScaleTrunc","controlScaleOffsets","ControlScaleOffsets","knotsControls","KnotsControls","scaleOffsetTableEntries","ScaleOffsetTableEntries","oneOverKnotScale","OneOverKnotScale","controlScales","ControlScales","controlOffsets","ControlOffsets","ControlScale","ControlOffset","emitVariant","undefined","isInteger","addExtendedData","target","ext","extendedData","emitMorphTarget","mt","vd","VertexData","verts","Vertices","ScalarName","dataIsDeltas","DataIsDeltas","vertex","mappedAnnotationRows","set","vertexCount","annotations","VertexAnnotations","VertexAnnotationIndices","rows","vertexIndices","IndicesMapFromVertexToAnnotation","vertexIndex","annotationIndex","push","count","defineProperty","configurable","identity","every","emitVertexAnnotationTarget","mapped","Name","emitMesh","mesh","rebuildMissingBounds","minBounds","maxBounds","boneBindings","BoneBindings","bb","BoneName","OBBMin","OBBMax","PrimaryVertexData","position","morphTargets","MorphTargets","VertexAnnotationSets","filter","Boolean","topo","PrimaryTopology","i32arr","Indices","i16arr","Indices16","groups","Groups","indices","bpi","meshBounds","g","faces","TriCount","start","TriFirst","group","MaterialIndex","bytesPerIndex","bounds","boundsFromFaces","max","positions","Infinity","emitBone","bone","t","LocalTransform","Transform","flags","orientation","scaleShear","parentIndex","ParentIndex","flag","ExtendedData","emitSkeleton","skel","bones","Bones","b","emitModel","model","fileInfo","skeletonCache","WeakMap","Skeleton","has","skeleton","get","meshes","Meshes","meshBindings","MeshBindings","mb","idx","indexOf","Mesh","emitTransformTrack","tt","Flags","OrientationCurve","PositionCurve","ScaleShearCurve","emitVectorTrack","vt","valueCurve","ValueCurve","emitTrackGroup","tg","transformTracks","TransformTracks","vectorTracks","VectorTracks","emitAnimation","anim","duration","Duration","timeStep","TimeStep","oversampling","Oversampling","defaultLoopCount","DefaultLoopCount","trackGroups","TrackGroups","projectShared","version","options","grannyFileFormatRevision","grannyFileSource","FromFileName","models","Models","animations","Animations"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,EAAE,GAAGC,IAAI,CAACC,MAAM;;AAEtB;AACA;AACA;AACA,MAAMC,YAAY,GAAGC,MAAM,CAACC,MAAM,CAAC;AAC/BC,EAAAA,MAAM,EAAE,EAAE;AAAEC,EAAAA,IAAI,EAAE,EAAE;AAAEC,EAAAA,KAAK,EAAE,EAAE;AAAEC,EAAAA,YAAY,EAAE,EAAE;AAAEC,EAAAA,WAAW,EAAE,EAAE;AAClEC,EAAAA,KAAK,EAAE,EAAE;AAAEC,EAAAA,MAAM,EAAE,EAAE;AAAEC,EAAAA,aAAa,EAAE,EAAE;AAAEC,EAAAA,YAAY,EAAE,EAAE;AAC1DC,EAAAA,KAAK,EAAE,EAAE;AAAEC,EAAAA,MAAM,EAAE,EAAE;AAAEC,EAAAA,MAAM,EAAE;AACnC,CAAC,CAAC;AACF,MAAMC,CAAC,GAAGf,YAAY;;AAEtB;AACA,MAAMgB,YAAY,GAAGnB,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;;AAEhC;AACA,MAAMoB,cAAc,GAAGpB,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;;AAEpC;AACA,MAAMqB,YAAY,GAAGrB,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;;AAEhC;AACA,MAAMsB,cAAc,GAAGtB,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AAEpC,MACIuB,MAAM,GAAGJ,YAAY;AACrBK,EAAAA,QAAQ,GAAGJ,cAAc;AACzBK,EAAAA,MAAM,GAAGJ,YAAY;AACrBK,EAAAA,QAAQ,GAAGJ,cAAc;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMK,UAAU,GAAGvB,MAAM,CAACC,MAAM,CAAC,CACpC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EACnE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAC1F;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASuB,KAAKA,CAACC,OAAO,EAAEC,GAAG,EAAEC,KAAK,EAAEC,gBAAgB,GAAG,EAAE,EACzD;AACI,EAAA,MAAMC,IAAI,GAAGJ,OAAO,CAACC,GAAG,CAAC;AACzB,EAAA,OAAOG,IAAI,GAAGC,QAAQ,CAAC,IAAID,IAAI,EAAE,EAAEF,KAAK,EAAEC,gBAAgB,CAAC,GAAGD,KAAK;AACvE;AAEA,SAASG,QAAQA,CAACC,QAAQ,EAAEJ,KAAK,EAAEC,gBAAgB,GAAG,EAAE,EACxD;EACI,IAAI,CAACG,QAAQ,IAAI,OAAOA,QAAQ,CAACC,SAAS,KAAK,UAAU,EACzD;AACI,IAAA,MAAM,IAAIC,SAAS,CAAC,+EAA+E,CAAC;AACxG,EAAA;AACAF,EAAAA,QAAQ,CAACC,SAAS,CAACL,KAAK,EAAE;AAAE,IAAA,GAAGC,gBAAgB;AAAEM,IAAAA,UAAU,EAAE,IAAI;AAAEC,IAAAA,UAAU,EAAE;AAAK,GAAC,CAAC;AACtF,EAAA,OAAOJ,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASK,OAAOA,CAACC,CAAC,EAAEC,UAAU,EAC9B;AACI,EAAA,QAAQA,UAAU;IAEd,KAAKxB,CAAC,CAACR,WAAW;AACd,MAAA,OAAOV,EAAE,CAACyC,CAAC,GAAGlB,MAAM,CAAC;IAEzB,KAAKL,CAAC,CAACJ,YAAY;AACf,MAAA,OAAOd,EAAE,CAACyC,CAAC,GAAGjB,QAAQ,CAAC;IAE3B,KAAKN,CAAC,CAACT,YAAY;AACf,MAAA,OAAOT,EAAE,CAACyC,CAAC,GAAGhB,MAAM,CAAC;IAEzB,KAAKP,CAAC,CAACL,aAAa;AAChB,MAAA,OAAOb,EAAE,CAACyC,CAAC,GAAGf,QAAQ,CAAC;AAE3B,IAAA;MACI,OAAO1B,EAAE,CAACyC,CAAC,CAAC;AACpB;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,EAAEA,CAACF,CAAC,EAAE;EAAE,OAAOG,MAAM,CAACC,QAAQ,CAACJ,CAAC,CAAC,GAAGA,CAAC,GAAG,CAAC;AAAE;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASK,WAAWA,CAACC,QAAQ,EAAEC,UAAU,EAAEC,SAAS,EAAEC,aAAa,GAAG,KAAK,EAC3E;AACI,EAAA,MACIC,IAAI,GAAGJ,QAAQ,CAACK,MAAM,IAAI,EAAE;AAC5BC,IAAAA,CAAC,GAAGF,IAAI,CAACG,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,KAAKR,UAAU,CAAC;AAC7C,EAAA,IAAI,CAACK,CAAC,EAAE,OAAO,EAAE;AACjB,EAAA,MACII,QAAQ,GAAGJ,CAAC,CAACK,UAAU,GAAG,CAAC,GAAGL,CAAC,CAACK,UAAU,GAAG,CAAC;AAC9CC,IAAAA,KAAK,GAAGT,aAAa,KAAKO,QAAQ,KAAK,CAAC,IAAIA,QAAQ,KAAK,CAAC,CAAC,GAAGA,QAAQ,GAAGR,SAAS;IAClFW,CAAC,GAAG3D,IAAI,CAAC4D,GAAG,CAACJ,QAAQ,EAAEE,KAAK,CAAC;AAC7BG,IAAAA,GAAG,GAAG,IAAIC,KAAK,CAAChB,QAAQ,CAACiB,MAAM,GAAGL,KAAK,CAAC,CAACM,IAAI,CAAC,CAAC,CAAC;AACpD,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGnB,QAAQ,CAACiB,MAAM,EAAEE,CAAC,EAAE,EACxC;IACI,MACIC,GAAG,GAAGpB,QAAQ,CAACmB,CAAC,CAAC,CAAClB,UAAU,CAAC;AAC7BoB,MAAAA,GAAG,GAAGL,KAAK,CAACM,OAAO,CAACF,GAAG,CAAC,GAAGA,GAAG,GAAG,CAAEA,GAAG,CAAE;MACxCG,IAAI,GAAGJ,CAAC,GAAGP,KAAK;IACpB,KAAK,IAAIY,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,CAAC,EAAEW,CAAC,EAAE,EAC1B;AACIT,MAAAA,GAAG,CAACQ,IAAI,GAAGC,CAAC,CAAC,GAAG5B,EAAE,CAACH,OAAO,CAAC4B,GAAG,CAACG,CAAC,CAAC,EAAElB,CAAC,CAACF,IAAI,CAAC,CAAC;AAC/C,IAAA;AACJ,EAAA;AACA,EAAA,OAAOW,GAAG;AACd;AAEA,MAAMU,eAAe,GAAGpE,MAAM,CAACC,MAAM,CAAC,CAClC,CAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAE,EACnC,CAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAE,EACnC,CAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAE,EACjC,CAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAE,EACzB,CAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,EAAE,IAAI,CAAE,EAC/C,CAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,EAAE,IAAI,CAAE,EAC/C,CAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAE,EACnC,CAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAE,CACtC,CAAC;AAEF,SAASoE,kBAAkBA,CAAC1B,QAAQ,EACpC;EACI,MAAM2B,QAAQ,GAAG,EAAE;AACnB,EAAA,KAAK,MAAM,CAAElB,IAAI,EAAER,UAAU,EAAEW,KAAK,EAAET,aAAa,CAAE,IAAIsB,eAAe,EACxE;AACIE,IAAAA,QAAQ,CAAClB,IAAI,CAAC,GAAGV,WAAW,CAACC,QAAQ,EAAEC,UAAU,EAAEW,KAAK,EAAET,aAAa,CAAC;AAC5E,EAAA;AACA,EAAA,OAAOwB,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CAACC,CAAC,EACtB;EACI,IAAI,CAACA,CAAC,IAAI,CAACA,CAAC,CAACZ,MAAM,EAAE,OAAO,EAAE;AAC9B,EAAA,IAAI,OAAOY,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAC7C;AACI,IAAA,MAAML,CAAC,GAAGnE,MAAM,CAACyE,IAAI,CAACD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAOA,CAAC,CAACE,GAAG,CAACvB,CAAC,IAAIA,CAAC,CAACgB,CAAC,CAAC,CAAC;AAC3B,EAAA;AACA,EAAA,OAAOK,CAAC;AACZ;;AAEA;AACA;AACA;AACA,MAAMG,aAAa,GAAG3E,MAAM,CAACC,MAAM,CAAC;AAChC2E,EAAAA,cAAc,EAAE,CAAC;AAAEC,EAAAA,UAAU,EAAE,CAAC;AAAEC,EAAAA,UAAU,EAAE,CAAC;AAAEC,EAAAA,aAAa,EAAE,CAAC;AACjEC,EAAAA,aAAa,EAAE,CAAC;AAAEC,EAAAA,aAAa,EAAE,CAAC;AAAEC,EAAAA,UAAU,EAAE,CAAC;AAAEC,EAAAA,QAAQ,EAAE,CAAC;AAC9DC,EAAAA,WAAW,EAAE,CAAC;AAAEC,EAAAA,SAAS,EAAE,CAAC;AAAEC,EAAAA,UAAU,EAAE,EAAE;AAAEC,EAAAA,QAAQ,EAAE,EAAE;AAC1DC,EAAAA,YAAY,EAAE,EAAE;AAAEC,EAAAA,YAAY,EAAE,EAAE;AAAEC,EAAAA,UAAU,EAAE,EAAE;AAAEC,EAAAA,UAAU,EAAE,EAAE;AAClEC,EAAAA,YAAY,EAAE,EAAE;AAAEC,EAAAA,YAAY,EAAE,EAAE;AAAEC,EAAAA,UAAU,EAAE;AACpD,CAAC,CAAC;AACF,MAAMC,CAAC,GAAGpB,aAAa;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA,SAASqB,WAAWA,CAACC,EAAE,EACvB;EACI,KAAK,MAAM9B,CAAC,IAAInE,MAAM,CAACyE,IAAI,CAACwB,EAAE,CAAC,EAC/B;IACI,IAAI9B,CAAC,CAAC+B,UAAU,CAAC,iBAAiB,CAAC,EAAE,OAAOD,EAAE,CAAC9B,CAAC,CAAC;AACrD,EAAA;AACA,EAAA,OAAO,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASgC,IAAIA,CAAC3B,CAAC,EAAE4B,QAAQ,GAAG,IAAI,EAChC;EACI,OAAO7B,WAAW,CAACC,CAAC,CAAC,CAACE,GAAG,CAAC,CAACvB,CAAC,EAAEkD,KAAK,KACnC;AACI,IAAA,MAAMC,KAAK,GAAG1G,EAAE,CAACuD,CAAC,CAAC;AACnB,IAAA,OAAOX,MAAM,CAACC,QAAQ,CAAC6D,KAAK,CAAC,GACvBA,KAAK,GACLF,QAAQ,GAAGC,KAAK,GAAGD,QAAQ,CAACxC,MAAM,CAAC,IAAI,CAAC;AAClD,EAAA,CAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS2C,IAAIA,CAAC/B,CAAC,EAAE;AAAE,EAAA,OAAOD,WAAW,CAACC,CAAC,CAAC,CAACE,GAAG,CAACvB,CAAC,IAAIA,CAAC,KAAK,CAAC,CAAC;AAAE;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASqD,SAASA,CAACC,MAAM,EAAEhF,OAAO,GAAG,EAAE,EAAEiF,eAAe,GAAG,CAAE,CAAC,CAAE,EAChE;AACI,EAAA,MAAMT,EAAE,GAAGQ,MAAM,IAAIA,MAAM,CAACE,SAAS;EACrC,IAAI,CAACV,EAAE,EAAE,OAAOzE,KAAK,CAACC,OAAO,EAAE,OAAO,EAAE;AAAEmF,IAAAA,MAAM,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAC;AAAEC,IAAAA,KAAK,EAAE;AAAgB,GAAC,CAAC;AACzF,EAAA,MACIC,CAAC,GAAGf,WAAW,CAACC,EAAE,CAAC,IAAI;AAAEe,MAAAA,MAAM,EAAE,CAAC;AAAEC,MAAAA,MAAM,EAAE;KAAG;IAC/CL,MAAM,GAAGG,CAAC,CAACC,MAAM;IACjBH,MAAM,GAAGE,CAAC,CAACE,MAAM;AACjBC,IAAAA,CAAC,GAAG;MAAEN,MAAM;AAAEC,MAAAA;KAAQ;AAC1B,EAAA,QAAQD,MAAM;IAEV,KAAKb,CAAC,CAACjB,UAAU;AACb,MAAA;IAEJ,KAAKiB,CAAC,CAACnB,cAAc;AACjBsC,MAAAA,CAAC,CAACC,SAAS,GAAGlB,EAAE,CAACmB,SAAS;MAC1BF,CAAC,CAACG,QAAQ,GAAGlB,IAAI,CAACF,EAAE,CAACqB,QAAQ,EAAEZ,eAAe,CAAC;AAC/C,MAAA;IAEJ,KAAKX,CAAC,CAAChB,aAAa;MAChBmC,CAAC,CAACG,QAAQ,GAAGlB,IAAI,CAACF,EAAE,CAACqB,QAAQ,EAAEZ,eAAe,CAAC;AAC/C,MAAA;IAEJ,KAAKX,CAAC,CAACf,aAAa;MAChBkC,CAAC,CAACG,QAAQ,GAAGlB,IAAI,CAAC,CAACF,EAAE,CAACqB,QAAQ,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAEC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEb,eAAe,CAAC;AAC5E,MAAA;IAEJ,KAAKX,CAAC,CAACd,aAAa;AAChBiC,MAAAA,CAAC,CAACG,QAAQ,GAAGlB,IAAI,CAAC,CAACF,EAAE,CAACqB,QAAQ,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAEC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEb,eAAe,CAAC;AAC/E,MAAA;IAEJ,KAAKX,CAAC,CAAClB,UAAU;MACbqC,CAAC,CAACM,KAAK,GAAGrB,IAAI,CAACF,EAAE,CAACwB,KAAK,CAAC;MACxBP,CAAC,CAACG,QAAQ,GAAGlB,IAAI,CAACF,EAAE,CAACqB,QAAQ,EAAEZ,eAAe,CAAC;AAC/C,MAAA;IAEJ,KAAKX,CAAC,CAACb,UAAU;IACjB,KAAKa,CAAC,CAACZ,QAAQ;AACX+B,MAAAA,CAAC,CAACQ,qBAAqB,GAAGzB,EAAE,CAAC0B,qBAAqB;MAClDT,CAAC,CAACU,mBAAmB,GAAGzB,IAAI,CAACF,EAAE,CAAC4B,mBAAmB,CAAC;MACpDX,CAAC,CAACY,aAAa,GAAGvB,IAAI,CAACN,EAAE,CAAC8B,aAAa,CAAC;AACxC,MAAA;IAEJ,KAAKhC,CAAC,CAACX,WAAW;IAClB,KAAKW,CAAC,CAACV,SAAS;AACZ6B,MAAAA,CAAC,CAACc,uBAAuB,GAAG/B,EAAE,CAACgC,uBAAuB;MACtDf,CAAC,CAACgB,gBAAgB,GAAG3F,EAAE,CAAC3C,EAAE,CAACqG,EAAE,CAACkC,gBAAgB,CAAC,CAAC;MAChDjB,CAAC,CAACY,aAAa,GAAGvB,IAAI,CAACN,EAAE,CAAC8B,aAAa,CAAC;AACxC,MAAA;IAEJ,KAAKhC,CAAC,CAACT,UAAU;IACjB,KAAKS,CAAC,CAACR,QAAQ;IACf,KAAKQ,CAAC,CAACF,YAAY;IACnB,KAAKE,CAAC,CAACD,UAAU;IACjB,KAAKC,CAAC,CAACN,YAAY;IACnB,KAAKM,CAAC,CAACJ,UAAU;AACbuB,MAAAA,CAAC,CAACQ,qBAAqB,GAAGzB,EAAE,CAAC0B,qBAAqB;MAClDT,CAAC,CAACkB,aAAa,GAAG,CAACnC,EAAE,CAACoC,aAAa,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE3D,GAAG,CAACvB,CAAC,IAAIZ,EAAE,CAAC3C,EAAE,CAACuD,CAAC,CAAC,CAAC,CAAC;MACvE+D,CAAC,CAACoB,cAAc,GAAG,CAACrC,EAAE,CAACsC,cAAc,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE7D,GAAG,CAACvB,CAAC,IAAIZ,EAAE,CAAC3C,EAAE,CAACuD,CAAC,CAAC,CAAC,CAAC;MACzE+D,CAAC,CAACY,aAAa,GAAGvB,IAAI,CAACN,EAAE,CAAC8B,aAAa,CAAC;AACxC,MAAA;IAEJ,KAAKhC,CAAC,CAACH,YAAY;MACfsB,CAAC,CAACkB,aAAa,GAAG,CAACnC,EAAE,CAACoC,aAAa,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE3D,GAAG,CAACvB,CAAC,IAAIZ,EAAE,CAAC3C,EAAE,CAACuD,CAAC,CAAC,CAAC,CAAC;MACvE+D,CAAC,CAACoB,cAAc,GAAG,CAACrC,EAAE,CAACsC,cAAc,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE7D,GAAG,CAACvB,CAAC,IAAIZ,EAAE,CAAC3C,EAAE,CAACuD,CAAC,CAAC,CAAC,CAAC;MACzE+D,CAAC,CAACY,aAAa,GAAG3B,IAAI,CAACF,EAAE,CAAC8B,aAAa,CAAC;AACxC,MAAA;IAEJ,KAAKhC,CAAC,CAACP,YAAY;IACnB,KAAKO,CAAC,CAACL,UAAU;AACbwB,MAAAA,CAAC,CAACQ,qBAAqB,GAAGzB,EAAE,CAAC0B,qBAAqB;AAClDT,MAAAA,CAAC,CAACkB,aAAa,GAAG,CAAE7F,EAAE,CAAC3C,EAAE,CAACqG,EAAE,CAACuC,YAAY,CAAC,CAAC,CAAE;AAC7CtB,MAAAA,CAAC,CAACoB,cAAc,GAAG,CAAE/F,EAAE,CAAC3C,EAAE,CAACqG,EAAE,CAACwC,aAAa,CAAC,CAAC,CAAE;MAC/CvB,CAAC,CAACY,aAAa,GAAGvB,IAAI,CAACN,EAAE,CAAC8B,aAAa,CAAC;AACxC,MAAA;AAEJ,IAAA;AACIb,MAAAA,CAAC,CAACJ,KAAK,GAAG,CAAA,eAAA,EAAkBF,MAAM,CAAA,CAAE;AAC5C;AACA,EAAA,OAAOpF,KAAK,CAACC,OAAO,EAAE,OAAO,EAAEyF,CAAC,CAAC;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASwB,WAAWA,CAACrG,CAAC,EACtB;EACI,IAAIA,CAAC,KAAK,IAAI,IAAIA,CAAC,KAAKsG,SAAS,EAAE,OAAO,IAAI;AAC9C,EAAA,IAAIhF,KAAK,CAACM,OAAO,CAAC5B,CAAC,CAAC,EAAE,OAAOA,CAAC,CAACqC,GAAG,CAACgE,WAAW,CAAC;AAC/C,EAAA,IAAI,OAAOrG,CAAC,KAAK,QAAQ,EACzB;IACI,MAAM6E,CAAC,GAAG,EAAE;IACZ,KAAK,MAAM/C,CAAC,IAAInE,MAAM,CAACyE,IAAI,CAACpC,CAAC,CAAC,EAC9B;MACI6E,CAAC,CAAC/C,CAAC,CAAC,GAAGuE,WAAW,CAACrG,CAAC,CAAC8B,CAAC,CAAC,CAAC;AAC5B,IAAA;AACA,IAAA,OAAO+C,CAAC;AACZ,EAAA;EACA,IAAI,OAAO7E,CAAC,KAAK,QAAQ,EAAE,OAAOG,MAAM,CAACoG,SAAS,CAACvG,CAAC,CAAC,GAAGA,CAAC,GAAGE,EAAE,CAAC3C,EAAE,CAACyC,CAAC,CAAC,CAAC;AACrE,EAAA,OAAOA,CAAC;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASwG,eAAeA,CAACC,MAAM,EAAEC,GAAG,EACpC;AACI,EAAA,IAAIA,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAKJ,SAAS,IAAI,OAAOI,GAAG,KAAK,QAAQ,EAChE;AACID,IAAAA,MAAM,CAACE,YAAY,GAAGN,WAAW,CAACK,GAAG,CAAC;AAC1C,EAAA;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,eAAeA,CAACC,EAAE,EAAEzH,OAAO,GAAG,EAAE,EACzC;AACI,EAAA,MACI0H,EAAE,GAAGD,EAAE,CAACE,UAAU;AAClBC,IAAAA,KAAK,GAAIF,EAAE,IAAIA,EAAE,CAACG,QAAQ,IAAK,EAAE;AACrC,EAAA,OAAO9H,KAAK,CAACC,OAAO,EAAE,aAAa,EAAE;AACjC2B,IAAAA,IAAI,EAAE8F,EAAE,CAACK,UAAU,IAAI,EAAE;AACzBC,IAAAA,YAAY,EAAE,CAAC,CAACN,EAAE,CAACO,YAAY;IAC/BC,MAAM,EAAErF,kBAAkB,CAACgF,KAAK;AACpC,GAAC,CAAC;AACN;AAEA,SAASM,oBAAoBA,CAACC,GAAG,EAAEC,WAAW,EAC9C;AACI,EAAA,MACIC,WAAW,GAAGF,GAAG,CAACG,iBAAiB,IAAI,EAAE;AACzCrF,IAAAA,GAAG,GAAGH,WAAW,CAACqF,GAAG,CAACI,uBAAuB,CAAC;AAC9CC,IAAAA,IAAI,GAAG,EAAE;AACTC,IAAAA,aAAa,GAAG,EAAE;EAEtB,IAAIN,GAAG,CAACO,gCAAgC,EACxC;IACI,KAAK,IAAIC,WAAW,GAAG,CAAC,EAAEA,WAAW,GAAGvK,IAAI,CAAC4D,GAAG,CAACiB,GAAG,CAACd,MAAM,EAAEiG,WAAW,CAAC,EAAEO,WAAW,EAAE,EACxF;AACI,MAAA,MAAMC,eAAe,GAAG3F,GAAG,CAAC0F,WAAW,CAAC;AACxC,MAAA,IAAI,CAAC5H,MAAM,CAACoG,SAAS,CAACyB,eAAe,CAAC,IAAIA,eAAe,GAAG,CAAC,IAAIA,eAAe,IAAIP,WAAW,CAAClG,MAAM,EAAE;AACxGqG,MAAAA,IAAI,CAACK,IAAI,CAACR,WAAW,CAACO,eAAe,CAAC,CAAC;AACvCH,MAAAA,aAAa,CAACI,IAAI,CAACF,WAAW,CAAC;AACnC,IAAA;AACJ,EAAA,CAAC,MAED;IACI,MAAMG,KAAK,GAAG7F,GAAG,CAACd,MAAM,GAAG/D,IAAI,CAAC4D,GAAG,CAACiB,GAAG,CAACd,MAAM,EAAEkG,WAAW,CAAClG,MAAM,CAAC,GAAGkG,WAAW,CAAClG,MAAM;IACxF,KAAK,IAAIyG,eAAe,GAAG,CAAC,EAAEA,eAAe,GAAGE,KAAK,EAAEF,eAAe,EAAE,EACxE;MACI,MAAMD,WAAW,GAAG1F,GAAG,CAACd,MAAM,GAAGc,GAAG,CAAC2F,eAAe,CAAC,GAAGA,eAAe;AACvE,MAAA,IAAI,CAAC7H,MAAM,CAACoG,SAAS,CAACwB,WAAW,CAAC,IAAIA,WAAW,GAAG,CAAC,IAAIA,WAAW,IAAIP,WAAW,EAAE;AACrFI,MAAAA,IAAI,CAACK,IAAI,CAACR,WAAW,CAACO,eAAe,CAAC,CAAC;AACvCH,MAAAA,aAAa,CAACI,IAAI,CAACF,WAAW,CAAC;AACnC,IAAA;AACJ,EAAA;AAEApK,EAAAA,MAAM,CAACwK,cAAc,CAACP,IAAI,EAAE,QAAQ,EAAE;AAClC3D,IAAAA,KAAK,EAAEwD,WAAW,CAAC9G,MAAM,IAAI,EAAE;AAC/ByH,IAAAA,YAAY,EAAE;AAClB,GAAC,CAAC;EAEF,MAAMC,QAAQ,GAAGT,IAAI,CAACrG,MAAM,KAAKiG,WAAW,IAAIK,aAAa,CAACS,KAAK,CAAC,CAACrE,KAAK,EAAED,KAAK,KAAKC,KAAK,KAAKD,KAAK,CAAC;EACtG,OAAO;IAAE4D,IAAI;AAAEC,IAAAA,aAAa,EAAEQ,QAAQ,GAAG,IAAI,GAAGR;GAAe;AACnE;AAEA,SAASU,0BAA0BA,CAAChB,GAAG,EAAEC,WAAW,EAAEpI,OAAO,GAAG,EAAE,EAClE;EACI,IAAI,CAACmI,GAAG,IAAI,CAACA,GAAG,CAACG,iBAAiB,EAAEnG,MAAM,EAAE,OAAO,IAAI;AAEvD,EAAA,MAAMiH,MAAM,GAAGlB,oBAAoB,CAACC,GAAG,EAAEC,WAAW,CAAC;EACrD,IAAI,CAACgB,MAAM,CAACZ,IAAI,CAACrG,MAAM,EAAE,OAAO,IAAI;AAEpC,EAAA,MAAMkF,MAAM,GAAG;AACX1F,IAAAA,IAAI,EAAEwG,GAAG,CAACkB,IAAI,IAAI,EAAE;AACpBtB,IAAAA,YAAY,EAAE,IAAI;AAClBE,IAAAA,MAAM,EAAErF,kBAAkB,CAACwG,MAAM,CAACZ,IAAI;GACzC;EACD,IAAIY,MAAM,CAACX,aAAa,EAAEpB,MAAM,CAACoB,aAAa,GAAGW,MAAM,CAACX,aAAa;AACrE,EAAA,OAAO1I,KAAK,CAACC,OAAO,EAAE,aAAa,EAAEqH,MAAM,CAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASiC,QAAQA,CAACC,IAAI,EAAEvJ,OAAO,GAAG,EAAE,EAAEwJ,oBAAoB,GAAG,KAAK,EAClE;EACI,MAAM/D,CAAC,GAAG,EAAE;AACZA,EAAAA,CAAC,CAAC9D,IAAI,GAAG4H,IAAI,CAACF,IAAI,IAAI,EAAE;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA5D,CAAC,CAACgE,SAAS,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;EACzBhE,CAAC,CAACiE,SAAS,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;AAEzBjE,EAAAA,CAAC,CAACkE,YAAY,GAAG,CAACJ,IAAI,CAACK,YAAY,IAAI,EAAE,EAAE3G,GAAG,CAAC4G,EAAE,IAAI9J,KAAK,CAACC,OAAO,EAAE,aAAa,EAAE;AAC/E2B,IAAAA,IAAI,EAAEkI,EAAE,CAACC,QAAQ,IAAI,EAAE;IACvBL,SAAS,EAAE,CAACI,EAAE,CAACE,MAAM,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE9G,GAAG,CAACvB,CAAC,IAAIZ,EAAE,CAAC3C,EAAE,CAACuD,CAAC,CAAC,CAAC,CAAC;IACzDgI,SAAS,EAAE,CAACG,EAAE,CAACG,MAAM,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE/G,GAAG,CAACvB,CAAC,IAAIZ,EAAE,CAAC3C,EAAE,CAACuD,CAAC,CAAC,CAAC;AAC5D,GAAC,CAAC,CAAC;AAEH,EAAA,MACIgG,EAAE,GAAG6B,IAAI,CAACU,iBAAiB;AAC3BrC,IAAAA,KAAK,GAAIF,EAAE,IAAIA,EAAE,CAACG,QAAQ,IAAK,EAAE;AACrCpC,EAAAA,CAAC,CAACwC,MAAM,GAAGrF,kBAAkB,CAACgF,KAAK,CAAC;AACpC;AACA;AACA;EACA,IAAIA,KAAK,CAACzF,MAAM,IAAIsD,CAAC,CAACwC,MAAM,CAACiC,QAAQ,CAAC/H,MAAM,KAAKyF,KAAK,CAACzF,MAAM,GAAG,CAAC,EAAEsD,CAAC,CAAC2C,WAAW,GAAGR,KAAK,CAACzF,MAAM;EAC/FsD,CAAC,CAAC0E,YAAY,GAAG,CAACZ,IAAI,CAACa,YAAY,IAAI,EAAE,EAAEnH,GAAG,CAACwE,EAAE,IAAID,eAAe,CAACC,EAAE,EAAEzH,OAAO,CAAC,CAAC;AAClFyF,EAAAA,CAAC,CAAC0E,YAAY,CAACtB,IAAI,CAAC,GAAG,CAACnB,EAAE,EAAE2C,oBAAoB,IAAI,EAAE,EACjDpH,GAAG,CAACkF,GAAG,IAAIgB,0BAA0B,CAAChB,GAAG,EAAEP,KAAK,CAACzF,MAAM,EAAEnC,OAAO,CAAC,CAAC,CAClEsK,MAAM,CAACC,OAAO,CAAC,CAAC;AAErB,EAAA,MACIC,IAAI,GAAGjB,IAAI,CAACkB,eAAe,IAAI,EAAE;AACjCC,IAAAA,MAAM,GAAG5H,WAAW,CAAC0H,IAAI,CAACG,OAAO,CAAC;AAClCC,IAAAA,MAAM,GAAG9H,WAAW,CAAC0H,IAAI,CAACK,SAAS,CAAC;AACpCC,IAAAA,MAAM,GAAGN,IAAI,CAACO,MAAM,IAAI,EAAE;EAC9BtF,CAAC,CAACuF,OAAO,GAAG,EAAE;EACd,IAAIA,OAAO,GAAG,IAAI;AAAEC,IAAAA,GAAG,GAAG,CAAC;AAAEC,IAAAA,UAAU,GAAG,IAAI;EAC9C,IAAIR,MAAM,CAACvI,MAAM,EAAE;AAAE6I,IAAAA,OAAO,GAAGN,MAAM;AAAEO,IAAAA,GAAG,GAAG,CAAC;AAAE,EAAA,CAAC,MAC5C,IAAIL,MAAM,CAACzI,MAAM,EAAE;IAAE6I,OAAO,GAAGJ,MAAM,CAAC3H,GAAG,CAACvB,CAAC,IAAIA,CAAC,GAAG,MAAM,CAAC;AAAEuJ,IAAAA,GAAG,GAAG,CAAC;AAAE,EAAA;AAC1E,EAAA,IAAID,OAAO,EACX;AACI,IAAA,KAAK,MAAMG,CAAC,IAAIL,MAAM,EACtB;MACI,MACIM,KAAK,GAAG,IAAIlJ,KAAK,CAACiJ,CAAC,CAACE,QAAQ,GAAG,CAAC,CAAC;AACjCC,QAAAA,KAAK,GAAGH,CAAC,CAACI,QAAQ,GAAG,CAAC;AAC1B,MAAA,KAAK,IAAIlJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8I,CAAC,CAACE,QAAQ,GAAG,CAAC,EAAEhJ,CAAC,EAAE,EACvC;QACI+I,KAAK,CAAC/I,CAAC,CAAC,GAAG2I,OAAO,CAACM,KAAK,GAAGjJ,CAAC,CAAC,KAAK,CAAC;AACvC,MAAA;AACA,MAAA,MAAMmJ,KAAK,GAAG;AACV7J,QAAAA,IAAI,EAAE,CAAA,KAAA,EAAQwJ,CAAC,CAACM,aAAa,CAAA,CAAE;AAC/BC,QAAAA,aAAa,EAAET,GAAG;AAClBG,QAAAA;OACH;AACD,MAAA,IAAI5B,oBAAoB,EACxB;QACI,MAAMmC,MAAM,GAAGC,eAAe,CAACnG,CAAC,CAACwC,MAAM,CAACiC,QAAQ,EAAEkB,KAAK,EAAE3F,CAAC,CAACwC,MAAM,CAACiC,QAAQ,CAAC/H,MAAM,GAAGyF,KAAK,CAACzF,MAAM,CAAC;AACjG,QAAA,IAAIwJ,MAAM,EACV;AACIH,UAAAA,KAAK,CAAC/B,SAAS,GAAGkC,MAAM,CAAC3J,GAAG;AAC5BwJ,UAAAA,KAAK,CAAC9B,SAAS,GAAGiC,MAAM,CAACE,GAAG;UAC5B,IAAI,CAACX,UAAU,EACf;AACIA,YAAAA,UAAU,GAAG;AAAElJ,cAAAA,GAAG,EAAE,CAAE,GAAG2J,MAAM,CAAC3J,GAAG,CAAE;AAAE6J,cAAAA,GAAG,EAAE,CAAE,GAAGF,MAAM,CAACE,GAAG;aAAI;AACnE,UAAA,CAAC,MAED;YACI,KAAK,IAAInJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAC1B;cACI,IAAIiJ,MAAM,CAAC3J,GAAG,CAACU,CAAC,CAAC,GAAGwI,UAAU,CAAClJ,GAAG,CAACU,CAAC,CAAC,EAAEwI,UAAU,CAAClJ,GAAG,CAACU,CAAC,CAAC,GAAGiJ,MAAM,CAAC3J,GAAG,CAACU,CAAC,CAAC;cACxE,IAAIiJ,MAAM,CAACE,GAAG,CAACnJ,CAAC,CAAC,GAAGwI,UAAU,CAACW,GAAG,CAACnJ,CAAC,CAAC,EAAEwI,UAAU,CAACW,GAAG,CAACnJ,CAAC,CAAC,GAAGiJ,MAAM,CAACE,GAAG,CAACnJ,CAAC,CAAC;AAC5E,YAAA;AACJ,UAAA;AACJ,QAAA;AACJ,MAAA;AACA+C,MAAAA,CAAC,CAACuF,OAAO,CAACnC,IAAI,CAAC9I,KAAK,CAACC,OAAO,EAAE,YAAY,EAAEwL,KAAK,CAAC,CAAC;AACvD,IAAA;AACJ,EAAA;AACA,EAAA,IAAIN,UAAU,EACd;AACIzF,IAAAA,CAAC,CAACgE,SAAS,GAAGyB,UAAU,CAAClJ,GAAG;AAC5ByD,IAAAA,CAAC,CAACiE,SAAS,GAAGwB,UAAU,CAACW,GAAG;AAChC,EAAA;AACA,EAAA,OAAO9L,KAAK,CAACC,OAAO,EAAE,MAAM,EAAEyF,CAAC,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASmG,eAAeA,CAACE,SAAS,EAAEV,KAAK,EAAEtJ,KAAK,GAAG,CAAC,EACpD;AACI,EAAA,IAAI,CAACgK,SAAS,IAAI,CAACA,SAAS,CAAC3J,MAAM,IAAI,CAACiJ,KAAK,CAACjJ,MAAM,EAAE,OAAO,IAAI;EACjE,MACIH,GAAG,GAAG,CAAE+J,QAAQ,EAAEA,QAAQ,EAAEA,QAAQ,CAAE;IACtCF,GAAG,GAAG,CAAE,CAACE,QAAQ,EAAE,CAACA,QAAQ,EAAE,CAACA,QAAQ,CAAE;AAC7C,EAAA,KAAK,IAAI1J,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+I,KAAK,CAACjJ,MAAM,EAAEE,CAAC,EAAE,EACrC;AACI,IAAA,MAAMI,IAAI,GAAG2I,KAAK,CAAC/I,CAAC,CAAC,GAAGP,KAAK;IAC7B,KAAK,IAAIY,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAC1B;AACI,MAAA,MAAM9B,CAAC,GAAGkL,SAAS,CAACrJ,IAAI,GAAGC,CAAC,CAAC;AAC7B,MAAA,IAAI9B,CAAC,GAAGoB,GAAG,CAACU,CAAC,CAAC,EAAEV,GAAG,CAACU,CAAC,CAAC,GAAG9B,CAAC;AAC1B,MAAA,IAAIA,CAAC,GAAGiL,GAAG,CAACnJ,CAAC,CAAC,EAAEmJ,GAAG,CAACnJ,CAAC,CAAC,GAAG9B,CAAC;AAC9B,IAAA;AACJ,EAAA;EACA,OAAOG,MAAM,CAACC,QAAQ,CAACgB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;IAAEA,GAAG;AAAE6J,IAAAA;AAAI,GAAC,GAAG,IAAI;AACxD;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASG,QAAQA,CAACC,IAAI,EAAEjM,OAAO,GAAG,EAAE,EACpC;EACI,MACIkM,CAAC,GAAGD,IAAI,CAACE,cAAc,IAAIF,IAAI,CAACG,SAAS,IACrC;AAAEC,MAAAA,KAAK,EAAE,CAAC;AAAEnC,MAAAA,QAAQ,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;MAAEoC,WAAW,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;AAAEC,MAAAA,UAAU,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAAI;IAC/G9G,CAAC,GAAG,EAAE;AACVA,EAAAA,CAAC,CAAC9D,IAAI,GAAGsK,IAAI,CAAC5C,IAAI,IAAI,EAAE;AACxB5D,EAAAA,CAAC,CAAC+G,WAAW,GAAGP,IAAI,CAACQ,WAAW,GAAG,CAAC;AACpChH,EAAAA,CAAC,CAACiH,IAAI,GAAGR,CAAC,CAACG,KAAK;EAChB,IAAIH,CAAC,CAACG,KAAK,GAAG,CAAC,EAAE5G,CAAC,CAACyE,QAAQ,GAAGxF,IAAI,CAACwH,CAAC,CAAChC,QAAQ,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC;EAC3D,IAAIgC,CAAC,CAACG,KAAK,GAAG,CAAC,EAAE5G,CAAC,CAAC6G,WAAW,GAAG5H,IAAI,CAACwH,CAAC,CAACI,WAAW,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC;AACpE,EAAA,IAAIJ,CAAC,CAACG,KAAK,GAAG,CAAC,EAAE5G,CAAC,CAAC8G,UAAU,GAAG7H,IAAI,CAACwH,CAAC,CAACK,UAAU,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC;AACjFnF,EAAAA,eAAe,CAAC3B,CAAC,EAAEwG,IAAI,CAACU,YAAY,CAAC;AACrC,EAAA,OAAO5M,KAAK,CAACC,OAAO,EAAE,MAAM,EAAEyF,CAAC,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASmH,YAAYA,CAACC,IAAI,EAAE7M,OAAO,GAAG,EAAE,EACxC;EACI,MAAMyF,CAAC,GAAG,EAAE;EACZA,CAAC,CAAC9D,IAAI,GAAGkL,IAAI,GAAIA,IAAI,CAACxD,IAAI,IAAI,EAAE,GAAI,EAAE;EACtC5D,CAAC,CAACqH,KAAK,GAAGD,IAAI,GAAG,CAACA,IAAI,CAACE,KAAK,IAAI,EAAE,EAAE9J,GAAG,CAAC+J,CAAC,IAAIhB,QAAQ,CAACgB,CAAC,EAAEhN,OAAO,CAAC,CAAC,GAAG,EAAE;EACvE,IAAI6M,IAAI,EAAEzF,eAAe,CAAC3B,CAAC,EAAEoH,IAAI,CAACF,YAAY,CAAC;AAC/C,EAAA,OAAO5M,KAAK,CAACC,OAAO,EAAE,UAAU,EAAEyF,CAAC,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASwH,SAASA,CAACC,KAAK,EAAEC,QAAQ,EAAEnN,OAAO,GAAG,EAAE,EAAEoN,aAAa,GAAG,IAAIC,OAAO,EAAE,EAC/E;EACI,MAAM5H,CAAC,GAAG,EAAE;AACZA,EAAAA,CAAC,CAAC9D,IAAI,GAAGuL,KAAK,CAAC7D,IAAI,IAAI,EAAE;AACzB,EAAA,IAAI6D,KAAK,CAACI,QAAQ,IAAIF,aAAa,CAACG,GAAG,CAACL,KAAK,CAACI,QAAQ,CAAC,EACvD;IACI7H,CAAC,CAAC+H,QAAQ,GAAGJ,aAAa,CAACK,GAAG,CAACP,KAAK,CAACI,QAAQ,CAAC;AAClD,EAAA,CAAC,MAED;IACI7H,CAAC,CAAC+H,QAAQ,GAAGZ,YAAY,CAACM,KAAK,CAACI,QAAQ,EAAEtN,OAAO,CAAC;AAClD,IAAA,IAAIkN,KAAK,CAACI,QAAQ,EAAEF,aAAa,CAACjF,GAAG,CAAC+E,KAAK,CAACI,QAAQ,EAAE7H,CAAC,CAAC+H,QAAQ,CAAC;AACrE,EAAA;AACA,EAAA,MAAME,MAAM,GAAGP,QAAQ,CAACQ,MAAM,IAAI,EAAE;AACpClI,EAAAA,CAAC,CAACmI,YAAY,GAAG,CAACV,KAAK,CAACW,YAAY,IAAI,EAAE,EAAE5K,GAAG,CAAC6K,EAAE,IAClD;IACI,MAAMC,GAAG,GAAGL,MAAM,CAACM,OAAO,CAACF,EAAE,IAAIA,EAAE,CAACG,IAAI,CAAC;AACzC,IAAA,OAAOF,GAAG;AACd,EAAA,CAAC,CAAC;AACF3G,EAAAA,eAAe,CAAC3B,CAAC,EAAEyH,KAAK,CAACP,YAAY,CAAC;AACtC,EAAA,OAAO5M,KAAK,CAACC,OAAO,EAAE,OAAO,EAAEyF,CAAC,CAAC;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASyI,kBAAkBA,CAACC,EAAE,EAAEnO,OAAO,GAAG,EAAE,EAC5C;AACI;AACA;AACA;AACA;AACA,EAAA,OAAOD,KAAK,CAACC,OAAO,EAAE,gBAAgB,EAAE;AACpC2B,IAAAA,IAAI,EAAEwM,EAAE,CAAC9E,IAAI,IAAI,EAAE;AACnBgD,IAAAA,KAAK,EAAE8B,EAAE,CAACC,KAAK,GAAG,CAAC;AACnB9B,IAAAA,WAAW,EAAEvH,SAAS,CAACoJ,EAAE,CAACE,gBAAgB,EAAErO,OAAO,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC;AACpEkK,IAAAA,QAAQ,EAAEnF,SAAS,CAACoJ,EAAE,CAACG,aAAa,EAAEtO,OAAO,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC;IAC3DuM,UAAU,EAAExH,SAAS,CAACoJ,EAAE,CAACI,eAAe,EAAEvO,OAAO,EAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;AACpF,GAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASwO,eAAeA,CAACC,EAAE,EAAEzO,OAAO,GAAG,EAAE,EACzC;AACI,EAAA,OAAOD,KAAK,CAACC,OAAO,EAAE,aAAa,EAAE;AACjC2B,IAAAA,IAAI,EAAE8M,EAAE,CAACpF,IAAI,IAAI,EAAE;AACnB3D,IAAAA,SAAS,EAAE+I,EAAE,CAAC9I,SAAS,GAAG,CAAC;AAC3B+I,IAAAA,UAAU,EAAE3J,SAAS,CAAC0J,EAAE,CAACE,UAAU,EAAE3O,OAAO;AAChD,GAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS4O,cAAcA,CAACC,EAAE,EAAE7O,OAAO,GAAG,EAAE,EACxC;AACI,EAAA,OAAOD,KAAK,CAACC,OAAO,EAAE,YAAY,EAAE;AAChC2B,IAAAA,IAAI,EAAEkN,EAAE,CAACxF,IAAI,IAAI,EAAE;AACnByF,IAAAA,eAAe,EAAE,CAACD,EAAE,CAACE,eAAe,IAAI,EAAE,EAAE9L,GAAG,CAACkL,EAAE,IAAID,kBAAkB,CAACC,EAAE,EAAEnO,OAAO,CAAC,CAAC;AACtFgP,IAAAA,YAAY,EAAE,CAACH,EAAE,CAACI,YAAY,IAAI,EAAE,EAAEhM,GAAG,CAACwL,EAAE,IAAID,eAAe,CAACC,EAAE,EAAEzO,OAAO,CAAC;AAChF,GAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASkP,aAAaA,CAACC,IAAI,EAAEnP,OAAO,GAAG,EAAE,EACzC;EACI,MAAMyF,CAAC,GAAG,EAAE;AACZA,EAAAA,CAAC,CAAC9D,IAAI,GAAGwN,IAAI,CAAC9F,IAAI,IAAI,EAAE;EACxB5D,CAAC,CAAC2J,QAAQ,GAAGtO,EAAE,CAAC3C,EAAE,CAACgR,IAAI,CAACE,QAAQ,CAAC,CAAC;EAClC5J,CAAC,CAAC6J,QAAQ,GAAGxO,EAAE,CAAC3C,EAAE,CAACgR,IAAI,CAACI,QAAQ,CAAC,CAAC;EAClC9J,CAAC,CAAC+J,YAAY,GAAG1O,EAAE,CAAC3C,EAAE,CAACgR,IAAI,CAACM,YAAY,CAAC,CAAC;AAC1ChK,EAAAA,CAAC,CAACiK,gBAAgB,GAAGP,IAAI,CAACQ,gBAAgB,GAAG,CAAC;AAC9ClK,EAAAA,CAAC,CAAC4G,KAAK,GAAG8C,IAAI,CAACf,KAAK,GAAG,CAAC;EACxB3I,CAAC,CAACmK,WAAW,GAAG,CAACT,IAAI,CAACU,WAAW,IAAI,EAAE,EAAEvF,MAAM,CAAC4B,CAAC,IAAIA,CAAC,CAAC,CAACjJ,GAAG,CAAC4L,EAAE,IAAID,cAAc,CAACC,EAAE,EAAE7O,OAAO,CAAC,CAAC;AAC9FoH,EAAAA,eAAe,CAAC3B,CAAC,EAAE0J,IAAI,CAACxC,YAAY,CAAC;AACrC,EAAA,OAAO5M,KAAK,CAACC,OAAO,EAAE,WAAW,EAAEyF,CAAC,CAAC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASqK,aAAaA,CAAC3C,QAAQ,EAAE4C,OAAO,EAAEC,OAAO,GAAG,EAAE,EAC7D;EACI,MAAM;IAAEhQ,OAAO,GAAG,EAAE;AAAEwJ,IAAAA,oBAAoB,GAAG,KAAK;IAAE,GAAGrJ;AAAiB,GAAC,GAAG6P,OAAO;AACnF,EAAA,MAAM5C,aAAa,GAAG,IAAIC,OAAO,EAAE;AACnC,EAAA,OAAOtN,KAAK,CAACC,OAAO,EAAE,MAAM,EAAE;IAC1BiQ,wBAAwB,EAAEF,OAAO,GAAG,CAAC;AACrCG,IAAAA,gBAAgB,EAAE/C,QAAQ,CAACgD,YAAY,IAAI,EAAE;IAC7CzC,MAAM,EAAE,CAACP,QAAQ,CAACQ,MAAM,IAAI,EAAE,EAAErD,MAAM,CAAC9I,CAAC,IAAIA,CAAC,CAAC,CAACyB,GAAG,CAACzB,CAAC,IAAI8H,QAAQ,CAAC9H,CAAC,EAAExB,OAAO,EAAEwJ,oBAAoB,CAAC,CAAC;AACnG4G,IAAAA,MAAM,EAAE,CAACjD,QAAQ,CAACkD,MAAM,IAAI,EAAE,EAAE/F,MAAM,CAAC9I,CAAC,IAAIA,CAAC,CAAC,CAACyB,GAAG,CAACzB,CAAC,IAAIyL,SAAS,CAACzL,CAAC,EAAE2L,QAAQ,EAAEnN,OAAO,EAAEoN,aAAa,CAAC,CAAC;IACvGkD,UAAU,EAAE,CAACnD,QAAQ,CAACoD,UAAU,IAAI,EAAE,EAAEjG,MAAM,CAACvH,CAAC,IAAIA,CAAC,CAAC,CAACE,GAAG,CAACF,CAAC,IAAImM,aAAa,CAACnM,CAAC,EAAE/C,OAAO,CAAC;GAC5F,EAAEG,gBAAgB,CAAC;AACxB;;;;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { asUint8Array } from '#utils/bytes';
|
|
2
2
|
import { CjsFormat } from '../../format/CjsFormat.js';
|
|
3
3
|
import { HlslEffectRes } from './core/tr2/resources/HlslEffectRes.js';
|
|
4
|
-
import { DEFAULT_VALUES, normalizeValues, validateClassKey, validateClass, readWithValues, inspectWithValues,
|
|
4
|
+
import { DEFAULT_VALUES, normalizeValues, validateClassKey, validateClass, readWithValues, inspectWithValues, OUTPUT_JSON, OUTPUT_METADATA, OUTPUT_RAW } from './core/helpers.js';
|
|
5
|
+
import { toJsonWithCollections } from '../../format/jsonPolicies.js';
|
|
5
6
|
import { CLASS_KEYS } from './core/json.js';
|
|
6
7
|
|
|
7
8
|
const FORMAT_NAME = "CjsHlslFormat";
|
|
@@ -157,7 +158,7 @@ class CjsHlslFormat extends CjsFormat {
|
|
|
157
158
|
* @returns {any} Plain JSON-compatible data.
|
|
158
159
|
*/
|
|
159
160
|
ToJSON(value) {
|
|
160
|
-
return
|
|
161
|
+
return toJsonWithCollections(value);
|
|
161
162
|
}
|
|
162
163
|
|
|
163
164
|
/**
|
|
@@ -210,7 +211,7 @@ class CjsHlslFormat extends CjsFormat {
|
|
|
210
211
|
* @returns {any} Plain JSON-compatible data.
|
|
211
212
|
*/
|
|
212
213
|
static toJSON(value) {
|
|
213
|
-
return
|
|
214
|
+
return toJsonWithCollections(value);
|
|
214
215
|
}
|
|
215
216
|
static OUTPUT_JSON = OUTPUT_JSON;
|
|
216
217
|
static OUTPUT_METADATA = OUTPUT_METADATA;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CjsHlslFormat.js","sources":["../../../../../src/resource/formats/hlsl/CjsHlslFormat.js"],"sourcesContent":["import { asUint8Array } from \"#utils/bytes\";\nimport { CjsFormat } from \"../../format/CjsFormat.js\";\n/**\n * Exposed CarbonEngineJS-facing Tr2 effect container format class.\n *\n * Keep this file small and reviewable: the Tr2 effect graph parser lives\n * under src/core/tr2 (internal parsing machinery, not part of this\n * package's public surface); input/option normalization, the shared read\n * path, and the JSON emitters live under src/core.\n */\n\nimport { HlslEffectRes } from \"./core/tr2/resources/HlslEffectRes.js\";\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_JSON,\n OUTPUT_METADATA,\n OUTPUT_RAW,\n inspectWithValues,\n normalizeValues,\n readWithValues,\n toJsonValue,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsHlslFormat\";\n\n/**\n * CarbonEngineJS-facing reader for CCP's Tr2 compiled effect container\n * format (`.sm_hi` / `.sm_lo` / `.sm_depth` bodies).\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\n * This format profile has no dependency on any DXBC/shader-bytecode decoder: shader\n * bodies stay as opaque bytes in the emitted graph. The public contract is\n * plain JSON data (`emit: \"json\"`, the default) — the documented effect\n * graph shape described in `docs/reference/json-graph.md`. `emit: \"raw\"`\n * exposes the internal\n * HlslEffectRes graph directly; treat it as unstable, not schema-guaranteed\n * internals, useful mainly for resolving multiple permutations by hand.\n *\n * The `classes` option lets a caller register constructors for specific\n * node kinds in the emitted JSON graph (see `CjsHlslFormat.CLASS_KEYS`);\n * class registration does not depend on importing internal graph classes.\n */\nexport class CjsHlslFormat extends CjsFormat\n{\n\n #emit = DEFAULT_VALUES.emit;\n #source = DEFAULT_VALUES.source;\n #permutation = DEFAULT_VALUES.permutation;\n #classes = DEFAULT_VALUES.classes;\n\n /**\n * Create a reusable format profile.\n *\n * @param {object} [options] Default format values.\n */\n constructor(options = {})\n {\n super();\n this.SetValues(options);\n }\n\n /**\n * Set format values for this reusable profile.\n *\n * @param {object} [options] Values to merge into the profile.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetValues(options = {})\n {\n const values = normalizeValues(this.GetValues(), options, FORMAT_NAME);\n\n this.#emit = values.emit;\n this.#source = values.source;\n this.#permutation = values.permutation;\n this.#classes = values.classes;\n\n return this;\n }\n\n /**\n * Get this profile's current values, optionally with per-call overrides.\n *\n * @param {object} [options] Optional values to merge into a copy.\n * @returns {object} A copy of the effective values.\n */\n GetValues(options = {})\n {\n return normalizeValues({\n emit: this.#emit,\n source: this.#source,\n permutation: this.#permutation,\n classes: this.#classes\n }, options, FORMAT_NAME);\n }\n\n /**\n * Set multiple node-class constructors for this profile.\n *\n * @param {object} [classes] Map of node class keys to constructors. See {@link CjsHlslFormat.CLASS_KEYS}.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetClasses(classes = {})\n {\n return this.SetValues({ classes });\n }\n\n /**\n * Set one node-class constructor for this profile.\n *\n * @param {string} type Node class key.\n * @param {Function|null|undefined} Class Constructor to use, or nullish to delete.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetClass(type, Class)\n {\n if (Class === null || Class === undefined)\n {\n validateClassKey(type, FORMAT_NAME);\n const classes = { ...this.#classes };\n delete classes[type];\n this.#classes = classes;\n return this;\n }\n\n validateClass(type, Class, FORMAT_NAME);\n return this.SetValues({ classes: { [type]: Class } });\n }\n\n /**\n * Get a configured node-class constructor.\n *\n * @param {string} type Node class key.\n * @returns {Function|undefined} The registered constructor, if any.\n */\n GetClass(type)\n {\n validateClassKey(type, FORMAT_NAME);\n return this.#classes[type];\n }\n\n /**\n * Whether this reader has a constructor registered for a node class key.\n *\n * @param {string} type Node class key.\n * @returns {boolean} True when a constructor is registered.\n */\n HasClass(type)\n {\n return !!this.GetClass(type);\n }\n\n /**\n * Read a Tr2 effect payload with this profile's values.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.\n */\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options));\n }\n\n /**\n * Inspect a Tr2 effect payload: header facts plus the default (or\n * selected) permutation's technique names and stage counts.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {object} Plain summary data.\n */\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options));\n }\n\n /**\n * Convert format output to JSON-compatible data.\n *\n * @param {any} value Format output to convert.\n * @returns {any} Plain JSON-compatible data.\n */\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * Static payload sniff. Static methods use camelCase by convention.\n *\n * The Tr2 effect container has no magic number, so this attempts a\n * cheap header-only load (version, string table, permutation axes and\n * body offsets — no shader bodies) and reports whether it succeeded.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate bytes.\n * @returns {boolean} True when the payload's header decodes as a supported Tr2 effect.\n */\n static probeSupport(input)\n {\n try\n {\n const bytes = asUint8Array(input, \"CjsHlslFormat input\");\n return new HlslEffectRes().DoLoad(bytes, { source: \"probeSupport\" });\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Static one-shot read.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Format values.\n * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.\n */\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Format values.\n * @returns {object} Plain summary data.\n */\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Static JSON-compatible conversion.\n *\n * @param {any} value Format output to convert.\n * @returns {any} Plain JSON-compatible data.\n */\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n static OUTPUT_JSON = OUTPUT_JSON;\n static OUTPUT_METADATA = OUTPUT_METADATA;\n static OUTPUT_RAW = OUTPUT_RAW;\n static CLASS_KEYS = CLASS_KEYS;\n static id = \"hlsl\";\n static mediaTypes = Object.freeze([ \"shader\" ]);\n static outputs = CjsFormat.defineOutputs({\n json: { default: true, decoded: true },\n metadata: { decoded: true },\n raw: { role: \"debug\", decoded: true }\n });\n static extensions = Object.freeze([ \".sm_hi\", \".sm_lo\", \".sm_depth\" ]);\n\n}\n\nexport default CjsHlslFormat;\n"],"names":["FORMAT_NAME","CjsHlslFormat","CjsFormat","DEFAULT_VALUES","emit","source","permutation","classes","constructor","options","SetValues","values","normalizeValues","GetValues","SetClasses","SetClass","type","Class","undefined","validateClassKey","validateClass","GetClass","HasClass","Read","input","readWithValues","Inspect","inspectWithValues","ToJSON","value","toJsonValue","probeSupport","bytes","asUint8Array","HlslEffectRes","DoLoad","read","inspect","toJSON","OUTPUT_JSON","OUTPUT_METADATA","OUTPUT_RAW","CLASS_KEYS","id","mediaTypes","Object","freeze","outputs","defineOutputs","json","default","decoded","metadata","raw","role","extensions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CjsHlslFormat.js","sources":["../../../../../src/resource/formats/hlsl/CjsHlslFormat.js"],"sourcesContent":["import { asUint8Array } from \"#utils/bytes\";\nimport { CjsFormat } from \"../../format/CjsFormat.js\";\n/**\n * Exposed CarbonEngineJS-facing Tr2 effect container format class.\n *\n * Keep this file small and reviewable: the Tr2 effect graph parser lives\n * under src/core/tr2 (internal parsing machinery, not part of this\n * package's public surface); input/option normalization, the shared read\n * path, and the JSON emitters live under src/core.\n */\n\nimport { HlslEffectRes } from \"./core/tr2/resources/HlslEffectRes.js\";\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_JSON,\n OUTPUT_METADATA,\n OUTPUT_RAW,\n inspectWithValues,\n normalizeValues,\n readWithValues,\n toJsonValue,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsHlslFormat\";\n\n/**\n * CarbonEngineJS-facing reader for CCP's Tr2 compiled effect container\n * format (`.sm_hi` / `.sm_lo` / `.sm_depth` bodies).\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\n * This format profile has no dependency on any DXBC/shader-bytecode decoder: shader\n * bodies stay as opaque bytes in the emitted graph. The public contract is\n * plain JSON data (`emit: \"json\"`, the default) — the documented effect\n * graph shape described in `docs/reference/json-graph.md`. `emit: \"raw\"`\n * exposes the internal\n * HlslEffectRes graph directly; treat it as unstable, not schema-guaranteed\n * internals, useful mainly for resolving multiple permutations by hand.\n *\n * The `classes` option lets a caller register constructors for specific\n * node kinds in the emitted JSON graph (see `CjsHlslFormat.CLASS_KEYS`);\n * class registration does not depend on importing internal graph classes.\n */\nexport class CjsHlslFormat extends CjsFormat\n{\n\n #emit = DEFAULT_VALUES.emit;\n #source = DEFAULT_VALUES.source;\n #permutation = DEFAULT_VALUES.permutation;\n #classes = DEFAULT_VALUES.classes;\n\n /**\n * Create a reusable format profile.\n *\n * @param {object} [options] Default format values.\n */\n constructor(options = {})\n {\n super();\n this.SetValues(options);\n }\n\n /**\n * Set format values for this reusable profile.\n *\n * @param {object} [options] Values to merge into the profile.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetValues(options = {})\n {\n const values = normalizeValues(this.GetValues(), options, FORMAT_NAME);\n\n this.#emit = values.emit;\n this.#source = values.source;\n this.#permutation = values.permutation;\n this.#classes = values.classes;\n\n return this;\n }\n\n /**\n * Get this profile's current values, optionally with per-call overrides.\n *\n * @param {object} [options] Optional values to merge into a copy.\n * @returns {object} A copy of the effective values.\n */\n GetValues(options = {})\n {\n return normalizeValues({\n emit: this.#emit,\n source: this.#source,\n permutation: this.#permutation,\n classes: this.#classes\n }, options, FORMAT_NAME);\n }\n\n /**\n * Set multiple node-class constructors for this profile.\n *\n * @param {object} [classes] Map of node class keys to constructors. See {@link CjsHlslFormat.CLASS_KEYS}.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetClasses(classes = {})\n {\n return this.SetValues({ classes });\n }\n\n /**\n * Set one node-class constructor for this profile.\n *\n * @param {string} type Node class key.\n * @param {Function|null|undefined} Class Constructor to use, or nullish to delete.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetClass(type, Class)\n {\n if (Class === null || Class === undefined)\n {\n validateClassKey(type, FORMAT_NAME);\n const classes = { ...this.#classes };\n delete classes[type];\n this.#classes = classes;\n return this;\n }\n\n validateClass(type, Class, FORMAT_NAME);\n return this.SetValues({ classes: { [type]: Class } });\n }\n\n /**\n * Get a configured node-class constructor.\n *\n * @param {string} type Node class key.\n * @returns {Function|undefined} The registered constructor, if any.\n */\n GetClass(type)\n {\n validateClassKey(type, FORMAT_NAME);\n return this.#classes[type];\n }\n\n /**\n * Whether this reader has a constructor registered for a node class key.\n *\n * @param {string} type Node class key.\n * @returns {boolean} True when a constructor is registered.\n */\n HasClass(type)\n {\n return !!this.GetClass(type);\n }\n\n /**\n * Read a Tr2 effect payload with this profile's values.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.\n */\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options));\n }\n\n /**\n * Inspect a Tr2 effect payload: header facts plus the default (or\n * selected) permutation's technique names and stage counts.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {object} Plain summary data.\n */\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options));\n }\n\n /**\n * Convert format output to JSON-compatible data.\n *\n * @param {any} value Format output to convert.\n * @returns {any} Plain JSON-compatible data.\n */\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * Static payload sniff. Static methods use camelCase by convention.\n *\n * The Tr2 effect container has no magic number, so this attempts a\n * cheap header-only load (version, string table, permutation axes and\n * body offsets — no shader bodies) and reports whether it succeeded.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate bytes.\n * @returns {boolean} True when the payload's header decodes as a supported Tr2 effect.\n */\n static probeSupport(input)\n {\n try\n {\n const bytes = asUint8Array(input, \"CjsHlslFormat input\");\n return new HlslEffectRes().DoLoad(bytes, { source: \"probeSupport\" });\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Static one-shot read.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Format values.\n * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.\n */\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Format values.\n * @returns {object} Plain summary data.\n */\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Static JSON-compatible conversion.\n *\n * @param {any} value Format output to convert.\n * @returns {any} Plain JSON-compatible data.\n */\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n static OUTPUT_JSON = OUTPUT_JSON;\n static OUTPUT_METADATA = OUTPUT_METADATA;\n static OUTPUT_RAW = OUTPUT_RAW;\n static CLASS_KEYS = CLASS_KEYS;\n static id = \"hlsl\";\n static mediaTypes = Object.freeze([ \"shader\" ]);\n static outputs = CjsFormat.defineOutputs({\n json: { default: true, decoded: true },\n metadata: { decoded: true },\n raw: { role: \"debug\", decoded: true }\n });\n static extensions = Object.freeze([ \".sm_hi\", \".sm_lo\", \".sm_depth\" ]);\n\n}\n\nexport default CjsHlslFormat;\n"],"names":["FORMAT_NAME","CjsHlslFormat","CjsFormat","DEFAULT_VALUES","emit","source","permutation","classes","constructor","options","SetValues","values","normalizeValues","GetValues","SetClasses","SetClass","type","Class","undefined","validateClassKey","validateClass","GetClass","HasClass","Read","input","readWithValues","Inspect","inspectWithValues","ToJSON","value","toJsonValue","probeSupport","bytes","asUint8Array","HlslEffectRes","DoLoad","read","inspect","toJSON","OUTPUT_JSON","OUTPUT_METADATA","OUTPUT_RAW","CLASS_KEYS","id","mediaTypes","Object","freeze","outputs","defineOutputs","json","default","decoded","metadata","raw","role","extensions"],"mappings":"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"}
|
|
@@ -219,34 +219,5 @@ function inspectWithValues(input, values) {
|
|
|
219
219
|
return summary;
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
|
|
223
|
-
* Deep-convert a value to plain JSON-compatible data. Typed arrays become
|
|
224
|
-
* plain number arrays; Maps/Sets become objects/arrays; class instances
|
|
225
|
-
* with toJSON are honoured.
|
|
226
|
-
*
|
|
227
|
-
* @param {any} value Value to convert.
|
|
228
|
-
* @returns {any} Plain data.
|
|
229
|
-
*/
|
|
230
|
-
function toJsonValue(value) {
|
|
231
|
-
if (value === null || value === undefined) return value ?? null;
|
|
232
|
-
if (typeof value === "number" || typeof value === "string" || typeof value === "boolean") return value;
|
|
233
|
-
if (typeof value === "bigint") return value.toString();
|
|
234
|
-
if (ArrayBuffer.isView(value)) return Array.from(value);
|
|
235
|
-
if (Array.isArray(value)) return value.map(toJsonValue);
|
|
236
|
-
if (value instanceof Map) {
|
|
237
|
-
const out = {};
|
|
238
|
-
for (const [key, entry] of value) out[key] = toJsonValue(entry);
|
|
239
|
-
return out;
|
|
240
|
-
}
|
|
241
|
-
if (value instanceof Set) return Array.from(value, toJsonValue);
|
|
242
|
-
if (typeof value === "object") {
|
|
243
|
-
if (typeof value.toJSON === "function") return toJsonValue(value.toJSON());
|
|
244
|
-
const out = {};
|
|
245
|
-
for (const key of Object.keys(value)) out[key] = toJsonValue(value[key]);
|
|
246
|
-
return out;
|
|
247
|
-
}
|
|
248
|
-
return null;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
export { CLASS_KEYS, DEFAULT_VALUES, HlslEffectReadError, OUTPUT_JSON, OUTPUT_METADATA, OUTPUT_RAW, inspectWithValues, normalizeValues, readRaw, readWithValues, toJsonValue, validateClass, validateClassKey };
|
|
222
|
+
export { CLASS_KEYS, DEFAULT_VALUES, HlslEffectReadError, OUTPUT_JSON, OUTPUT_METADATA, OUTPUT_RAW, inspectWithValues, normalizeValues, readRaw, readWithValues, validateClass, validateClassKey };
|
|
252
223
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../../src/resource/formats/hlsl/core/helpers.js"],"sourcesContent":["import { asUint8Array } from \"#utils/bytes\";\n\n/**\n * Internal read-pipeline glue for CjsHlslFormat.\n *\n * Keeps the public class file small: input normalization, option/classes\n * normalization, the shared read path used by both the instance and the\n * static one-shots, and JSON conversion live here. The actual Tr2 effect\n * container parser lives under src/core/tr2 (internal parsing machinery,\n * not part of this package's public surface); this module wires bytes into\n * that graph and, for `emit: \"json\"`, converts it via src/core/json.js into\n * the documented plain-data shape.\n */\n\nimport { HlslEffectReadError } from \"./HlslEffectReadError.js\";\nimport {\n emitEffectMetadata,\n resolveSelectedOptions\n} from \"./metadata.js\";\nimport { HlslEffectRes } from \"./tr2/resources/HlslEffectRes.js\";\nimport { CLASS_KEYS, emitEffectJson } from \"./json.js\";\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_METADATA = \"metadata\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_JSON,\n source: \"memory\",\n permutation: null,\n classes: Object.freeze({})\n});\n\nconst VALID_EMITS = new Set([ OUTPUT_JSON, OUTPUT_RAW, OUTPUT_METADATA ]);\nconst OPTION_KEYS = new Set([ \"emit\", \"source\", \"permutation\", \"classes\" ]);\n\n/**\n * Validate a `classes` node key against {@link CLASS_KEYS}.\n *\n * @param {string} key Candidate node key.\n * @param {string} [readerName] Reader name used in the thrown error.\n */\nexport function validateClassKey(key, readerName = \"CjsHlslFormat\")\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(\", \")}`);\n }\n}\n\n/**\n * Validate a single `classes` entry: a known key mapped to a constructor.\n *\n * @param {string} key Node key.\n * @param {Function} Class Candidate constructor.\n * @param {string} [readerName] Reader name used in thrown errors.\n */\nexport function validateClass(key, Class, readerName = \"CjsHlslFormat\")\n{\n validateClassKey(key, readerName);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`${readerName}: class ${JSON.stringify(key)} must be a constructor`);\n }\n}\n\n/**\n * Merge and validate a `classes` map over a base map.\n *\n * @param {object} base Current classes map.\n * @param {object} classes Incoming classes map to merge in.\n * @param {string} readerName Reader name used in thrown errors.\n * @returns {object} Merged, validated classes map.\n */\nfunction mergeClasses(base, classes, readerName)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(`${readerName}: classes option must be an object`);\n }\n\n const next = { ...base };\n for (const [ key, Class ] of Object.entries(classes))\n {\n if (Class === null || Class === undefined)\n {\n delete next[key];\n continue;\n }\n validateClass(key, Class, readerName);\n next[key] = Class;\n }\n return next;\n}\n\n/**\n * Merge format values over a base set and validate them.\n *\n * @param {object} base Current values.\n * @param {object} [options] Values to merge in.\n * @param {string} [readerName] Reader name used in error messages.\n * @returns {object} A validated copy of the merged values.\n */\nexport function normalizeValues(base, options = {}, readerName = \"CjsHlslFormat\")\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n }\n\n const values = { ...base, ...options };\n\n if (!VALID_EMITS.has(values.emit))\n {\n throw new TypeError(`${readerName}: emit must be one of ${Array.from(VALID_EMITS, (emit) => JSON.stringify(emit)).join(\", \")}, got ${JSON.stringify(values.emit)}`);\n }\n if (typeof values.source !== \"string\" || !values.source)\n {\n values.source = DEFAULT_VALUES.source;\n }\n values.classes = Object.prototype.hasOwnProperty.call(options, \"classes\")\n ? mergeClasses(base.classes || {}, options.classes, readerName)\n : { ...(base.classes || {}) };\n\n return {\n emit: values.emit,\n source: values.source,\n permutation: values.permutation ?? null,\n classes: values.classes\n };\n}\n\n/**\n * Normalize caller input into a Uint8Array of Tr2 effect bytes.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate payload.\n * @returns {Uint8Array} The payload bytes.\n */\r/**\n * The shared read path used by the instance Read, Inspect, and the static\n * one-shots: normalizes input bytes and loads a HlslEffectRes graph. This is\n * internal parsing machinery — the documented public contract is the plain\n * JSON shape produced by {@link readWithValues}, not this raw graph.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect payload.\n * @param {object} values Normalized format values.\n * @returns {HlslEffectRes} The loaded effect resource graph.\n */\nexport function readRaw(input, values)\n{\n const bytes = asUint8Array(input, \"CjsHlslFormat input\");\n const effect = new HlslEffectRes();\n const ok = effect.DoLoad(bytes, { source: values.source });\n\n if (!ok)\n {\n throw new HlslEffectReadError(\n effect.loadError ? effect.loadError.message : \"Failed to read Tr2 effect resource\",\n {\n source: values.source,\n cause: effect.loadError || null\n }\n );\n }\n\n return effect;\n}\n\n/**\n * Resolves one permutation's HlslShader from a loaded effect, tolerating\n * bodies that fail to decode (returns null instead of throwing).\n *\n * @param {HlslEffectRes} effect Loaded effect resource graph.\n * @param {object} values Normalized format values.\n * @returns {object|null} Resolved HlslShader, or null.\n */\nfunction resolveShader(effect, values)\n{\n try\n {\n return effect.GetShader(values.permutation || []);\n }\n catch\n {\n return null;\n }\n}\n\n/**\n * Shared read entry honouring the emit mode.\n *\n * `emit: \"raw\"` returns the live HlslEffectRes instance — internal,\n * unstable, and not schema-guaranteed across versions. `emit: \"json\"`\n * (the default) returns the documented plain-data effect graph, honouring\n * `values.classes`.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect payload.\n * @param {object} values Normalized format values.\n * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, or the documented JSON graph.\n */\nexport function readWithValues(input, values)\n{\n const effect = readRaw(input, values);\n if (values.emit === OUTPUT_RAW) return effect;\n\n const shader = resolveShader(effect, values);\n if (values.emit === OUTPUT_METADATA)\n {\n const selection = resolveSelectedOptions(effect, values.permutation || []);\n return emitEffectMetadata(effect, shader, selection);\n }\n\n return emitEffectJson(effect, shader, { classes: values.classes });\n}\n\n/**\n * Cheap inspection: effect header facts plus the default permutation's\n * technique names and stage counts, without a full JSON conversion of the\n * decoded graph.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect payload.\n * @param {object} values Normalized format values.\n * @returns {object} Plain summary data.\n */\nexport function inspectWithValues(input, values)\n{\n const effect = readRaw(input, values);\n\n const summary = {\n source: values.source,\n version: effect.m_version,\n compilerVersion: effect.m_compilerVersion,\n isGood: effect.IsGood(),\n permutationCount: effect.m_permutations.length,\n bodyCount: effect.m_offsetCount,\n effectName: null,\n techniques: []\n };\n\n try\n {\n const shader = effect.GetShader(values.permutation || []);\n if (shader)\n {\n const description = shader.GetEffectDescription();\n summary.effectName = description.effectName || null;\n summary.techniques = description.techniques.map((technique) => ({\n name: technique.name,\n passCount: technique.passes.length,\n stageCounts: technique.passes.map(\n (pass) => pass.stageInputs.filter((stage) => stage && stage.m_exists).length\n )\n }));\n }\n }\n catch (error)\n {\n summary.inspectError = { name: error.name, message: error.message };\n }\n\n return summary;\n}\n\n/**\n * Deep-convert a value to plain JSON-compatible data. Typed arrays become\n * plain number arrays; Maps/Sets become objects/arrays; class instances\n * with toJSON are honoured.\n *\n * @param {any} value Value to convert.\n * @returns {any} Plain data.\n */\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined) return value ?? null;\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"bigint\") return value.toString();\n if (ArrayBuffer.isView(value)) return Array.from(value);\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value instanceof Map)\n {\n const out = {};\n for (const [ key, entry ] of value) out[key] = toJsonValue(entry);\n return out;\n }\n if (value instanceof Set) return Array.from(value, toJsonValue);\n if (typeof value === \"object\")\n {\n if (typeof value.toJSON === \"function\") return toJsonValue(value.toJSON());\n const out = {};\n for (const key of Object.keys(value)) out[key] = toJsonValue(value[key]);\n return out;\n }\n return null;\n}\n\nexport { HlslEffectReadError };\nexport { CLASS_KEYS };\n\n"],"names":["OUTPUT_JSON","OUTPUT_RAW","OUTPUT_METADATA","DEFAULT_VALUES","Object","freeze","emit","source","permutation","classes","VALID_EMITS","Set","OPTION_KEYS","validateClassKey","key","readerName","CLASS_KEYS","includes","Error","JSON","stringify","join","validateClass","Class","TypeError","mergeClasses","base","next","entries","undefined","normalizeValues","options","keys","has","values","Array","from","prototype","hasOwnProperty","call","readRaw","input","bytes","asUint8Array","effect","HlslEffectRes","ok","DoLoad","HlslEffectReadError","loadError","message","cause","resolveShader","GetShader","readWithValues","shader","selection","resolveSelectedOptions","emitEffectMetadata","emitEffectJson","inspectWithValues","summary","version","m_version","compilerVersion","m_compilerVersion","isGood","IsGood","permutationCount","m_permutations","length","bodyCount","m_offsetCount","effectName","techniques","description","GetEffectDescription","map","technique","name","passCount","passes","stageCounts","pass","stageInputs","filter","stage","m_exists","error","inspectError","toJsonValue","value","toString","ArrayBuffer","isView","isArray","Map","out","entry","toJSON"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../../src/resource/formats/hlsl/core/helpers.js"],"sourcesContent":["import { toJsonWithCollections as toJsonValue } from \"../../../format/jsonPolicies.js\";\nimport { asUint8Array } from \"#utils/bytes\";\n\n/**\n * Internal read-pipeline glue for CjsHlslFormat.\n *\n * Keeps the public class file small: input normalization, option/classes\n * normalization, the shared read path used by both the instance and the\n * static one-shots, and JSON conversion live here. The actual Tr2 effect\n * container parser lives under src/core/tr2 (internal parsing machinery,\n * not part of this package's public surface); this module wires bytes into\n * that graph and, for `emit: \"json\"`, converts it via src/core/json.js into\n * the documented plain-data shape.\n */\n\nimport { HlslEffectReadError } from \"./HlslEffectReadError.js\";\nimport {\n emitEffectMetadata,\n resolveSelectedOptions\n} from \"./metadata.js\";\nimport { HlslEffectRes } from \"./tr2/resources/HlslEffectRes.js\";\nimport { CLASS_KEYS, emitEffectJson } from \"./json.js\";\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_METADATA = \"metadata\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_JSON,\n source: \"memory\",\n permutation: null,\n classes: Object.freeze({})\n});\n\nconst VALID_EMITS = new Set([ OUTPUT_JSON, OUTPUT_RAW, OUTPUT_METADATA ]);\nconst OPTION_KEYS = new Set([ \"emit\", \"source\", \"permutation\", \"classes\" ]);\n\n/**\n * Validate a `classes` node key against {@link CLASS_KEYS}.\n *\n * @param {string} key Candidate node key.\n * @param {string} [readerName] Reader name used in the thrown error.\n */\nexport function validateClassKey(key, readerName = \"CjsHlslFormat\")\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(\", \")}`);\n }\n}\n\n/**\n * Validate a single `classes` entry: a known key mapped to a constructor.\n *\n * @param {string} key Node key.\n * @param {Function} Class Candidate constructor.\n * @param {string} [readerName] Reader name used in thrown errors.\n */\nexport function validateClass(key, Class, readerName = \"CjsHlslFormat\")\n{\n validateClassKey(key, readerName);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`${readerName}: class ${JSON.stringify(key)} must be a constructor`);\n }\n}\n\n/**\n * Merge and validate a `classes` map over a base map.\n *\n * @param {object} base Current classes map.\n * @param {object} classes Incoming classes map to merge in.\n * @param {string} readerName Reader name used in thrown errors.\n * @returns {object} Merged, validated classes map.\n */\nfunction mergeClasses(base, classes, readerName)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(`${readerName}: classes option must be an object`);\n }\n\n const next = { ...base };\n for (const [ key, Class ] of Object.entries(classes))\n {\n if (Class === null || Class === undefined)\n {\n delete next[key];\n continue;\n }\n validateClass(key, Class, readerName);\n next[key] = Class;\n }\n return next;\n}\n\n/**\n * Merge format values over a base set and validate them.\n *\n * @param {object} base Current values.\n * @param {object} [options] Values to merge in.\n * @param {string} [readerName] Reader name used in error messages.\n * @returns {object} A validated copy of the merged values.\n */\nexport function normalizeValues(base, options = {}, readerName = \"CjsHlslFormat\")\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n }\n\n const values = { ...base, ...options };\n\n if (!VALID_EMITS.has(values.emit))\n {\n throw new TypeError(`${readerName}: emit must be one of ${Array.from(VALID_EMITS, (emit) => JSON.stringify(emit)).join(\", \")}, got ${JSON.stringify(values.emit)}`);\n }\n if (typeof values.source !== \"string\" || !values.source)\n {\n values.source = DEFAULT_VALUES.source;\n }\n values.classes = Object.prototype.hasOwnProperty.call(options, \"classes\")\n ? mergeClasses(base.classes || {}, options.classes, readerName)\n : { ...(base.classes || {}) };\n\n return {\n emit: values.emit,\n source: values.source,\n permutation: values.permutation ?? null,\n classes: values.classes\n };\n}\n\n/**\n * Normalize caller input into a Uint8Array of Tr2 effect bytes.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate payload.\n * @returns {Uint8Array} The payload bytes.\n */\n/**\n * The shared read path used by the instance Read, Inspect, and the static\n * one-shots: normalizes input bytes and loads a HlslEffectRes graph. This is\n * internal parsing machinery — the documented public contract is the plain\n * JSON shape produced by {@link readWithValues}, not this raw graph.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect payload.\n * @param {object} values Normalized format values.\n * @returns {HlslEffectRes} The loaded effect resource graph.\n */\nexport function readRaw(input, values)\n{\n const bytes = asUint8Array(input, \"CjsHlslFormat input\");\n const effect = new HlslEffectRes();\n const ok = effect.DoLoad(bytes, { source: values.source });\n\n if (!ok)\n {\n throw new HlslEffectReadError(\n effect.loadError ? effect.loadError.message : \"Failed to read Tr2 effect resource\",\n {\n source: values.source,\n cause: effect.loadError || null\n }\n );\n }\n\n return effect;\n}\n\n/**\n * Resolves one permutation's HlslShader from a loaded effect, tolerating\n * bodies that fail to decode (returns null instead of throwing).\n *\n * @param {HlslEffectRes} effect Loaded effect resource graph.\n * @param {object} values Normalized format values.\n * @returns {object|null} Resolved HlslShader, or null.\n */\nfunction resolveShader(effect, values)\n{\n try\n {\n return effect.GetShader(values.permutation || []);\n }\n catch\n {\n return null;\n }\n}\n\n/**\n * Shared read entry honouring the emit mode.\n *\n * `emit: \"raw\"` returns the live HlslEffectRes instance — internal,\n * unstable, and not schema-guaranteed across versions. `emit: \"json\"`\n * (the default) returns the documented plain-data effect graph, honouring\n * `values.classes`.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect payload.\n * @param {object} values Normalized format values.\n * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, or the documented JSON graph.\n */\nexport function readWithValues(input, values)\n{\n const effect = readRaw(input, values);\n if (values.emit === OUTPUT_RAW) return effect;\n\n const shader = resolveShader(effect, values);\n if (values.emit === OUTPUT_METADATA)\n {\n const selection = resolveSelectedOptions(effect, values.permutation || []);\n return emitEffectMetadata(effect, shader, selection);\n }\n\n return emitEffectJson(effect, shader, { classes: values.classes });\n}\n\n/**\n * Cheap inspection: effect header facts plus the default permutation's\n * technique names and stage counts, without a full JSON conversion of the\n * decoded graph.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect payload.\n * @param {object} values Normalized format values.\n * @returns {object} Plain summary data.\n */\nexport function inspectWithValues(input, values)\n{\n const effect = readRaw(input, values);\n\n const summary = {\n source: values.source,\n version: effect.m_version,\n compilerVersion: effect.m_compilerVersion,\n isGood: effect.IsGood(),\n permutationCount: effect.m_permutations.length,\n bodyCount: effect.m_offsetCount,\n effectName: null,\n techniques: []\n };\n\n try\n {\n const shader = effect.GetShader(values.permutation || []);\n if (shader)\n {\n const description = shader.GetEffectDescription();\n summary.effectName = description.effectName || null;\n summary.techniques = description.techniques.map((technique) => ({\n name: technique.name,\n passCount: technique.passes.length,\n stageCounts: technique.passes.map(\n (pass) => pass.stageInputs.filter((stage) => stage && stage.m_exists).length\n )\n }));\n }\n }\n catch (error)\n {\n summary.inspectError = { name: error.name, message: error.message };\n }\n\n return summary;\n}\n\n/**\n * Deep-convert a value to plain JSON-compatible data. Typed arrays become\n * plain number arrays; Maps/Sets become objects/arrays; class instances\n * with toJSON are honoured.\n *\n * @param {any} value Value to convert.\n * @returns {any} Plain data.\n */\n/** The shared JSON policy for this reader, under the name its callers use. */\nexport { toJsonValue };\n\nexport { HlslEffectReadError };\nexport { CLASS_KEYS };\n\n"],"names":["OUTPUT_JSON","OUTPUT_RAW","OUTPUT_METADATA","DEFAULT_VALUES","Object","freeze","emit","source","permutation","classes","VALID_EMITS","Set","OPTION_KEYS","validateClassKey","key","readerName","CLASS_KEYS","includes","Error","JSON","stringify","join","validateClass","Class","TypeError","mergeClasses","base","next","entries","undefined","normalizeValues","options","keys","has","values","Array","from","prototype","hasOwnProperty","call","readRaw","input","bytes","asUint8Array","effect","HlslEffectRes","ok","DoLoad","HlslEffectReadError","loadError","message","cause","resolveShader","GetShader","readWithValues","shader","selection","resolveSelectedOptions","emitEffectMetadata","emitEffectJson","inspectWithValues","summary","version","m_version","compilerVersion","m_compilerVersion","isGood","IsGood","permutationCount","m_permutations","length","bodyCount","m_offsetCount","effectName","techniques","description","GetEffectDescription","map","technique","name","passCount","passes","stageCounts","pass","stageInputs","filter","stage","m_exists","error","inspectError"],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { asUint8Array } from '#utils/bytes';
|
|
2
2
|
import { CjsFormat } from '../../format/CjsFormat.js';
|
|
3
|
-
import { DEFAULT_VALUES, normalizeValues, readWithValues, inspectWithValues,
|
|
3
|
+
import { DEFAULT_VALUES, normalizeValues, readWithValues, inspectWithValues, probeSupportWithValues, isJPG, OUTPUT_JSON, OUTPUT_RAW, OUTPUT_RGBA, OUTPUT_IMAGE } from './core/helpers.js';
|
|
4
4
|
import { encodeJpeg } from './core/writer.js';
|
|
5
|
+
import { toJsonWithByteSummary } from '../../format/jsonPolicies.js';
|
|
6
|
+
import { isJPEG } from '../../format/imageSignatures.js';
|
|
5
7
|
|
|
6
8
|
const FORMAT_NAME = "CjsJpegFormat";
|
|
7
9
|
|
|
@@ -106,7 +108,7 @@ class CjsJpegFormat extends CjsFormat {
|
|
|
106
108
|
* @returns {any} JSON-compatible value.
|
|
107
109
|
*/
|
|
108
110
|
ToJSON(value) {
|
|
109
|
-
return
|
|
111
|
+
return toJsonWithByteSummary(value);
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
/**
|
|
@@ -180,7 +182,7 @@ class CjsJpegFormat extends CjsFormat {
|
|
|
180
182
|
* @returns {any} JSON-compatible value.
|
|
181
183
|
*/
|
|
182
184
|
static toJSON(value) {
|
|
183
|
-
return
|
|
185
|
+
return toJsonWithByteSummary(value);
|
|
184
186
|
}
|
|
185
187
|
|
|
186
188
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CjsJpegFormat.js","sources":["../../../../../src/resource/formats/jpeg/CjsJpegFormat.js"],"sourcesContent":["import { asUint8Array } from \"#utils/bytes\";\nimport { CjsFormat } from \"../../format/CjsFormat.js\";\nimport {\n DEFAULT_VALUES,\n OUTPUT_IMAGE,\n OUTPUT_JSON,\n OUTPUT_RAW,\n OUTPUT_RGBA,\n inspectWithValues,\n isJPEG,\n isJPG,\n probeSupportWithValues,\n normalizeValues,\n readWithValues,\n toJsonValue\n} from \"./core/helpers.js\";\nimport { encodeJpeg } from \"./core/writer.js\";\n\nconst FORMAT_NAME = \"CjsJpegFormat\";\n\n/**\n * JPEG format profile that inspects marker and header metadata and reads\n * baseline JPEG bytes into raw, debug JSON, or RGBA payloads through the\n * in-project baseline decoder.\n */\nexport class CjsJpegFormat extends CjsFormat\n{\n #values = DEFAULT_VALUES;\n\n /**\n * Create a reusable JPEG format profile.\n *\n * @param {object} [options] Default read/inspect options.\n */\n constructor(options = {})\n {\n super();\n this.SetValues(options);\n }\n\n /**\n * Merge options into this profile.\n *\n * @param {object} [options] Values to merge.\n * @returns {CjsJpegFormat} This format profile.\n */\n SetValues(options = {})\n {\n this.#values = normalizeValues(this.#values, { inputType: \"jpeg\", ...options }, FORMAT_NAME);\n return this;\n }\n\n /**\n * Get normalized profile values with optional per-call overrides.\n *\n * @param {object} [options] Per-call values.\n * @returns {object} Normalized read values.\n */\n GetValues(options = {})\n {\n return normalizeValues(this.#values, { inputType: \"jpeg\", ...options }, FORMAT_NAME);\n }\n\n /**\n * Read JPEG bytes with this profile.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} GPU-free raw/debug payload for the selected emit target.\n */\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options), \"jpeg\");\n }\n\n /**\n * Read JPEG bytes asynchronously with this profile.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Per-call values.\n * @returns {Promise<object>} GPU-free raw/debug payload for the selected emit target.\n */\n async ReadAsync(input, options = {})\n {\n return this.Read(input, options);\n }\n\n /**\n * Write a normalized RGBA payload as baseline JPEG bytes.\n *\n * The counterpart of the `rgba` emit target, and it takes exactly what that\n * produces - so any image format in this package converts to JPEG through\n * its own reader and this writer, with no canvas and no second library.\n *\n * @param {object} payload `{ width, height, data }`, as the image formats\n * emit for `rgba`; `strideBytes` and `origin` are honoured when present.\n * @param {object} [options] `quality` 0..1 and `subsampling`.\n * @returns {Uint8Array} JPEG bytes.\n */\n Write(payload, options = {})\n {\n return encodeJpeg(payload, options);\n }\n\n /**\n * Inspect JPEG bytes without decoding image data.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} JPEG marker/header metadata.\n */\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options), \"jpeg\");\n }\n\n /**\n * Convert format output into JSON-compatible debug data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * One-shot JPEG read.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Read options.\n * @returns {object} GPU-free raw/debug payload for the selected emit target.\n */\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"jpeg\", ...options }, FORMAT_NAME), \"jpeg\");\n }\n\n /**\n * One-shot asynchronous JPEG read.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Read options.\n * @returns {Promise<object>} GPU-free raw/debug payload for the selected emit target.\n */\n static async readAsync(input, options = {})\n {\n return CjsJpegFormat.read(input, options);\n }\n\n /**\n * One-shot JPEG write from a normalized RGBA payload.\n *\n * @param {object} payload `{ width, height, data }` as emitted for `rgba`.\n * @param {object} [options] `quality` 0..1 and `subsampling`.\n * @returns {Uint8Array} JPEG bytes.\n */\n static write(payload, options = {})\n {\n return encodeJpeg(payload, options);\n }\n\n /**\n * One-shot JPEG inspection.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Inspect options.\n * @returns {object} JPEG marker/header metadata.\n */\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"jpeg\", ...options }, FORMAT_NAME), \"jpeg\");\n }\n\n /**\n * One-shot JPEG support probe.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Probe options.\n * @returns {object} Support/probe report.\n */\n static probeSupport(input, options = {})\n {\n return probeSupportWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"jpeg\", ...options }, FORMAT_NAME), \"jpeg\");\n }\n\n /**\n * Convert format output into JSON-compatible debug data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * Test whether bytes look like a JPEG file.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Candidate JPEG bytes.\n * @returns {boolean} True when a JPEG SOI marker is present.\n */\n static isJPEG(input)\n {\n try\n {\n return isJPEG(asUint8Array(input, \"Image input\"));\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Test whether bytes look like a JPG/JPEG file.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Candidate JPG bytes.\n * @returns {boolean} True when a JPEG SOI marker is present.\n */\n static isJPG(input)\n {\n try\n {\n return isJPG(asUint8Array(input, \"Image input\"));\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Emit targets for this format (canonical frozen enum).\n */\n static Output = Object.freeze({\n IMAGE: OUTPUT_IMAGE,\n RGBA: OUTPUT_RGBA,\n RAW: OUTPUT_RAW,\n JSON: OUTPUT_JSON\n });\n static OUTPUT_JPEG_JSON = \"jpegJson\";\n static id = \"jpeg\";\n static mediaTypes = Object.freeze([ \"image\" ]);\n static inputs = CjsFormat.defineInputs({\n rgba: { default: true, lossy: true, options: [ \"quality\", \"subsampling\" ] }\n });\n\n static outputs = CjsFormat.defineOutputs({\n image: { decoded: true, probes: [ \"image\", \"rgba\" ] },\n rgba: { decoded: true },\n jpegJson: { role: \"debug\", probes: [ \"jpegJson\", \"raw\" ] },\n raw: { role: \"debug\", default: true, passthrough: true }\n });\n static extensions = Object.freeze([ \".jpg\", \".jpeg\" ]);\n}\n\nexport default CjsJpegFormat;\n"],"names":["FORMAT_NAME","CjsJpegFormat","CjsFormat","DEFAULT_VALUES","constructor","options","SetValues","normalizeValues","inputType","GetValues","Read","input","readWithValues","ReadAsync","Write","payload","encodeJpeg","Inspect","inspectWithValues","ToJSON","value","toJsonValue","read","readAsync","write","inspect","probeSupport","probeSupportWithValues","toJSON","isJPEG","asUint8Array","isJPG","Output","Object","freeze","IMAGE","OUTPUT_IMAGE","RGBA","OUTPUT_RGBA","RAW","OUTPUT_RAW","JSON","OUTPUT_JSON","OUTPUT_JPEG_JSON","id","mediaTypes","inputs","defineInputs","rgba","default","lossy","outputs","defineOutputs","image","decoded","probes","jpegJson","role","raw","passthrough","extensions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CjsJpegFormat.js","sources":["../../../../../src/resource/formats/jpeg/CjsJpegFormat.js"],"sourcesContent":["import { asUint8Array } from \"#utils/bytes\";\nimport { CjsFormat } from \"../../format/CjsFormat.js\";\nimport {\n DEFAULT_VALUES,\n OUTPUT_IMAGE,\n OUTPUT_JSON,\n OUTPUT_RAW,\n OUTPUT_RGBA,\n inspectWithValues,\n isJPEG,\n isJPG,\n probeSupportWithValues,\n normalizeValues,\n readWithValues,\n toJsonValue\n} from \"./core/helpers.js\";\nimport { encodeJpeg } from \"./core/writer.js\";\n\nconst FORMAT_NAME = \"CjsJpegFormat\";\n\n/**\n * JPEG format profile that inspects marker and header metadata and reads\n * baseline JPEG bytes into raw, debug JSON, or RGBA payloads through the\n * in-project baseline decoder.\n */\nexport class CjsJpegFormat extends CjsFormat\n{\n #values = DEFAULT_VALUES;\n\n /**\n * Create a reusable JPEG format profile.\n *\n * @param {object} [options] Default read/inspect options.\n */\n constructor(options = {})\n {\n super();\n this.SetValues(options);\n }\n\n /**\n * Merge options into this profile.\n *\n * @param {object} [options] Values to merge.\n * @returns {CjsJpegFormat} This format profile.\n */\n SetValues(options = {})\n {\n this.#values = normalizeValues(this.#values, { inputType: \"jpeg\", ...options }, FORMAT_NAME);\n return this;\n }\n\n /**\n * Get normalized profile values with optional per-call overrides.\n *\n * @param {object} [options] Per-call values.\n * @returns {object} Normalized read values.\n */\n GetValues(options = {})\n {\n return normalizeValues(this.#values, { inputType: \"jpeg\", ...options }, FORMAT_NAME);\n }\n\n /**\n * Read JPEG bytes with this profile.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} GPU-free raw/debug payload for the selected emit target.\n */\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options), \"jpeg\");\n }\n\n /**\n * Read JPEG bytes asynchronously with this profile.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Per-call values.\n * @returns {Promise<object>} GPU-free raw/debug payload for the selected emit target.\n */\n async ReadAsync(input, options = {})\n {\n return this.Read(input, options);\n }\n\n /**\n * Write a normalized RGBA payload as baseline JPEG bytes.\n *\n * The counterpart of the `rgba` emit target, and it takes exactly what that\n * produces - so any image format in this package converts to JPEG through\n * its own reader and this writer, with no canvas and no second library.\n *\n * @param {object} payload `{ width, height, data }`, as the image formats\n * emit for `rgba`; `strideBytes` and `origin` are honoured when present.\n * @param {object} [options] `quality` 0..1 and `subsampling`.\n * @returns {Uint8Array} JPEG bytes.\n */\n Write(payload, options = {})\n {\n return encodeJpeg(payload, options);\n }\n\n /**\n * Inspect JPEG bytes without decoding image data.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} JPEG marker/header metadata.\n */\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options), \"jpeg\");\n }\n\n /**\n * Convert format output into JSON-compatible debug data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * One-shot JPEG read.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Read options.\n * @returns {object} GPU-free raw/debug payload for the selected emit target.\n */\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"jpeg\", ...options }, FORMAT_NAME), \"jpeg\");\n }\n\n /**\n * One-shot asynchronous JPEG read.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Read options.\n * @returns {Promise<object>} GPU-free raw/debug payload for the selected emit target.\n */\n static async readAsync(input, options = {})\n {\n return CjsJpegFormat.read(input, options);\n }\n\n /**\n * One-shot JPEG write from a normalized RGBA payload.\n *\n * @param {object} payload `{ width, height, data }` as emitted for `rgba`.\n * @param {object} [options] `quality` 0..1 and `subsampling`.\n * @returns {Uint8Array} JPEG bytes.\n */\n static write(payload, options = {})\n {\n return encodeJpeg(payload, options);\n }\n\n /**\n * One-shot JPEG inspection.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Inspect options.\n * @returns {object} JPEG marker/header metadata.\n */\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"jpeg\", ...options }, FORMAT_NAME), \"jpeg\");\n }\n\n /**\n * One-shot JPEG support probe.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input JPEG bytes.\n * @param {object} [options] Probe options.\n * @returns {object} Support/probe report.\n */\n static probeSupport(input, options = {})\n {\n return probeSupportWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"jpeg\", ...options }, FORMAT_NAME), \"jpeg\");\n }\n\n /**\n * Convert format output into JSON-compatible debug data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * Test whether bytes look like a JPEG file.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Candidate JPEG bytes.\n * @returns {boolean} True when a JPEG SOI marker is present.\n */\n static isJPEG(input)\n {\n try\n {\n return isJPEG(asUint8Array(input, \"Image input\"));\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Test whether bytes look like a JPG/JPEG file.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Candidate JPG bytes.\n * @returns {boolean} True when a JPEG SOI marker is present.\n */\n static isJPG(input)\n {\n try\n {\n return isJPG(asUint8Array(input, \"Image input\"));\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Emit targets for this format (canonical frozen enum).\n */\n static Output = Object.freeze({\n IMAGE: OUTPUT_IMAGE,\n RGBA: OUTPUT_RGBA,\n RAW: OUTPUT_RAW,\n JSON: OUTPUT_JSON\n });\n static OUTPUT_JPEG_JSON = \"jpegJson\";\n static id = \"jpeg\";\n static mediaTypes = Object.freeze([ \"image\" ]);\n static inputs = CjsFormat.defineInputs({\n rgba: { default: true, lossy: true, options: [ \"quality\", \"subsampling\" ] }\n });\n\n static outputs = CjsFormat.defineOutputs({\n image: { decoded: true, probes: [ \"image\", \"rgba\" ] },\n rgba: { decoded: true },\n jpegJson: { role: \"debug\", probes: [ \"jpegJson\", \"raw\" ] },\n raw: { role: \"debug\", default: true, passthrough: true }\n });\n static extensions = Object.freeze([ \".jpg\", \".jpeg\" ]);\n}\n\nexport default CjsJpegFormat;\n"],"names":["FORMAT_NAME","CjsJpegFormat","CjsFormat","DEFAULT_VALUES","constructor","options","SetValues","normalizeValues","inputType","GetValues","Read","input","readWithValues","ReadAsync","Write","payload","encodeJpeg","Inspect","inspectWithValues","ToJSON","value","toJsonValue","read","readAsync","write","inspect","probeSupport","probeSupportWithValues","toJSON","isJPEG","asUint8Array","isJPG","Output","Object","freeze","IMAGE","OUTPUT_IMAGE","RGBA","OUTPUT_RGBA","RAW","OUTPUT_RAW","JSON","OUTPUT_JSON","OUTPUT_JPEG_JSON","id","mediaTypes","inputs","defineInputs","rgba","default","lossy","outputs","defineOutputs","image","decoded","probes","jpegJson","role","raw","passthrough","extensions"],"mappings":";;;;;;;AAkBA,MAAMA,WAAW,GAAG,eAAe;;AAEnC;AACA;AACA;AACA;AACA;AACO,MAAMC,aAAa,SAASC,SAAS,CAC5C;EACI,OAAO,GAAGC,cAAc;;AAExB;AACJ;AACA;AACA;AACA;AACIC,EAAAA,WAAWA,CAACC,OAAO,GAAG,EAAE,EACxB;AACI,IAAA,KAAK,EAAE;AACP,IAAA,IAAI,CAACC,SAAS,CAACD,OAAO,CAAC;AAC3B,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACIC,EAAAA,SAASA,CAACD,OAAO,GAAG,EAAE,EACtB;IACI,IAAI,CAAC,OAAO,GAAGE,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE;AAAEC,MAAAA,SAAS,EAAE,MAAM;MAAE,GAAGH;KAAS,EAAEL,WAAW,CAAC;AAC5F,IAAA,OAAO,IAAI;AACf,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACIS,EAAAA,SAASA,CAACJ,OAAO,GAAG,EAAE,EACtB;AACI,IAAA,OAAOE,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE;AAAEC,MAAAA,SAAS,EAAE,MAAM;MAAE,GAAGH;KAAS,EAAEL,WAAW,CAAC;AACxF,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACIU,EAAAA,IAAIA,CAACC,KAAK,EAAEN,OAAO,GAAG,EAAE,EACxB;AACI,IAAA,OAAOO,cAAc,CAACD,KAAK,EAAE,IAAI,CAACF,SAAS,CAACJ,OAAO,CAAC,EAAE,MAAM,CAAC;AACjE,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,MAAMQ,SAASA,CAACF,KAAK,EAAEN,OAAO,GAAG,EAAE,EACnC;AACI,IAAA,OAAO,IAAI,CAACK,IAAI,CAACC,KAAK,EAAEN,OAAO,CAAC;AACpC,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACIS,EAAAA,KAAKA,CAACC,OAAO,EAAEV,OAAO,GAAG,EAAE,EAC3B;AACI,IAAA,OAAOW,UAAU,CAACD,OAAO,EAAEV,OAAO,CAAC;AACvC,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACIY,EAAAA,OAAOA,CAACN,KAAK,EAAEN,OAAO,GAAG,EAAE,EAC3B;AACI,IAAA,OAAOa,iBAAiB,CAACP,KAAK,EAAE,IAAI,CAACF,SAAS,CAACJ,OAAO,CAAC,EAAE,MAAM,CAAC;AACpE,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;EACIc,MAAMA,CAACC,KAAK,EACZ;IACI,OAAOC,qBAAW,CAACD,KAAK,CAAC;AAC7B,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,OAAOE,IAAIA,CAACX,KAAK,EAAEN,OAAO,GAAG,EAAE,EAC/B;AACI,IAAA,OAAOO,cAAc,CAACD,KAAK,EAAEJ,eAAe,CAACJ,cAAc,EAAE;AAAEK,MAAAA,SAAS,EAAE,MAAM;MAAE,GAAGH;AAAQ,KAAC,EAAEL,WAAW,CAAC,EAAE,MAAM,CAAC;AACzH,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,aAAauB,SAASA,CAACZ,KAAK,EAAEN,OAAO,GAAG,EAAE,EAC1C;AACI,IAAA,OAAOJ,aAAa,CAACqB,IAAI,CAACX,KAAK,EAAEN,OAAO,CAAC;AAC7C,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,OAAOmB,KAAKA,CAACT,OAAO,EAAEV,OAAO,GAAG,EAAE,EAClC;AACI,IAAA,OAAOW,UAAU,CAACD,OAAO,EAAEV,OAAO,CAAC;AACvC,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,OAAOoB,OAAOA,CAACd,KAAK,EAAEN,OAAO,GAAG,EAAE,EAClC;AACI,IAAA,OAAOa,iBAAiB,CAACP,KAAK,EAAEJ,eAAe,CAACJ,cAAc,EAAE;AAAEK,MAAAA,SAAS,EAAE,MAAM;MAAE,GAAGH;AAAQ,KAAC,EAAEL,WAAW,CAAC,EAAE,MAAM,CAAC;AAC5H,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,OAAO0B,YAAYA,CAACf,KAAK,EAAEN,OAAO,GAAG,EAAE,EACvC;AACI,IAAA,OAAOsB,sBAAsB,CAAChB,KAAK,EAAEJ,eAAe,CAACJ,cAAc,EAAE;AAAEK,MAAAA,SAAS,EAAE,MAAM;MAAE,GAAGH;AAAQ,KAAC,EAAEL,WAAW,CAAC,EAAE,MAAM,CAAC;AACjI,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;EACI,OAAO4B,MAAMA,CAACR,KAAK,EACnB;IACI,OAAOC,qBAAW,CAACD,KAAK,CAAC;AAC7B,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;EACI,OAAOS,MAAMA,CAAClB,KAAK,EACnB;IACI,IACA;MACI,OAAOkB,MAAM,CAACC,YAAY,CAACnB,KAAK,EAAE,aAAa,CAAC,CAAC;AACrD,IAAA,CAAC,CACD,MACA;AACI,MAAA,OAAO,KAAK;AAChB,IAAA;AACJ,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;EACI,OAAOoB,KAAKA,CAACpB,KAAK,EAClB;IACI,IACA;MACI,OAAOoB,KAAK,CAACD,YAAY,CAACnB,KAAK,EAAE,aAAa,CAAC,CAAC;AACpD,IAAA,CAAC,CACD,MACA;AACI,MAAA,OAAO,KAAK;AAChB,IAAA;AACJ,EAAA;;AAEA;AACJ;AACA;AACI,EAAA,OAAOqB,MAAM,GAAGC,MAAM,CAACC,MAAM,CAAC;AAC1BC,IAAAA,KAAK,EAAEC,YAAY;AACnBC,IAAAA,IAAI,EAAEC,WAAW;AACjBC,IAAAA,GAAG,EAAEC,UAAU;AACfC,IAAAA,IAAI,EAAEC;AACV,GAAC,CAAC;EACF,OAAOC,gBAAgB,GAAG,UAAU;EACpC,OAAOC,EAAE,GAAG,MAAM;EAClB,OAAOC,UAAU,GAAGZ,MAAM,CAACC,MAAM,CAAC,CAAE,OAAO,CAAE,CAAC;AAC9C,EAAA,OAAOY,MAAM,GAAG5C,SAAS,CAAC6C,YAAY,CAAC;AACnCC,IAAAA,IAAI,EAAE;AAAEC,MAAAA,OAAO,EAAE,IAAI;AAAEC,MAAAA,KAAK,EAAE,IAAI;AAAE7C,MAAAA,OAAO,EAAE,CAAE,SAAS,EAAE,aAAa;AAAG;AAC9E,GAAC,CAAC;AAEF,EAAA,OAAO8C,OAAO,GAAGjD,SAAS,CAACkD,aAAa,CAAC;AACrCC,IAAAA,KAAK,EAAE;AAAEC,MAAAA,OAAO,EAAE,IAAI;AAAEC,MAAAA,MAAM,EAAE,CAAE,OAAO,EAAE,MAAM;KAAI;AACrDP,IAAAA,IAAI,EAAE;AAAEM,MAAAA,OAAO,EAAE;KAAM;AACvBE,IAAAA,QAAQ,EAAE;AAAEC,MAAAA,IAAI,EAAE,OAAO;AAAEF,MAAAA,MAAM,EAAE,CAAE,UAAU,EAAE,KAAK;KAAI;AAC1DG,IAAAA,GAAG,EAAE;AAAED,MAAAA,IAAI,EAAE,OAAO;AAAER,MAAAA,OAAO,EAAE,IAAI;AAAEU,MAAAA,WAAW,EAAE;AAAK;AAC3D,GAAC,CAAC;EACF,OAAOC,UAAU,GAAG3B,MAAM,CAACC,MAAM,CAAC,CAAE,MAAM,EAAE,OAAO,CAAE,CAAC;AAC1D;;;;"}
|