@carbonenginejs/runtime-resource 0.1.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/FORMAT-PROVENANCE.md +135 -0
- package/LICENSE +21 -0
- package/NOTICE +29 -0
- package/README.md +241 -0
- package/dist/CjsMotherLode.js +56 -0
- package/dist/CjsMotherLode.js.map +1 -0
- package/dist/CjsResMan.js +740 -0
- package/dist/CjsResMan.js.map +1 -0
- package/dist/CjsResManQueue.js +214 -0
- package/dist/CjsResManQueue.js.map +1 -0
- package/dist/CjsResource.js +366 -0
- package/dist/CjsResource.js.map +1 -0
- package/dist/CjsResourceSource.js +59 -0
- package/dist/CjsResourceSource.js.map +1 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/dist/format/CjsFormat.js +178 -0
- package/dist/format/CjsFormat.js.map +1 -0
- package/dist/format/CjsResourceProbe.js +269 -0
- package/dist/format/CjsResourceProbe.js.map +1 -0
- package/dist/format/payloadContract.js +173 -0
- package/dist/format/payloadContract.js.map +1 -0
- package/dist/formats/black/CjsBlackFormat.js +272 -0
- package/dist/formats/black/CjsBlackFormat.js.map +1 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js +153 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -0
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +382 -0
- package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -0
- package/dist/formats/black/core/CjsBlackReader.js +760 -0
- package/dist/formats/black/core/CjsBlackReader.js.map +1 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +433 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -0
- package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +4 -0
- package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js.map +1 -0
- package/dist/formats/black/core/blackConstants.js +7 -0
- package/dist/formats/black/core/blackConstants.js.map +1 -0
- package/dist/formats/black/core/blackDefinitions.js +10 -0
- package/dist/formats/black/core/blackDefinitions.js.map +1 -0
- package/dist/formats/black/core/blackEnums.js +6 -0
- package/dist/formats/black/core/blackEnums.js.map +1 -0
- package/dist/formats/black/core/blackSchema.js +3 -0
- package/dist/formats/black/core/blackSchema.js.map +1 -0
- package/dist/formats/black/core/blackVersion.js +22 -0
- package/dist/formats/black/core/blackVersion.js.map +1 -0
- package/dist/formats/black/core/helpers.js +182 -0
- package/dist/formats/black/core/helpers.js.map +1 -0
- package/dist/formats/black/core/schema.js +4 -0
- package/dist/formats/black/core/schema.js.map +1 -0
- package/dist/formats/black/index.js +2 -0
- package/dist/formats/black/index.js.map +1 -0
- package/dist/formats/bnk/CjsBnkFormat.js +245 -0
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -0
- package/dist/formats/bnk/core/helpers.js +354 -0
- package/dist/formats/bnk/core/helpers.js.map +1 -0
- package/dist/formats/bnk/core/soundbanksInfo.js +246 -0
- package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -0
- package/dist/formats/bnk/index.js +3 -0
- package/dist/formats/bnk/index.js.map +1 -0
- package/dist/formats/cmf/CjsCmfFormat.js +491 -0
- package/dist/formats/cmf/CjsCmfFormat.js.map +1 -0
- package/dist/formats/cmf/core/binary.js +118 -0
- package/dist/formats/cmf/core/binary.js.map +1 -0
- package/dist/formats/cmf/core/buffers.js +233 -0
- package/dist/formats/cmf/core/buffers.js.map +1 -0
- package/dist/formats/cmf/core/constants.js +47 -0
- package/dist/formats/cmf/core/constants.js.map +1 -0
- package/dist/formats/cmf/core/gr2Anim.js +453 -0
- package/dist/formats/cmf/core/gr2Anim.js.map +1 -0
- package/dist/formats/cmf/core/helpers.js +287 -0
- package/dist/formats/cmf/core/helpers.js.map +1 -0
- package/dist/formats/cmf/core/pack.js +276 -0
- package/dist/formats/cmf/core/pack.js.map +1 -0
- package/dist/formats/cmf/core/schema.js +364 -0
- package/dist/formats/cmf/core/schema.js.map +1 -0
- package/dist/formats/cmf/core/shared.js +268 -0
- package/dist/formats/cmf/core/shared.js.map +1 -0
- package/dist/formats/cmf/core/writer.js +517 -0
- package/dist/formats/cmf/core/writer.js.map +1 -0
- package/dist/formats/cmf/index.js +2 -0
- package/dist/formats/cmf/index.js.map +1 -0
- package/dist/formats/dds/CjsDdsFormat.js +187 -0
- package/dist/formats/dds/CjsDdsFormat.js.map +1 -0
- package/dist/formats/dds/core/helpers.js +812 -0
- package/dist/formats/dds/core/helpers.js.map +1 -0
- package/dist/formats/dds/index.js +2 -0
- package/dist/formats/dds/index.js.map +1 -0
- package/dist/formats/fbx/CjsFbxFormat.js +260 -0
- package/dist/formats/fbx/CjsFbxFormat.js.map +1 -0
- package/dist/formats/fbx/core/helpers.js +3901 -0
- package/dist/formats/fbx/core/helpers.js.map +1 -0
- package/dist/formats/fbx/index.js +2 -0
- package/dist/formats/fbx/index.js.map +1 -0
- package/dist/formats/flac/CjsFlacFormat.js +81 -0
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -0
- package/dist/formats/flac/core/helpers.js +295 -0
- package/dist/formats/flac/core/helpers.js.map +1 -0
- package/dist/formats/flac/index.js +2 -0
- package/dist/formats/flac/index.js.map +1 -0
- package/dist/formats/gif/CjsGifFormat.js +81 -0
- package/dist/formats/gif/CjsGifFormat.js.map +1 -0
- package/dist/formats/gif/core/helpers.js +360 -0
- package/dist/formats/gif/core/helpers.js.map +1 -0
- package/dist/formats/gif/index.js +2 -0
- package/dist/formats/gif/index.js.map +1 -0
- package/dist/formats/gltf/CjsGltfFormat.js +284 -0
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -0
- package/dist/formats/gltf/core/helpers.js +292 -0
- package/dist/formats/gltf/core/helpers.js.map +1 -0
- package/dist/formats/gltf/core/json.js +79 -0
- package/dist/formats/gltf/core/json.js.map +1 -0
- package/dist/formats/gltf/core/parser.js +666 -0
- package/dist/formats/gltf/core/parser.js.map +1 -0
- package/dist/formats/gltf/core/targets.js +163 -0
- package/dist/formats/gltf/core/targets.js.map +1 -0
- package/dist/formats/gltf/index.js +2 -0
- package/dist/formats/gltf/index.js.map +1 -0
- package/dist/formats/index.js +23 -0
- package/dist/formats/index.js.map +1 -0
- package/dist/formats/jpeg/CjsJpegFormat.js +200 -0
- package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -0
- package/dist/formats/jpeg/core/helpers.js +350 -0
- package/dist/formats/jpeg/core/helpers.js.map +1 -0
- package/dist/formats/jpeg/core/jpeg.js +377 -0
- package/dist/formats/jpeg/core/jpeg.js.map +1 -0
- package/dist/formats/jpeg/index.js +2 -0
- package/dist/formats/jpeg/index.js.map +1 -0
- package/dist/formats/mp3/CjsMp3Format.js +186 -0
- package/dist/formats/mp3/CjsMp3Format.js.map +1 -0
- package/dist/formats/mp3/core/helpers.js +338 -0
- package/dist/formats/mp3/core/helpers.js.map +1 -0
- package/dist/formats/mp3/index.js +2 -0
- package/dist/formats/mp3/index.js.map +1 -0
- package/dist/formats/mp4/CjsMp4Format.js +185 -0
- package/dist/formats/mp4/CjsMp4Format.js.map +1 -0
- package/dist/formats/mp4/core/helpers.js +449 -0
- package/dist/formats/mp4/core/helpers.js.map +1 -0
- package/dist/formats/mp4/index.js +2 -0
- package/dist/formats/mp4/index.js.map +1 -0
- package/dist/formats/obj/CjsObjFormat.js +247 -0
- package/dist/formats/obj/CjsObjFormat.js.map +1 -0
- package/dist/formats/obj/core/helpers.js +573 -0
- package/dist/formats/obj/core/helpers.js.map +1 -0
- package/dist/formats/obj/core/json.js +64 -0
- package/dist/formats/obj/core/json.js.map +1 -0
- package/dist/formats/obj/core/parser.js +321 -0
- package/dist/formats/obj/core/parser.js.map +1 -0
- package/dist/formats/obj/index.js +2 -0
- package/dist/formats/obj/index.js.map +1 -0
- package/dist/formats/ogg/CjsOggFormat.js +82 -0
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -0
- package/dist/formats/ogg/core/helpers.js +387 -0
- package/dist/formats/ogg/core/helpers.js.map +1 -0
- package/dist/formats/ogg/core/imdct.js +178 -0
- package/dist/formats/ogg/core/imdct.js.map +1 -0
- package/dist/formats/ogg/core/vorbis.js +999 -0
- package/dist/formats/ogg/core/vorbis.js.map +1 -0
- package/dist/formats/ogg/index.js +2 -0
- package/dist/formats/ogg/index.js.map +1 -0
- package/dist/formats/png/CjsPngFormat.js +189 -0
- package/dist/formats/png/CjsPngFormat.js.map +1 -0
- package/dist/formats/png/core/helpers.js +583 -0
- package/dist/formats/png/core/helpers.js.map +1 -0
- package/dist/formats/png/index.js +2 -0
- package/dist/formats/png/index.js.map +1 -0
- package/dist/formats/red/CjsRedFormat.js +247 -0
- package/dist/formats/red/CjsRedFormat.js.map +1 -0
- package/dist/formats/red/core/CjsRedReader.js +201 -0
- package/dist/formats/red/core/CjsRedReader.js.map +1 -0
- package/dist/formats/red/core/blackDefinitions.js +3 -0
- package/dist/formats/red/core/blackDefinitions.js.map +1 -0
- package/dist/formats/red/core/helpers.js +136 -0
- package/dist/formats/red/core/helpers.js.map +1 -0
- package/dist/formats/red/core/redGraph.js +68 -0
- package/dist/formats/red/core/redGraph.js.map +1 -0
- package/dist/formats/red/core/schema.js +4 -0
- package/dist/formats/red/core/schema.js.map +1 -0
- package/dist/formats/red/index.js +2 -0
- package/dist/formats/red/index.js.map +1 -0
- package/dist/formats/stl/CjsStlFormat.js +304 -0
- package/dist/formats/stl/CjsStlFormat.js.map +1 -0
- package/dist/formats/stl/core/helpers.js +257 -0
- package/dist/formats/stl/core/helpers.js.map +1 -0
- package/dist/formats/stl/core/json.js +51 -0
- package/dist/formats/stl/core/json.js.map +1 -0
- package/dist/formats/stl/core/stl.js +544 -0
- package/dist/formats/stl/core/stl.js.map +1 -0
- package/dist/formats/stl/core/targets.js +163 -0
- package/dist/formats/stl/core/targets.js.map +1 -0
- package/dist/formats/stl/index.js +2 -0
- package/dist/formats/stl/index.js.map +1 -0
- package/dist/formats/tga/CjsTgaFormat.js +186 -0
- package/dist/formats/tga/CjsTgaFormat.js.map +1 -0
- package/dist/formats/tga/core/helpers.js +446 -0
- package/dist/formats/tga/core/helpers.js.map +1 -0
- package/dist/formats/tga/index.js +2 -0
- package/dist/formats/tga/index.js.map +1 -0
- package/dist/formats/wav/CjsWavFormat.js +186 -0
- package/dist/formats/wav/CjsWavFormat.js.map +1 -0
- package/dist/formats/wav/core/helpers.js +328 -0
- package/dist/formats/wav/core/helpers.js.map +1 -0
- package/dist/formats/wav/index.js +2 -0
- package/dist/formats/wav/index.js.map +1 -0
- package/dist/formats/webm/CjsWebmFormat.js +185 -0
- package/dist/formats/webm/CjsWebmFormat.js.map +1 -0
- package/dist/formats/webm/core/helpers.js +537 -0
- package/dist/formats/webm/core/helpers.js.map +1 -0
- package/dist/formats/webm/index.js +2 -0
- package/dist/formats/webm/index.js.map +1 -0
- package/dist/formats/webp/CjsWebpFormat.js +80 -0
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -0
- package/dist/formats/webp/core/helpers.js +214 -0
- package/dist/formats/webp/core/helpers.js.map +1 -0
- package/dist/formats/webp/index.js +2 -0
- package/dist/formats/webp/index.js.map +1 -0
- package/dist/formats/wem/CjsWemFormat.js +197 -0
- package/dist/formats/wem/CjsWemFormat.js.map +1 -0
- package/dist/formats/wem/core/bitStream.js +259 -0
- package/dist/formats/wem/core/bitStream.js.map +1 -0
- package/dist/formats/wem/core/codebookLibrary.js +164 -0
- package/dist/formats/wem/core/codebookLibrary.js.map +1 -0
- package/dist/formats/wem/core/helpers.js +336 -0
- package/dist/formats/wem/core/helpers.js.map +1 -0
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -0
- package/dist/formats/wem/core/packedCodebooksAotuv603.js.map +1 -0
- package/dist/formats/wem/core/wemToOgg.js +485 -0
- package/dist/formats/wem/core/wemToOgg.js.map +1 -0
- package/dist/formats/wem/index.js +2 -0
- package/dist/formats/wem/index.js.map +1 -0
- package/dist/formats/yaml/CjsYamlFormat.js +77 -0
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -0
- package/dist/formats/yaml/core/CjsYamlReader.js +304 -0
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -0
- package/dist/formats/yaml/core/helpers.js +160 -0
- package/dist/formats/yaml/core/helpers.js.map +1 -0
- package/dist/formats/yaml/index.js +2 -0
- package/dist/formats/yaml/index.js.map +1 -0
- package/dist/generated/resources/AudioGeometryResData.js +47 -0
- package/dist/generated/resources/AudioGeometryResData.js.map +1 -0
- package/dist/generated/resources/CmfVertexReader.js +46 -0
- package/dist/generated/resources/CmfVertexReader.js.map +1 -0
- package/dist/generated/resources/GStateBindingCallbackData.js +31 -0
- package/dist/generated/resources/GStateBindingCallbackData.js.map +1 -0
- package/dist/generated/resources/MeshDecalData.js +37 -0
- package/dist/generated/resources/MeshDecalData.js.map +1 -0
- package/dist/generated/resources/MeshDecalLodData.js +34 -0
- package/dist/generated/resources/MeshDecalLodData.js.map +1 -0
- package/dist/generated/resources/Tr2AsyncSave.js +46 -0
- package/dist/generated/resources/Tr2AsyncSave.js.map +1 -0
- package/dist/generated/resources/Tr2CmfContents.js +37 -0
- package/dist/generated/resources/Tr2CmfContents.js.map +1 -0
- package/dist/generated/resources/Tr2GrannyIntersectionResult.js +58 -0
- package/dist/generated/resources/Tr2GrannyIntersectionResult.js.map +1 -0
- package/dist/generated/resources/Tr2LoadPrepareFence.js +37 -0
- package/dist/generated/resources/Tr2LoadPrepareFence.js.map +1 -0
- package/dist/generated/resources/Tr2MaterialArea.js +34 -0
- package/dist/generated/resources/Tr2MaterialArea.js.map +1 -0
- package/dist/generated/resources/Tr2MaterialMesh.js +31 -0
- package/dist/generated/resources/Tr2MaterialMesh.js.map +1 -0
- package/dist/generated/resources/Tr2MaterialRes.js +34 -0
- package/dist/generated/resources/Tr2MaterialRes.js.map +1 -0
- package/dist/generated/resources/Tr2ShaderPermutation.js +43 -0
- package/dist/generated/resources/Tr2ShaderPermutation.js.map +1 -0
- package/dist/generated/resources/Tr2TextureLodManager.js +60 -0
- package/dist/generated/resources/Tr2TextureLodManager.js.map +1 -0
- package/dist/generated/resources/Tr2TextureLodUpdateRequest.js +37 -0
- package/dist/generated/resources/Tr2TextureLodUpdateRequest.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePackChannel.js +37 -0
- package/dist/generated/resources/Tr2TexturePackChannel.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipeline.js +44 -0
- package/dist/generated/resources/Tr2TexturePipeline.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineParams.js +34 -0
- package/dist/generated/resources/Tr2TexturePipelineParams.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineStepCompress.js +40 -0
- package/dist/generated/resources/Tr2TexturePipelineStepCompress.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js +34 -0
- package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineStepLoad.js +31 -0
- package/dist/generated/resources/Tr2TexturePipelineStepLoad.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineStepPack.js +43 -0
- package/dist/generated/resources/Tr2TexturePipelineStepPack.js.map +1 -0
- package/dist/generated/resources/TriGeometryResAreaData.js +59 -0
- package/dist/generated/resources/TriGeometryResAreaData.js.map +1 -0
- package/dist/generated/resources/TriGeometryResJointData.js +38 -0
- package/dist/generated/resources/TriGeometryResJointData.js.map +1 -0
- package/dist/generated/resources/TriGeometryResLodData.js +88 -0
- package/dist/generated/resources/TriGeometryResLodData.js.map +1 -0
- package/dist/generated/resources/TriGeometryResMeshData.js +63 -0
- package/dist/generated/resources/TriGeometryResMeshData.js.map +1 -0
- package/dist/generated/resources/TriGeometryResSkeletonData.js +34 -0
- package/dist/generated/resources/TriGeometryResSkeletonData.js.map +1 -0
- package/dist/generated/resources/TriJointBinding.js +38 -0
- package/dist/generated/resources/TriJointBinding.js.map +1 -0
- package/dist/generated/resources/TriMorphTargetGeometryConstants.js +46 -0
- package/dist/generated/resources/TriMorphTargetGeometryConstants.js.map +1 -0
- package/dist/generated/resources/TriRtGeometryConstants.js +88 -0
- package/dist/generated/resources/TriRtGeometryConstants.js.map +1 -0
- package/dist/generated/resources/enums.js +18 -0
- package/dist/generated/resources/enums.js.map +1 -0
- package/dist/generated/resources/index.js +32 -0
- package/dist/generated/resources/index.js.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/resourcePath.js +18 -0
- package/dist/resourcePath.js.map +1 -0
- package/dist/resourceStates.js +9 -0
- package/dist/resourceStates.js.map +1 -0
- package/dist/resources/Tr2EffectRes.js +71 -0
- package/dist/resources/Tr2EffectRes.js.map +1 -0
- package/dist/resources/Tr2GrannyStateRes.js +44 -0
- package/dist/resources/Tr2GrannyStateRes.js.map +1 -0
- package/dist/resources/Tr2ImageRes.js +114 -0
- package/dist/resources/Tr2ImageRes.js.map +1 -0
- package/dist/resources/Tr2LightProfileRes.js +40 -0
- package/dist/resources/Tr2LightProfileRes.js.map +1 -0
- package/dist/resources/TriGeometryRes.js +216 -0
- package/dist/resources/TriGeometryRes.js.map +1 -0
- package/dist/resources/TriGrannyRes.js +43 -0
- package/dist/resources/TriGrannyRes.js.map +1 -0
- package/dist/resources/TriTextureRes.js +304 -0
- package/dist/resources/TriTextureRes.js.map +1 -0
- package/dist/resources/resourceBoundary.js +47 -0
- package/dist/resources/resourceBoundary.js.map +1 -0
- package/dist/texture/CjsTextureArrayRes.js +406 -0
- package/dist/texture/CjsTextureArrayRes.js.map +1 -0
- package/dist/texture/CjsTextureParameterProxy.js +133 -0
- package/dist/texture/CjsTextureParameterProxy.js.map +1 -0
- package/format-notices/black/LICENSE +21 -0
- package/format-notices/black/NOTICE +47 -0
- package/format-notices/bnk/LICENSE +21 -0
- package/format-notices/bnk/NOTICE +17 -0
- package/format-notices/cmf/LICENSE +21 -0
- package/format-notices/cmf/NOTICE +36 -0
- package/format-notices/dds/LICENSE +21 -0
- package/format-notices/dds/NOTICE +14 -0
- package/format-notices/fbx/LICENSE +21 -0
- package/format-notices/fbx/NOTICE +14 -0
- package/format-notices/flac/LICENSE +21 -0
- package/format-notices/flac/NOTICE +14 -0
- package/format-notices/gif/LICENSE +21 -0
- package/format-notices/gif/NOTICE +14 -0
- package/format-notices/gltf/LICENSE +21 -0
- package/format-notices/gltf/NOTICE +27 -0
- package/format-notices/jpeg/LICENSE +21 -0
- package/format-notices/jpeg/NOTICE +14 -0
- package/format-notices/mp3/LICENSE +21 -0
- package/format-notices/mp3/NOTICE +14 -0
- package/format-notices/mp4/LICENSE +21 -0
- package/format-notices/mp4/NOTICE +14 -0
- package/format-notices/obj/LICENSE +21 -0
- package/format-notices/obj/NOTICE +26 -0
- package/format-notices/ogg/LICENSE +21 -0
- package/format-notices/ogg/NOTICE +28 -0
- package/format-notices/png/LICENSE +21 -0
- package/format-notices/png/NOTICE +14 -0
- package/format-notices/red/LICENSE +21 -0
- package/format-notices/red/NOTICE +31 -0
- package/format-notices/stl/LICENSE +21 -0
- package/format-notices/stl/NOTICE +21 -0
- package/format-notices/tga/LICENSE +21 -0
- package/format-notices/tga/NOTICE +14 -0
- package/format-notices/wav/LICENSE +21 -0
- package/format-notices/wav/NOTICE +14 -0
- package/format-notices/webm/LICENSE +21 -0
- package/format-notices/webm/NOTICE +14 -0
- package/format-notices/webp/LICENSE +21 -0
- package/format-notices/webp/NOTICE +14 -0
- package/format-notices/wem/LICENSE +57 -0
- package/format-notices/wem/NOTICE +33 -0
- package/format-notices/yaml/LICENSE +21 -0
- package/format-notices/yaml/NOTICE +44 -0
- package/package.json +51 -0
- package/resource-lifecycle.md +487 -0
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
const OUTPUT_VIDEO = "video";
|
|
2
|
+
const OUTPUT_RAW = "raw";
|
|
3
|
+
const OUTPUT_JSON = "json";
|
|
4
|
+
const DEFAULT_VALUES = Object.freeze({
|
|
5
|
+
emit: OUTPUT_RAW,
|
|
6
|
+
inputType: "",
|
|
7
|
+
source: ""
|
|
8
|
+
});
|
|
9
|
+
const DEBUG_OUTPUTS = Object.freeze({
|
|
10
|
+
mp4: "mp4Json",
|
|
11
|
+
m4a: "mp4Json",
|
|
12
|
+
webm: "webmJson"
|
|
13
|
+
});
|
|
14
|
+
function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsVideoFormat") {
|
|
15
|
+
const values = {
|
|
16
|
+
...DEFAULT_VALUES,
|
|
17
|
+
...(base || {}),
|
|
18
|
+
...(options || {})
|
|
19
|
+
};
|
|
20
|
+
values.inputType = values.inputType ? String(values.inputType).replace(/^\./u, "").toLowerCase() : "";
|
|
21
|
+
values.emit = normalizeEmit(values.emit, values.inputType, readerName);
|
|
22
|
+
return values;
|
|
23
|
+
}
|
|
24
|
+
function normalizeEmit(emit, inputType, readerName) {
|
|
25
|
+
if (emit === undefined || emit === null) return OUTPUT_RAW;
|
|
26
|
+
if (emit === OUTPUT_JSON && inputType) return DEBUG_OUTPUTS[inputType] || OUTPUT_JSON;
|
|
27
|
+
if ([OUTPUT_VIDEO, OUTPUT_RAW, OUTPUT_JSON].includes(emit)) return emit;
|
|
28
|
+
if (Object.values(DEBUG_OUTPUTS).includes(emit)) return emit;
|
|
29
|
+
throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);
|
|
30
|
+
}
|
|
31
|
+
function toBytes(input) {
|
|
32
|
+
if (input instanceof Uint8Array) return input;
|
|
33
|
+
if (input instanceof ArrayBuffer) return new Uint8Array(input);
|
|
34
|
+
if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
|
|
35
|
+
throw new TypeError("Video input must be Uint8Array, ArrayBuffer, or DataView");
|
|
36
|
+
}
|
|
37
|
+
function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
38
|
+
const bytes = toBytes(input);
|
|
39
|
+
const metadata = inspectBytes(bytes);
|
|
40
|
+
if (expectedType && metadata.sourceFormat && metadata.sourceFormat !== expectedType) {
|
|
41
|
+
throw new TypeError(`CjsVideoFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
payloadType: "video",
|
|
45
|
+
mediaTypes: ["video"],
|
|
46
|
+
byteLength: bytes.byteLength,
|
|
47
|
+
sourceFormat: expectedType || values.inputType || metadata.sourceFormat,
|
|
48
|
+
...metadata
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
52
|
+
try {
|
|
53
|
+
const metadata = inspectWithValues(input, values, expectedType);
|
|
54
|
+
const codecs = getTrackCodecSummary(metadata);
|
|
55
|
+
const mimeType = getMediaMimeType(metadata);
|
|
56
|
+
return {
|
|
57
|
+
format: metadata.sourceFormat,
|
|
58
|
+
source: values.source || "buffer",
|
|
59
|
+
supported: metadata.sourceFormat ? "partial" : "none",
|
|
60
|
+
confidence: metadata.sourceFormat ? 1 : 0,
|
|
61
|
+
preferred: "container",
|
|
62
|
+
reason: metadata.sourceFormat ? "Container/header recognized." : "Unrecognized video format.",
|
|
63
|
+
metadata,
|
|
64
|
+
variants: [{
|
|
65
|
+
kind: "raw",
|
|
66
|
+
payloadType: "raw",
|
|
67
|
+
codec: metadata.sourceFormat,
|
|
68
|
+
mimeType,
|
|
69
|
+
supported: true,
|
|
70
|
+
containerOnly: true,
|
|
71
|
+
isDecoded: false,
|
|
72
|
+
frameDecodeSupported: false
|
|
73
|
+
}, {
|
|
74
|
+
kind: "container",
|
|
75
|
+
payloadType: "video",
|
|
76
|
+
codec: metadata.sourceFormat,
|
|
77
|
+
mimeType,
|
|
78
|
+
codecs: codecs.codecs,
|
|
79
|
+
videoCodecs: codecs.videoCodecs,
|
|
80
|
+
audioCodecs: codecs.audioCodecs,
|
|
81
|
+
supported: true,
|
|
82
|
+
containerOnly: true,
|
|
83
|
+
isDecoded: false,
|
|
84
|
+
frameDecodeSupported: false
|
|
85
|
+
}, {
|
|
86
|
+
kind: "decoded",
|
|
87
|
+
payloadType: "video-frame",
|
|
88
|
+
codec: "frames",
|
|
89
|
+
supported: false,
|
|
90
|
+
reason: "Video decode is not implemented in this package."
|
|
91
|
+
}],
|
|
92
|
+
warnings: [],
|
|
93
|
+
errors: []
|
|
94
|
+
};
|
|
95
|
+
} catch (error) {
|
|
96
|
+
return {
|
|
97
|
+
format: expectedType || values.inputType || "",
|
|
98
|
+
source: values.source || "buffer",
|
|
99
|
+
supported: "none",
|
|
100
|
+
confidence: 0,
|
|
101
|
+
preferred: "",
|
|
102
|
+
reason: error.message,
|
|
103
|
+
metadata: null,
|
|
104
|
+
variants: [],
|
|
105
|
+
warnings: [],
|
|
106
|
+
errors: [error.message]
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function readWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
111
|
+
const bytes = toBytes(input);
|
|
112
|
+
const metadata = inspectWithValues(bytes, values, expectedType);
|
|
113
|
+
if (values.emit === OUTPUT_RAW) {
|
|
114
|
+
return {
|
|
115
|
+
payloadType: "raw",
|
|
116
|
+
sourceFormat: metadata.sourceFormat,
|
|
117
|
+
metadata,
|
|
118
|
+
bytes
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (values.emit === OUTPUT_JSON || values.emit === DEBUG_OUTPUTS[metadata.sourceFormat]) return metadata;
|
|
122
|
+
if (values.emit === OUTPUT_VIDEO && metadata.sourceFormat === "mp4") {
|
|
123
|
+
const codecs = getTrackCodecSummary(metadata);
|
|
124
|
+
const mimeType = getMediaMimeType(metadata);
|
|
125
|
+
return {
|
|
126
|
+
payloadType: OUTPUT_VIDEO,
|
|
127
|
+
sourceFormat: "mp4",
|
|
128
|
+
container: metadata.container,
|
|
129
|
+
mimeType,
|
|
130
|
+
containerOnly: true,
|
|
131
|
+
isDecoded: false,
|
|
132
|
+
frameDecodeSupported: false,
|
|
133
|
+
codecs: codecs.codecs,
|
|
134
|
+
videoCodecs: codecs.videoCodecs,
|
|
135
|
+
audioCodecs: codecs.audioCodecs,
|
|
136
|
+
duration: metadata.duration || 0,
|
|
137
|
+
durationTimescale: metadata.durationTimescale || 1,
|
|
138
|
+
tracks: metadata.tracks || [],
|
|
139
|
+
metadata,
|
|
140
|
+
sourceBytes: bytes
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const error = new Error(`${metadata.sourceFormat}: emit "${values.emit}" is not implemented yet`);
|
|
144
|
+
error.code = "CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED";
|
|
145
|
+
error.sourceFormat = metadata.sourceFormat;
|
|
146
|
+
error.emit = values.emit;
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
function getTrackCodecSummary(metadata) {
|
|
150
|
+
const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];
|
|
151
|
+
return {
|
|
152
|
+
codecs: uniqueTrackCodecs(tracks),
|
|
153
|
+
videoCodecs: uniqueTrackCodecs(tracks.filter(track => track.type === "video")),
|
|
154
|
+
audioCodecs: uniqueTrackCodecs(tracks.filter(track => track.type === "audio"))
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function uniqueTrackCodecs(tracks) {
|
|
158
|
+
return [...new Set(tracks.map(track => track.codec).filter(Boolean))];
|
|
159
|
+
}
|
|
160
|
+
function getMediaMimeType(metadata) {
|
|
161
|
+
const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];
|
|
162
|
+
return tracks.some(track => track.type === "video") ? "video/mp4" : "audio/mp4";
|
|
163
|
+
}
|
|
164
|
+
function inspectBytes(bytes) {
|
|
165
|
+
if (isMP4(bytes)) return inspectMP4(bytes);
|
|
166
|
+
if (isWebM(bytes)) return inspectWebM();
|
|
167
|
+
return {
|
|
168
|
+
sourceFormat: ""
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function isMP4(bytes) {
|
|
172
|
+
return bytes.byteLength >= 12 && fourCc(bytes, 4) === "ftyp";
|
|
173
|
+
}
|
|
174
|
+
function isWebM(bytes) {
|
|
175
|
+
return bytes.byteLength >= 4 && bytes[0] === 0x1a && bytes[1] === 0x45 && bytes[2] === 0xdf && bytes[3] === 0xa3;
|
|
176
|
+
}
|
|
177
|
+
function toJsonValue(value) {
|
|
178
|
+
if (value instanceof Uint8Array) return {
|
|
179
|
+
byteLength: value.byteLength
|
|
180
|
+
};
|
|
181
|
+
if (Array.isArray(value)) return value.map(toJsonValue);
|
|
182
|
+
if (value && typeof value === "object") {
|
|
183
|
+
const output = {};
|
|
184
|
+
for (const [key, entry] of Object.entries(value)) output[key] = toJsonValue(entry);
|
|
185
|
+
return output;
|
|
186
|
+
}
|
|
187
|
+
return value;
|
|
188
|
+
}
|
|
189
|
+
function inspectMP4(bytes) {
|
|
190
|
+
const boxes = readMp4Boxes(bytes, 0, bytes.byteLength);
|
|
191
|
+
const ftyp = boxes.find(box => box.type === "ftyp");
|
|
192
|
+
const moov = boxes.find(box => box.type === "moov");
|
|
193
|
+
const movie = moov ? inspectMp4Movie(bytes, moov) : {
|
|
194
|
+
duration: 0,
|
|
195
|
+
durationTimescale: 1,
|
|
196
|
+
tracks: []
|
|
197
|
+
};
|
|
198
|
+
return {
|
|
199
|
+
sourceFormat: "mp4",
|
|
200
|
+
brand: ftyp ? fourCc(bytes, ftyp.dataStart) : fourCc(bytes, 8),
|
|
201
|
+
compatibleBrands: ftyp ? readMp4Brands(bytes, ftyp) : [],
|
|
202
|
+
container: "isobmff",
|
|
203
|
+
...movie
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function inspectMp4Movie(bytes, moov) {
|
|
207
|
+
const mvhd = findMp4Child(bytes, moov, "mvhd");
|
|
208
|
+
const movieTiming = mvhd ? readMp4Timing(bytes, mvhd) : {
|
|
209
|
+
duration: 0,
|
|
210
|
+
durationTimescale: 1
|
|
211
|
+
};
|
|
212
|
+
const tracks = findMp4Children(bytes, moov, "trak").map(trak => inspectMp4Track(bytes, trak));
|
|
213
|
+
return {
|
|
214
|
+
...movieTiming,
|
|
215
|
+
tracks
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function inspectMp4Track(bytes, trak) {
|
|
219
|
+
const tkhd = findMp4Child(bytes, trak, "tkhd");
|
|
220
|
+
const mdia = findMp4Child(bytes, trak, "mdia");
|
|
221
|
+
const mdhd = mdia ? findMp4Child(bytes, mdia, "mdhd") : null;
|
|
222
|
+
const hdlr = mdia ? findMp4Child(bytes, mdia, "hdlr") : null;
|
|
223
|
+
const minf = mdia ? findMp4Child(bytes, mdia, "minf") : null;
|
|
224
|
+
const stbl = minf ? findMp4Child(bytes, minf, "stbl") : null;
|
|
225
|
+
const stsd = stbl ? findMp4Child(bytes, stbl, "stsd") : null;
|
|
226
|
+
const sampleTable = stbl ? readMp4SampleTable(bytes, stbl) : null;
|
|
227
|
+
const timing = mdhd ? readMp4Timing(bytes, mdhd) : {
|
|
228
|
+
duration: 0,
|
|
229
|
+
durationTimescale: 1
|
|
230
|
+
};
|
|
231
|
+
const handler = hdlr && hdlr.dataLength >= 12 ? fourCc(bytes, hdlr.dataStart + 8) : "";
|
|
232
|
+
const sample = stsd ? readMp4SampleEntry(bytes, stsd) : null;
|
|
233
|
+
const track = {
|
|
234
|
+
id: tkhd ? readMp4TrackId(bytes, tkhd) : 0,
|
|
235
|
+
type: handler === "vide" ? "video" : handler === "soun" ? "audio" : handler || "unknown",
|
|
236
|
+
handler,
|
|
237
|
+
codec: sample?.codec || "",
|
|
238
|
+
duration: timing.duration,
|
|
239
|
+
durationTimescale: timing.durationTimescale,
|
|
240
|
+
language: mdhd ? readMp4Language(bytes, mdhd) : "und"
|
|
241
|
+
};
|
|
242
|
+
if (sample?.width) track.width = sample.width;
|
|
243
|
+
if (sample?.height) track.height = sample.height;
|
|
244
|
+
if (sample?.channels) track.channels = sample.channels;
|
|
245
|
+
if (sample?.sampleRate) track.sampleRate = sample.sampleRate;
|
|
246
|
+
if (sampleTable) track.sampleTable = sampleTable;
|
|
247
|
+
return track;
|
|
248
|
+
}
|
|
249
|
+
function readMp4SampleTable(bytes, stbl) {
|
|
250
|
+
const stts = findMp4Child(bytes, stbl, "stts");
|
|
251
|
+
const stsc = findMp4Child(bytes, stbl, "stsc");
|
|
252
|
+
const stsz = findMp4Child(bytes, stbl, "stsz");
|
|
253
|
+
const stco = findMp4Child(bytes, stbl, "stco");
|
|
254
|
+
const co64 = findMp4Child(bytes, stbl, "co64");
|
|
255
|
+
const stss = findMp4Child(bytes, stbl, "stss");
|
|
256
|
+
const ctts = findMp4Child(bytes, stbl, "ctts");
|
|
257
|
+
if (!stts && !stsc && !stsz && !stco && !co64 && !stss && !ctts) return null;
|
|
258
|
+
const timing = stts ? readMp4TimeToSample(bytes, stts) : {
|
|
259
|
+
entryCount: 0,
|
|
260
|
+
sampleCount: 0,
|
|
261
|
+
duration: 0
|
|
262
|
+
};
|
|
263
|
+
const composition = ctts ? readMp4CompositionOffsets(bytes, ctts) : {
|
|
264
|
+
entryCount: 0,
|
|
265
|
+
sampleCount: 0,
|
|
266
|
+
minOffset: 0,
|
|
267
|
+
maxOffset: 0
|
|
268
|
+
};
|
|
269
|
+
const sizes = stsz ? readMp4SampleSizes(bytes, stsz) : {
|
|
270
|
+
sampleCount: 0,
|
|
271
|
+
bytes: 0,
|
|
272
|
+
fixedSize: 0
|
|
273
|
+
};
|
|
274
|
+
return {
|
|
275
|
+
sampleCount: sizes.sampleCount || timing.sampleCount,
|
|
276
|
+
sampleBytes: sizes.bytes,
|
|
277
|
+
fixedSampleBytes: sizes.fixedSize,
|
|
278
|
+
decodeTimeEntries: timing.entryCount,
|
|
279
|
+
decodeDuration: timing.duration,
|
|
280
|
+
compositionTimeEntries: composition.entryCount,
|
|
281
|
+
compositionSampleCount: composition.sampleCount,
|
|
282
|
+
compositionOffsetMin: composition.minOffset,
|
|
283
|
+
compositionOffsetMax: composition.maxOffset,
|
|
284
|
+
chunkCount: stco ? readMp4Count(bytes, stco, 4) : co64 ? readMp4Count(bytes, co64, 4) : 0,
|
|
285
|
+
chunkOffsetType: stco ? "stco" : co64 ? "co64" : "",
|
|
286
|
+
sampleToChunkEntries: stsc ? readMp4Count(bytes, stsc, 4) : 0,
|
|
287
|
+
keyframeCount: stss ? readMp4Count(bytes, stss, 4) : 0
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
function readMp4TimeToSample(bytes, box) {
|
|
291
|
+
const entryCount = readMp4Count(bytes, box, 4);
|
|
292
|
+
let sampleCount = 0;
|
|
293
|
+
let duration = 0;
|
|
294
|
+
for (let index = 0; index < entryCount; index++) {
|
|
295
|
+
const offset = box.dataStart + 8 + index * 8;
|
|
296
|
+
if (offset + 8 > box.end) break;
|
|
297
|
+
const count = readU32BE(bytes, offset);
|
|
298
|
+
const delta = readU32BE(bytes, offset + 4);
|
|
299
|
+
sampleCount += count;
|
|
300
|
+
duration += count * delta;
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
entryCount,
|
|
304
|
+
sampleCount,
|
|
305
|
+
duration
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
function readMp4CompositionOffsets(bytes, box) {
|
|
309
|
+
const version = bytes[box.dataStart];
|
|
310
|
+
const entryCount = readMp4Count(bytes, box, 4);
|
|
311
|
+
let sampleCount = 0;
|
|
312
|
+
let minOffset = 0;
|
|
313
|
+
let maxOffset = 0;
|
|
314
|
+
for (let index = 0; index < entryCount; index++) {
|
|
315
|
+
const offset = box.dataStart + 8 + index * 8;
|
|
316
|
+
if (offset + 8 > box.end) break;
|
|
317
|
+
const count = readU32BE(bytes, offset);
|
|
318
|
+
const compositionOffset = version === 1 ? readI32BE(bytes, offset + 4) : readU32BE(bytes, offset + 4);
|
|
319
|
+
sampleCount += count;
|
|
320
|
+
minOffset = index === 0 ? compositionOffset : Math.min(minOffset, compositionOffset);
|
|
321
|
+
maxOffset = index === 0 ? compositionOffset : Math.max(maxOffset, compositionOffset);
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
entryCount,
|
|
325
|
+
sampleCount,
|
|
326
|
+
minOffset,
|
|
327
|
+
maxOffset
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
function readMp4SampleSizes(bytes, box) {
|
|
331
|
+
const fixedSize = readU32BE(bytes, box.dataStart + 4);
|
|
332
|
+
const sampleCount = readU32BE(bytes, box.dataStart + 8);
|
|
333
|
+
if (fixedSize !== 0) return {
|
|
334
|
+
sampleCount,
|
|
335
|
+
bytes: fixedSize * sampleCount,
|
|
336
|
+
fixedSize
|
|
337
|
+
};
|
|
338
|
+
let total = 0;
|
|
339
|
+
for (let index = 0; index < sampleCount; index++) {
|
|
340
|
+
const offset = box.dataStart + 12 + index * 4;
|
|
341
|
+
if (offset + 4 > box.end) break;
|
|
342
|
+
total += readU32BE(bytes, offset);
|
|
343
|
+
}
|
|
344
|
+
return {
|
|
345
|
+
sampleCount,
|
|
346
|
+
bytes: total,
|
|
347
|
+
fixedSize: 0
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
function readMp4Count(bytes, box, offset) {
|
|
351
|
+
return box.dataStart + offset + 4 <= box.end ? readU32BE(bytes, box.dataStart + offset) : 0;
|
|
352
|
+
}
|
|
353
|
+
function readMp4Timing(bytes, box) {
|
|
354
|
+
const version = bytes[box.dataStart];
|
|
355
|
+
const offset = version === 1 ? 20 : 12;
|
|
356
|
+
const durationOffset = version === 1 ? 28 : 16;
|
|
357
|
+
return {
|
|
358
|
+
durationTimescale: readU32BE(bytes, box.dataStart + offset) || 1,
|
|
359
|
+
duration: version === 1 ? readU64BE(bytes, box.dataStart + durationOffset) : readU32BE(bytes, box.dataStart + durationOffset)
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
function readMp4TrackId(bytes, box) {
|
|
363
|
+
return readU32BE(bytes, box.dataStart + (bytes[box.dataStart] === 1 ? 20 : 12));
|
|
364
|
+
}
|
|
365
|
+
function readMp4Language(bytes, box) {
|
|
366
|
+
const offset = box.dataStart + (bytes[box.dataStart] === 1 ? 32 : 20);
|
|
367
|
+
const value = readU16BE(bytes, offset) & 0x7fff;
|
|
368
|
+
if (!value) return "und";
|
|
369
|
+
return String.fromCharCode((value >>> 10 & 0x1f) + 0x60, (value >>> 5 & 0x1f) + 0x60, (value & 0x1f) + 0x60);
|
|
370
|
+
}
|
|
371
|
+
function readMp4SampleEntry(bytes, stsd) {
|
|
372
|
+
if (stsd.dataLength < 16) return null;
|
|
373
|
+
const entryCount = readU32BE(bytes, stsd.dataStart + 4);
|
|
374
|
+
if (!entryCount) return null;
|
|
375
|
+
const entry = readMp4Boxes(bytes, stsd.dataStart + 8, stsd.end)[0];
|
|
376
|
+
if (!entry) return null;
|
|
377
|
+
const result = {
|
|
378
|
+
codec: fourCc(bytes, entry.start + 4)
|
|
379
|
+
};
|
|
380
|
+
if (result.codec === "avc1" || result.codec === "avc3" || result.codec === "hvc1" || result.codec === "hev1" || result.codec === "vp09" || result.codec === "av01") {
|
|
381
|
+
result.width = readU16BE(bytes, entry.dataStart + 16);
|
|
382
|
+
result.height = readU16BE(bytes, entry.dataStart + 18);
|
|
383
|
+
} else if (["mp4a", "ac-3", "ec-3", "Opus"].includes(result.codec)) {
|
|
384
|
+
result.channels = readU16BE(bytes, entry.dataStart + 8);
|
|
385
|
+
result.sampleRate = readU32BE(bytes, entry.dataStart + 16) >>> 16;
|
|
386
|
+
}
|
|
387
|
+
return result;
|
|
388
|
+
}
|
|
389
|
+
function readMp4Brands(bytes, ftyp) {
|
|
390
|
+
const brands = [];
|
|
391
|
+
for (let offset = ftyp.dataStart + 8; offset + 4 <= ftyp.end; offset += 4) {
|
|
392
|
+
brands.push(fourCc(bytes, offset));
|
|
393
|
+
}
|
|
394
|
+
return brands;
|
|
395
|
+
}
|
|
396
|
+
function readMp4Boxes(bytes, start, end) {
|
|
397
|
+
const boxes = [];
|
|
398
|
+
let offset = start;
|
|
399
|
+
while (offset + 8 <= end) {
|
|
400
|
+
let size = readU32BE(bytes, offset);
|
|
401
|
+
const type = fourCc(bytes, offset + 4);
|
|
402
|
+
let headerSize = 8;
|
|
403
|
+
if (size === 1 && offset + 16 <= end) {
|
|
404
|
+
size = readU64BE(bytes, offset + 8);
|
|
405
|
+
headerSize = 16;
|
|
406
|
+
}
|
|
407
|
+
if (size === 0) size = end - offset;
|
|
408
|
+
if (size < headerSize || offset + size > end) break;
|
|
409
|
+
boxes.push({
|
|
410
|
+
type,
|
|
411
|
+
start: offset,
|
|
412
|
+
dataStart: offset + headerSize,
|
|
413
|
+
dataLength: size - headerSize,
|
|
414
|
+
end: offset + size
|
|
415
|
+
});
|
|
416
|
+
offset += size;
|
|
417
|
+
}
|
|
418
|
+
return boxes;
|
|
419
|
+
}
|
|
420
|
+
function findMp4Child(bytes, parent, type) {
|
|
421
|
+
return readMp4Boxes(bytes, parent.dataStart, parent.end).find(box => box.type === type) || null;
|
|
422
|
+
}
|
|
423
|
+
function findMp4Children(bytes, parent, type) {
|
|
424
|
+
return readMp4Boxes(bytes, parent.dataStart, parent.end).filter(box => box.type === type);
|
|
425
|
+
}
|
|
426
|
+
function inspectWebM() {
|
|
427
|
+
return {
|
|
428
|
+
sourceFormat: "webm",
|
|
429
|
+
container: "ebml"
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
function fourCc(bytes, offset) {
|
|
433
|
+
return String.fromCharCode(bytes[offset] || 0, bytes[offset + 1] || 0, bytes[offset + 2] || 0, bytes[offset + 3] || 0);
|
|
434
|
+
}
|
|
435
|
+
function readU16BE(bytes, offset) {
|
|
436
|
+
return (bytes[offset] || 0) << 8 | (bytes[offset + 1] || 0);
|
|
437
|
+
}
|
|
438
|
+
function readU32BE(bytes, offset) {
|
|
439
|
+
return (bytes[offset] || 0) * 0x1000000 + ((bytes[offset + 1] || 0) << 16) + ((bytes[offset + 2] || 0) << 8) + (bytes[offset + 3] || 0) >>> 0;
|
|
440
|
+
}
|
|
441
|
+
function readI32BE(bytes, offset) {
|
|
442
|
+
return readU32BE(bytes, offset) | 0;
|
|
443
|
+
}
|
|
444
|
+
function readU64BE(bytes, offset) {
|
|
445
|
+
return readU32BE(bytes, offset) * 0x100000000 + readU32BE(bytes, offset + 4);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
export { DEFAULT_VALUES, OUTPUT_JSON, OUTPUT_RAW, OUTPUT_VIDEO, inspectBytes, inspectWithValues, isMP4, isSupportedWithValues, isWebM, normalizeEmit, normalizeValues, readWithValues, toBytes, toJsonValue };
|
|
449
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/mp4/core/helpers.js"],"sourcesContent":["export const OUTPUT_VIDEO = \"video\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"\",\n source: \"\"\n});\n\nconst DEBUG_OUTPUTS = Object.freeze({\n mp4: \"mp4Json\",\n m4a: \"mp4Json\",\n webm: \"webmJson\"\n});\n\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsVideoFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = values.inputType ? String(values.inputType).replace(/^\\./u, \"\").toLowerCase() : \"\";\n values.emit = normalizeEmit(values.emit, values.inputType, readerName);\n return values;\n}\n\nexport function normalizeEmit(emit, inputType, readerName)\n{\n if (emit === undefined || emit === null) return OUTPUT_RAW;\n if (emit === OUTPUT_JSON && inputType) return DEBUG_OUTPUTS[inputType] || OUTPUT_JSON;\n if ([ OUTPUT_VIDEO, OUTPUT_RAW, OUTPUT_JSON ].includes(emit)) return emit;\n if (Object.values(DEBUG_OUTPUTS).includes(emit)) return emit;\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);\n}\n\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(\"Video input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n const bytes = toBytes(input);\n const metadata = inspectBytes(bytes);\n if (expectedType && metadata.sourceFormat && metadata.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsVideoFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return {\n payloadType: \"video\",\n mediaTypes: [ \"video\" ],\n byteLength: bytes.byteLength,\n sourceFormat: expectedType || values.inputType || metadata.sourceFormat,\n ...metadata\n };\n}\n\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n try\n {\n const metadata = inspectWithValues(input, values, expectedType);\n const codecs = getTrackCodecSummary(metadata);\n const mimeType = getMediaMimeType(metadata);\n return {\n format: metadata.sourceFormat,\n source: values.source || \"buffer\",\n supported: metadata.sourceFormat ? \"partial\" : \"none\",\n confidence: metadata.sourceFormat ? 1 : 0,\n preferred: \"container\",\n reason: metadata.sourceFormat ? \"Container/header recognized.\" : \"Unrecognized video format.\",\n metadata,\n variants: [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: metadata.sourceFormat,\n mimeType,\n supported: true,\n containerOnly: true,\n isDecoded: false,\n frameDecodeSupported: false\n },\n {\n kind: \"container\",\n payloadType: \"video\",\n codec: metadata.sourceFormat,\n mimeType,\n codecs: codecs.codecs,\n videoCodecs: codecs.videoCodecs,\n audioCodecs: codecs.audioCodecs,\n supported: true,\n containerOnly: true,\n isDecoded: false,\n frameDecodeSupported: false\n },\n {\n kind: \"decoded\",\n payloadType: \"video-frame\",\n codec: \"frames\",\n supported: false,\n reason: \"Video decode is not implemented in this package.\"\n }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: expectedType || values.inputType || \"\",\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\nexport function readWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values, expectedType);\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: metadata.sourceFormat,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === DEBUG_OUTPUTS[metadata.sourceFormat]) return metadata;\n\n if (values.emit === OUTPUT_VIDEO && metadata.sourceFormat === \"mp4\")\n {\n const codecs = getTrackCodecSummary(metadata);\n const mimeType = getMediaMimeType(metadata);\n return {\n payloadType: OUTPUT_VIDEO,\n sourceFormat: \"mp4\",\n container: metadata.container,\n mimeType,\n containerOnly: true,\n isDecoded: false,\n frameDecodeSupported: false,\n codecs: codecs.codecs,\n videoCodecs: codecs.videoCodecs,\n audioCodecs: codecs.audioCodecs,\n duration: metadata.duration || 0,\n durationTimescale: metadata.durationTimescale || 1,\n tracks: metadata.tracks || [],\n metadata,\n sourceBytes: bytes\n };\n }\n\n const error = new Error(`${metadata.sourceFormat}: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n error.sourceFormat = metadata.sourceFormat;\n error.emit = values.emit;\n throw error;\n}\n\nfunction getTrackCodecSummary(metadata)\n{\n const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];\n return {\n codecs: uniqueTrackCodecs(tracks),\n videoCodecs: uniqueTrackCodecs(tracks.filter((track) => track.type === \"video\")),\n audioCodecs: uniqueTrackCodecs(tracks.filter((track) => track.type === \"audio\"))\n };\n}\n\nfunction uniqueTrackCodecs(tracks)\n{\n return [ ...new Set(tracks.map((track) => track.codec).filter(Boolean)) ];\n}\n\nfunction getMediaMimeType(metadata)\n{\n const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];\n return tracks.some((track) => track.type === \"video\") ? \"video/mp4\" : \"audio/mp4\";\n}\n\nexport function inspectBytes(bytes)\n{\n if (isMP4(bytes)) return inspectMP4(bytes);\n if (isWebM(bytes)) return inspectWebM();\n return { sourceFormat: \"\" };\n}\n\nexport function isMP4(bytes)\n{\n return bytes.byteLength >= 12 && fourCc(bytes, 4) === \"ftyp\";\n}\n\nexport function isWebM(bytes)\n{\n return bytes.byteLength >= 4 && bytes[0] === 0x1a && bytes[1] === 0x45 && bytes[2] === 0xdf && bytes[3] === 0xa3;\n}\n\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 inspectMP4(bytes)\n{\n const boxes = readMp4Boxes(bytes, 0, bytes.byteLength);\n const ftyp = boxes.find((box) => box.type === \"ftyp\");\n const moov = boxes.find((box) => box.type === \"moov\");\n const movie = moov ? inspectMp4Movie(bytes, moov) : { duration: 0, durationTimescale: 1, tracks: [] };\n return {\n sourceFormat: \"mp4\",\n brand: ftyp ? fourCc(bytes, ftyp.dataStart) : fourCc(bytes, 8),\n compatibleBrands: ftyp ? readMp4Brands(bytes, ftyp) : [],\n container: \"isobmff\",\n ...movie\n };\n}\n\nfunction inspectMp4Movie(bytes, moov)\n{\n const mvhd = findMp4Child(bytes, moov, \"mvhd\");\n const movieTiming = mvhd ? readMp4Timing(bytes, mvhd) : { duration: 0, durationTimescale: 1 };\n const tracks = findMp4Children(bytes, moov, \"trak\").map((trak) => inspectMp4Track(bytes, trak));\n return { ...movieTiming, tracks };\n}\n\nfunction inspectMp4Track(bytes, trak)\n{\n const tkhd = findMp4Child(bytes, trak, \"tkhd\");\n const mdia = findMp4Child(bytes, trak, \"mdia\");\n const mdhd = mdia ? findMp4Child(bytes, mdia, \"mdhd\") : null;\n const hdlr = mdia ? findMp4Child(bytes, mdia, \"hdlr\") : null;\n const minf = mdia ? findMp4Child(bytes, mdia, \"minf\") : null;\n const stbl = minf ? findMp4Child(bytes, minf, \"stbl\") : null;\n const stsd = stbl ? findMp4Child(bytes, stbl, \"stsd\") : null;\n const sampleTable = stbl ? readMp4SampleTable(bytes, stbl) : null;\n const timing = mdhd ? readMp4Timing(bytes, mdhd) : { duration: 0, durationTimescale: 1 };\n const handler = hdlr && hdlr.dataLength >= 12 ? fourCc(bytes, hdlr.dataStart + 8) : \"\";\n const sample = stsd ? readMp4SampleEntry(bytes, stsd) : null;\n const track = {\n id: tkhd ? readMp4TrackId(bytes, tkhd) : 0,\n type: handler === \"vide\" ? \"video\" : handler === \"soun\" ? \"audio\" : handler || \"unknown\",\n handler,\n codec: sample?.codec || \"\",\n duration: timing.duration,\n durationTimescale: timing.durationTimescale,\n language: mdhd ? readMp4Language(bytes, mdhd) : \"und\"\n };\n if (sample?.width) track.width = sample.width;\n if (sample?.height) track.height = sample.height;\n if (sample?.channels) track.channels = sample.channels;\n if (sample?.sampleRate) track.sampleRate = sample.sampleRate;\n if (sampleTable) track.sampleTable = sampleTable;\n return track;\n}\n\nfunction readMp4SampleTable(bytes, stbl)\n{\n const stts = findMp4Child(bytes, stbl, \"stts\");\n const stsc = findMp4Child(bytes, stbl, \"stsc\");\n const stsz = findMp4Child(bytes, stbl, \"stsz\");\n const stco = findMp4Child(bytes, stbl, \"stco\");\n const co64 = findMp4Child(bytes, stbl, \"co64\");\n const stss = findMp4Child(bytes, stbl, \"stss\");\n const ctts = findMp4Child(bytes, stbl, \"ctts\");\n if (!stts && !stsc && !stsz && !stco && !co64 && !stss && !ctts) return null;\n\n const timing = stts ? readMp4TimeToSample(bytes, stts) : { entryCount: 0, sampleCount: 0, duration: 0 };\n const composition = ctts ? readMp4CompositionOffsets(bytes, ctts) : { entryCount: 0, sampleCount: 0, minOffset: 0, maxOffset: 0 };\n const sizes = stsz ? readMp4SampleSizes(bytes, stsz) : { sampleCount: 0, bytes: 0, fixedSize: 0 };\n return {\n sampleCount: sizes.sampleCount || timing.sampleCount,\n sampleBytes: sizes.bytes,\n fixedSampleBytes: sizes.fixedSize,\n decodeTimeEntries: timing.entryCount,\n decodeDuration: timing.duration,\n compositionTimeEntries: composition.entryCount,\n compositionSampleCount: composition.sampleCount,\n compositionOffsetMin: composition.minOffset,\n compositionOffsetMax: composition.maxOffset,\n chunkCount: stco ? readMp4Count(bytes, stco, 4) : co64 ? readMp4Count(bytes, co64, 4) : 0,\n chunkOffsetType: stco ? \"stco\" : co64 ? \"co64\" : \"\",\n sampleToChunkEntries: stsc ? readMp4Count(bytes, stsc, 4) : 0,\n keyframeCount: stss ? readMp4Count(bytes, stss, 4) : 0\n };\n}\n\nfunction readMp4TimeToSample(bytes, box)\n{\n const entryCount = readMp4Count(bytes, box, 4);\n let sampleCount = 0;\n let duration = 0;\n for (let index = 0; index < entryCount; index++)\n {\n const offset = box.dataStart + 8 + index * 8;\n if (offset + 8 > box.end) break;\n const count = readU32BE(bytes, offset);\n const delta = readU32BE(bytes, offset + 4);\n sampleCount += count;\n duration += count * delta;\n }\n return { entryCount, sampleCount, duration };\n}\n\nfunction readMp4CompositionOffsets(bytes, box)\n{\n const version = bytes[box.dataStart];\n const entryCount = readMp4Count(bytes, box, 4);\n let sampleCount = 0;\n let minOffset = 0;\n let maxOffset = 0;\n for (let index = 0; index < entryCount; index++)\n {\n const offset = box.dataStart + 8 + index * 8;\n if (offset + 8 > box.end) break;\n const count = readU32BE(bytes, offset);\n const compositionOffset = version === 1 ? readI32BE(bytes, offset + 4) : readU32BE(bytes, offset + 4);\n sampleCount += count;\n minOffset = index === 0 ? compositionOffset : Math.min(minOffset, compositionOffset);\n maxOffset = index === 0 ? compositionOffset : Math.max(maxOffset, compositionOffset);\n }\n return { entryCount, sampleCount, minOffset, maxOffset };\n}\n\nfunction readMp4SampleSizes(bytes, box)\n{\n const fixedSize = readU32BE(bytes, box.dataStart + 4);\n const sampleCount = readU32BE(bytes, box.dataStart + 8);\n if (fixedSize !== 0) return { sampleCount, bytes: fixedSize * sampleCount, fixedSize };\n\n let total = 0;\n for (let index = 0; index < sampleCount; index++)\n {\n const offset = box.dataStart + 12 + index * 4;\n if (offset + 4 > box.end) break;\n total += readU32BE(bytes, offset);\n }\n return { sampleCount, bytes: total, fixedSize: 0 };\n}\n\nfunction readMp4Count(bytes, box, offset)\n{\n return box.dataStart + offset + 4 <= box.end ? readU32BE(bytes, box.dataStart + offset) : 0;\n}\n\nfunction readMp4Timing(bytes, box)\n{\n const version = bytes[box.dataStart];\n const offset = version === 1 ? 20 : 12;\n const durationOffset = version === 1 ? 28 : 16;\n return {\n durationTimescale: readU32BE(bytes, box.dataStart + offset) || 1,\n duration: version === 1 ? readU64BE(bytes, box.dataStart + durationOffset) : readU32BE(bytes, box.dataStart + durationOffset)\n };\n}\n\nfunction readMp4TrackId(bytes, box)\n{\n return readU32BE(bytes, box.dataStart + (bytes[box.dataStart] === 1 ? 20 : 12));\n}\n\nfunction readMp4Language(bytes, box)\n{\n const offset = box.dataStart + (bytes[box.dataStart] === 1 ? 32 : 20);\n const value = readU16BE(bytes, offset) & 0x7fff;\n if (!value) return \"und\";\n return String.fromCharCode(\n ((value >>> 10) & 0x1f) + 0x60,\n ((value >>> 5) & 0x1f) + 0x60,\n (value & 0x1f) + 0x60\n );\n}\n\nfunction readMp4SampleEntry(bytes, stsd)\n{\n if (stsd.dataLength < 16) return null;\n const entryCount = readU32BE(bytes, stsd.dataStart + 4);\n if (!entryCount) return null;\n const entry = readMp4Boxes(bytes, stsd.dataStart + 8, stsd.end)[0];\n if (!entry) return null;\n const result = { codec: fourCc(bytes, entry.start + 4) };\n if (result.codec === \"avc1\" || result.codec === \"avc3\" || result.codec === \"hvc1\" || result.codec === \"hev1\" || result.codec === \"vp09\" || result.codec === \"av01\")\n {\n result.width = readU16BE(bytes, entry.dataStart + 16);\n result.height = readU16BE(bytes, entry.dataStart + 18);\n }\n else if ([ \"mp4a\", \"ac-3\", \"ec-3\", \"Opus\" ].includes(result.codec))\n {\n result.channels = readU16BE(bytes, entry.dataStart + 8);\n result.sampleRate = readU32BE(bytes, entry.dataStart + 16) >>> 16;\n }\n return result;\n}\n\nfunction readMp4Brands(bytes, ftyp)\n{\n const brands = [];\n for (let offset = ftyp.dataStart + 8; offset + 4 <= ftyp.end; offset += 4)\n {\n brands.push(fourCc(bytes, offset));\n }\n return brands;\n}\n\nfunction readMp4Boxes(bytes, start, end)\n{\n const boxes = [];\n let offset = start;\n while (offset + 8 <= end)\n {\n let size = readU32BE(bytes, offset);\n const type = fourCc(bytes, offset + 4);\n let headerSize = 8;\n if (size === 1 && offset + 16 <= end)\n {\n size = readU64BE(bytes, offset + 8);\n headerSize = 16;\n }\n if (size === 0) size = end - offset;\n if (size < headerSize || offset + size > end) break;\n boxes.push({ type, start: offset, dataStart: offset + headerSize, dataLength: size - headerSize, end: offset + size });\n offset += size;\n }\n return boxes;\n}\n\nfunction findMp4Child(bytes, parent, type)\n{\n return readMp4Boxes(bytes, parent.dataStart, parent.end).find((box) => box.type === type) || null;\n}\n\nfunction findMp4Children(bytes, parent, type)\n{\n return readMp4Boxes(bytes, parent.dataStart, parent.end).filter((box) => box.type === type);\n}\n\nfunction inspectWebM()\n{\n return {\n sourceFormat: \"webm\",\n container: \"ebml\"\n };\n}\n\nfunction fourCc(bytes, offset)\n{\n return String.fromCharCode(bytes[offset] || 0, bytes[offset + 1] || 0, bytes[offset + 2] || 0, bytes[offset + 3] || 0);\n}\n\nfunction readU16BE(bytes, offset)\n{\n return ((bytes[offset] || 0) << 8) | (bytes[offset + 1] || 0);\n}\n\nfunction readU32BE(bytes, offset)\n{\n return (((bytes[offset] || 0) * 0x1000000) + ((bytes[offset + 1] || 0) << 16) + ((bytes[offset + 2] || 0) << 8) + (bytes[offset + 3] || 0)) >>> 0;\n}\n\nfunction readI32BE(bytes, offset)\n{\n return readU32BE(bytes, offset) | 0;\n}\n\nfunction readU64BE(bytes, offset)\n{\n return readU32BE(bytes, offset) * 0x100000000 + readU32BE(bytes, offset + 4);\n}\n"],"names":["OUTPUT_VIDEO","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","DEBUG_OUTPUTS","mp4","m4a","webm","normalizeValues","base","options","readerName","values","String","replace","toLowerCase","normalizeEmit","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","inspectWithValues","expectedType","bytes","metadata","inspectBytes","sourceFormat","payloadType","mediaTypes","isSupportedWithValues","codecs","getTrackCodecSummary","mimeType","getMediaMimeType","format","supported","confidence","preferred","reason","variants","kind","codec","containerOnly","isDecoded","frameDecodeSupported","videoCodecs","audioCodecs","warnings","errors","error","message","readWithValues","container","duration","durationTimescale","tracks","sourceBytes","Error","code","Array","isArray","uniqueTrackCodecs","filter","track","type","Set","map","Boolean","some","isMP4","inspectMP4","isWebM","inspectWebM","fourCc","toJsonValue","value","output","key","entry","entries","boxes","readMp4Boxes","ftyp","find","box","moov","movie","inspectMp4Movie","brand","dataStart","compatibleBrands","readMp4Brands","mvhd","findMp4Child","movieTiming","readMp4Timing","findMp4Children","trak","inspectMp4Track","tkhd","mdia","mdhd","hdlr","minf","stbl","stsd","sampleTable","readMp4SampleTable","timing","handler","dataLength","sample","readMp4SampleEntry","id","readMp4TrackId","language","readMp4Language","width","height","channels","sampleRate","stts","stsc","stsz","stco","co64","stss","ctts","readMp4TimeToSample","entryCount","sampleCount","composition","readMp4CompositionOffsets","minOffset","maxOffset","sizes","readMp4SampleSizes","fixedSize","sampleBytes","fixedSampleBytes","decodeTimeEntries","decodeDuration","compositionTimeEntries","compositionSampleCount","compositionOffsetMin","compositionOffsetMax","chunkCount","readMp4Count","chunkOffsetType","sampleToChunkEntries","keyframeCount","index","offset","end","count","readU32BE","delta","version","compositionOffset","readI32BE","Math","min","max","total","durationOffset","readU64BE","readU16BE","fromCharCode","result","start","brands","push","size","headerSize","parent"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|