@carbonenginejs/runtime-resource 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +6 -0
- package/dist/CjsResMan.js +1374 -1318
- package/dist/CjsResMan.js.map +1 -1
- package/dist/format/CjsFormat.js +393 -164
- package/dist/format/CjsFormat.js.map +1 -1
- package/dist/format/CjsFormatStore.js +315 -0
- package/dist/format/CjsFormatStore.js.map +1 -0
- package/dist/format/CjsResourceProbe.js +66 -234
- package/dist/format/CjsResourceProbe.js.map +1 -1
- package/dist/format/payloadContract.js +47 -6
- package/dist/format/payloadContract.js.map +1 -1
- package/dist/formats/black/CjsBlackFormat.js +23 -6
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/formats/bnk/CjsBnkFormat.js +122 -120
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/helpers.js +5 -15
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/cmf/CjsCmfFormat.js +31 -14
- package/dist/formats/cmf/CjsCmfFormat.js.map +1 -1
- package/dist/formats/dds/CjsDdsFormat.js +29 -19
- package/dist/formats/dds/CjsDdsFormat.js.map +1 -1
- package/dist/formats/dds/core/helpers.js +4 -5
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dxbc/CjsDxbcFormat.js +15 -13
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/formats/fbx/CjsFbxFormat.js +27 -19
- package/dist/formats/fbx/CjsFbxFormat.js.map +1 -1
- package/dist/formats/fbx/core/helpers.js +4 -4
- package/dist/formats/fbx/core/helpers.js.map +1 -1
- package/dist/formats/flac/CjsFlacFormat.js +19 -17
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/formats/flac/core/helpers.js +5 -11
- package/dist/formats/flac/core/helpers.js.map +1 -1
- package/dist/formats/fsd/32/CjsFsd32Format.js +55 -0
- package/dist/formats/fsd/32/CjsFsd32Format.js.map +1 -0
- package/dist/formats/fsd/32/index.js +2 -0
- package/dist/formats/fsd/32/index.js.map +1 -0
- package/dist/formats/fsd/64/CjsFsd64Format.js +119 -0
- package/dist/formats/fsd/64/CjsFsd64Format.js.map +1 -0
- package/dist/formats/fsd/64/core/CjsFsd64Binary.js +393 -0
- package/dist/formats/fsd/64/core/CjsFsd64Binary.js.map +1 -0
- package/dist/formats/fsd/64/core/CjsFsd64Reader.js +138 -0
- package/dist/formats/fsd/64/core/CjsFsd64Reader.js.map +1 -0
- package/dist/formats/fsd/64/core/CjsFsd64SchemaDecoder.js +389 -0
- package/dist/formats/fsd/64/core/CjsFsd64SchemaDecoder.js.map +1 -0
- package/dist/formats/fsd/64/core/CjsFsd64SchemaReader.js +43 -0
- package/dist/formats/fsd/64/core/CjsFsd64SchemaReader.js.map +1 -0
- package/dist/formats/fsd/64/core/fsd64Records.js +60 -0
- package/dist/formats/fsd/64/core/fsd64Records.js.map +1 -0
- package/dist/formats/fsd/64/index.js +7 -0
- package/dist/formats/fsd/64/index.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64ReaderSetCharacterStaticData.js +33 -0
- package/dist/formats/fsd/64/readers/CjsFsd64ReaderSetCharacterStaticData.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaAgentTypes.js +35 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaAgentTypes.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaAgentsInSpace.js +50 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaAgentsInSpace.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaAncestries.js +75 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaAncestries.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaArchetypes.js +57 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaArchetypes.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaAudioMetadata.js +201 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaAudioMetadata.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaBloodlines.js +73 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaBloodlines.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCategories.js +53 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCategories.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterAvatarBehaviors.js +44 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterAvatarBehaviors.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterColorLocations.js +38 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterColorLocations.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterColorNames.js +34 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterColorNames.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterModifierLocations.js +34 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterModifierLocations.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterPortraitResources.js +44 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterPortraitResources.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterResources.js +81 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterResources.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterSculptingLocations.js +34 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCharacterSculptingLocations.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCompressibleTypes.js +41 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCompressibleTypes.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaContrabandTypes.js +63 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaContrabandTypes.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaControlTowerResources.js +76 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaControlTowerResources.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCorporationActivities.js +38 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCorporationActivities.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCorporationRoleGroups.js +74 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCorporationRoleGroups.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCorporationRoles.js +59 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaCorporationRoles.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDogmaAttributeCategories.js +46 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDogmaAttributeCategories.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDogmaAttributes.js +133 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDogmaAttributes.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDogmaEffects.js +236 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDogmaEffects.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDogmaUnits.js +60 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDogmaUnits.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDynamicItemAttributes.js +95 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaDynamicItemAttributes.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaEpicArcs.js +106 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaEpicArcs.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaExpertSystems.js +86 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaExpertSystems.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaFactions.js +117 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaFactions.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaGraphicIds.js +70 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaGraphicIds.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaGraphicMaterialSets.js +173 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaGraphicMaterialSets.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaGroups.js +77 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaGroups.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaIcons.js +62 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaIcons.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaMarketGroups.js +63 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaMarketGroups.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaMetaGroups.js +86 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaMetaGroups.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaNpcCorporationDivisions.js +72 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaNpcCorporationDivisions.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaNpcCorporations.js +326 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaNpcCorporations.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaPaperdolls.js +279 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaPaperdolls.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaRaces.js +64 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaRaces.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSchoolMap.js +40 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSchoolMap.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSchools.js +113 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSchools.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkillPlans.js +130 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkillPlans.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrComponentCategories.js +38 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrComponentCategories.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrComponentPointValues.js +45 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrComponentPointValues.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrComponentRarities.js +44 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrComponentRarities.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrComponents.js +163 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrComponents.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrSlotCategories.js +37 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrSlotCategories.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrSlotConfigurations.js +77 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrSlotConfigurations.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrSlotNames.js +37 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrSlotNames.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrSlots.js +74 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrSlots.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrTierThresholds.js +44 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaSkinrTierThresholds.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaStationOperations.js +120 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaStationOperations.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaStationServices.js +49 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaStationServices.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaTypeDogma.js +73 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaTypeDogma.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaTypeLists.js +122 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaTypeLists.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaTypeMaterials.js +83 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaTypeMaterials.js.map +1 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaTypes.js +194 -0
- package/dist/formats/fsd/64/readers/CjsFsd64SchemaTypes.js.map +1 -0
- package/dist/formats/fsd/64/readers/index.js +58 -0
- package/dist/formats/fsd/64/readers/index.js.map +1 -0
- package/dist/formats/fsd/CjsFsdFormat.js +62 -0
- package/dist/formats/fsd/CjsFsdFormat.js.map +1 -0
- package/dist/formats/fsd/index.js +9 -0
- package/dist/formats/fsd/index.js.map +1 -0
- package/dist/formats/gif/CjsGifFormat.js +26 -16
- package/dist/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/formats/gif/core/helpers.js +6 -18
- package/dist/formats/gif/core/helpers.js.map +1 -1
- package/dist/formats/gltf/CjsGltfFormat.js +25 -13
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/formats/gr2/CjsGr2Format.js +27 -6
- package/dist/formats/gr2/CjsGr2Format.js.map +1 -1
- package/dist/formats/hlsl/CjsHlslFormat.js +20 -16
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/formats/hlsl/core/analysis.js +1 -1
- package/dist/formats/index.js +5 -0
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/jpeg/CjsJpegFormat.js +26 -19
- package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -1
- package/dist/formats/jpeg/core/helpers.js +6 -15
- package/dist/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/formats/jpeg/core/jpeg.js +0 -3
- package/dist/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/formats/mp3/CjsMp3Format.js +19 -19
- package/dist/formats/mp3/CjsMp3Format.js.map +1 -1
- package/dist/formats/mp3/core/helpers.js +5 -11
- package/dist/formats/mp3/core/helpers.js.map +1 -1
- package/dist/formats/mp4/CjsMp4Format.js +20 -19
- package/dist/formats/mp4/CjsMp4Format.js.map +1 -1
- package/dist/formats/mp4/core/helpers.js +6 -15
- package/dist/formats/mp4/core/helpers.js.map +1 -1
- package/dist/formats/obj/CjsObjFormat.js +25 -12
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/formats/ogg/CjsOggFormat.js +26 -17
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/formats/ogg/core/helpers.js +5 -16
- package/dist/formats/ogg/core/helpers.js.map +1 -1
- package/dist/formats/pickle/CjsPickleFormat.js +64 -5
- package/dist/formats/pickle/CjsPickleFormat.js.map +1 -1
- package/dist/formats/png/CjsPngFormat.js +28 -19
- package/dist/formats/png/CjsPngFormat.js.map +1 -1
- package/dist/formats/png/core/helpers.js +5 -14
- package/dist/formats/png/core/helpers.js.map +1 -1
- package/dist/formats/red/CjsRedFormat.js +19 -5
- package/dist/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/formats/schemabound/CjsSchemaBoundFormat.js +48 -38
- package/dist/formats/schemabound/CjsSchemaBoundFormat.js.map +1 -1
- package/dist/formats/sqlite/CjsSqliteFormat.js +49 -41
- package/dist/formats/sqlite/CjsSqliteFormat.js.map +1 -1
- package/dist/formats/static/CjsStaticFormat.js +15 -57
- package/dist/formats/static/CjsStaticFormat.js.map +1 -1
- package/dist/formats/static/staticContainers.js +6 -6
- package/dist/formats/static/staticContainers.js.map +1 -1
- package/dist/formats/stl/CjsStlFormat.js +25 -12
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/tga/CjsTgaFormat.js +26 -19
- package/dist/formats/tga/CjsTgaFormat.js.map +1 -1
- package/dist/formats/tga/core/helpers.js +7 -22
- package/dist/formats/tga/core/helpers.js.map +1 -1
- package/dist/formats/wav/CjsWavFormat.js +26 -19
- package/dist/formats/wav/CjsWavFormat.js.map +1 -1
- package/dist/formats/wav/core/helpers.js +7 -16
- package/dist/formats/wav/core/helpers.js.map +1 -1
- package/dist/formats/webgl/CjsWebglFormat.js +11 -13
- package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +31 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/formats/webgl/core/readGlslEffectContainer.js +8 -8
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -1
- package/dist/formats/webgpu/CjsWebgpuFormat.js +11 -5
- package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/formats/webm/CjsWebmFormat.js +20 -19
- package/dist/formats/webm/CjsWebmFormat.js.map +1 -1
- package/dist/formats/webm/core/helpers.js +6 -15
- package/dist/formats/webm/core/helpers.js.map +1 -1
- package/dist/formats/webp/CjsWebpFormat.js +19 -17
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/formats/webp/core/helpers.js +5 -11
- package/dist/formats/webp/core/helpers.js.map +1 -1
- package/dist/formats/wem/CjsWemFormat.js +128 -141
- package/dist/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/formats/wem/core/helpers.js +1 -114
- package/dist/formats/wem/core/helpers.js.map +1 -1
- package/dist/formats/wem/core/{resolve.js → probeCodecSupport.js} +11 -18
- package/dist/formats/wem/core/probeCodecSupport.js.map +1 -0
- package/dist/formats/yaml/CjsYamlFormat.js +20 -5
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/generated/index.js +2 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/resources/Tr2RaycastGeometryRes.js +34 -0
- package/dist/generated/resources/Tr2RaycastGeometryRes.js.map +1 -0
- package/dist/generated/resources/index.js +2 -0
- package/dist/generated/resources/index.js.map +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsResource.js +134 -0
- package/dist/resource/CjsResource.js.map +1 -1
- package/dist/resource/ResourceRequirement.js +42 -0
- package/dist/resource/ResourceRequirement.js.map +1 -0
- package/dist/resource/Tr2LightProfileRes.js +2 -1
- package/dist/resource/Tr2LightProfileRes.js.map +1 -1
- package/dist/resource/geometry/TriGeometryRes.js +34 -7
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +184 -7
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -1
- package/dist/resource/geometry/granny/TriGrannyRes.js +20 -8
- package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -1
- package/dist/resource/index.js +1 -0
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/resourceBoundary.js +24 -1
- package/dist/resource/resourceBoundary.js.map +1 -1
- package/dist/resource/shader/Tr2EffectRes.js +2 -1
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
- package/dist/resource/texture/CjsTextureArrayRes.js +2 -1
- package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -1
- package/dist/resource/texture/Tr2ImageRes.js +2 -1
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
- package/dist/resource/texture/TriTextureRes.js +40 -2
- package/dist/resource/texture/TriTextureRes.js.map +1 -1
- package/docs/architecture.md +121 -116
- package/docs/concepts/format-capabilities.md +90 -0
- package/docs/formats/README.md +14 -6
- package/docs/formats/fsd.md +104 -0
- package/docs/formats/gr2.md +1 -1
- package/docs/formats/hlsl/reference/api.md +6 -4
- package/docs/formats/provenance.md +18 -0
- package/docs/formats/schemabound.md +10 -4
- package/docs/formats/static.md +26 -26
- package/docs/formats/webgpu/reference/api.md +4 -3
- package/docs/reference/classes/core.md +22 -2
- package/docs/reference/classes/formats.md +643 -1
- package/docs/reference/classes/resources.md +463 -453
- package/docs/reference/queues.md +205 -194
- package/docs/roadmap.md +14 -18
- package/format-notices/fsd/LICENSE +21 -0
- package/format-notices/fsd/NOTICE +11 -0
- package/package.json +70 -64
- package/dist/formats/wem/core/resolve.js.map +0 -1
- package/docs/concepts/format-type-resolution.md +0 -79
|
@@ -63,7 +63,7 @@ function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = "gif")
|
|
|
63
63
|
* Reports whether input is supported under normalized format options for the GIF
|
|
64
64
|
* format reader.
|
|
65
65
|
*/
|
|
66
|
-
function
|
|
66
|
+
function probeSupportWithValues(input, values = DEFAULT_VALUES) {
|
|
67
67
|
try {
|
|
68
68
|
const metadata = inspectWithValues(input, values);
|
|
69
69
|
const decoded = metadata.frameCount > 0 && metadata.lzwSupported;
|
|
@@ -72,7 +72,7 @@ function isSupportedWithValues(input, values = DEFAULT_VALUES) {
|
|
|
72
72
|
source: values.source || "buffer",
|
|
73
73
|
supported: decoded ? "full" : "partial",
|
|
74
74
|
confidence: 1,
|
|
75
|
-
|
|
75
|
+
preferredOutput: decoded ? "rgba" : "raw",
|
|
76
76
|
reason: decoded ? "GIF frame RGBA decode and compositing are available." : "GIF metadata/raw input is recognized but no decodable image frame was found.",
|
|
77
77
|
metadata,
|
|
78
78
|
variants: [{
|
|
@@ -80,19 +80,13 @@ function isSupportedWithValues(input, values = DEFAULT_VALUES) {
|
|
|
80
80
|
payloadType: "rgba",
|
|
81
81
|
codec: "rgba8unorm",
|
|
82
82
|
supported: decoded,
|
|
83
|
-
reason: decoded ? "" : "GIF LZW frame decode is unavailable."
|
|
84
|
-
containerOnly: false,
|
|
85
|
-
isDecoded: decoded,
|
|
86
|
-
rgbaDecodeSupported: decoded
|
|
83
|
+
reason: decoded ? "" : "GIF LZW frame decode is unavailable."
|
|
87
84
|
}, {
|
|
88
85
|
kind: "raw",
|
|
89
86
|
payloadType: "raw",
|
|
90
87
|
codec: "gif",
|
|
91
88
|
mimeType: "image/gif",
|
|
92
|
-
supported: true
|
|
93
|
-
containerOnly: true,
|
|
94
|
-
isDecoded: false,
|
|
95
|
-
rgbaDecodeSupported: decoded
|
|
89
|
+
supported: true
|
|
96
90
|
}],
|
|
97
91
|
warnings: [],
|
|
98
92
|
errors: []
|
|
@@ -103,7 +97,7 @@ function isSupportedWithValues(input, values = DEFAULT_VALUES) {
|
|
|
103
97
|
source: values.source || "buffer",
|
|
104
98
|
supported: "none",
|
|
105
99
|
confidence: 0,
|
|
106
|
-
|
|
100
|
+
preferredOutput: "",
|
|
107
101
|
reason: error.message,
|
|
108
102
|
metadata: null,
|
|
109
103
|
variants: [],
|
|
@@ -122,9 +116,6 @@ function readWithValues(input, values = DEFAULT_VALUES) {
|
|
|
122
116
|
payloadType: "raw",
|
|
123
117
|
sourceFormat: "gif",
|
|
124
118
|
mimeType: "image/gif",
|
|
125
|
-
containerOnly: true,
|
|
126
|
-
isDecoded: false,
|
|
127
|
-
rgbaDecodeSupported: metadata.frameCount > 0 && metadata.lzwSupported,
|
|
128
119
|
metadata,
|
|
129
120
|
bytes
|
|
130
121
|
};
|
|
@@ -282,9 +273,6 @@ function decodeFrames(bytes, metadata) {
|
|
|
282
273
|
payloadType: "rgba",
|
|
283
274
|
sourceFormat: "gif",
|
|
284
275
|
mimeType: "image/gif",
|
|
285
|
-
containerOnly: false,
|
|
286
|
-
isDecoded: true,
|
|
287
|
-
rgbaDecodeSupported: true,
|
|
288
276
|
width: metadata.width,
|
|
289
277
|
height: metadata.height,
|
|
290
278
|
pixelFormat: "rgba8unorm",
|
|
@@ -376,5 +364,5 @@ function readU16LE(bytes, offset) {
|
|
|
376
364
|
return bytes[offset] | bytes[offset + 1] << 8;
|
|
377
365
|
}
|
|
378
366
|
|
|
379
|
-
export { DEFAULT_VALUES, OUTPUT_IMAGE, OUTPUT_JSON, OUTPUT_RAW, OUTPUT_RGBA, inspectWithValues, isGIF,
|
|
367
|
+
export { DEFAULT_VALUES, OUTPUT_IMAGE, OUTPUT_JSON, OUTPUT_RAW, OUTPUT_RGBA, inspectWithValues, isGIF, normalizeValues, probeSupportWithValues, readWithValues, toBytes, toJsonValue };
|
|
380
368
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gif/core/helpers.js"],"sourcesContent":["export const OUTPUT_IMAGE = \"image\";\nexport const OUTPUT_RGBA = \"rgba\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"gif\",\n source: \"\"\n});\n\n/**\n * Normalizes reader options against their supported defaults for the GIF format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsGifFormat\")\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n const allowed = new Set([ \"emit\", \"inputType\", \"source\" ]);\n for (const key of Object.keys(options))\n {\n if (!allowed.has(key)) throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...options };\n if (![ OUTPUT_IMAGE, OUTPUT_RGBA, OUTPUT_RAW, OUTPUT_JSON, \"gifJson\" ].includes(values.emit))\n {\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(values.emit)}`);\n }\n return values;\n}\n\n/** Returns a byte view over the supplied binary input for the GIF format reader. */\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"GIF input must be Uint8Array, ArrayBuffer, or a view\");\n}\n\n/** Reports whether the current GIF format reader satisfies GIF. */\nexport function isGIF(bytes)\n{\n return bytes.byteLength >= 13 && (ascii(bytes, 0, 6) === \"GIF87a\" || ascii(bytes, 0, 6) === \"GIF89a\");\n}\n\n/** Inspects input using normalized format options for the GIF format reader. */\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"gif\")\n{\n const bytes = toBytes(input);\n if (!isGIF(bytes)) throw new TypeError(\"CjsGifFormat: input is not a GIF87a/GIF89a image\");\n const metadata = inspectGif(bytes);\n if (expectedType && metadata.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsGifFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return { ...metadata, byteLength: bytes.byteLength, source: values.source || \"buffer\" };\n}\n\n/**\n * Reports whether input is supported under normalized format options for the GIF\n * format reader.\n */\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n const decoded = metadata.frameCount > 0 && metadata.lzwSupported;\n return {\n format: \"gif\",\n source: values.source || \"buffer\",\n supported: decoded ? \"full\" : \"partial\",\n confidence: 1,\n preferred: decoded ? \"rgba8unorm\" : \"raw\",\n reason: decoded ? \"GIF frame RGBA decode and compositing are available.\" : \"GIF metadata/raw input is recognized but no decodable image frame was found.\",\n metadata,\n variants: [\n { kind: \"rgba\", payloadType: \"rgba\", codec: \"rgba8unorm\", supported: decoded, reason: decoded ? \"\" : \"GIF LZW frame decode is unavailable.\", containerOnly: false, isDecoded: decoded, rgbaDecodeSupported: decoded },\n { kind: \"raw\", payloadType: \"raw\", codec: \"gif\", mimeType: \"image/gif\", supported: true, containerOnly: true, isDecoded: false, rgbaDecodeSupported: decoded }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"gif\",\n source: values.source || \"buffer\",\n supported: \"none\",\n confidence: 0,\n preferred: \"\",\n reason: error.message,\n metadata: null,\n variants: [],\n warnings: [],\n errors: [ error.message ]\n };\n }\n}\n\n/** Reads input using normalized format options for the GIF format reader. */\nexport function readWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values);\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: \"gif\",\n mimeType: \"image/gif\",\n containerOnly: true,\n isDecoded: false,\n rgbaDecodeSupported: metadata.frameCount > 0 && metadata.lzwSupported,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === \"gifJson\") return metadata;\n if (values.emit === OUTPUT_RGBA || values.emit === OUTPUT_IMAGE)\n {\n return decodeFrames(bytes, metadata);\n }\n const error = new Error(`gif: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n throw error;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the GIF format reader. */\nexport function toJsonValue(value)\n{\n if (value instanceof Uint8Array) return { byteLength: value.byteLength };\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value && typeof value === \"object\")\n {\n const output = {};\n for (const [ key, entry ] of Object.entries(value)) output[key] = toJsonValue(entry);\n return output;\n }\n return value;\n}\n\nfunction inspectGif(bytes)\n{\n const width = readU16LE(bytes, 6);\n const height = readU16LE(bytes, 8);\n const packed = bytes[10];\n const hasGlobalPalette = !!(packed & 0x80);\n const globalPaletteCount = hasGlobalPalette ? 1 << ((packed & 7) + 1) : 0;\n if (hasGlobalPalette) readPalette(bytes, 13, globalPaletteCount);\n let offset = 13 + globalPaletteCount * 3;\n let frameCount = 0;\n const frames = [];\n let firstFrame = null;\n let graphicsControl = null;\n let loopCount = null;\n while (offset < bytes.length)\n {\n const marker = bytes[offset++];\n if (marker === 0x3b) break;\n if (marker === 0x21)\n {\n const label = bytes[offset++];\n if (label === 0xf9)\n {\n if (bytes[offset++] !== 4) throw new Error(\"gif: invalid graphics control extension\");\n const control = bytes[offset++];\n graphicsControl = {\n disposalMethod: (control >>> 2) & 7,\n userInput: !!(control & 2),\n transparent: !!(control & 1),\n delayCentiseconds: readU16LE(bytes, offset)\n };\n offset += 2;\n graphicsControl.transparentIndex = bytes[offset++];\n if (bytes[offset++] !== 0) throw new Error(\"gif: unterminated graphics control extension\");\n }\n else if (label === 0xff)\n {\n const size = bytes[offset++];\n const application = ascii(bytes, offset, size);\n offset += size;\n const data = readSubBlocks(bytes, offset);\n offset = data.offset;\n if (application === \"NETSCAPE2.0\" || application === \"ANIMEXTS1.0\")\n {\n if (data.bytes.length >= 3 && data.bytes[0] === 1) loopCount = readU16LE(data.bytes, 1);\n }\n }\n else\n {\n offset = skipSubBlocks(bytes, offset);\n }\n }\n else if (marker === 0x2c)\n {\n if (offset + 9 > bytes.length) throw new Error(\"gif: truncated image descriptor\");\n const frame = {\n left: readU16LE(bytes, offset),\n top: readU16LE(bytes, offset + 2),\n width: readU16LE(bytes, offset + 4),\n height: readU16LE(bytes, offset + 6),\n packed: bytes[offset + 8],\n graphicsControl\n };\n offset += 9;\n const localPaletteCount = frame.packed & 0x80 ? 1 << ((frame.packed & 7) + 1) : 0;\n frame.localPalette = localPaletteCount ? readPalette(bytes, offset, localPaletteCount) : null;\n offset += localPaletteCount * 3;\n frame.lzwMinCodeSize = bytes[offset++];\n const data = readSubBlocks(bytes, offset);\n frame.compressed = data.bytes;\n offset = data.offset;\n frame.interlaced = !!(frame.packed & 0x40);\n frameCount++;\n frames.push(frame);\n if (!firstFrame) firstFrame = frame;\n graphicsControl = null;\n }\n else if (marker === 0x00)\n {\n throw new Error(\"gif: unexpected data before image descriptor\");\n }\n else\n {\n throw new Error(`gif: unsupported block marker 0x${marker.toString(16)}`);\n }\n }\n return {\n payloadType: \"image\",\n mediaTypes: [ \"image\" ],\n sourceFormat: \"gif\",\n version: ascii(bytes, 0, 6),\n width,\n height,\n frameCount,\n animated: frameCount > 1,\n loopCount,\n hasGlobalPalette,\n backgroundColorIndex: bytes[11],\n colorResolution: ((packed >>> 4) & 7) + 1,\n lzwSupported: frames.length > 0 && frames.every((frame) => frame.lzwMinCodeSize >= 2 && frame.lzwMinCodeSize <= 8),\n firstFrame,\n frames\n };\n}\n\nfunction decodeFrames(bytes, metadata)\n{\n if (!metadata.firstFrame || !metadata.lzwSupported) throw new Error(\"gif: no supported LZW image frame found\");\n const globalPalette = readPalette(bytes, 13, metadata.hasGlobalPalette ? 1 << ((bytes[10] & 7) + 1) : 0);\n const canvas = new Uint8Array(metadata.width * metadata.height * 4);\n const frames = [];\n\n for (const frame of metadata.frames)\n {\n const restore = frame.graphicsControl?.disposalMethod === 3 ? canvas.slice() : null;\n const palette = frame.localPalette || globalPalette;\n const indices = decodeLzw(frame.compressed, frame.lzwMinCodeSize, frame.width * frame.height);\n const rows = frame.interlaced ? interlacedRows(frame.height) : Array.from({ length: frame.height }, (_, row) => row);\n for (let sourceRow = 0; sourceRow < frame.height; sourceRow++)\n {\n const targetRow = rows[sourceRow];\n for (let x = 0; x < frame.width; x++)\n {\n const index = indices[sourceRow * frame.width + x];\n const targetX = frame.left + x;\n const targetY = frame.top + targetRow;\n if (targetX >= metadata.width || targetY >= metadata.height) continue;\n if (frame.graphicsControl?.transparent && index === frame.graphicsControl.transparentIndex) continue;\n const target = (targetY * metadata.width + targetX) * 4;\n const color = palette[index] || [ 0, 0, 0 ];\n canvas[target] = color[0];\n canvas[target + 1] = color[1];\n canvas[target + 2] = color[2];\n canvas[target + 3] = 255;\n }\n }\n\n frames.push({\n index: frames.length,\n delayCentiseconds: frame.graphicsControl?.delayCentiseconds || 0,\n disposalMethod: frame.graphicsControl?.disposalMethod || 0,\n data: canvas.slice()\n });\n const disposal = frame.graphicsControl?.disposalMethod || 0;\n if (disposal === 2) canvas.fill(0);\n else if (disposal === 3 && restore) canvas.set(restore);\n }\n\n const data = frames[0].data;\n return {\n payloadType: \"rgba\",\n sourceFormat: \"gif\",\n mimeType: \"image/gif\",\n containerOnly: false,\n isDecoded: true,\n rgbaDecodeSupported: true,\n width: metadata.width,\n height: metadata.height,\n pixelFormat: \"rgba8unorm\",\n data,\n frames,\n strideBytes: metadata.width * 4,\n origin: \"top-left\",\n colorSpace: \"srgb\",\n alphaMode: \"straight\",\n metadata\n };\n}\n\nfunction decodeLzw(bytes, minimumCodeSize, expectedLength)\n{\n const clear = 1 << minimumCodeSize;\n const end = clear + 1;\n let codeSize = minimumCodeSize + 1;\n let dictionary = Array.from({ length: clear }, (_, index) => [ index ]);\n let bitOffset = 0;\n let previous = null;\n const output = [];\n while (bitOffset + codeSize <= bytes.length * 8)\n {\n let code = 0;\n for (let bit = 0; bit < codeSize; bit++)\n {\n code |= (((bytes[bitOffset >>> 3] >>> (bitOffset & 7)) & 1) << bit);\n bitOffset++;\n }\n if (code === clear)\n {\n dictionary = Array.from({ length: clear }, (_, index) => [ index ]);\n codeSize = minimumCodeSize + 1;\n previous = null;\n continue;\n }\n if (code === end) break;\n let entry;\n if (code < dictionary.length) entry = dictionary[code];\n else if (code === dictionary.length && previous) entry = previous.concat(previous[0]);\n else throw new Error(\"gif: invalid LZW code\");\n output.push(...entry);\n if (previous)\n {\n dictionary.push(previous.concat(entry[0]));\n if (dictionary.length === (1 << codeSize) && codeSize < 12) codeSize++;\n }\n previous = entry;\n if (output.length >= expectedLength) break;\n }\n if (output.length < expectedLength) throw new Error(\"gif: LZW stream ended before the frame was filled\");\n return output.slice(0, expectedLength);\n}\n\nfunction readSubBlocks(bytes, offset)\n{\n const output = [];\n while (offset < bytes.length)\n {\n if (offset >= bytes.length) throw new Error(\"gif: truncated sub-block sequence\");\n const length = bytes[offset++];\n if (!length) return { bytes: Uint8Array.from(output), offset };\n if (offset + length > bytes.length) throw new Error(\"gif: truncated sub-block payload\");\n output.push(...bytes.subarray(offset, offset + length));\n offset += length;\n }\n throw new Error(\"gif: truncated sub-block sequence\");\n}\n\nfunction skipSubBlocks(bytes, offset)\n{\n return readSubBlocks(bytes, offset).offset;\n}\n\nfunction readPalette(bytes, offset, count)\n{\n const palette = [];\n for (let i = 0; i < count; i++)\n {\n if (offset + 3 > bytes.length) throw new Error(\"gif: truncated color table\");\n palette.push([ bytes[offset], bytes[offset + 1], bytes[offset + 2] ]);\n offset += 3;\n }\n return palette;\n}\n\nfunction interlacedRows(height)\n{\n const rows = [];\n for (const [ start, step ] of [ [ 0, 8 ], [ 4, 8 ], [ 2, 4 ], [ 1, 2 ] ])\n {\n for (let row = start; row < height; row += step) rows.push(row);\n }\n return rows;\n}\n\nfunction ascii(bytes, offset, length)\n{\n return String.fromCharCode(...bytes.subarray(offset, offset + length));\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n"],"names":["OUTPUT_IMAGE","OUTPUT_RGBA","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","normalizeValues","base","options","readerName","Array","isArray","TypeError","allowed","Set","key","keys","has","JSON","stringify","values","includes","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isGIF","bytes","ascii","inspectWithValues","expectedType","metadata","inspectGif","sourceFormat","isSupportedWithValues","decoded","frameCount","lzwSupported","format","supported","confidence","preferred","reason","variants","kind","payloadType","codec","containerOnly","isDecoded","rgbaDecodeSupported","mimeType","warnings","errors","error","message","readWithValues","decodeFrames","Error","code","toJsonValue","value","map","output","entry","entries","width","readU16LE","height","packed","hasGlobalPalette","globalPaletteCount","readPalette","offset","frames","firstFrame","graphicsControl","loopCount","length","marker","label","control","disposalMethod","userInput","transparent","delayCentiseconds","transparentIndex","size","application","data","readSubBlocks","skipSubBlocks","frame","left","top","localPaletteCount","localPalette","lzwMinCodeSize","compressed","interlaced","push","toString","mediaTypes","version","animated","backgroundColorIndex","colorResolution","every","globalPalette","canvas","restore","slice","palette","indices","decodeLzw","rows","interlacedRows","from","_","row","sourceRow","targetRow","x","index","targetX","targetY","target","color","disposal","fill","set","pixelFormat","strideBytes","origin","colorSpace","alphaMode","minimumCodeSize","expectedLength","clear","end","codeSize","dictionary","bitOffset","previous","bit","concat","subarray","count","i","start","step","String","fromCharCode"],"mappings":"AAAO,MAAMA,YAAY,GAAG;AACrB,MAAMC,WAAW,GAAG;AACpB,MAAMC,UAAU,GAAG;AACnB,MAAMC,WAAW,GAAG;MAEdC,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;AACxCC,EAAAA,IAAI,EAAEL,UAAU;AAChBM,EAAAA,SAAS,EAAE,KAAK;AAChBC,EAAAA,MAAM,EAAE;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAACC,IAAI,GAAGP,cAAc,EAAEQ,OAAO,GAAG,EAAE,EAAEC,UAAU,GAAG,cAAc,EAChG;AACI,EAAA,IAAI,CAACD,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,IAAIE,KAAK,CAACC,OAAO,CAACH,OAAO,CAAC,EACrE;AACI,IAAA,MAAM,IAAII,SAAS,CAAC,CAAA,EAAGH,UAAU,6BAA6B,CAAC;AACnE,EAAA;AACA,EAAA,MAAMI,OAAO,GAAG,IAAIC,GAAG,CAAC,CAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAE,CAAC;EAC1D,KAAK,MAAMC,GAAG,IAAId,MAAM,CAACe,IAAI,CAACR,OAAO,CAAC,EACtC;IACI,IAAI,CAACK,OAAO,CAACI,GAAG,CAACF,GAAG,CAAC,EAAE,MAAM,IAAIH,SAAS,CAAC,CAAA,EAAGH,UAAU,oBAAoBS,IAAI,CAACC,SAAS,CAACJ,GAAG,CAAC,CAAA,CAAE,CAAC;AACtG,EAAA;AACA,EAAA,MAAMK,MAAM,GAAG;AAAE,IAAA,GAAGpB,cAAc;AAAE,IAAA,IAAIO,IAAI,IAAI,EAAE,CAAC;IAAE,GAAGC;GAAS;AACjE,EAAA,IAAI,CAAC,CAAEZ,YAAY,EAAEC,WAAW,EAAEC,UAAU,EAAEC,WAAW,EAAE,SAAS,CAAE,CAACsB,QAAQ,CAACD,MAAM,CAACjB,IAAI,CAAC,EAC5F;AACI,IAAA,MAAM,IAAIS,SAAS,CAAC,CAAA,EAAGH,UAAU,CAAA,qBAAA,EAAwBS,IAAI,CAACC,SAAS,CAACC,MAAM,CAACjB,IAAI,CAAC,EAAE,CAAC;AAC3F,EAAA;AACA,EAAA,OAAOiB,MAAM;AACjB;;AAEA;AACO,SAASE,OAAOA,CAACC,KAAK,EAC7B;AACI,EAAA,IAAIA,KAAK,YAAYC,UAAU,EAAE,OAAOD,KAAK;EAC7C,IAAIA,KAAK,YAAYE,WAAW,EAAE,OAAO,IAAID,UAAU,CAACD,KAAK,CAAC;EAC9D,IAAIE,WAAW,CAACC,MAAM,CAACH,KAAK,CAAC,EAAE,OAAO,IAAIC,UAAU,CAACD,KAAK,CAACI,MAAM,EAAEJ,KAAK,CAACK,UAAU,EAAEL,KAAK,CAACM,UAAU,CAAC;AACtG,EAAA,MAAM,IAAIjB,SAAS,CAAC,sDAAsD,CAAC;AAC/E;;AAEA;AACO,SAASkB,KAAKA,CAACC,KAAK,EAC3B;EACI,OAAOA,KAAK,CAACF,UAAU,IAAI,EAAE,KAAKG,KAAK,CAACD,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAIC,KAAK,CAACD,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC;AACzG;;AAEA;AACO,SAASE,iBAAiBA,CAACV,KAAK,EAAEH,MAAM,GAAGpB,cAAc,EAAEkC,YAAY,GAAG,KAAK,EACtF;AACI,EAAA,MAAMH,KAAK,GAAGT,OAAO,CAACC,KAAK,CAAC;EAC5B,IAAI,CAACO,KAAK,CAACC,KAAK,CAAC,EAAE,MAAM,IAAInB,SAAS,CAAC,kDAAkD,CAAC;AAC1F,EAAA,MAAMuB,QAAQ,GAAGC,UAAU,CAACL,KAAK,CAAC;AAClC,EAAA,IAAIG,YAAY,IAAIC,QAAQ,CAACE,YAAY,KAAKH,YAAY,EAC1D;IACI,MAAM,IAAItB,SAAS,CAAC,CAAA,uBAAA,EAA0BsB,YAAY,SAASC,QAAQ,CAACE,YAAY,CAAA,CAAE,CAAC;AAC/F,EAAA;EACA,OAAO;AAAE,IAAA,GAAGF,QAAQ;IAAEN,UAAU,EAAEE,KAAK,CAACF,UAAU;AAAExB,IAAAA,MAAM,EAAEe,MAAM,CAACf,MAAM,IAAI;GAAU;AAC3F;;AAEA;AACA;AACA;AACA;AACO,SAASiC,qBAAqBA,CAACf,KAAK,EAAEH,MAAM,GAAGpB,cAAc,EACpE;EACI,IACA;AACI,IAAA,MAAMmC,QAAQ,GAAGF,iBAAiB,CAACV,KAAK,EAAEH,MAAM,CAAC;IACjD,MAAMmB,OAAO,GAAGJ,QAAQ,CAACK,UAAU,GAAG,CAAC,IAAIL,QAAQ,CAACM,YAAY;IAChE,OAAO;AACHC,MAAAA,MAAM,EAAE,KAAK;AACbrC,MAAAA,MAAM,EAAEe,MAAM,CAACf,MAAM,IAAI,QAAQ;AACjCsC,MAAAA,SAAS,EAAEJ,OAAO,GAAG,MAAM,GAAG,SAAS;AACvCK,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,SAAS,EAAEN,OAAO,GAAG,YAAY,GAAG,KAAK;AACzCO,MAAAA,MAAM,EAAEP,OAAO,GAAG,sDAAsD,GAAG,8EAA8E;MACzJJ,QAAQ;AACRY,MAAAA,QAAQ,EAAE,CACN;AAAEC,QAAAA,IAAI,EAAE,MAAM;AAAEC,QAAAA,WAAW,EAAE,MAAM;AAAEC,QAAAA,KAAK,EAAE,YAAY;AAAEP,QAAAA,SAAS,EAAEJ,OAAO;AAAEO,QAAAA,MAAM,EAAEP,OAAO,GAAG,EAAE,GAAG,sCAAsC;AAAEY,QAAAA,aAAa,EAAE,KAAK;AAAEC,QAAAA,SAAS,EAAEb,OAAO;AAAEc,QAAAA,mBAAmB,EAAEd;AAAQ,OAAC,EACrN;AAAES,QAAAA,IAAI,EAAE,KAAK;AAAEC,QAAAA,WAAW,EAAE,KAAK;AAAEC,QAAAA,KAAK,EAAE,KAAK;AAAEI,QAAAA,QAAQ,EAAE,WAAW;AAAEX,QAAAA,SAAS,EAAE,IAAI;AAAEQ,QAAAA,aAAa,EAAE,IAAI;AAAEC,QAAAA,SAAS,EAAE,KAAK;AAAEC,QAAAA,mBAAmB,EAAEd;AAAQ,OAAC,CACjK;AACDgB,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,MAAM,EAAE;KACX;EACL,CAAC,CACD,OAAOC,KAAK,EACZ;IACI,OAAO;AACHf,MAAAA,MAAM,EAAE,KAAK;AACbrC,MAAAA,MAAM,EAAEe,MAAM,CAACf,MAAM,IAAI,QAAQ;AACjCsC,MAAAA,SAAS,EAAE,MAAM;AACjBC,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,SAAS,EAAE,EAAE;MACbC,MAAM,EAAEW,KAAK,CAACC,OAAO;AACrBvB,MAAAA,QAAQ,EAAE,IAAI;AACdY,MAAAA,QAAQ,EAAE,EAAE;AACZQ,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,MAAM,EAAE,CAAEC,KAAK,CAACC,OAAO;KAC1B;AACL,EAAA;AACJ;;AAEA;AACO,SAASC,cAAcA,CAACpC,KAAK,EAAEH,MAAM,GAAGpB,cAAc,EAC7D;AACI,EAAA,MAAM+B,KAAK,GAAGT,OAAO,CAACC,KAAK,CAAC;AAC5B,EAAA,MAAMY,QAAQ,GAAGF,iBAAiB,CAACF,KAAK,EAAEX,MAAM,CAAC;AACjD,EAAA,IAAIA,MAAM,CAACjB,IAAI,KAAKL,UAAU,EAC9B;IACI,OAAO;AACHmD,MAAAA,WAAW,EAAE,KAAK;AAClBZ,MAAAA,YAAY,EAAE,KAAK;AACnBiB,MAAAA,QAAQ,EAAE,WAAW;AACrBH,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,SAAS,EAAE,KAAK;MAChBC,mBAAmB,EAAElB,QAAQ,CAACK,UAAU,GAAG,CAAC,IAAIL,QAAQ,CAACM,YAAY;MACrEN,QAAQ;AACRJ,MAAAA;KACH;AACL,EAAA;AACA,EAAA,IAAIX,MAAM,CAACjB,IAAI,KAAKJ,WAAW,IAAIqB,MAAM,CAACjB,IAAI,KAAK,SAAS,EAAE,OAAOgC,QAAQ;EAC7E,IAAIf,MAAM,CAACjB,IAAI,KAAKN,WAAW,IAAIuB,MAAM,CAACjB,IAAI,KAAKP,YAAY,EAC/D;AACI,IAAA,OAAOgE,YAAY,CAAC7B,KAAK,EAAEI,QAAQ,CAAC;AACxC,EAAA;EACA,MAAMsB,KAAK,GAAG,IAAII,KAAK,CAAC,cAAczC,MAAM,CAACjB,IAAI,CAAA,wBAAA,CAA0B,CAAC;EAC5EsD,KAAK,CAACK,IAAI,GAAG,mCAAmC;AAChD,EAAA,MAAML,KAAK;AACf;;AAEA;AACO,SAASM,WAAWA,CAACC,KAAK,EACjC;AACI,EAAA,IAAIA,KAAK,YAAYxC,UAAU,EAAE,OAAO;IAAEK,UAAU,EAAEmC,KAAK,CAACnC;GAAY;AACxE,EAAA,IAAInB,KAAK,CAACC,OAAO,CAACqD,KAAK,CAAC,EAAE,OAAOA,KAAK,CAACC,GAAG,CAACF,WAAW,CAAC;AACvD,EAAA,IAAIC,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EACtC;IACI,MAAME,MAAM,GAAG,EAAE;IACjB,KAAK,MAAM,CAAEnD,GAAG,EAAEoD,KAAK,CAAE,IAAIlE,MAAM,CAACmE,OAAO,CAACJ,KAAK,CAAC,EAAEE,MAAM,CAACnD,GAAG,CAAC,GAAGgD,WAAW,CAACI,KAAK,CAAC;AACpF,IAAA,OAAOD,MAAM;AACjB,EAAA;AACA,EAAA,OAAOF,KAAK;AAChB;AAEA,SAAS5B,UAAUA,CAACL,KAAK,EACzB;AACI,EAAA,MAAMsC,KAAK,GAAGC,SAAS,CAACvC,KAAK,EAAE,CAAC,CAAC;AACjC,EAAA,MAAMwC,MAAM,GAAGD,SAAS,CAACvC,KAAK,EAAE,CAAC,CAAC;AAClC,EAAA,MAAMyC,MAAM,GAAGzC,KAAK,CAAC,EAAE,CAAC;AACxB,EAAA,MAAM0C,gBAAgB,GAAG,CAAC,EAAED,MAAM,GAAG,IAAI,CAAC;AAC1C,EAAA,MAAME,kBAAkB,GAAGD,gBAAgB,GAAG,CAAC,IAAK,CAACD,MAAM,GAAG,CAAC,IAAI,CAAE,GAAG,CAAC;EACzE,IAAIC,gBAAgB,EAAEE,WAAW,CAAC5C,KAAK,EAAE,EAAE,EAAE2C,kBAAkB,CAAC;AAChE,EAAA,IAAIE,MAAM,GAAG,EAAE,GAAGF,kBAAkB,GAAG,CAAC;EACxC,IAAIlC,UAAU,GAAG,CAAC;EAClB,MAAMqC,MAAM,GAAG,EAAE;EACjB,IAAIC,UAAU,GAAG,IAAI;EACrB,IAAIC,eAAe,GAAG,IAAI;EAC1B,IAAIC,SAAS,GAAG,IAAI;AACpB,EAAA,OAAOJ,MAAM,GAAG7C,KAAK,CAACkD,MAAM,EAC5B;AACI,IAAA,MAAMC,MAAM,GAAGnD,KAAK,CAAC6C,MAAM,EAAE,CAAC;IAC9B,IAAIM,MAAM,KAAK,IAAI,EAAE;IACrB,IAAIA,MAAM,KAAK,IAAI,EACnB;AACI,MAAA,MAAMC,KAAK,GAAGpD,KAAK,CAAC6C,MAAM,EAAE,CAAC;MAC7B,IAAIO,KAAK,KAAK,IAAI,EAClB;AACI,QAAA,IAAIpD,KAAK,CAAC6C,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,IAAIf,KAAK,CAAC,yCAAyC,CAAC;AACrF,QAAA,MAAMuB,OAAO,GAAGrD,KAAK,CAAC6C,MAAM,EAAE,CAAC;AAC/BG,QAAAA,eAAe,GAAG;AACdM,UAAAA,cAAc,EAAGD,OAAO,KAAK,CAAC,GAAI,CAAC;AACnCE,UAAAA,SAAS,EAAE,CAAC,EAAEF,OAAO,GAAG,CAAC,CAAC;AAC1BG,UAAAA,WAAW,EAAE,CAAC,EAAEH,OAAO,GAAG,CAAC,CAAC;AAC5BI,UAAAA,iBAAiB,EAAElB,SAAS,CAACvC,KAAK,EAAE6C,MAAM;SAC7C;AACDA,QAAAA,MAAM,IAAI,CAAC;AACXG,QAAAA,eAAe,CAACU,gBAAgB,GAAG1D,KAAK,CAAC6C,MAAM,EAAE,CAAC;AAClD,QAAA,IAAI7C,KAAK,CAAC6C,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,IAAIf,KAAK,CAAC,8CAA8C,CAAC;AAC9F,MAAA,CAAC,MACI,IAAIsB,KAAK,KAAK,IAAI,EACvB;AACI,QAAA,MAAMO,IAAI,GAAG3D,KAAK,CAAC6C,MAAM,EAAE,CAAC;QAC5B,MAAMe,WAAW,GAAG3D,KAAK,CAACD,KAAK,EAAE6C,MAAM,EAAEc,IAAI,CAAC;AAC9Cd,QAAAA,MAAM,IAAIc,IAAI;AACd,QAAA,MAAME,IAAI,GAAGC,aAAa,CAAC9D,KAAK,EAAE6C,MAAM,CAAC;QACzCA,MAAM,GAAGgB,IAAI,CAAChB,MAAM;AACpB,QAAA,IAAIe,WAAW,KAAK,aAAa,IAAIA,WAAW,KAAK,aAAa,EAClE;UACI,IAAIC,IAAI,CAAC7D,KAAK,CAACkD,MAAM,IAAI,CAAC,IAAIW,IAAI,CAAC7D,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAEiD,SAAS,GAAGV,SAAS,CAACsB,IAAI,CAAC7D,KAAK,EAAE,CAAC,CAAC;AAC3F,QAAA;AACJ,MAAA,CAAC,MAED;AACI6C,QAAAA,MAAM,GAAGkB,aAAa,CAAC/D,KAAK,EAAE6C,MAAM,CAAC;AACzC,MAAA;AACJ,IAAA,CAAC,MACI,IAAIM,MAAM,KAAK,IAAI,EACxB;AACI,MAAA,IAAIN,MAAM,GAAG,CAAC,GAAG7C,KAAK,CAACkD,MAAM,EAAE,MAAM,IAAIpB,KAAK,CAAC,iCAAiC,CAAC;AACjF,MAAA,MAAMkC,KAAK,GAAG;AACVC,QAAAA,IAAI,EAAE1B,SAAS,CAACvC,KAAK,EAAE6C,MAAM,CAAC;QAC9BqB,GAAG,EAAE3B,SAAS,CAACvC,KAAK,EAAE6C,MAAM,GAAG,CAAC,CAAC;QACjCP,KAAK,EAAEC,SAAS,CAACvC,KAAK,EAAE6C,MAAM,GAAG,CAAC,CAAC;QACnCL,MAAM,EAAED,SAAS,CAACvC,KAAK,EAAE6C,MAAM,GAAG,CAAC,CAAC;AACpCJ,QAAAA,MAAM,EAAEzC,KAAK,CAAC6C,MAAM,GAAG,CAAC,CAAC;AACzBG,QAAAA;OACH;AACDH,MAAAA,MAAM,IAAI,CAAC;AACX,MAAA,MAAMsB,iBAAiB,GAAGH,KAAK,CAACvB,MAAM,GAAG,IAAI,GAAG,CAAC,IAAK,CAACuB,KAAK,CAACvB,MAAM,GAAG,CAAC,IAAI,CAAE,GAAG,CAAC;AACjFuB,MAAAA,KAAK,CAACI,YAAY,GAAGD,iBAAiB,GAAGvB,WAAW,CAAC5C,KAAK,EAAE6C,MAAM,EAAEsB,iBAAiB,CAAC,GAAG,IAAI;MAC7FtB,MAAM,IAAIsB,iBAAiB,GAAG,CAAC;AAC/BH,MAAAA,KAAK,CAACK,cAAc,GAAGrE,KAAK,CAAC6C,MAAM,EAAE,CAAC;AACtC,MAAA,MAAMgB,IAAI,GAAGC,aAAa,CAAC9D,KAAK,EAAE6C,MAAM,CAAC;AACzCmB,MAAAA,KAAK,CAACM,UAAU,GAAGT,IAAI,CAAC7D,KAAK;MAC7B6C,MAAM,GAAGgB,IAAI,CAAChB,MAAM;MACpBmB,KAAK,CAACO,UAAU,GAAG,CAAC,EAAEP,KAAK,CAACvB,MAAM,GAAG,IAAI,CAAC;AAC1ChC,MAAAA,UAAU,EAAE;AACZqC,MAAAA,MAAM,CAAC0B,IAAI,CAACR,KAAK,CAAC;AAClB,MAAA,IAAI,CAACjB,UAAU,EAAEA,UAAU,GAAGiB,KAAK;AACnChB,MAAAA,eAAe,GAAG,IAAI;AAC1B,IAAA,CAAC,MACI,IAAIG,MAAM,KAAK,IAAI,EACxB;AACI,MAAA,MAAM,IAAIrB,KAAK,CAAC,8CAA8C,CAAC;AACnE,IAAA,CAAC,MAED;MACI,MAAM,IAAIA,KAAK,CAAC,CAAA,gCAAA,EAAmCqB,MAAM,CAACsB,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC;AAC7E,IAAA;AACJ,EAAA;EACA,OAAO;AACHvD,IAAAA,WAAW,EAAE,OAAO;IACpBwD,UAAU,EAAE,CAAE,OAAO,CAAE;AACvBpE,IAAAA,YAAY,EAAE,KAAK;IACnBqE,OAAO,EAAE1E,KAAK,CAACD,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3BsC,KAAK;IACLE,MAAM;IACN/B,UAAU;IACVmE,QAAQ,EAAEnE,UAAU,GAAG,CAAC;IACxBwC,SAAS;IACTP,gBAAgB;AAChBmC,IAAAA,oBAAoB,EAAE7E,KAAK,CAAC,EAAE,CAAC;IAC/B8E,eAAe,EAAE,CAAErC,MAAM,KAAK,CAAC,GAAI,CAAC,IAAI,CAAC;IACzC/B,YAAY,EAAEoC,MAAM,CAACI,MAAM,GAAG,CAAC,IAAIJ,MAAM,CAACiC,KAAK,CAAEf,KAAK,IAAKA,KAAK,CAACK,cAAc,IAAI,CAAC,IAAIL,KAAK,CAACK,cAAc,IAAI,CAAC,CAAC;IAClHtB,UAAU;AACVD,IAAAA;GACH;AACL;AAEA,SAASjB,YAAYA,CAAC7B,KAAK,EAAEI,QAAQ,EACrC;AACI,EAAA,IAAI,CAACA,QAAQ,CAAC2C,UAAU,IAAI,CAAC3C,QAAQ,CAACM,YAAY,EAAE,MAAM,IAAIoB,KAAK,CAAC,yCAAyC,CAAC;EAC9G,MAAMkD,aAAa,GAAGpC,WAAW,CAAC5C,KAAK,EAAE,EAAE,EAAEI,QAAQ,CAACsC,gBAAgB,GAAG,CAAC,IAAK,CAAC1C,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC;AACxG,EAAA,MAAMiF,MAAM,GAAG,IAAIxF,UAAU,CAACW,QAAQ,CAACkC,KAAK,GAAGlC,QAAQ,CAACoC,MAAM,GAAG,CAAC,CAAC;EACnE,MAAMM,MAAM,GAAG,EAAE;AAEjB,EAAA,KAAK,MAAMkB,KAAK,IAAI5D,QAAQ,CAAC0C,MAAM,EACnC;AACI,IAAA,MAAMoC,OAAO,GAAGlB,KAAK,CAAChB,eAAe,EAAEM,cAAc,KAAK,CAAC,GAAG2B,MAAM,CAACE,KAAK,EAAE,GAAG,IAAI;AACnF,IAAA,MAAMC,OAAO,GAAGpB,KAAK,CAACI,YAAY,IAAIY,aAAa;AACnD,IAAA,MAAMK,OAAO,GAAGC,SAAS,CAACtB,KAAK,CAACM,UAAU,EAAEN,KAAK,CAACK,cAAc,EAAEL,KAAK,CAAC1B,KAAK,GAAG0B,KAAK,CAACxB,MAAM,CAAC;AAC7F,IAAA,MAAM+C,IAAI,GAAGvB,KAAK,CAACO,UAAU,GAAGiB,cAAc,CAACxB,KAAK,CAACxB,MAAM,CAAC,GAAG7D,KAAK,CAAC8G,IAAI,CAAC;MAAEvC,MAAM,EAAEc,KAAK,CAACxB;AAAO,KAAC,EAAE,CAACkD,CAAC,EAAEC,GAAG,KAAKA,GAAG,CAAC;AACpH,IAAA,KAAK,IAAIC,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAG5B,KAAK,CAACxB,MAAM,EAAEoD,SAAS,EAAE,EAC7D;AACI,MAAA,MAAMC,SAAS,GAAGN,IAAI,CAACK,SAAS,CAAC;AACjC,MAAA,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG9B,KAAK,CAAC1B,KAAK,EAAEwD,CAAC,EAAE,EACpC;QACI,MAAMC,KAAK,GAAGV,OAAO,CAACO,SAAS,GAAG5B,KAAK,CAAC1B,KAAK,GAAGwD,CAAC,CAAC;AAClD,QAAA,MAAME,OAAO,GAAGhC,KAAK,CAACC,IAAI,GAAG6B,CAAC;AAC9B,QAAA,MAAMG,OAAO,GAAGjC,KAAK,CAACE,GAAG,GAAG2B,SAAS;QACrC,IAAIG,OAAO,IAAI5F,QAAQ,CAACkC,KAAK,IAAI2D,OAAO,IAAI7F,QAAQ,CAACoC,MAAM,EAAE;AAC7D,QAAA,IAAIwB,KAAK,CAAChB,eAAe,EAAEQ,WAAW,IAAIuC,KAAK,KAAK/B,KAAK,CAAChB,eAAe,CAACU,gBAAgB,EAAE;QAC5F,MAAMwC,MAAM,GAAG,CAACD,OAAO,GAAG7F,QAAQ,CAACkC,KAAK,GAAG0D,OAAO,IAAI,CAAC;AACvD,QAAA,MAAMG,KAAK,GAAGf,OAAO,CAACW,KAAK,CAAC,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;AAC3Cd,QAAAA,MAAM,CAACiB,MAAM,CAAC,GAAGC,KAAK,CAAC,CAAC,CAAC;QACzBlB,MAAM,CAACiB,MAAM,GAAG,CAAC,CAAC,GAAGC,KAAK,CAAC,CAAC,CAAC;QAC7BlB,MAAM,CAACiB,MAAM,GAAG,CAAC,CAAC,GAAGC,KAAK,CAAC,CAAC,CAAC;AAC7BlB,QAAAA,MAAM,CAACiB,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AAC5B,MAAA;AACJ,IAAA;IAEApD,MAAM,CAAC0B,IAAI,CAAC;MACRuB,KAAK,EAAEjD,MAAM,CAACI,MAAM;AACpBO,MAAAA,iBAAiB,EAAEO,KAAK,CAAChB,eAAe,EAAES,iBAAiB,IAAI,CAAC;AAChEH,MAAAA,cAAc,EAAEU,KAAK,CAAChB,eAAe,EAAEM,cAAc,IAAI,CAAC;AAC1DO,MAAAA,IAAI,EAAEoB,MAAM,CAACE,KAAK;AACtB,KAAC,CAAC;IACF,MAAMiB,QAAQ,GAAGpC,KAAK,CAAChB,eAAe,EAAEM,cAAc,IAAI,CAAC;IAC3D,IAAI8C,QAAQ,KAAK,CAAC,EAAEnB,MAAM,CAACoB,IAAI,CAAC,CAAC,CAAC,CAAC,KAC9B,IAAID,QAAQ,KAAK,CAAC,IAAIlB,OAAO,EAAED,MAAM,CAACqB,GAAG,CAACpB,OAAO,CAAC;AAC3D,EAAA;AAEA,EAAA,MAAMrB,IAAI,GAAGf,MAAM,CAAC,CAAC,CAAC,CAACe,IAAI;EAC3B,OAAO;AACH3C,IAAAA,WAAW,EAAE,MAAM;AACnBZ,IAAAA,YAAY,EAAE,KAAK;AACnBiB,IAAAA,QAAQ,EAAE,WAAW;AACrBH,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,SAAS,EAAE,IAAI;AACfC,IAAAA,mBAAmB,EAAE,IAAI;IACzBgB,KAAK,EAAElC,QAAQ,CAACkC,KAAK;IACrBE,MAAM,EAAEpC,QAAQ,CAACoC,MAAM;AACvB+D,IAAAA,WAAW,EAAE,YAAY;IACzB1C,IAAI;IACJf,MAAM;AACN0D,IAAAA,WAAW,EAAEpG,QAAQ,CAACkC,KAAK,GAAG,CAAC;AAC/BmE,IAAAA,MAAM,EAAE,UAAU;AAClBC,IAAAA,UAAU,EAAE,MAAM;AAClBC,IAAAA,SAAS,EAAE,UAAU;AACrBvG,IAAAA;GACH;AACL;AAEA,SAASkF,SAASA,CAACtF,KAAK,EAAE4G,eAAe,EAAEC,cAAc,EACzD;AACI,EAAA,MAAMC,KAAK,GAAG,CAAC,IAAIF,eAAe;AAClC,EAAA,MAAMG,GAAG,GAAGD,KAAK,GAAG,CAAC;AACrB,EAAA,IAAIE,QAAQ,GAAGJ,eAAe,GAAG,CAAC;AAClC,EAAA,IAAIK,UAAU,GAAGtI,KAAK,CAAC8G,IAAI,CAAC;AAAEvC,IAAAA,MAAM,EAAE4D;GAAO,EAAE,CAACpB,CAAC,EAAEK,KAAK,KAAK,CAAEA,KAAK,CAAE,CAAC;EACvE,IAAImB,SAAS,GAAG,CAAC;EACjB,IAAIC,QAAQ,GAAG,IAAI;EACnB,MAAMhF,MAAM,GAAG,EAAE;EACjB,OAAO+E,SAAS,GAAGF,QAAQ,IAAIhH,KAAK,CAACkD,MAAM,GAAG,CAAC,EAC/C;IACI,IAAInB,IAAI,GAAG,CAAC;IACZ,KAAK,IAAIqF,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGJ,QAAQ,EAAEI,GAAG,EAAE,EACvC;AACIrF,MAAAA,IAAI,IAAK,CAAE/B,KAAK,CAACkH,SAAS,KAAK,CAAC,CAAC,MAAMA,SAAS,GAAG,CAAC,CAAC,GAAI,CAAC,KAAKE,GAAI;AACnEF,MAAAA,SAAS,EAAE;AACf,IAAA;IACA,IAAInF,IAAI,KAAK+E,KAAK,EAClB;AACIG,MAAAA,UAAU,GAAGtI,KAAK,CAAC8G,IAAI,CAAC;AAAEvC,QAAAA,MAAM,EAAE4D;OAAO,EAAE,CAACpB,CAAC,EAAEK,KAAK,KAAK,CAAEA,KAAK,CAAE,CAAC;MACnEiB,QAAQ,GAAGJ,eAAe,GAAG,CAAC;AAC9BO,MAAAA,QAAQ,GAAG,IAAI;AACf,MAAA;AACJ,IAAA;IACA,IAAIpF,IAAI,KAAKgF,GAAG,EAAE;AAClB,IAAA,IAAI3E,KAAK;AACT,IAAA,IAAIL,IAAI,GAAGkF,UAAU,CAAC/D,MAAM,EAAEd,KAAK,GAAG6E,UAAU,CAAClF,IAAI,CAAC,CAAC,KAClD,IAAIA,IAAI,KAAKkF,UAAU,CAAC/D,MAAM,IAAIiE,QAAQ,EAAE/E,KAAK,GAAG+E,QAAQ,CAACE,MAAM,CAACF,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KACjF,MAAM,IAAIrF,KAAK,CAAC,uBAAuB,CAAC;AAC7CK,IAAAA,MAAM,CAACqC,IAAI,CAAC,GAAGpC,KAAK,CAAC;AACrB,IAAA,IAAI+E,QAAQ,EACZ;AACIF,MAAAA,UAAU,CAACzC,IAAI,CAAC2C,QAAQ,CAACE,MAAM,CAACjF,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAA,IAAI6E,UAAU,CAAC/D,MAAM,KAAM,CAAC,IAAI8D,QAAS,IAAIA,QAAQ,GAAG,EAAE,EAAEA,QAAQ,EAAE;AAC1E,IAAA;AACAG,IAAAA,QAAQ,GAAG/E,KAAK;AAChB,IAAA,IAAID,MAAM,CAACe,MAAM,IAAI2D,cAAc,EAAE;AACzC,EAAA;EACA,IAAI1E,MAAM,CAACe,MAAM,GAAG2D,cAAc,EAAE,MAAM,IAAI/E,KAAK,CAAC,mDAAmD,CAAC;AACxG,EAAA,OAAOK,MAAM,CAACgD,KAAK,CAAC,CAAC,EAAE0B,cAAc,CAAC;AAC1C;AAEA,SAAS/C,aAAaA,CAAC9D,KAAK,EAAE6C,MAAM,EACpC;EACI,MAAMV,MAAM,GAAG,EAAE;AACjB,EAAA,OAAOU,MAAM,GAAG7C,KAAK,CAACkD,MAAM,EAC5B;IACI,IAAIL,MAAM,IAAI7C,KAAK,CAACkD,MAAM,EAAE,MAAM,IAAIpB,KAAK,CAAC,mCAAmC,CAAC;AAChF,IAAA,MAAMoB,MAAM,GAAGlD,KAAK,CAAC6C,MAAM,EAAE,CAAC;IAC9B,IAAI,CAACK,MAAM,EAAE,OAAO;AAAElD,MAAAA,KAAK,EAAEP,UAAU,CAACgG,IAAI,CAACtD,MAAM,CAAC;AAAEU,MAAAA;KAAQ;AAC9D,IAAA,IAAIA,MAAM,GAAGK,MAAM,GAAGlD,KAAK,CAACkD,MAAM,EAAE,MAAM,IAAIpB,KAAK,CAAC,kCAAkC,CAAC;AACvFK,IAAAA,MAAM,CAACqC,IAAI,CAAC,GAAGxE,KAAK,CAACsH,QAAQ,CAACzE,MAAM,EAAEA,MAAM,GAAGK,MAAM,CAAC,CAAC;AACvDL,IAAAA,MAAM,IAAIK,MAAM;AACpB,EAAA;AACA,EAAA,MAAM,IAAIpB,KAAK,CAAC,mCAAmC,CAAC;AACxD;AAEA,SAASiC,aAAaA,CAAC/D,KAAK,EAAE6C,MAAM,EACpC;AACI,EAAA,OAAOiB,aAAa,CAAC9D,KAAK,EAAE6C,MAAM,CAAC,CAACA,MAAM;AAC9C;AAEA,SAASD,WAAWA,CAAC5C,KAAK,EAAE6C,MAAM,EAAE0E,KAAK,EACzC;EACI,MAAMnC,OAAO,GAAG,EAAE;EAClB,KAAK,IAAIoC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,KAAK,EAAEC,CAAC,EAAE,EAC9B;AACI,IAAA,IAAI3E,MAAM,GAAG,CAAC,GAAG7C,KAAK,CAACkD,MAAM,EAAE,MAAM,IAAIpB,KAAK,CAAC,4BAA4B,CAAC;IAC5EsD,OAAO,CAACZ,IAAI,CAAC,CAAExE,KAAK,CAAC6C,MAAM,CAAC,EAAE7C,KAAK,CAAC6C,MAAM,GAAG,CAAC,CAAC,EAAE7C,KAAK,CAAC6C,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;AACrEA,IAAAA,MAAM,IAAI,CAAC;AACf,EAAA;AACA,EAAA,OAAOuC,OAAO;AAClB;AAEA,SAASI,cAAcA,CAAChD,MAAM,EAC9B;EACI,MAAM+C,IAAI,GAAG,EAAE;AACf,EAAA,KAAK,MAAM,CAAEkC,KAAK,EAAEC,IAAI,CAAE,IAAI,CAAE,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAE,CAAC,EAAE,CAAC,CAAE,CAAE,EACxE;AACI,IAAA,KAAK,IAAI/B,GAAG,GAAG8B,KAAK,EAAE9B,GAAG,GAAGnD,MAAM,EAAEmD,GAAG,IAAI+B,IAAI,EAAEnC,IAAI,CAACf,IAAI,CAACmB,GAAG,CAAC;AACnE,EAAA;AACA,EAAA,OAAOJ,IAAI;AACf;AAEA,SAAStF,KAAKA,CAACD,KAAK,EAAE6C,MAAM,EAAEK,MAAM,EACpC;AACI,EAAA,OAAOyE,MAAM,CAACC,YAAY,CAAC,GAAG5H,KAAK,CAACsH,QAAQ,CAACzE,MAAM,EAAEA,MAAM,GAAGK,MAAM,CAAC,CAAC;AAC1E;AAEA,SAASX,SAASA,CAACvC,KAAK,EAAE6C,MAAM,EAChC;AACI,EAAA,OAAO7C,KAAK,CAAC6C,MAAM,CAAC,GAAI7C,KAAK,CAAC6C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE;AACnD;;;;"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gif/core/helpers.js"],"sourcesContent":["export const OUTPUT_IMAGE = \"image\";\nexport const OUTPUT_RGBA = \"rgba\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"gif\",\n source: \"\"\n});\n\n/**\n * Normalizes reader options against their supported defaults for the GIF format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsGifFormat\")\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n const allowed = new Set([ \"emit\", \"inputType\", \"source\" ]);\n for (const key of Object.keys(options))\n {\n if (!allowed.has(key)) throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...options };\n if (![ OUTPUT_IMAGE, OUTPUT_RGBA, OUTPUT_RAW, OUTPUT_JSON, \"gifJson\" ].includes(values.emit))\n {\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(values.emit)}`);\n }\n return values;\n}\n\n/** Returns a byte view over the supplied binary input for the GIF format reader. */\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"GIF input must be Uint8Array, ArrayBuffer, or a view\");\n}\n\n/** Reports whether the current GIF format reader satisfies GIF. */\nexport function isGIF(bytes)\n{\n return bytes.byteLength >= 13 && (ascii(bytes, 0, 6) === \"GIF87a\" || ascii(bytes, 0, 6) === \"GIF89a\");\n}\n\n/** Inspects input using normalized format options for the GIF format reader. */\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"gif\")\n{\n const bytes = toBytes(input);\n if (!isGIF(bytes)) throw new TypeError(\"CjsGifFormat: input is not a GIF87a/GIF89a image\");\n const metadata = inspectGif(bytes);\n if (expectedType && metadata.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsGifFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return { ...metadata, byteLength: bytes.byteLength, source: values.source || \"buffer\" };\n}\n\n/**\n * Reports whether input is supported under normalized format options for the GIF\n * format reader.\n */\nexport function probeSupportWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n const decoded = metadata.frameCount > 0 && metadata.lzwSupported;\n return {\n format: \"gif\",\n source: values.source || \"buffer\",\n supported: decoded ? \"full\" : \"partial\",\n confidence: 1,\n preferredOutput: decoded ? \"rgba\" : \"raw\",\n reason: decoded ? \"GIF frame RGBA decode and compositing are available.\" : \"GIF metadata/raw input is recognized but no decodable image frame was found.\",\n metadata,\n variants: [\n { kind: \"rgba\", payloadType: \"rgba\", codec: \"rgba8unorm\", supported: decoded, reason: decoded ? \"\" : \"GIF LZW frame decode is unavailable.\"},\n { kind: \"raw\", payloadType: \"raw\", codec: \"gif\", mimeType: \"image/gif\", supported: true}\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"gif\",\n source: values.source || \"buffer\",\n supported: \"none\",\n confidence: 0,\n preferredOutput: \"\",\n reason: error.message,\n metadata: null,\n variants: [],\n warnings: [],\n errors: [ error.message ]\n };\n }\n}\n\n/** Reads input using normalized format options for the GIF format reader. */\nexport function readWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values);\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: \"gif\",\n mimeType: \"image/gif\",\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === \"gifJson\") return metadata;\n if (values.emit === OUTPUT_RGBA || values.emit === OUTPUT_IMAGE)\n {\n return decodeFrames(bytes, metadata);\n }\n const error = new Error(`gif: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n throw error;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the GIF format reader. */\nexport function toJsonValue(value)\n{\n if (value instanceof Uint8Array) return { byteLength: value.byteLength };\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value && typeof value === \"object\")\n {\n const output = {};\n for (const [ key, entry ] of Object.entries(value)) output[key] = toJsonValue(entry);\n return output;\n }\n return value;\n}\n\nfunction inspectGif(bytes)\n{\n const width = readU16LE(bytes, 6);\n const height = readU16LE(bytes, 8);\n const packed = bytes[10];\n const hasGlobalPalette = !!(packed & 0x80);\n const globalPaletteCount = hasGlobalPalette ? 1 << ((packed & 7) + 1) : 0;\n if (hasGlobalPalette) readPalette(bytes, 13, globalPaletteCount);\n let offset = 13 + globalPaletteCount * 3;\n let frameCount = 0;\n const frames = [];\n let firstFrame = null;\n let graphicsControl = null;\n let loopCount = null;\n while (offset < bytes.length)\n {\n const marker = bytes[offset++];\n if (marker === 0x3b) break;\n if (marker === 0x21)\n {\n const label = bytes[offset++];\n if (label === 0xf9)\n {\n if (bytes[offset++] !== 4) throw new Error(\"gif: invalid graphics control extension\");\n const control = bytes[offset++];\n graphicsControl = {\n disposalMethod: (control >>> 2) & 7,\n userInput: !!(control & 2),\n transparent: !!(control & 1),\n delayCentiseconds: readU16LE(bytes, offset)\n };\n offset += 2;\n graphicsControl.transparentIndex = bytes[offset++];\n if (bytes[offset++] !== 0) throw new Error(\"gif: unterminated graphics control extension\");\n }\n else if (label === 0xff)\n {\n const size = bytes[offset++];\n const application = ascii(bytes, offset, size);\n offset += size;\n const data = readSubBlocks(bytes, offset);\n offset = data.offset;\n if (application === \"NETSCAPE2.0\" || application === \"ANIMEXTS1.0\")\n {\n if (data.bytes.length >= 3 && data.bytes[0] === 1) loopCount = readU16LE(data.bytes, 1);\n }\n }\n else\n {\n offset = skipSubBlocks(bytes, offset);\n }\n }\n else if (marker === 0x2c)\n {\n if (offset + 9 > bytes.length) throw new Error(\"gif: truncated image descriptor\");\n const frame = {\n left: readU16LE(bytes, offset),\n top: readU16LE(bytes, offset + 2),\n width: readU16LE(bytes, offset + 4),\n height: readU16LE(bytes, offset + 6),\n packed: bytes[offset + 8],\n graphicsControl\n };\n offset += 9;\n const localPaletteCount = frame.packed & 0x80 ? 1 << ((frame.packed & 7) + 1) : 0;\n frame.localPalette = localPaletteCount ? readPalette(bytes, offset, localPaletteCount) : null;\n offset += localPaletteCount * 3;\n frame.lzwMinCodeSize = bytes[offset++];\n const data = readSubBlocks(bytes, offset);\n frame.compressed = data.bytes;\n offset = data.offset;\n frame.interlaced = !!(frame.packed & 0x40);\n frameCount++;\n frames.push(frame);\n if (!firstFrame) firstFrame = frame;\n graphicsControl = null;\n }\n else if (marker === 0x00)\n {\n throw new Error(\"gif: unexpected data before image descriptor\");\n }\n else\n {\n throw new Error(`gif: unsupported block marker 0x${marker.toString(16)}`);\n }\n }\n return {\n payloadType: \"image\",\n mediaTypes: [ \"image\" ],\n sourceFormat: \"gif\",\n version: ascii(bytes, 0, 6),\n width,\n height,\n frameCount,\n animated: frameCount > 1,\n loopCount,\n hasGlobalPalette,\n backgroundColorIndex: bytes[11],\n colorResolution: ((packed >>> 4) & 7) + 1,\n lzwSupported: frames.length > 0 && frames.every((frame) => frame.lzwMinCodeSize >= 2 && frame.lzwMinCodeSize <= 8),\n firstFrame,\n frames\n };\n}\n\nfunction decodeFrames(bytes, metadata)\n{\n if (!metadata.firstFrame || !metadata.lzwSupported) throw new Error(\"gif: no supported LZW image frame found\");\n const globalPalette = readPalette(bytes, 13, metadata.hasGlobalPalette ? 1 << ((bytes[10] & 7) + 1) : 0);\n const canvas = new Uint8Array(metadata.width * metadata.height * 4);\n const frames = [];\n\n for (const frame of metadata.frames)\n {\n const restore = frame.graphicsControl?.disposalMethod === 3 ? canvas.slice() : null;\n const palette = frame.localPalette || globalPalette;\n const indices = decodeLzw(frame.compressed, frame.lzwMinCodeSize, frame.width * frame.height);\n const rows = frame.interlaced ? interlacedRows(frame.height) : Array.from({ length: frame.height }, (_, row) => row);\n for (let sourceRow = 0; sourceRow < frame.height; sourceRow++)\n {\n const targetRow = rows[sourceRow];\n for (let x = 0; x < frame.width; x++)\n {\n const index = indices[sourceRow * frame.width + x];\n const targetX = frame.left + x;\n const targetY = frame.top + targetRow;\n if (targetX >= metadata.width || targetY >= metadata.height) continue;\n if (frame.graphicsControl?.transparent && index === frame.graphicsControl.transparentIndex) continue;\n const target = (targetY * metadata.width + targetX) * 4;\n const color = palette[index] || [ 0, 0, 0 ];\n canvas[target] = color[0];\n canvas[target + 1] = color[1];\n canvas[target + 2] = color[2];\n canvas[target + 3] = 255;\n }\n }\n\n frames.push({\n index: frames.length,\n delayCentiseconds: frame.graphicsControl?.delayCentiseconds || 0,\n disposalMethod: frame.graphicsControl?.disposalMethod || 0,\n data: canvas.slice()\n });\n const disposal = frame.graphicsControl?.disposalMethod || 0;\n if (disposal === 2) canvas.fill(0);\n else if (disposal === 3 && restore) canvas.set(restore);\n }\n\n const data = frames[0].data;\n return {\n payloadType: \"rgba\",\n sourceFormat: \"gif\",\n mimeType: \"image/gif\",\n width: metadata.width,\n height: metadata.height,\n pixelFormat: \"rgba8unorm\",\n data,\n frames,\n strideBytes: metadata.width * 4,\n origin: \"top-left\",\n colorSpace: \"srgb\",\n alphaMode: \"straight\",\n metadata\n };\n}\n\nfunction decodeLzw(bytes, minimumCodeSize, expectedLength)\n{\n const clear = 1 << minimumCodeSize;\n const end = clear + 1;\n let codeSize = minimumCodeSize + 1;\n let dictionary = Array.from({ length: clear }, (_, index) => [ index ]);\n let bitOffset = 0;\n let previous = null;\n const output = [];\n while (bitOffset + codeSize <= bytes.length * 8)\n {\n let code = 0;\n for (let bit = 0; bit < codeSize; bit++)\n {\n code |= (((bytes[bitOffset >>> 3] >>> (bitOffset & 7)) & 1) << bit);\n bitOffset++;\n }\n if (code === clear)\n {\n dictionary = Array.from({ length: clear }, (_, index) => [ index ]);\n codeSize = minimumCodeSize + 1;\n previous = null;\n continue;\n }\n if (code === end) break;\n let entry;\n if (code < dictionary.length) entry = dictionary[code];\n else if (code === dictionary.length && previous) entry = previous.concat(previous[0]);\n else throw new Error(\"gif: invalid LZW code\");\n output.push(...entry);\n if (previous)\n {\n dictionary.push(previous.concat(entry[0]));\n if (dictionary.length === (1 << codeSize) && codeSize < 12) codeSize++;\n }\n previous = entry;\n if (output.length >= expectedLength) break;\n }\n if (output.length < expectedLength) throw new Error(\"gif: LZW stream ended before the frame was filled\");\n return output.slice(0, expectedLength);\n}\n\nfunction readSubBlocks(bytes, offset)\n{\n const output = [];\n while (offset < bytes.length)\n {\n if (offset >= bytes.length) throw new Error(\"gif: truncated sub-block sequence\");\n const length = bytes[offset++];\n if (!length) return { bytes: Uint8Array.from(output), offset };\n if (offset + length > bytes.length) throw new Error(\"gif: truncated sub-block payload\");\n output.push(...bytes.subarray(offset, offset + length));\n offset += length;\n }\n throw new Error(\"gif: truncated sub-block sequence\");\n}\n\nfunction skipSubBlocks(bytes, offset)\n{\n return readSubBlocks(bytes, offset).offset;\n}\n\nfunction readPalette(bytes, offset, count)\n{\n const palette = [];\n for (let i = 0; i < count; i++)\n {\n if (offset + 3 > bytes.length) throw new Error(\"gif: truncated color table\");\n palette.push([ bytes[offset], bytes[offset + 1], bytes[offset + 2] ]);\n offset += 3;\n }\n return palette;\n}\n\nfunction interlacedRows(height)\n{\n const rows = [];\n for (const [ start, step ] of [ [ 0, 8 ], [ 4, 8 ], [ 2, 4 ], [ 1, 2 ] ])\n {\n for (let row = start; row < height; row += step) rows.push(row);\n }\n return rows;\n}\n\nfunction ascii(bytes, offset, length)\n{\n return String.fromCharCode(...bytes.subarray(offset, offset + length));\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n"],"names":["OUTPUT_IMAGE","OUTPUT_RGBA","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","normalizeValues","base","options","readerName","Array","isArray","TypeError","allowed","Set","key","keys","has","JSON","stringify","values","includes","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isGIF","bytes","ascii","inspectWithValues","expectedType","metadata","inspectGif","sourceFormat","probeSupportWithValues","decoded","frameCount","lzwSupported","format","supported","confidence","preferredOutput","reason","variants","kind","payloadType","codec","mimeType","warnings","errors","error","message","readWithValues","decodeFrames","Error","code","toJsonValue","value","map","output","entry","entries","width","readU16LE","height","packed","hasGlobalPalette","globalPaletteCount","readPalette","offset","frames","firstFrame","graphicsControl","loopCount","length","marker","label","control","disposalMethod","userInput","transparent","delayCentiseconds","transparentIndex","size","application","data","readSubBlocks","skipSubBlocks","frame","left","top","localPaletteCount","localPalette","lzwMinCodeSize","compressed","interlaced","push","toString","mediaTypes","version","animated","backgroundColorIndex","colorResolution","every","globalPalette","canvas","restore","slice","palette","indices","decodeLzw","rows","interlacedRows","from","_","row","sourceRow","targetRow","x","index","targetX","targetY","target","color","disposal","fill","set","pixelFormat","strideBytes","origin","colorSpace","alphaMode","minimumCodeSize","expectedLength","clear","end","codeSize","dictionary","bitOffset","previous","bit","concat","subarray","count","i","start","step","String","fromCharCode"],"mappings":"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"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
+
import { CjsFormat } from '../../format/CjsFormat.js';
|
|
1
2
|
import { DEFAULT_VALUES, normalizeValues, validateClassKey, validateClass, readWithValues, inspectWithValues, toJsonValue, OUTPUT_CMF, OUTPUT_GR2, OUTPUT_SHARED, OUTPUT_GLTF_JSON, OUTPUT_JSON, CLASS_KEYS } from './core/helpers.js';
|
|
2
3
|
import { isGlb, toBytes } from './core/parser.js';
|
|
3
4
|
|
|
4
|
-
/**
|
|
5
|
-
* Exposed CarbonEngineJS-facing glTF/GLB format class.
|
|
6
|
-
*
|
|
7
|
-
* Keep this file small and reviewable: glTF parsing, accessor decoding,
|
|
8
|
-
* mesh conversion, skin conversion, animation conversion, and geometry helper
|
|
9
|
-
* glue live under src/core.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
5
|
const FORMAT_NAME = "CjsGltfFormat";
|
|
13
6
|
|
|
14
7
|
/**
|
|
@@ -18,7 +11,7 @@ const FORMAT_NAME = "CjsGltfFormat";
|
|
|
18
11
|
* glTF is the import source; the public read contract is the shared
|
|
19
12
|
* CarbonEngineJS JSON mesh, skeleton, and animation schema.
|
|
20
13
|
*/
|
|
21
|
-
class CjsGltfFormat {
|
|
14
|
+
class CjsGltfFormat extends CjsFormat {
|
|
22
15
|
#emit = DEFAULT_VALUES.emit;
|
|
23
16
|
#source = DEFAULT_VALUES.source;
|
|
24
17
|
#buffers = DEFAULT_VALUES.buffers;
|
|
@@ -35,6 +28,7 @@ class CjsGltfFormat {
|
|
|
35
28
|
* @param {object} [options] Default format values.
|
|
36
29
|
*/
|
|
37
30
|
constructor(options = {}) {
|
|
31
|
+
super();
|
|
38
32
|
this.SetValues(options);
|
|
39
33
|
}
|
|
40
34
|
|
|
@@ -241,11 +235,29 @@ class CjsGltfFormat {
|
|
|
241
235
|
CMF: OUTPUT_CMF
|
|
242
236
|
});
|
|
243
237
|
static CLASS_KEYS = CLASS_KEYS;
|
|
244
|
-
static
|
|
238
|
+
static id = "gltf";
|
|
245
239
|
static mediaTypes = Object.freeze(["geometry"]);
|
|
246
|
-
static
|
|
247
|
-
|
|
248
|
-
|
|
240
|
+
static outputs = CjsFormat.defineOutputs({
|
|
241
|
+
shared: {
|
|
242
|
+
decoded: true
|
|
243
|
+
},
|
|
244
|
+
gr2: {
|
|
245
|
+
decoded: true
|
|
246
|
+
},
|
|
247
|
+
cmf: {
|
|
248
|
+
decoded: true
|
|
249
|
+
},
|
|
250
|
+
json: {
|
|
251
|
+
role: "debug",
|
|
252
|
+
decoded: true
|
|
253
|
+
},
|
|
254
|
+
gltfJson: {
|
|
255
|
+
role: "debug",
|
|
256
|
+
default: true,
|
|
257
|
+
decoded: true
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
static extensions = Object.freeze([".gltf", ".glb"]);
|
|
249
261
|
}
|
|
250
262
|
|
|
251
263
|
export { CjsGltfFormat, CjsGltfFormat as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CjsGltfFormat.js","sources":["../../../../src/formats/gltf/CjsGltfFormat.js"],"sourcesContent":["/**\n * Exposed CarbonEngineJS-facing glTF/GLB format class.\n *\n * Keep this file small and reviewable: glTF parsing, accessor decoding,\n * mesh conversion, skin conversion, animation conversion, and geometry helper\n * glue live under src/core.\n */\n\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_CMF,\n OUTPUT_GLTF_JSON,\n OUTPUT_GR2,\n OUTPUT_JSON,\n OUTPUT_SHARED,\n inspectWithValues,\n isGlb,\n normalizeValues,\n readWithValues,\n toBytes,\n toJsonValue,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsGltfFormat\";\n\n/**\n * CarbonEngineJS-facing glTF/GLB format surface.\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\n * glTF is the import source; the public read contract is the shared\n * CarbonEngineJS JSON mesh, skeleton, and animation schema.\n */\nexport class CjsGltfFormat\n{\n\n #emit = DEFAULT_VALUES.emit;\n #source = DEFAULT_VALUES.source;\n #buffers = DEFAULT_VALUES.buffers;\n #packTangents = DEFAULT_VALUES.packTangents;\n #uvHandedness = DEFAULT_VALUES.uvHandedness;\n #rebuildMissingNormals = DEFAULT_VALUES.rebuildMissingNormals;\n #rebuildMissingTangents = DEFAULT_VALUES.rebuildMissingTangents;\n #rebuildMissingBiNormals = DEFAULT_VALUES.rebuildMissingBiNormals;\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 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 {CjsGltfFormat} 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.#buffers = values.buffers;\n this.#packTangents = values.packTangents;\n this.#uvHandedness = values.uvHandedness;\n this.#rebuildMissingNormals = values.rebuildMissingNormals;\n this.#rebuildMissingTangents = values.rebuildMissingTangents;\n this.#rebuildMissingBiNormals = values.rebuildMissingBiNormals;\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 buffers: this.#buffers,\n packTangents: this.#packTangents,\n uvHandedness: this.#uvHandedness,\n rebuildMissingNormals: this.#rebuildMissingNormals,\n rebuildMissingTangents: this.#rebuildMissingTangents,\n rebuildMissingBiNormals: this.#rebuildMissingBiNormals,\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.\n * @returns {CjsGltfFormat} 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 {CjsGltfFormat} 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 format profile has a constructor registered for a node 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 glTF/GLB data with this profile's values.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input glTF object, JSON text/bytes, or GLB bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {object} The shared CarbonEngineJS JSON geometry schema.\n */\n Read(input, options = {})\n {\n return readWithValues(this, input, this.GetValues(options));\n }\n\n /**\n * Inspect glTF/GLB data without hydrating classes.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input glTF object, JSON text/bytes, or GLB 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 one-shot read. Static methods use camelCase by convention.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input glTF object, JSON text/bytes, or GLB bytes.\n * @param {object} [options] Format values.\n * @returns {object} The shared CarbonEngineJS JSON geometry schema.\n */\n static read(input, options = {})\n {\n return readWithValues(CjsGltfFormat, input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input glTF object, JSON text/bytes, or GLB 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 /**\n * Cheap payload sniff for GLB bytes.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Candidate bytes.\n * @returns {boolean} True when the payload starts with GLB magic.\n */\n static isGlb(input)\n {\n return isGlb(input);\n }\n\n /**\n * Cheap object/text/bytes sniff for glTF-like assets.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input Candidate glTF data.\n * @returns {boolean} True when the input looks like glTF 2.x or GLB.\n */\n static isGltf(input)\n {\n try\n {\n if (isGlb(input)) return true;\n if (input && typeof input === \"object\" && !ArrayBuffer.isView(input) && !(input instanceof ArrayBuffer))\n {\n return !!(input.asset && String(input.asset.version || \"\").startsWith(\"2\"));\n }\n const text = typeof input === \"string\" ? input : new TextDecoder().decode(toBytes(input));\n const json = JSON.parse(text);\n return !!(json.asset && String(json.asset.version || \"\").startsWith(\"2\"));\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 JSON: OUTPUT_JSON,\n GLTF_JSON: OUTPUT_GLTF_JSON,\n SHARED: OUTPUT_SHARED,\n GR2: OUTPUT_GR2,\n CMF: OUTPUT_CMF\n });\n static CLASS_KEYS = CLASS_KEYS;\n static type = Object.freeze([ \"geometry\" ]);\n static mediaTypes = Object.freeze([ \"geometry\" ]);\n static inputTypes = Object.freeze([ \"gltf\", \"glb\" ]);\n static outputTypes = Object.freeze([ OUTPUT_SHARED, OUTPUT_GR2, OUTPUT_CMF ]);\n static debugOutputTypes = Object.freeze([ OUTPUT_JSON, OUTPUT_GLTF_JSON ]);\n\n}\n\nexport default CjsGltfFormat;\n"],"names":["FORMAT_NAME","CjsGltfFormat","DEFAULT_VALUES","emit","source","buffers","packTangents","uvHandedness","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","constructor","options","SetValues","values","normalizeValues","GetValues","SetClasses","SetClass","type","Class","undefined","validateClassKey","validateClass","GetClass","HasClass","Read","input","readWithValues","Inspect","inspectWithValues","ToJSON","value","toJsonValue","read","inspect","toJSON","isGlb","isGltf","ArrayBuffer","isView","asset","String","version","startsWith","text","TextDecoder","decode","toBytes","json","JSON","parse","Output","Object","freeze","OUTPUT_JSON","GLTF_JSON","OUTPUT_GLTF_JSON","SHARED","OUTPUT_SHARED","GR2","OUTPUT_GR2","CMF","OUTPUT_CMF","CLASS_KEYS","mediaTypes","inputTypes","outputTypes","debugOutputTypes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CjsGltfFormat.js","sources":["../../../../src/formats/gltf/CjsGltfFormat.js"],"sourcesContent":["import { CjsFormat } from \"../../format/CjsFormat.js\";\n/**\n * Exposed CarbonEngineJS-facing glTF/GLB format class.\n *\n * Keep this file small and reviewable: glTF parsing, accessor decoding,\n * mesh conversion, skin conversion, animation conversion, and geometry helper\n * glue live under src/core.\n */\n\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_CMF,\n OUTPUT_GLTF_JSON,\n OUTPUT_GR2,\n OUTPUT_JSON,\n OUTPUT_SHARED,\n inspectWithValues,\n isGlb,\n normalizeValues,\n readWithValues,\n toBytes,\n toJsonValue,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsGltfFormat\";\n\n/**\n * CarbonEngineJS-facing glTF/GLB format surface.\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\n * glTF is the import source; the public read contract is the shared\n * CarbonEngineJS JSON mesh, skeleton, and animation schema.\n */\nexport class CjsGltfFormat extends CjsFormat\n{\n\n #emit = DEFAULT_VALUES.emit;\n #source = DEFAULT_VALUES.source;\n #buffers = DEFAULT_VALUES.buffers;\n #packTangents = DEFAULT_VALUES.packTangents;\n #uvHandedness = DEFAULT_VALUES.uvHandedness;\n #rebuildMissingNormals = DEFAULT_VALUES.rebuildMissingNormals;\n #rebuildMissingTangents = DEFAULT_VALUES.rebuildMissingTangents;\n #rebuildMissingBiNormals = DEFAULT_VALUES.rebuildMissingBiNormals;\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 {CjsGltfFormat} 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.#buffers = values.buffers;\n this.#packTangents = values.packTangents;\n this.#uvHandedness = values.uvHandedness;\n this.#rebuildMissingNormals = values.rebuildMissingNormals;\n this.#rebuildMissingTangents = values.rebuildMissingTangents;\n this.#rebuildMissingBiNormals = values.rebuildMissingBiNormals;\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 buffers: this.#buffers,\n packTangents: this.#packTangents,\n uvHandedness: this.#uvHandedness,\n rebuildMissingNormals: this.#rebuildMissingNormals,\n rebuildMissingTangents: this.#rebuildMissingTangents,\n rebuildMissingBiNormals: this.#rebuildMissingBiNormals,\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.\n * @returns {CjsGltfFormat} 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 {CjsGltfFormat} 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 format profile has a constructor registered for a node 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 glTF/GLB data with this profile's values.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input glTF object, JSON text/bytes, or GLB bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {object} The shared CarbonEngineJS JSON geometry schema.\n */\n Read(input, options = {})\n {\n return readWithValues(this, input, this.GetValues(options));\n }\n\n /**\n * Inspect glTF/GLB data without hydrating classes.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input glTF object, JSON text/bytes, or GLB 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 one-shot read. Static methods use camelCase by convention.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input glTF object, JSON text/bytes, or GLB bytes.\n * @param {object} [options] Format values.\n * @returns {object} The shared CarbonEngineJS JSON geometry schema.\n */\n static read(input, options = {})\n {\n return readWithValues(CjsGltfFormat, input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input glTF object, JSON text/bytes, or GLB 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 /**\n * Cheap payload sniff for GLB bytes.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Candidate bytes.\n * @returns {boolean} True when the payload starts with GLB magic.\n */\n static isGlb(input)\n {\n return isGlb(input);\n }\n\n /**\n * Cheap object/text/bytes sniff for glTF-like assets.\n *\n * @param {object|string|Uint8Array|ArrayBuffer|DataView} input Candidate glTF data.\n * @returns {boolean} True when the input looks like glTF 2.x or GLB.\n */\n static isGltf(input)\n {\n try\n {\n if (isGlb(input)) return true;\n if (input && typeof input === \"object\" && !ArrayBuffer.isView(input) && !(input instanceof ArrayBuffer))\n {\n return !!(input.asset && String(input.asset.version || \"\").startsWith(\"2\"));\n }\n const text = typeof input === \"string\" ? input : new TextDecoder().decode(toBytes(input));\n const json = JSON.parse(text);\n return !!(json.asset && String(json.asset.version || \"\").startsWith(\"2\"));\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 JSON: OUTPUT_JSON,\n GLTF_JSON: OUTPUT_GLTF_JSON,\n SHARED: OUTPUT_SHARED,\n GR2: OUTPUT_GR2,\n CMF: OUTPUT_CMF\n });\n static CLASS_KEYS = CLASS_KEYS;\n static id = \"gltf\";\n static mediaTypes = Object.freeze([ \"geometry\" ]);\n static outputs = CjsFormat.defineOutputs({\n shared: { decoded: true },\n gr2: { decoded: true },\n cmf: { decoded: true },\n json: { role: \"debug\", decoded: true },\n gltfJson: { role: \"debug\", default: true, decoded: true }\n });\n static extensions = Object.freeze([ \".gltf\", \".glb\" ]);\n\n}\n\nexport default CjsGltfFormat;\n"],"names":["FORMAT_NAME","CjsGltfFormat","CjsFormat","DEFAULT_VALUES","emit","source","buffers","packTangents","uvHandedness","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","constructor","options","SetValues","values","normalizeValues","GetValues","SetClasses","SetClass","type","Class","undefined","validateClassKey","validateClass","GetClass","HasClass","Read","input","readWithValues","Inspect","inspectWithValues","ToJSON","value","toJsonValue","read","inspect","toJSON","isGlb","isGltf","ArrayBuffer","isView","asset","String","version","startsWith","text","TextDecoder","decode","toBytes","json","JSON","parse","Output","Object","freeze","OUTPUT_JSON","GLTF_JSON","OUTPUT_GLTF_JSON","SHARED","OUTPUT_SHARED","GR2","OUTPUT_GR2","CMF","OUTPUT_CMF","CLASS_KEYS","id","mediaTypes","outputs","defineOutputs","shared","decoded","gr2","cmf","role","gltfJson","default","extensions"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CjsFormat } from '../../format/CjsFormat.js';
|
|
1
2
|
import { curves } from './core/curves.js';
|
|
2
3
|
import { GR2_MAGICS, bytesToHex } from './core/reader.js';
|
|
3
4
|
import { tangents } from './core/tangents.js';
|
|
@@ -12,7 +13,7 @@ import { DEFAULT_VALUES, normalizeValues, validateClassKey, validateClass, readW
|
|
|
12
13
|
* emitting GR2 JSON, hydrated caller-supplied classes, or CMF-shaped output,
|
|
13
14
|
* without pretending those classes are the engine runtime itself.
|
|
14
15
|
*/
|
|
15
|
-
class CjsGr2Format {
|
|
16
|
+
class CjsGr2Format extends CjsFormat {
|
|
16
17
|
#emit = DEFAULT_VALUES.emit;
|
|
17
18
|
#decompressCurves = DEFAULT_VALUES.decompressCurves;
|
|
18
19
|
#unpackTangents = DEFAULT_VALUES.unpackTangents;
|
|
@@ -27,6 +28,7 @@ class CjsGr2Format {
|
|
|
27
28
|
* @param {object} [options] Default format/build values.
|
|
28
29
|
*/
|
|
29
30
|
constructor(options = {}) {
|
|
31
|
+
super();
|
|
30
32
|
this.SetValues(options);
|
|
31
33
|
}
|
|
32
34
|
|
|
@@ -249,11 +251,30 @@ class CjsGr2Format {
|
|
|
249
251
|
static OUTPUT_CMF = OUTPUT_CMF;
|
|
250
252
|
static OUTPUT_RAW = OUTPUT_RAW;
|
|
251
253
|
static CLASS_KEYS = CLASS_KEYS;
|
|
252
|
-
static
|
|
254
|
+
static id = "gr2";
|
|
253
255
|
static mediaTypes = Object.freeze(["geometry"]);
|
|
254
|
-
static
|
|
255
|
-
|
|
256
|
-
|
|
256
|
+
static outputs = CjsFormat.defineOutputs({
|
|
257
|
+
gr2: {
|
|
258
|
+
decoded: true
|
|
259
|
+
},
|
|
260
|
+
cmf: {
|
|
261
|
+
decoded: true
|
|
262
|
+
},
|
|
263
|
+
json: {
|
|
264
|
+
role: "debug",
|
|
265
|
+
default: true,
|
|
266
|
+
decoded: true
|
|
267
|
+
},
|
|
268
|
+
gr2Json: {
|
|
269
|
+
role: "debug",
|
|
270
|
+
decoded: true
|
|
271
|
+
},
|
|
272
|
+
raw: {
|
|
273
|
+
role: "debug",
|
|
274
|
+
decoded: true
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
static extensions = Object.freeze([".gr2", ".gsf"]);
|
|
257
278
|
static curves = curves;
|
|
258
279
|
static tangents = tangents;
|
|
259
280
|
static gsf = Object.freeze({
|
|
@@ -268,7 +289,7 @@ class CjsGr2Format {
|
|
|
268
289
|
* @param {Uint8Array} bytes Candidate source bytes.
|
|
269
290
|
* @returns {boolean} True when the 16-byte Granny magic is recognized.
|
|
270
291
|
*/
|
|
271
|
-
static
|
|
292
|
+
static probeSupport(bytes) {
|
|
272
293
|
if (!bytes || bytes.length < 16) return false;
|
|
273
294
|
return bytesToHex(bytes.subarray(0, 16)) in GR2_MAGICS;
|
|
274
295
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CjsGr2Format.js","sources":["../../../../src/formats/gr2/CjsGr2Format.js"],"sourcesContent":["\nimport { curves } from \"./core/curves.js\";\nimport { GR2_MAGICS, bytesToHex } from \"./core/reader.js\";\nimport { tangents } from \"./core/tangents.js\";\nimport { inspectGsfRaw, isGsfRaw, projectGsf } from \"./core/gsf.js\";\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_CMF,\n OUTPUT_GR2,\n OUTPUT_GR2_JSON,\n OUTPUT_JSON,\n OUTPUT_RAW,\n inspectRawGr2Result,\n normalizeValues,\n readRawInput,\n readWithValues,\n toJsonValue,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\n/**\n * CarbonEngineJS-facing GR2 (Granny 3D) and GSF (Granny State) reader.\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary. It\n * reads `.gr2` geometry/skeleton/animation graphs and `.gsf` state profiles,\n * emitting GR2 JSON, hydrated caller-supplied classes, or CMF-shaped output,\n * without pretending those classes are the engine runtime itself.\n */\nexport class CjsGr2Format\n{\n\n #emit = DEFAULT_VALUES.emit;\n #decompressCurves = DEFAULT_VALUES.decompressCurves;\n #unpackTangents = DEFAULT_VALUES.unpackTangents;\n #rebuildMissingNormals = DEFAULT_VALUES.rebuildMissingNormals;\n #rebuildMissingTangents = DEFAULT_VALUES.rebuildMissingTangents;\n #rebuildMissingBiNormals = DEFAULT_VALUES.rebuildMissingBiNormals;\n #classes = {};\n\n /**\n * Create a reusable format profile.\n *\n * @param {object} [options] Default format/build values.\n */\n constructor(options = {})\n {\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 {CjsGr2Format} This format profile.\n */\n SetValues(options = {})\n {\n const values = normalizeValues(this.GetValues(), options);\n\n this.#emit = values.emit;\n this.#decompressCurves = values.decompressCurves;\n this.#unpackTangents = values.unpackTangents;\n this.#rebuildMissingNormals = values.rebuildMissingNormals;\n this.#rebuildMissingTangents = values.rebuildMissingTangents;\n this.#rebuildMissingBiNormals = values.rebuildMissingBiNormals;\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 decompressCurves: this.#decompressCurves,\n unpackTangents: this.#unpackTangents,\n rebuildMissingNormals: this.#rebuildMissingNormals,\n rebuildMissingTangents: this.#rebuildMissingTangents,\n rebuildMissingBiNormals: this.#rebuildMissingBiNormals,\n classes: this.#classes\n }, options);\n }\n\n /**\n * Set multiple GR2 JSON node constructors for this profile.\n *\n * @param {object} [classes] Map of node class keys to constructors.\n * @returns {CjsGr2Format} This format profile.\n */\n SetClasses(classes = {})\n {\n return this.SetValues({ classes });\n }\n\n /**\n * Set a GR2 JSON node 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 {CjsGr2Format} This format profile.\n */\n SetClass(type, Class)\n {\n validateClassKey(type);\n if (Class === null || Class === undefined)\n {\n delete this.#classes[type];\n return this;\n }\n\n validateClass(type, Class);\n this.#classes = { ...this.#classes, [type]: Class };\n return this;\n }\n\n /**\n * Get a configured GR2 JSON node constructor.\n *\n * @param {string} type Node class key.\n * @returns {Function|undefined}\n */\n GetClass(type)\n {\n validateClassKey(type);\n return this.#classes[type];\n }\n\n /**\n * Whether this reader has a constructor for a GR2 JSON node key.\n *\n * @param {string} type Node class key.\n * @returns {boolean}\n */\n HasClass(type)\n {\n return !!this.GetClass(type);\n }\n\n /**\n * Parse a .gr2 buffer and return JSON by default, classes when configured,\n * or raw reflection data when `emit` is \"raw\".\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @param {object} [options] Per-call values.\n * @returns {object}\n */\n Read(input, options = {})\n {\n return readWithValues(this, input, this.GetValues(options));\n }\n\n /**\n * Parse a .gr2 buffer into the reflected Granny object graph.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @returns {object}\n */\n ReadRaw(input)\n {\n return readRawInput(input);\n }\n\n /**\n * Return a stable, lightweight summary for a GR2 buffer or raw result.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @returns {object}\n */\n Inspect(input)\n {\n return inspectRawGr2Result(this.ReadRaw(input));\n }\n\n /** Whether input is a Granny State document carried by the GR2 container. */\n IsGSF(input)\n {\n return isGsfRaw(this.ReadRaw(input));\n }\n\n /** Read the GState semantic projection, or raw reflected data with `emit: \"raw\"`. */\n ReadGSF(input, options = {})\n {\n const raw = this.ReadRaw(input);\n return options.emit === \"raw\" ? raw : projectGsf(raw);\n }\n\n /** Inspect a GSF document and its referenced GR2 animations. */\n InspectGSF(input)\n {\n return inspectGsfRaw(this.ReadRaw(input));\n }\n\n /**\n * Convert format output to plain JSON-compatible data.\n *\n * @param {object} 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 one-shot read. Static methods use camelCase by convention.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @param {object} [options] Reader and post-processing values.\n * @returns {object}\n */\n static read(input, options = {})\n {\n return readWithValues(CjsGr2Format, input, normalizeValues(DEFAULT_VALUES, options));\n }\n\n /**\n * Static one-shot raw read.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @returns {object}\n */\n static readRaw(input)\n {\n return readRawInput(input);\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @returns {object}\n */\n static inspect(input)\n {\n return inspectRawGr2Result(readRawInput(input));\n }\n\n /** Whether input is a Granny State document carried by the GR2 container. */\n static isGsf(input)\n {\n try\n {\n return isGsfRaw(readRawInput(input));\n }\n catch\n {\n return false;\n }\n }\n\n /** Read the GState semantic projection, or raw reflected data with `emit: \"raw\"`. */\n static readGsf(input, options = {})\n {\n const raw = readRawInput(input);\n return options.emit === \"raw\" ? raw : projectGsf(raw);\n }\n\n /** Async one-shot GSF read for standard format API compatibility. */\n static readGsfAsync(input, options = {})\n {\n return Promise.resolve(this.readGsf(input, options));\n }\n\n /** Inspect a GSF document and its referenced GR2 animations. */\n static inspectGsf(input)\n {\n return inspectGsfRaw(readRawInput(input));\n }\n\n /**\n * Static JSON-compatible conversion.\n *\n * @param {object} 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_GR2 = OUTPUT_GR2;\n static OUTPUT_GR2_JSON = OUTPUT_GR2_JSON;\n static OUTPUT_CMF = OUTPUT_CMF;\n static OUTPUT_RAW = OUTPUT_RAW;\n static CLASS_KEYS = CLASS_KEYS;\n static type = Object.freeze([ \"geometry\" ]);\n static mediaTypes = Object.freeze([ \"geometry\" ]);\n static inputTypes = Object.freeze([ \"gr2\", \"gsf\" ]);\n static outputTypes = Object.freeze([ OUTPUT_GR2, OUTPUT_CMF ]);\n static debugOutputTypes = Object.freeze([ OUTPUT_JSON, OUTPUT_GR2_JSON, OUTPUT_RAW ]);\n static curves = curves;\n static tangents = tangents;\n static gsf = Object.freeze({ isRaw: isGsfRaw, project: projectGsf, inspectRaw: inspectGsfRaw });\n\n /**\n * Cheap magic probe for GR2/GSF byte streams.\n *\n * @param {Uint8Array} bytes Candidate source bytes.\n * @returns {boolean} True when the 16-byte Granny magic is recognized.\n */\n static isSupported(bytes)\n {\n if (!bytes || bytes.length < 16) return false;\n return bytesToHex(bytes.subarray(0, 16)) in GR2_MAGICS;\n }\n\n /**\n * Async read entrypoint for the resource-manager contract.\n *\n * @param {Uint8Array} bytes Source bytes.\n * @param {object} [options] Read options (emit, classes, conversions).\n * @returns {Promise<object>} The emitted GR2/GSF result.\n */\n static async readAsync(bytes, options = {})\n {\n return CjsGr2Format.read(bytes, options);\n }\n\n}\n\nexport default CjsGr2Format;\n"],"names":["CjsGr2Format","DEFAULT_VALUES","emit","decompressCurves","unpackTangents","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","constructor","options","SetValues","values","normalizeValues","GetValues","classes","SetClasses","SetClass","type","Class","validateClassKey","undefined","validateClass","GetClass","HasClass","Read","input","readWithValues","ReadRaw","readRawInput","Inspect","inspectRawGr2Result","IsGSF","isGsfRaw","ReadGSF","raw","projectGsf","InspectGSF","inspectGsfRaw","ToJSON","value","toJsonValue","read","readRaw","inspect","isGsf","readGsf","readGsfAsync","Promise","resolve","inspectGsf","toJSON","OUTPUT_JSON","OUTPUT_GR2","OUTPUT_GR2_JSON","OUTPUT_CMF","OUTPUT_RAW","CLASS_KEYS","Object","freeze","mediaTypes","inputTypes","outputTypes","debugOutputTypes","curves","tangents","gsf","isRaw","project","inspectRaw","isSupported","bytes","length","bytesToHex","subarray","GR2_MAGICS","readAsync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CjsGr2Format.js","sources":["../../../../src/formats/gr2/CjsGr2Format.js"],"sourcesContent":["import { CjsFormat } from \"../../format/CjsFormat.js\";\n\nimport { curves } from \"./core/curves.js\";\nimport { GR2_MAGICS, bytesToHex } from \"./core/reader.js\";\nimport { tangents } from \"./core/tangents.js\";\nimport { inspectGsfRaw, isGsfRaw, projectGsf } from \"./core/gsf.js\";\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_CMF,\n OUTPUT_GR2,\n OUTPUT_GR2_JSON,\n OUTPUT_JSON,\n OUTPUT_RAW,\n inspectRawGr2Result,\n normalizeValues,\n readRawInput,\n readWithValues,\n toJsonValue,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\n/**\n * CarbonEngineJS-facing GR2 (Granny 3D) and GSF (Granny State) reader.\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary. It\n * reads `.gr2` geometry/skeleton/animation graphs and `.gsf` state profiles,\n * emitting GR2 JSON, hydrated caller-supplied classes, or CMF-shaped output,\n * without pretending those classes are the engine runtime itself.\n */\nexport class CjsGr2Format extends CjsFormat\n{\n\n #emit = DEFAULT_VALUES.emit;\n #decompressCurves = DEFAULT_VALUES.decompressCurves;\n #unpackTangents = DEFAULT_VALUES.unpackTangents;\n #rebuildMissingNormals = DEFAULT_VALUES.rebuildMissingNormals;\n #rebuildMissingTangents = DEFAULT_VALUES.rebuildMissingTangents;\n #rebuildMissingBiNormals = DEFAULT_VALUES.rebuildMissingBiNormals;\n #classes = {};\n\n /**\n * Create a reusable format profile.\n *\n * @param {object} [options] Default format/build 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 {CjsGr2Format} This format profile.\n */\n SetValues(options = {})\n {\n const values = normalizeValues(this.GetValues(), options);\n\n this.#emit = values.emit;\n this.#decompressCurves = values.decompressCurves;\n this.#unpackTangents = values.unpackTangents;\n this.#rebuildMissingNormals = values.rebuildMissingNormals;\n this.#rebuildMissingTangents = values.rebuildMissingTangents;\n this.#rebuildMissingBiNormals = values.rebuildMissingBiNormals;\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 decompressCurves: this.#decompressCurves,\n unpackTangents: this.#unpackTangents,\n rebuildMissingNormals: this.#rebuildMissingNormals,\n rebuildMissingTangents: this.#rebuildMissingTangents,\n rebuildMissingBiNormals: this.#rebuildMissingBiNormals,\n classes: this.#classes\n }, options);\n }\n\n /**\n * Set multiple GR2 JSON node constructors for this profile.\n *\n * @param {object} [classes] Map of node class keys to constructors.\n * @returns {CjsGr2Format} This format profile.\n */\n SetClasses(classes = {})\n {\n return this.SetValues({ classes });\n }\n\n /**\n * Set a GR2 JSON node 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 {CjsGr2Format} This format profile.\n */\n SetClass(type, Class)\n {\n validateClassKey(type);\n if (Class === null || Class === undefined)\n {\n delete this.#classes[type];\n return this;\n }\n\n validateClass(type, Class);\n this.#classes = { ...this.#classes, [type]: Class };\n return this;\n }\n\n /**\n * Get a configured GR2 JSON node constructor.\n *\n * @param {string} type Node class key.\n * @returns {Function|undefined}\n */\n GetClass(type)\n {\n validateClassKey(type);\n return this.#classes[type];\n }\n\n /**\n * Whether this reader has a constructor for a GR2 JSON node key.\n *\n * @param {string} type Node class key.\n * @returns {boolean}\n */\n HasClass(type)\n {\n return !!this.GetClass(type);\n }\n\n /**\n * Parse a .gr2 buffer and return JSON by default, classes when configured,\n * or raw reflection data when `emit` is \"raw\".\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @param {object} [options] Per-call values.\n * @returns {object}\n */\n Read(input, options = {})\n {\n return readWithValues(this, input, this.GetValues(options));\n }\n\n /**\n * Parse a .gr2 buffer into the reflected Granny object graph.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @returns {object}\n */\n ReadRaw(input)\n {\n return readRawInput(input);\n }\n\n /**\n * Return a stable, lightweight summary for a GR2 buffer or raw result.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @returns {object}\n */\n Inspect(input)\n {\n return inspectRawGr2Result(this.ReadRaw(input));\n }\n\n /** Whether input is a Granny State document carried by the GR2 container. */\n IsGSF(input)\n {\n return isGsfRaw(this.ReadRaw(input));\n }\n\n /** Read the GState semantic projection, or raw reflected data with `emit: \"raw\"`. */\n ReadGSF(input, options = {})\n {\n const raw = this.ReadRaw(input);\n return options.emit === \"raw\" ? raw : projectGsf(raw);\n }\n\n /** Inspect a GSF document and its referenced GR2 animations. */\n InspectGSF(input)\n {\n return inspectGsfRaw(this.ReadRaw(input));\n }\n\n /**\n * Convert format output to plain JSON-compatible data.\n *\n * @param {object} 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 one-shot read. Static methods use camelCase by convention.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @param {object} [options] Reader and post-processing values.\n * @returns {object}\n */\n static read(input, options = {})\n {\n return readWithValues(CjsGr2Format, input, normalizeValues(DEFAULT_VALUES, options));\n }\n\n /**\n * Static one-shot raw read.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @returns {object}\n */\n static readRaw(input)\n {\n return readRawInput(input);\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {Uint8Array|Buffer|object} input Raw .gr2 bytes or an existing raw read result.\n * @returns {object}\n */\n static inspect(input)\n {\n return inspectRawGr2Result(readRawInput(input));\n }\n\n /** Whether input is a Granny State document carried by the GR2 container. */\n static isGsf(input)\n {\n try\n {\n return isGsfRaw(readRawInput(input));\n }\n catch\n {\n return false;\n }\n }\n\n /** Read the GState semantic projection, or raw reflected data with `emit: \"raw\"`. */\n static readGsf(input, options = {})\n {\n const raw = readRawInput(input);\n return options.emit === \"raw\" ? raw : projectGsf(raw);\n }\n\n /** Async one-shot GSF read for standard format API compatibility. */\n static readGsfAsync(input, options = {})\n {\n return Promise.resolve(this.readGsf(input, options));\n }\n\n /** Inspect a GSF document and its referenced GR2 animations. */\n static inspectGsf(input)\n {\n return inspectGsfRaw(readRawInput(input));\n }\n\n /**\n * Static JSON-compatible conversion.\n *\n * @param {object} 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_GR2 = OUTPUT_GR2;\n static OUTPUT_GR2_JSON = OUTPUT_GR2_JSON;\n static OUTPUT_CMF = OUTPUT_CMF;\n static OUTPUT_RAW = OUTPUT_RAW;\n static CLASS_KEYS = CLASS_KEYS;\n static id = \"gr2\";\n static mediaTypes = Object.freeze([ \"geometry\" ]);\n static outputs = CjsFormat.defineOutputs({\n gr2: { decoded: true },\n cmf: { decoded: true },\n json: { role: \"debug\", default: true, decoded: true },\n gr2Json: { role: \"debug\", decoded: true },\n raw: { role: \"debug\", decoded: true }\n });\n static extensions = Object.freeze([ \".gr2\", \".gsf\" ]);\n static curves = curves;\n static tangents = tangents;\n static gsf = Object.freeze({ isRaw: isGsfRaw, project: projectGsf, inspectRaw: inspectGsfRaw });\n\n /**\n * Cheap magic probe for GR2/GSF byte streams.\n *\n * @param {Uint8Array} bytes Candidate source bytes.\n * @returns {boolean} True when the 16-byte Granny magic is recognized.\n */\n static probeSupport(bytes)\n {\n if (!bytes || bytes.length < 16) return false;\n return bytesToHex(bytes.subarray(0, 16)) in GR2_MAGICS;\n }\n\n /**\n * Async read entrypoint for the resource-manager contract.\n *\n * @param {Uint8Array} bytes Source bytes.\n * @param {object} [options] Read options (emit, classes, conversions).\n * @returns {Promise<object>} The emitted GR2/GSF result.\n */\n static async readAsync(bytes, options = {})\n {\n return CjsGr2Format.read(bytes, options);\n }\n\n}\n\nexport default CjsGr2Format;\n"],"names":["CjsGr2Format","CjsFormat","DEFAULT_VALUES","emit","decompressCurves","unpackTangents","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","constructor","options","SetValues","values","normalizeValues","GetValues","classes","SetClasses","SetClass","type","Class","validateClassKey","undefined","validateClass","GetClass","HasClass","Read","input","readWithValues","ReadRaw","readRawInput","Inspect","inspectRawGr2Result","IsGSF","isGsfRaw","ReadGSF","raw","projectGsf","InspectGSF","inspectGsfRaw","ToJSON","value","toJsonValue","read","readRaw","inspect","isGsf","readGsf","readGsfAsync","Promise","resolve","inspectGsf","toJSON","OUTPUT_JSON","OUTPUT_GR2","OUTPUT_GR2_JSON","OUTPUT_CMF","OUTPUT_RAW","CLASS_KEYS","id","mediaTypes","Object","freeze","outputs","defineOutputs","gr2","decoded","cmf","json","role","default","gr2Json","extensions","curves","tangents","gsf","isRaw","project","inspectRaw","probeSupport","bytes","length","bytesToHex","subarray","GR2_MAGICS","readAsync"],"mappings":"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"}
|
|
@@ -1,16 +1,8 @@
|
|
|
1
|
+
import { CjsFormat } from '../../format/CjsFormat.js';
|
|
1
2
|
import { HlslEffectRes } from './core/tr2/resources/HlslEffectRes.js';
|
|
2
3
|
import { DEFAULT_VALUES, normalizeValues, validateClassKey, validateClass, readWithValues, inspectWithValues, toJsonValue, toBytes, OUTPUT_JSON, OUTPUT_METADATA, OUTPUT_RAW } from './core/helpers.js';
|
|
3
4
|
import { CLASS_KEYS } from './core/json.js';
|
|
4
5
|
|
|
5
|
-
/**
|
|
6
|
-
* Exposed CarbonEngineJS-facing Tr2 effect container format class.
|
|
7
|
-
*
|
|
8
|
-
* Keep this file small and reviewable: the Tr2 effect graph parser lives
|
|
9
|
-
* under src/core/tr2 (internal parsing machinery, not part of this
|
|
10
|
-
* package's public surface); input/option normalization, the shared read
|
|
11
|
-
* path, and the JSON emitters live under src/core.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
6
|
const FORMAT_NAME = "CjsHlslFormat";
|
|
15
7
|
|
|
16
8
|
/**
|
|
@@ -30,7 +22,7 @@ const FORMAT_NAME = "CjsHlslFormat";
|
|
|
30
22
|
* node kinds in the emitted JSON graph (see `CjsHlslFormat.CLASS_KEYS`);
|
|
31
23
|
* class registration does not depend on importing internal graph classes.
|
|
32
24
|
*/
|
|
33
|
-
class CjsHlslFormat {
|
|
25
|
+
class CjsHlslFormat extends CjsFormat {
|
|
34
26
|
#emit = DEFAULT_VALUES.emit;
|
|
35
27
|
#source = DEFAULT_VALUES.source;
|
|
36
28
|
#permutation = DEFAULT_VALUES.permutation;
|
|
@@ -42,6 +34,7 @@ class CjsHlslFormat {
|
|
|
42
34
|
* @param {object} [options] Default format values.
|
|
43
35
|
*/
|
|
44
36
|
constructor(options = {}) {
|
|
37
|
+
super();
|
|
45
38
|
this.SetValues(options);
|
|
46
39
|
}
|
|
47
40
|
|
|
@@ -176,11 +169,11 @@ class CjsHlslFormat {
|
|
|
176
169
|
* @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate bytes.
|
|
177
170
|
* @returns {boolean} True when the payload's header decodes as a supported Tr2 effect.
|
|
178
171
|
*/
|
|
179
|
-
static
|
|
172
|
+
static probeSupport(input) {
|
|
180
173
|
try {
|
|
181
174
|
const bytes = toBytes(input);
|
|
182
175
|
return new HlslEffectRes().DoLoad(bytes, {
|
|
183
|
-
source: "
|
|
176
|
+
source: "probeSupport"
|
|
184
177
|
});
|
|
185
178
|
} catch {
|
|
186
179
|
return false;
|
|
@@ -222,11 +215,22 @@ class CjsHlslFormat {
|
|
|
222
215
|
static OUTPUT_METADATA = OUTPUT_METADATA;
|
|
223
216
|
static OUTPUT_RAW = OUTPUT_RAW;
|
|
224
217
|
static CLASS_KEYS = CLASS_KEYS;
|
|
225
|
-
static
|
|
218
|
+
static id = "hlsl";
|
|
226
219
|
static mediaTypes = Object.freeze(["shader"]);
|
|
227
|
-
static
|
|
228
|
-
|
|
229
|
-
|
|
220
|
+
static outputs = CjsFormat.defineOutputs({
|
|
221
|
+
json: {
|
|
222
|
+
default: true,
|
|
223
|
+
decoded: true
|
|
224
|
+
},
|
|
225
|
+
metadata: {
|
|
226
|
+
decoded: true
|
|
227
|
+
},
|
|
228
|
+
raw: {
|
|
229
|
+
role: "debug",
|
|
230
|
+
decoded: true
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
static extensions = Object.freeze([".sm_hi", ".sm_lo", ".sm_depth"]);
|
|
230
234
|
}
|
|
231
235
|
|
|
232
236
|
export { CjsHlslFormat, CjsHlslFormat as default };
|