@carbonenginejs/runtime-resource 0.9.2 → 0.10.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 +3 -2
- package/README.md +47 -6
- package/dist/CjsMotherLode.js +88 -88
- package/dist/CjsMotherLode.js.map +1 -1
- package/dist/CjsResMan.js +717 -228
- package/dist/CjsResMan.js.map +1 -1
- package/dist/CjsResManFetchProvider.js +94 -0
- package/dist/CjsResManFetchProvider.js.map +1 -0
- package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
- package/dist/CjsResManWorkQueue.js.map +1 -0
- package/dist/format/CjsBlueReader.js +89 -0
- package/dist/format/CjsBlueReader.js.map +1 -1
- package/dist/format/CjsFormat.js +42 -16
- package/dist/format/CjsFormat.js.map +1 -1
- package/dist/format/CjsReader.js +4 -0
- package/dist/format/CjsReader.js.map +1 -1
- package/dist/format/CjsResourceProbe.js +2 -0
- package/dist/format/CjsResourceProbe.js.map +1 -1
- package/dist/format/payloadContract.js +20 -0
- package/dist/format/payloadContract.js.map +1 -1
- package/dist/formats/black/CjsBlackFormat.js +15 -1
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +61 -0
- package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
- package/dist/formats/black/core/CjsBlackReader.js +125 -0
- package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
- package/dist/formats/black/core/helpers.js +17 -0
- package/dist/formats/black/core/helpers.js.map +1 -1
- package/dist/formats/bnk/CjsBnkFormat.js +8 -0
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/helpers.js +20 -0
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +40 -3
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
- package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
- package/dist/formats/cmf/core/binary.js +71 -0
- package/dist/formats/cmf/core/binary.js.map +1 -1
- package/dist/formats/cmf/core/buffers.js +4 -0
- package/dist/formats/cmf/core/buffers.js.map +1 -1
- package/dist/formats/cmf/core/helpers.js +31 -0
- package/dist/formats/cmf/core/helpers.js.map +1 -1
- package/dist/formats/cmf/core/schema.js +10 -0
- package/dist/formats/cmf/core/schema.js.map +1 -1
- package/dist/formats/cmf/core/shared.js +9 -0
- package/dist/formats/cmf/core/shared.js.map +1 -1
- package/dist/formats/cmf/core/writer.js +54 -0
- package/dist/formats/cmf/core/writer.js.map +1 -1
- package/dist/formats/dds/core/bc6h.js +10 -0
- package/dist/formats/dds/core/bc6h.js.map +1 -1
- package/dist/formats/dds/core/bc7.js +16 -0
- package/dist/formats/dds/core/bc7.js.map +1 -1
- package/dist/formats/dds/core/helpers.js +47 -0
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/fbx/core/helpers.js +21 -0
- package/dist/formats/fbx/core/helpers.js.map +1 -1
- package/dist/formats/flac/CjsFlacFormat.js +49 -0
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/formats/flac/core/helpers.js +20 -0
- package/dist/formats/flac/core/helpers.js.map +1 -1
- package/dist/formats/gif/CjsGifFormat.js +49 -0
- package/dist/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/formats/gif/core/helpers.js +20 -0
- package/dist/formats/gif/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +15 -0
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/parser.js +13 -0
- package/dist/formats/gltf/core/parser.js.map +1 -1
- package/dist/formats/gltf/core/targets.js +10 -0
- package/dist/formats/gltf/core/targets.js.map +1 -1
- package/dist/formats/gr2/core/bitknit2.js +2 -0
- package/dist/formats/gr2/core/bitknit2.js.map +1 -1
- package/dist/formats/gr2/core/helpers.js +20 -0
- package/dist/formats/gr2/core/helpers.js.map +1 -1
- package/dist/formats/gr2/core/targets.js +10 -0
- package/dist/formats/gr2/core/targets.js.map +1 -1
- package/dist/formats/jpeg/core/helpers.js +52 -0
- package/dist/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/formats/jpeg/core/jpeg.js +93 -0
- package/dist/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/formats/mp3/core/helpers.js +37 -0
- package/dist/formats/mp3/core/helpers.js.map +1 -1
- package/dist/formats/mp4/core/helpers.js +35 -0
- package/dist/formats/mp4/core/helpers.js.map +1 -1
- package/dist/formats/ogg/CjsOggFormat.js +49 -0
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/formats/ogg/core/helpers.js +23 -0
- package/dist/formats/ogg/core/helpers.js.map +1 -1
- package/dist/formats/ogg/core/vorbis.js +13 -0
- package/dist/formats/ogg/core/vorbis.js.map +1 -1
- package/dist/formats/png/core/helpers.js +52 -0
- package/dist/formats/png/core/helpers.js.map +1 -1
- package/dist/formats/red/CjsRedFormat.js +2 -0
- package/dist/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/formats/red/core/CjsRedReader.js +52 -0
- package/dist/formats/red/core/CjsRedReader.js.map +1 -1
- package/dist/formats/red/core/helpers.js +19 -0
- package/dist/formats/red/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/stl.js +8 -0
- package/dist/formats/stl/core/stl.js.map +1 -1
- package/dist/formats/stl/core/targets.js +10 -0
- package/dist/formats/stl/core/targets.js.map +1 -1
- package/dist/formats/tga/core/helpers.js +47 -0
- package/dist/formats/tga/core/helpers.js.map +1 -1
- package/dist/formats/wav/core/helpers.js +37 -0
- package/dist/formats/wav/core/helpers.js.map +1 -1
- package/dist/formats/webm/core/helpers.js +35 -0
- package/dist/formats/webm/core/helpers.js.map +1 -1
- package/dist/formats/webp/CjsWebpFormat.js +49 -0
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/formats/webp/core/helpers.js +23 -0
- package/dist/formats/webp/core/helpers.js.map +1 -1
- package/dist/formats/wem/CjsWemFormat.js +8 -0
- package/dist/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/formats/wem/core/bitStream.js +2 -0
- package/dist/formats/wem/core/bitStream.js.map +1 -1
- package/dist/formats/wem/core/helpers.js +20 -0
- package/dist/formats/wem/core/helpers.js.map +1 -1
- package/dist/formats/yaml/CjsYamlFormat.js +45 -0
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +10 -0
- package/dist/formats/yaml/core/helpers.js.map +1 -1
- package/dist/index.js +56 -43
- package/dist/index.js.map +1 -1
- package/dist/{CjsResource.js → resource/CjsResource.js} +232 -17
- package/dist/resource/CjsResource.js.map +1 -0
- package/dist/{resources → resource}/Tr2LightProfileRes.js +4 -3
- package/dist/resource/Tr2LightProfileRes.js.map +1 -0
- package/dist/{resources → resource/audio}/AudioGeometryResData.js +1 -1
- package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
- package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
- package/dist/resource/audio/CjsAudioRes.js +213 -0
- package/dist/resource/audio/CjsAudioRes.js.map +1 -0
- package/dist/resource/audio/index.js +4 -0
- package/dist/resource/audio/index.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalData.js +1 -1
- package/dist/resource/geometry/MeshDecalData.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalLodData.js +1 -1
- package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
- package/dist/resource/geometry/TriGeometryRes.js +656 -0
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +1 -1
- package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +1 -1
- package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +1 -1
- package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +1 -1
- package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +1 -1
- package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriJointBinding.js +1 -1
- package/dist/resource/geometry/TriJointBinding.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +1 -1
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +1 -1
- package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +1 -1
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +1 -1
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +6 -5
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +6 -5
- package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
- package/dist/resource/geometry/granny/enums.js.map +1 -0
- package/dist/resource/geometry/granny/index.js +6 -0
- package/dist/resource/geometry/granny/index.js.map +1 -0
- package/dist/resource/geometry/index.js +17 -0
- package/dist/resource/geometry/index.js.map +1 -0
- package/dist/resource/index.js +52 -0
- package/dist/resource/index.js.map +1 -0
- package/dist/resource/resourceBoundary.js +64 -0
- package/dist/resource/resourceBoundary.js.map +1 -0
- package/dist/resource/shader/Tr2EffectRes.js +420 -0
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialArea.js +9 -4
- package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialMesh.js +8 -3
- package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialRes.js +10 -4
- package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
- package/dist/resource/shader/Tr2Shader.js +250 -0
- package/dist/resource/shader/Tr2Shader.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2ShaderPermutation.js +13 -7
- package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
- package/dist/resource/shader/index.js +17 -0
- package/dist/resource/shader/index.js.map +1 -0
- package/dist/resource/shader/portable.js +33 -0
- package/dist/resource/shader/portable.js.map +1 -0
- package/dist/resource/shader/portableValidation.js +461 -0
- package/dist/resource/shader/portableValidation.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +100 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +34 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +113 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +141 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +107 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js +90 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +235 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +71 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2Pass.js +111 -0
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +80 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
- package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +83 -6
- package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
- package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +56 -10
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2ImageRes.js +6 -4
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +3 -1
- package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +1 -1
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +1 -1
- package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +6 -4
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
- package/dist/{resources → resource/texture}/TriTextureRes.js +42 -26
- package/dist/resource/texture/TriTextureRes.js.map +1 -0
- package/dist/resource/texture/index.js +15 -0
- package/dist/resource/texture/index.js.map +1 -0
- package/dist/{resources → resource/texture}/texturePipelineBehavior.js +59 -59
- package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
- package/dist/worker/CjsResManMainThreadLoader.js +87 -0
- package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
- package/dist/worker/CjsResManWorker.js +217 -0
- package/dist/worker/CjsResManWorker.js.map +1 -0
- package/dist/worker/CjsResManWorkerLoader.js +434 -0
- package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
- package/dist/worker/protocol.js +12 -0
- package/dist/worker/protocol.js.map +1 -0
- package/docs/README.md +16 -3
- package/docs/architecture.md +39 -16
- package/docs/concepts/resource-lifecycle.md +2 -1
- package/docs/formats/README.md +4 -0
- package/docs/reference/classes/README.md +6 -4
- package/docs/reference/classes/audio.md +30 -0
- package/docs/reference/classes/core.md +31 -11
- package/docs/reference/classes/resources.md +151 -41
- package/docs/reference/classes/texture.md +7 -7
- package/docs/reference/motherlode-cache.md +17 -0
- package/docs/reference/queues.md +9 -1
- package/docs/reference/workers.md +135 -0
- package/docs/roadmap.md +27 -1
- package/package.json +8 -1
- package/dist/CjsResManQueue.js.map +0 -1
- package/dist/CjsResource.js.map +0 -1
- package/dist/CjsResourceSource.js +0 -68
- package/dist/CjsResourceSource.js.map +0 -1
- package/dist/resourcePath.js +0 -18
- package/dist/resourcePath.js.map +0 -1
- package/dist/resourceStates.js +0 -9
- package/dist/resourceStates.js.map +0 -1
- package/dist/resources/AudioGeometryResData.js.map +0 -1
- package/dist/resources/GStateBindingCallbackData.js.map +0 -1
- package/dist/resources/MeshDecalData.js.map +0 -1
- package/dist/resources/MeshDecalLodData.js.map +0 -1
- package/dist/resources/Tr2EffectRes.js +0 -71
- package/dist/resources/Tr2EffectRes.js.map +0 -1
- package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
- package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
- package/dist/resources/Tr2ImageRes.js.map +0 -1
- package/dist/resources/Tr2LightProfileRes.js.map +0 -1
- package/dist/resources/Tr2MaterialArea.js.map +0 -1
- package/dist/resources/Tr2MaterialMesh.js.map +0 -1
- package/dist/resources/Tr2MaterialRes.js.map +0 -1
- package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
- package/dist/resources/Tr2TextureLodManager.js.map +0 -1
- package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
- package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
- package/dist/resources/Tr2TexturePipeline.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
- package/dist/resources/TriGeometryRes.js +0 -239
- package/dist/resources/TriGeometryRes.js.map +0 -1
- package/dist/resources/TriGeometryResAreaData.js.map +0 -1
- package/dist/resources/TriGeometryResJointData.js.map +0 -1
- package/dist/resources/TriGeometryResLodData.js.map +0 -1
- package/dist/resources/TriGeometryResMeshData.js.map +0 -1
- package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
- package/dist/resources/TriGrannyRes.js.map +0 -1
- package/dist/resources/TriJointBinding.js.map +0 -1
- package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
- package/dist/resources/TriRtGeometryConstants.js.map +0 -1
- package/dist/resources/TriTextureRes.js.map +0 -1
- package/dist/resources/enums.js.map +0 -1
- package/dist/resources/resourceBoundary.js +0 -47
- package/dist/resources/resourceBoundary.js.map +0 -1
- package/dist/resources/texturePipelineBehavior.js.map +0 -1
- package/dist/texture/CjsTextureArrayRes.js.map +0 -1
- package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/mp3/core/helpers.js"],"sourcesContent":["export const OUTPUT_AUDIO = \"audio\";\nexport const OUTPUT_PCM = \"pcm\";\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 wav: \"wavJson\",\n mp3: \"mp3Json\"\n});\n\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsAudioFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = normalizeInputType(values.inputType);\n values.emit = normalizeEmit(values.emit, values.inputType, readerName);\n return values;\n}\n\nexport function normalizeInputType(inputType)\n{\n return inputType ? String(inputType).replace(/^\\./u, \"\").toLowerCase() : \"\";\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_AUDIO, OUTPUT_PCM, 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(\"Audio 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(`CjsAudioFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return {\n payloadType: \"audio\",\n mediaTypes: [ \"audio\" ],\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 mimeType = getAudioMimeType(metadata);\n const variants = [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: metadata.audioFormat || metadata.sourceFormat,\n mimeType,\n supported: true,\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false\n },\n { kind: \"pcm\", payloadType: \"pcm\", codec: \"pcm\", supported: false, reason: \"MP3 PCM decode/output is not implemented yet.\" }\n ];\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: variants.find((variant) => variant.supported)?.codec || \"\",\n reason: metadata.sourceFormat ? \"Container/header recognized.\" : \"Unrecognized audio format.\",\n metadata,\n variants,\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 mimeType: getAudioMimeType(metadata),\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === DEBUG_OUTPUTS[metadata.sourceFormat]) return metadata;\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 getAudioMimeType(metadata)\n{\n if (metadata.sourceFormat === \"wav\") return \"audio/wav\";\n return \"audio/mpeg\";\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\nexport function inspectBytes(bytes)\n{\n if (isWAV(bytes)) return inspectWAV(bytes);\n if (isMP3(bytes)) return inspectMP3(bytes);\n return { sourceFormat: \"\", audioFormat: \"\" };\n}\n\nexport function isWAV(bytes)\n{\n return bytes.byteLength >= 12 && fourCc(bytes, 0) === \"RIFF\" && fourCc(bytes, 8) === \"WAVE\";\n}\n\nexport function isMP3(bytes)\n{\n return bytes.byteLength >= 3 &&\n (fourCc(bytes, 0, 3) === \"ID3\" || (bytes[0] === 0xff && (bytes[1] & 0xe0) === 0xe0));\n}\n\nfunction inspectWAV(bytes)\n{\n let offset = 12;\n const info = { sourceFormat: \"wav\", audioFormat: \"wav\", sampleRate: 0, channels: 0, bitsPerSample: 0, dataBytes: 0 };\n while (offset + 8 <= bytes.byteLength)\n {\n const id = fourCc(bytes, offset), size = readU32LE(bytes, offset + 4), dataOffset = offset + 8;\n if (id === \"fmt \" && dataOffset + 16 <= bytes.byteLength)\n {\n info.formatTag = readU16LE(bytes, dataOffset);\n info.channels = readU16LE(bytes, dataOffset + 2);\n info.sampleRate = readU32LE(bytes, dataOffset + 4);\n info.bitsPerSample = readU16LE(bytes, dataOffset + 14);\n }\n if (id === \"data\") info.dataBytes = size;\n offset = dataOffset + size + (size & 1);\n }\n return info;\n}\n\nfunction inspectMP3(bytes)\n{\n const frame = readMp3FrameHeader(bytes, findMp3FrameOffset(bytes));\n const id3 = readId3Header(bytes);\n const info = {\n sourceFormat: \"mp3\",\n audioFormat: \"mp3\",\n hasId3: !!id3,\n id3Version: id3?.version || 0,\n id3Revision: id3?.revision || 0,\n id3Flags: id3?.flags || 0,\n id3Size: id3?.size || 0,\n firstFrameOffset: frame?.offset || 0,\n version: frame?.version || \"\",\n layer: frame?.layer || \"\",\n bitrateKbps: frame?.bitrateKbps || 0,\n sampleRate: frame?.sampleRate || 0,\n channels: frame?.channels || 0,\n samplesPerFrame: frame?.samplesPerFrame || 0,\n frameLength: frame?.frameLength || 0,\n frameCount: 0,\n durationSeconds: 0,\n declaredFrameCount: 0,\n declaredByteCount: 0,\n vbrHeader: \"\",\n encoderDelay: 0,\n encoderPadding: 0\n };\n\n if (frame)\n {\n const vbr = readVbrHeader(bytes, frame);\n if (vbr)\n {\n info.declaredFrameCount = vbr.frameCount;\n info.declaredByteCount = vbr.byteCount;\n info.vbrHeader = vbr.kind;\n info.encoderDelay = vbr.encoderDelay;\n info.encoderPadding = vbr.encoderPadding;\n }\n let offset = frame.offset;\n while (offset + 4 <= bytes.byteLength && info.frameCount < 1000000)\n {\n const next = readMp3FrameHeader(bytes, offset);\n if (!next || next.frameLength <= 0) break;\n info.frameCount++;\n offset += next.frameLength;\n }\n const frameCount = info.declaredFrameCount || info.frameCount;\n const trimmedSamples = Math.max(0, frameCount * info.samplesPerFrame - info.encoderDelay - info.encoderPadding);\n info.durationSeconds = info.sampleRate ? trimmedSamples / info.sampleRate : 0;\n }\n\n return info;\n}\n\nfunction readId3Header(bytes)\n{\n if (bytes.byteLength < 10 || fourCc(bytes, 0, 3) !== \"ID3\") return null;\n return {\n version: bytes[3],\n revision: bytes[4],\n flags: bytes[5],\n size: (bytes[6] << 21) | (bytes[7] << 14) | (bytes[8] << 7) | bytes[9]\n };\n}\n\nfunction readVbrHeader(bytes, frame)\n{\n const sideInfoLength = frame.version === \"mpeg1\"\n ? frame.channels === 1 ? 17 : 32\n : frame.channels === 1 ? 9 : 17;\n const xingOffset = frame.offset + 4 + sideInfoLength;\n for (const kind of [ \"Xing\", \"Info\" ])\n {\n if (fourCc(bytes, xingOffset, 4) !== kind) continue;\n const flags = readU32BE(bytes, xingOffset + 4);\n const frameCount = (flags & 1) !== 0 ? readU32BE(bytes, xingOffset + 8) : 0;\n const byteCount = (flags & 2) !== 0 ? readU32BE(bytes, xingOffset + 12) : 0;\n const gapless = readLameGapless(bytes, xingOffset + 8 + ((flags & 1) !== 0 ? 4 : 0) + ((flags & 2) !== 0 ? 4 : 0) + ((flags & 4) !== 0 ? 100 : 0));\n return { kind, frameCount, byteCount, ...gapless };\n }\n\n const vbriOffset = frame.offset + 36;\n if (fourCc(bytes, vbriOffset, 4) === \"VBRI\")\n {\n return {\n kind: \"VBRI\",\n frameCount: readU32BE(bytes, vbriOffset + 14),\n byteCount: readU32BE(bytes, vbriOffset + 10),\n encoderDelay: 0,\n encoderPadding: 0\n };\n }\n\n return null;\n}\n\nfunction readLameGapless(bytes, searchStart)\n{\n const end = Math.min(bytes.byteLength - 3, searchStart + 160);\n for (let offset = searchStart; offset < end; offset++)\n {\n if (fourCc(bytes, offset, 4) !== \"LAME\") continue;\n const value = (bytes[offset + 0x15] << 16) | (bytes[offset + 0x16] << 8) | bytes[offset + 0x17];\n return {\n encoderDelay: (value >>> 12) & 0xfff,\n encoderPadding: value & 0xfff\n };\n }\n return { encoderDelay: 0, encoderPadding: 0 };\n}\n\nfunction findMp3FrameOffset(bytes)\n{\n let offset = 0;\n if (fourCc(bytes, 0, 3) === \"ID3\" && bytes.byteLength >= 10)\n {\n const size = (bytes[6] << 21) | (bytes[7] << 14) | (bytes[8] << 7) | bytes[9];\n offset = 10 + size + (bytes[5] & 0x10 ? 10 : 0);\n }\n for (; offset + 4 <= bytes.byteLength; offset++)\n {\n if (readMp3FrameHeader(bytes, offset)) return offset;\n }\n return -1;\n}\n\nfunction readMp3FrameHeader(bytes, offset)\n{\n if (offset < 0 || offset + 4 > bytes.byteLength) return null;\n const header = ((bytes[offset] << 24) | (bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3]) >>> 0;\n if (((header & 0xffe00000) >>> 0) !== 0xffe00000) return null;\n\n const versionBits = (header >>> 19) & 3;\n const layerBits = (header >>> 17) & 3;\n const bitrateIndex = (header >>> 12) & 0xf;\n const sampleRateIndex = (header >>> 10) & 3;\n const padding = (header >>> 9) & 1;\n const channelMode = (header >>> 6) & 3;\n if (versionBits === 1 || layerBits !== 1 || bitrateIndex === 0 || bitrateIndex === 15 || sampleRateIndex === 3)\n {\n return null;\n }\n\n const version = versionBits === 3 ? \"mpeg1\" : versionBits === 2 ? \"mpeg2\" : \"mpeg2.5\";\n const bitrateTable = version === \"mpeg1\"\n ? [ 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 ]\n : [ 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 ];\n const sampleRateTable = version === \"mpeg1\"\n ? [ 44100, 48000, 32000 ]\n : version === \"mpeg2\" ? [ 22050, 24000, 16000 ] : [ 11025, 12000, 8000 ];\n const bitrateKbps = bitrateTable[bitrateIndex];\n const sampleRate = sampleRateTable[sampleRateIndex];\n const samplesPerFrame = version === \"mpeg1\" ? 1152 : 576;\n const frameLength = Math.floor((version === \"mpeg1\" ? 144000 : 72000) * bitrateKbps / sampleRate) + padding;\n if (offset + frameLength > bytes.byteLength) return null;\n\n return {\n offset,\n version,\n layer: \"layer3\",\n bitrateKbps,\n sampleRate,\n channels: channelMode === 3 ? 1 : 2,\n samplesPerFrame,\n frameLength\n };\n}\n\nfunction fourCc(bytes, offset, length = 4)\n{\n let value = \"\";\n for (let i = 0; i < length; i++) value += String.fromCharCode(bytes[offset + i] || 0);\n return value;\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n\nfunction readU32LE(bytes, offset)\n{\n return (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] * 0x1000000)) >>> 0;\n}\n\nfunction readU32BE(bytes, offset)\n{\n return ((bytes[offset] * 0x1000000) + ((bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3])) >>> 0;\n}\n"],"names":["OUTPUT_AUDIO","OUTPUT_PCM","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","DEBUG_OUTPUTS","wav","mp3","normalizeValues","base","options","readerName","values","normalizeInputType","normalizeEmit","String","replace","toLowerCase","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","inspectWithValues","expectedType","bytes","metadata","inspectBytes","sourceFormat","payloadType","mediaTypes","isSupportedWithValues","mimeType","getAudioMimeType","variants","kind","codec","audioFormat","supported","containerOnly","isDecoded","pcmDecodeSupported","reason","format","confidence","preferred","find","variant","warnings","errors","error","message","readWithValues","Error","code","toJsonValue","value","Array","isArray","map","output","key","entry","entries","isWAV","inspectWAV","isMP3","inspectMP3","fourCc","offset","info","sampleRate","channels","bitsPerSample","dataBytes","id","size","readU32LE","dataOffset","formatTag","readU16LE","frame","readMp3FrameHeader","findMp3FrameOffset","id3","readId3Header","hasId3","id3Version","version","id3Revision","revision","id3Flags","flags","id3Size","firstFrameOffset","layer","bitrateKbps","samplesPerFrame","frameLength","frameCount","durationSeconds","declaredFrameCount","declaredByteCount","vbrHeader","encoderDelay","encoderPadding","vbr","readVbrHeader","byteCount","next","trimmedSamples","Math","max","sideInfoLength","xingOffset","readU32BE","gapless","readLameGapless","vbriOffset","searchStart","end","min","header","versionBits","layerBits","bitrateIndex","sampleRateIndex","padding","channelMode","bitrateTable","sampleRateTable","floor","length","i","fromCharCode"],"mappings":"AAAO,MAAMA,YAAY,GAAG;AACrB,MAAMC,UAAU,GAAG;AACnB,MAAMC,UAAU,GAAG;AACnB,MAAMC,WAAW,GAAG;MAEdC,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;AACxCC,EAAAA,IAAI,EAAEL,UAAU;AAChBM,EAAAA,SAAS,EAAE,EAAE;AACbC,EAAAA,MAAM,EAAE;AACZ,CAAC;AAED,MAAMC,aAAa,GAAGL,MAAM,CAACC,MAAM,CAAC;AAChCK,EAAAA,GAAG,EAAE,SAAS;AACdC,EAAAA,GAAG,EAAE;AACT,CAAC,CAAC;AAEK,SAASC,eAAeA,CAACC,IAAI,GAAGV,cAAc,EAAEW,OAAO,GAAG,EAAE,EAAEC,UAAU,GAAG,gBAAgB,EAClG;AACI,EAAA,MAAMC,MAAM,GAAG;AAAE,IAAA,GAAGb,cAAc;AAAE,IAAA,IAAIU,IAAI,IAAI,EAAE,CAAC;IAAE,IAAIC,OAAO,IAAI,EAAE;GAAG;EACzEE,MAAM,CAACT,SAAS,GAAGU,kBAAkB,CAACD,MAAM,CAACT,SAAS,CAAC;AACvDS,EAAAA,MAAM,CAACV,IAAI,GAAGY,aAAa,CAACF,MAAM,CAACV,IAAI,EAAEU,MAAM,CAACT,SAAS,EAAEQ,UAAU,CAAC;AACtE,EAAA,OAAOC,MAAM;AACjB;AAEO,SAASC,kBAAkBA,CAACV,SAAS,EAC5C;AACI,EAAA,OAAOA,SAAS,GAAGY,MAAM,CAACZ,SAAS,CAAC,CAACa,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAACC,WAAW,EAAE,GAAG,EAAE;AAC/E;AAEO,SAASH,aAAaA,CAACZ,IAAI,EAAEC,SAAS,EAAEQ,UAAU,EACzD;EACI,IAAIT,IAAI,KAAKgB,SAAS,IAAIhB,IAAI,KAAK,IAAI,EAAE,OAAOL,UAAU;AAC1D,EAAA,IAAIK,IAAI,KAAKJ,WAAW,IAAIK,SAAS,EAAE,OAAOE,aAAa,CAACF,SAAS,CAAC,IAAIL,WAAW;AACrF,EAAA,IAAI,CAAEH,YAAY,EAAEC,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAE,CAACqB,QAAQ,CAACjB,IAAI,CAAC,EAAE,OAAOA,IAAI;AACrF,EAAA,IAAIF,MAAM,CAACY,MAAM,CAACP,aAAa,CAAC,CAACc,QAAQ,CAACjB,IAAI,CAAC,EAAE,OAAOA,IAAI;AAC5D,EAAA,MAAM,IAAIkB,SAAS,CAAC,CAAA,EAAGT,UAAU,CAAA,qBAAA,EAAwBU,IAAI,CAACC,SAAS,CAACpB,IAAI,CAAC,EAAE,CAAC;AACpF;AAEO,SAASqB,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,IAAIV,SAAS,CAAC,0DAA0D,CAAC;AACnF;AAEO,SAASW,iBAAiBA,CAACP,KAAK,EAAEZ,MAAM,GAAGb,cAAc,EAAEiC,YAAY,GAAG,EAAE,EACnF;AACI,EAAA,MAAMC,KAAK,GAAGV,OAAO,CAACC,KAAK,CAAC;AAC5B,EAAA,MAAMU,QAAQ,GAAGC,YAAY,CAACF,KAAK,CAAC;EACpC,IAAID,YAAY,IAAIE,QAAQ,CAACE,YAAY,IAAIF,QAAQ,CAACE,YAAY,KAAKJ,YAAY,EACnF;IACI,MAAM,IAAIZ,SAAS,CAAC,CAAA,yBAAA,EAA4BY,YAAY,SAASE,QAAQ,CAACE,YAAY,CAAA,CAAE,CAAC;AACjG,EAAA;EACA,OAAO;AACHC,IAAAA,WAAW,EAAE,OAAO;IACpBC,UAAU,EAAE,CAAE,OAAO,CAAE;IACvBR,UAAU,EAAEG,KAAK,CAACH,UAAU;IAC5BM,YAAY,EAAEJ,YAAY,IAAIpB,MAAM,CAACT,SAAS,IAAI+B,QAAQ,CAACE,YAAY;IACvE,GAAGF;GACN;AACL;AAEO,SAASK,qBAAqBA,CAACf,KAAK,EAAEZ,MAAM,GAAGb,cAAc,EAAEiC,YAAY,GAAG,EAAE,EACvF;EACI,IACA;IACI,MAAME,QAAQ,GAAGH,iBAAiB,CAACP,KAAK,EAAEZ,MAAM,EAAEoB,YAAY,CAAC;AAC/D,IAAA,MAAMQ,QAAQ,GAAGC,gBAAgB,CAACP,QAAQ,CAAC;IAC3C,MAAMQ,QAAQ,GAAG,CACb;AACIC,MAAAA,IAAI,EAAE,KAAK;AACXN,MAAAA,WAAW,EAAE,KAAK;AAClBO,MAAAA,KAAK,EAAEV,QAAQ,CAACW,WAAW,IAAIX,QAAQ,CAACE,YAAY;MACpDI,QAAQ;AACRM,MAAAA,SAAS,EAAE,IAAI;AACfC,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,kBAAkB,EAAE;AACxB,KAAC,EACD;AAAEN,MAAAA,IAAI,EAAE,KAAK;AAAEN,MAAAA,WAAW,EAAE,KAAK;AAAEO,MAAAA,KAAK,EAAE,KAAK;AAAEE,MAAAA,SAAS,EAAE,KAAK;AAAEI,MAAAA,MAAM,EAAE;AAAgD,KAAC,CAC/H;IACD,OAAO;MACHC,MAAM,EAAEjB,QAAQ,CAACE,YAAY;AAC7BhC,MAAAA,MAAM,EAAEQ,MAAM,CAACR,MAAM,IAAI,QAAQ;AACjC0C,MAAAA,SAAS,EAAEZ,QAAQ,CAACE,YAAY,GAAG,SAAS,GAAG,MAAM;AACrDgB,MAAAA,UAAU,EAAElB,QAAQ,CAACE,YAAY,GAAG,CAAC,GAAG,CAAC;AACzCiB,MAAAA,SAAS,EAAEX,QAAQ,CAACY,IAAI,CAAEC,OAAO,IAAKA,OAAO,CAACT,SAAS,CAAC,EAAEF,KAAK,IAAI,EAAE;AACrEM,MAAAA,MAAM,EAAEhB,QAAQ,CAACE,YAAY,GAAG,8BAA8B,GAAG,4BAA4B;MAC7FF,QAAQ;MACRQ,QAAQ;AACRc,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,MAAM,EAAE;KACX;EACL,CAAC,CACD,OAAOC,KAAK,EACZ;IACI,OAAO;AACHP,MAAAA,MAAM,EAAEnB,YAAY,IAAIpB,MAAM,CAACT,SAAS,IAAI,EAAE;AAC9CC,MAAAA,MAAM,EAAEQ,MAAM,CAACR,MAAM,IAAI,QAAQ;AACjC0C,MAAAA,SAAS,EAAE,MAAM;AACjBM,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,SAAS,EAAE,EAAE;MACbH,MAAM,EAAEQ,KAAK,CAACC,OAAO;AACrBzB,MAAAA,QAAQ,EAAE,IAAI;AACdQ,MAAAA,QAAQ,EAAE,EAAE;AACZc,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,MAAM,EAAE,CAAEC,KAAK,CAACC,OAAO;KAC1B;AACL,EAAA;AACJ;AAEO,SAASC,cAAcA,CAACpC,KAAK,EAAEZ,MAAM,GAAGb,cAAc,EAAEiC,YAAY,GAAG,EAAE,EAChF;AACI,EAAA,MAAMC,KAAK,GAAGV,OAAO,CAACC,KAAK,CAAC;EAC5B,MAAMU,QAAQ,GAAGH,iBAAiB,CAACE,KAAK,EAAErB,MAAM,EAAEoB,YAAY,CAAC;AAC/D,EAAA,IAAIpB,MAAM,CAACV,IAAI,KAAKL,UAAU,EAC9B;IACI,OAAO;AACHwC,MAAAA,WAAW,EAAE,KAAK;MAClBD,YAAY,EAAEF,QAAQ,CAACE,YAAY;AACnCI,MAAAA,QAAQ,EAAEC,gBAAgB,CAACP,QAAQ,CAAC;AACpCa,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,kBAAkB,EAAE,KAAK;MACzBf,QAAQ;AACRD,MAAAA;KACH;AACL,EAAA;AACA,EAAA,IAAIrB,MAAM,CAACV,IAAI,KAAKJ,WAAW,IAAIc,MAAM,CAACV,IAAI,KAAKG,aAAa,CAAC6B,QAAQ,CAACE,YAAY,CAAC,EAAE,OAAOF,QAAQ;AAExG,EAAA,MAAMwB,KAAK,GAAG,IAAIG,KAAK,CAAC,CAAA,EAAG3B,QAAQ,CAACE,YAAY,CAAA,QAAA,EAAWxB,MAAM,CAACV,IAAI,0BAA0B,CAAC;EACjGwD,KAAK,CAACI,IAAI,GAAG,mCAAmC;AAChDJ,EAAAA,KAAK,CAACtB,YAAY,GAAGF,QAAQ,CAACE,YAAY;AAC1CsB,EAAAA,KAAK,CAACxD,IAAI,GAAGU,MAAM,CAACV,IAAI;AACxB,EAAA,MAAMwD,KAAK;AACf;AAEA,SAASjB,gBAAgBA,CAACP,QAAQ,EAClC;AACI,EAAA,IAAIA,QAAQ,CAACE,YAAY,KAAK,KAAK,EAAE,OAAO,WAAW;AACvD,EAAA,OAAO,YAAY;AACvB;AAEO,SAAS2B,WAAWA,CAACC,KAAK,EACjC;AACI,EAAA,IAAIA,KAAK,YAAYvC,UAAU,EAAE,OAAO;IAAEK,UAAU,EAAEkC,KAAK,CAAClC;GAAY;AACxE,EAAA,IAAImC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE,OAAOA,KAAK,CAACG,GAAG,CAACJ,WAAW,CAAC;AACvD,EAAA,IAAIC,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EACtC;IACI,MAAMI,MAAM,GAAG,EAAE;IACjB,KAAK,MAAM,CAAEC,GAAG,EAAEC,KAAK,CAAE,IAAItE,MAAM,CAACuE,OAAO,CAACP,KAAK,CAAC,EAAEI,MAAM,CAACC,GAAG,CAAC,GAAGN,WAAW,CAACO,KAAK,CAAC;AACpF,IAAA,OAAOF,MAAM;AACjB,EAAA;AACA,EAAA,OAAOJ,KAAK;AAChB;AAEO,SAAS7B,YAAYA,CAACF,KAAK,EAClC;EACI,IAAIuC,KAAK,CAACvC,KAAK,CAAC,EAAE,OAAOwC,UAAU,CAACxC,KAAK,CAAC;EAC1C,IAAIyC,KAAK,CAACzC,KAAK,CAAC,EAAE,OAAO0C,UAAU,CAAC1C,KAAK,CAAC;EAC1C,OAAO;AAAEG,IAAAA,YAAY,EAAE,EAAE;AAAES,IAAAA,WAAW,EAAE;GAAI;AAChD;AAEO,SAAS2B,KAAKA,CAACvC,KAAK,EAC3B;EACI,OAAOA,KAAK,CAACH,UAAU,IAAI,EAAE,IAAI8C,MAAM,CAAC3C,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI2C,MAAM,CAAC3C,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM;AAC/F;AAEO,SAASyC,KAAKA,CAACzC,KAAK,EAC3B;AACI,EAAA,OAAOA,KAAK,CAACH,UAAU,IAAI,CAAC,KACvB8C,MAAM,CAAC3C,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAK,CAAC;AAC5F;AAEA,SAASwC,UAAUA,CAACxC,KAAK,EACzB;EACI,IAAI4C,MAAM,GAAG,EAAE;AACf,EAAA,MAAMC,IAAI,GAAG;AAAE1C,IAAAA,YAAY,EAAE,KAAK;AAAES,IAAAA,WAAW,EAAE,KAAK;AAAEkC,IAAAA,UAAU,EAAE,CAAC;AAAEC,IAAAA,QAAQ,EAAE,CAAC;AAAEC,IAAAA,aAAa,EAAE,CAAC;AAAEC,IAAAA,SAAS,EAAE;GAAG;AACpH,EAAA,OAAOL,MAAM,GAAG,CAAC,IAAI5C,KAAK,CAACH,UAAU,EACrC;AACI,IAAA,MAAMqD,EAAE,GAAGP,MAAM,CAAC3C,KAAK,EAAE4C,MAAM,CAAC;MAAEO,IAAI,GAAGC,SAAS,CAACpD,KAAK,EAAE4C,MAAM,GAAG,CAAC,CAAC;MAAES,UAAU,GAAGT,MAAM,GAAG,CAAC;IAC9F,IAAIM,EAAE,KAAK,MAAM,IAAIG,UAAU,GAAG,EAAE,IAAIrD,KAAK,CAACH,UAAU,EACxD;MACIgD,IAAI,CAACS,SAAS,GAAGC,SAAS,CAACvD,KAAK,EAAEqD,UAAU,CAAC;MAC7CR,IAAI,CAACE,QAAQ,GAAGQ,SAAS,CAACvD,KAAK,EAAEqD,UAAU,GAAG,CAAC,CAAC;MAChDR,IAAI,CAACC,UAAU,GAAGM,SAAS,CAACpD,KAAK,EAAEqD,UAAU,GAAG,CAAC,CAAC;MAClDR,IAAI,CAACG,aAAa,GAAGO,SAAS,CAACvD,KAAK,EAAEqD,UAAU,GAAG,EAAE,CAAC;AAC1D,IAAA;IACA,IAAIH,EAAE,KAAK,MAAM,EAAEL,IAAI,CAACI,SAAS,GAAGE,IAAI;IACxCP,MAAM,GAAGS,UAAU,GAAGF,IAAI,IAAIA,IAAI,GAAG,CAAC,CAAC;AAC3C,EAAA;AACA,EAAA,OAAON,IAAI;AACf;AAEA,SAASH,UAAUA,CAAC1C,KAAK,EACzB;EACI,MAAMwD,KAAK,GAAGC,kBAAkB,CAACzD,KAAK,EAAE0D,kBAAkB,CAAC1D,KAAK,CAAC,CAAC;AAClE,EAAA,MAAM2D,GAAG,GAAGC,aAAa,CAAC5D,KAAK,CAAC;AAChC,EAAA,MAAM6C,IAAI,GAAG;AACT1C,IAAAA,YAAY,EAAE,KAAK;AACnBS,IAAAA,WAAW,EAAE,KAAK;IAClBiD,MAAM,EAAE,CAAC,CAACF,GAAG;AACbG,IAAAA,UAAU,EAAEH,GAAG,EAAEI,OAAO,IAAI,CAAC;AAC7BC,IAAAA,WAAW,EAAEL,GAAG,EAAEM,QAAQ,IAAI,CAAC;AAC/BC,IAAAA,QAAQ,EAAEP,GAAG,EAAEQ,KAAK,IAAI,CAAC;AACzBC,IAAAA,OAAO,EAAET,GAAG,EAAER,IAAI,IAAI,CAAC;AACvBkB,IAAAA,gBAAgB,EAAEb,KAAK,EAAEZ,MAAM,IAAI,CAAC;AACpCmB,IAAAA,OAAO,EAAEP,KAAK,EAAEO,OAAO,IAAI,EAAE;AAC7BO,IAAAA,KAAK,EAAEd,KAAK,EAAEc,KAAK,IAAI,EAAE;AACzBC,IAAAA,WAAW,EAAEf,KAAK,EAAEe,WAAW,IAAI,CAAC;AACpCzB,IAAAA,UAAU,EAAEU,KAAK,EAAEV,UAAU,IAAI,CAAC;AAClCC,IAAAA,QAAQ,EAAES,KAAK,EAAET,QAAQ,IAAI,CAAC;AAC9ByB,IAAAA,eAAe,EAAEhB,KAAK,EAAEgB,eAAe,IAAI,CAAC;AAC5CC,IAAAA,WAAW,EAAEjB,KAAK,EAAEiB,WAAW,IAAI,CAAC;AACpCC,IAAAA,UAAU,EAAE,CAAC;AACbC,IAAAA,eAAe,EAAE,CAAC;AAClBC,IAAAA,kBAAkB,EAAE,CAAC;AACrBC,IAAAA,iBAAiB,EAAE,CAAC;AACpBC,IAAAA,SAAS,EAAE,EAAE;AACbC,IAAAA,YAAY,EAAE,CAAC;AACfC,IAAAA,cAAc,EAAE;GACnB;AAED,EAAA,IAAIxB,KAAK,EACT;AACI,IAAA,MAAMyB,GAAG,GAAGC,aAAa,CAAClF,KAAK,EAAEwD,KAAK,CAAC;AACvC,IAAA,IAAIyB,GAAG,EACP;AACIpC,MAAAA,IAAI,CAAC+B,kBAAkB,GAAGK,GAAG,CAACP,UAAU;AACxC7B,MAAAA,IAAI,CAACgC,iBAAiB,GAAGI,GAAG,CAACE,SAAS;AACtCtC,MAAAA,IAAI,CAACiC,SAAS,GAAGG,GAAG,CAACvE,IAAI;AACzBmC,MAAAA,IAAI,CAACkC,YAAY,GAAGE,GAAG,CAACF,YAAY;AACpClC,MAAAA,IAAI,CAACmC,cAAc,GAAGC,GAAG,CAACD,cAAc;AAC5C,IAAA;AACA,IAAA,IAAIpC,MAAM,GAAGY,KAAK,CAACZ,MAAM;AACzB,IAAA,OAAOA,MAAM,GAAG,CAAC,IAAI5C,KAAK,CAACH,UAAU,IAAIgD,IAAI,CAAC6B,UAAU,GAAG,OAAO,EAClE;AACI,MAAA,MAAMU,IAAI,GAAG3B,kBAAkB,CAACzD,KAAK,EAAE4C,MAAM,CAAC;MAC9C,IAAI,CAACwC,IAAI,IAAIA,IAAI,CAACX,WAAW,IAAI,CAAC,EAAE;MACpC5B,IAAI,CAAC6B,UAAU,EAAE;MACjB9B,MAAM,IAAIwC,IAAI,CAACX,WAAW;AAC9B,IAAA;IACA,MAAMC,UAAU,GAAG7B,IAAI,CAAC+B,kBAAkB,IAAI/B,IAAI,CAAC6B,UAAU;IAC7D,MAAMW,cAAc,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEb,UAAU,GAAG7B,IAAI,CAAC2B,eAAe,GAAG3B,IAAI,CAACkC,YAAY,GAAGlC,IAAI,CAACmC,cAAc,CAAC;AAC/GnC,IAAAA,IAAI,CAAC8B,eAAe,GAAG9B,IAAI,CAACC,UAAU,GAAGuC,cAAc,GAAGxC,IAAI,CAACC,UAAU,GAAG,CAAC;AACjF,EAAA;AAEA,EAAA,OAAOD,IAAI;AACf;AAEA,SAASe,aAAaA,CAAC5D,KAAK,EAC5B;AACI,EAAA,IAAIA,KAAK,CAACH,UAAU,GAAG,EAAE,IAAI8C,MAAM,CAAC3C,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,OAAO,IAAI;EACvE,OAAO;AACH+D,IAAAA,OAAO,EAAE/D,KAAK,CAAC,CAAC,CAAC;AACjBiE,IAAAA,QAAQ,EAAEjE,KAAK,CAAC,CAAC,CAAC;AAClBmE,IAAAA,KAAK,EAAEnE,KAAK,CAAC,CAAC,CAAC;IACfmD,IAAI,EAAGnD,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAKA,KAAK,CAAC,CAAC,CAAC,IAAI,EAAG,GAAIA,KAAK,CAAC,CAAC,CAAC,IAAI,CAAE,GAAGA,KAAK,CAAC,CAAC;GACxE;AACL;AAEA,SAASkF,aAAaA,CAAClF,KAAK,EAAEwD,KAAK,EACnC;EACI,MAAMgC,cAAc,GAAGhC,KAAK,CAACO,OAAO,KAAK,OAAO,GAC1CP,KAAK,CAACT,QAAQ,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAC9BS,KAAK,CAACT,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;EACnC,MAAM0C,UAAU,GAAGjC,KAAK,CAACZ,MAAM,GAAG,CAAC,GAAG4C,cAAc;EACpD,KAAK,MAAM9E,IAAI,IAAI,CAAE,MAAM,EAAE,MAAM,CAAE,EACrC;IACI,IAAIiC,MAAM,CAAC3C,KAAK,EAAEyF,UAAU,EAAE,CAAC,CAAC,KAAK/E,IAAI,EAAE;IAC3C,MAAMyD,KAAK,GAAGuB,SAAS,CAAC1F,KAAK,EAAEyF,UAAU,GAAG,CAAC,CAAC;AAC9C,IAAA,MAAMf,UAAU,GAAG,CAACP,KAAK,GAAG,CAAC,MAAM,CAAC,GAAGuB,SAAS,CAAC1F,KAAK,EAAEyF,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC;AAC3E,IAAA,MAAMN,SAAS,GAAG,CAAChB,KAAK,GAAG,CAAC,MAAM,CAAC,GAAGuB,SAAS,CAAC1F,KAAK,EAAEyF,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC;IAC3E,MAAME,OAAO,GAAGC,eAAe,CAAC5F,KAAK,EAAEyF,UAAU,GAAG,CAAC,IAAI,CAACtB,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAACA,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAACA,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAClJ,OAAO;MAAEzD,IAAI;MAAEgE,UAAU;MAAES,SAAS;MAAE,GAAGQ;KAAS;AACtD,EAAA;AAEA,EAAA,MAAME,UAAU,GAAGrC,KAAK,CAACZ,MAAM,GAAG,EAAE;EACpC,IAAID,MAAM,CAAC3C,KAAK,EAAE6F,UAAU,EAAE,CAAC,CAAC,KAAK,MAAM,EAC3C;IACI,OAAO;AACHnF,MAAAA,IAAI,EAAE,MAAM;MACZgE,UAAU,EAAEgB,SAAS,CAAC1F,KAAK,EAAE6F,UAAU,GAAG,EAAE,CAAC;MAC7CV,SAAS,EAAEO,SAAS,CAAC1F,KAAK,EAAE6F,UAAU,GAAG,EAAE,CAAC;AAC5Cd,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,cAAc,EAAE;KACnB;AACL,EAAA;AAEA,EAAA,OAAO,IAAI;AACf;AAEA,SAASY,eAAeA,CAAC5F,KAAK,EAAE8F,WAAW,EAC3C;AACI,EAAA,MAAMC,GAAG,GAAGT,IAAI,CAACU,GAAG,CAAChG,KAAK,CAACH,UAAU,GAAG,CAAC,EAAEiG,WAAW,GAAG,GAAG,CAAC;EAC7D,KAAK,IAAIlD,MAAM,GAAGkD,WAAW,EAAElD,MAAM,GAAGmD,GAAG,EAAEnD,MAAM,EAAE,EACrD;IACI,IAAID,MAAM,CAAC3C,KAAK,EAAE4C,MAAM,EAAE,CAAC,CAAC,KAAK,MAAM,EAAE;IACzC,MAAMb,KAAK,GAAI/B,KAAK,CAAC4C,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,GAAK5C,KAAK,CAAC4C,MAAM,GAAG,IAAI,CAAC,IAAI,CAAE,GAAG5C,KAAK,CAAC4C,MAAM,GAAG,IAAI,CAAC;IAC/F,OAAO;AACHmC,MAAAA,YAAY,EAAGhD,KAAK,KAAK,EAAE,GAAI,KAAK;MACpCiD,cAAc,EAAEjD,KAAK,GAAG;KAC3B;AACL,EAAA;EACA,OAAO;AAAEgD,IAAAA,YAAY,EAAE,CAAC;AAAEC,IAAAA,cAAc,EAAE;GAAG;AACjD;AAEA,SAAStB,kBAAkBA,CAAC1D,KAAK,EACjC;EACI,IAAI4C,MAAM,GAAG,CAAC;AACd,EAAA,IAAID,MAAM,CAAC3C,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAIA,KAAK,CAACH,UAAU,IAAI,EAAE,EAC3D;IACI,MAAMsD,IAAI,GAAInD,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAKA,KAAK,CAAC,CAAC,CAAC,IAAI,EAAG,GAAIA,KAAK,CAAC,CAAC,CAAC,IAAI,CAAE,GAAGA,KAAK,CAAC,CAAC,CAAC;AAC7E4C,IAAAA,MAAM,GAAG,EAAE,GAAGO,IAAI,IAAInD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,EAAA;EACA,OAAO4C,MAAM,GAAG,CAAC,IAAI5C,KAAK,CAACH,UAAU,EAAE+C,MAAM,EAAE,EAC/C;IACI,IAAIa,kBAAkB,CAACzD,KAAK,EAAE4C,MAAM,CAAC,EAAE,OAAOA,MAAM;AACxD,EAAA;AACA,EAAA,OAAO,EAAE;AACb;AAEA,SAASa,kBAAkBA,CAACzD,KAAK,EAAE4C,MAAM,EACzC;AACI,EAAA,IAAIA,MAAM,GAAG,CAAC,IAAIA,MAAM,GAAG,CAAC,GAAG5C,KAAK,CAACH,UAAU,EAAE,OAAO,IAAI;AAC5D,EAAA,MAAMoG,MAAM,GAAG,CAAEjG,KAAK,CAAC4C,MAAM,CAAC,IAAI,EAAE,GAAK5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GAAG5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;EACvH,IAAK,CAACqD,MAAM,GAAG,UAAU,MAAM,CAAC,KAAM,UAAU,EAAE,OAAO,IAAI;AAE7D,EAAA,MAAMC,WAAW,GAAID,MAAM,KAAK,EAAE,GAAI,CAAC;AACvC,EAAA,MAAME,SAAS,GAAIF,MAAM,KAAK,EAAE,GAAI,CAAC;AACrC,EAAA,MAAMG,YAAY,GAAIH,MAAM,KAAK,EAAE,GAAI,GAAG;AAC1C,EAAA,MAAMI,eAAe,GAAIJ,MAAM,KAAK,EAAE,GAAI,CAAC;AAC3C,EAAA,MAAMK,OAAO,GAAIL,MAAM,KAAK,CAAC,GAAI,CAAC;AAClC,EAAA,MAAMM,WAAW,GAAIN,MAAM,KAAK,CAAC,GAAI,CAAC;AACtC,EAAA,IAAIC,WAAW,KAAK,CAAC,IAAIC,SAAS,KAAK,CAAC,IAAIC,YAAY,KAAK,CAAC,IAAIA,YAAY,KAAK,EAAE,IAAIC,eAAe,KAAK,CAAC,EAC9G;AACI,IAAA,OAAO,IAAI;AACf,EAAA;AAEA,EAAA,MAAMtC,OAAO,GAAGmC,WAAW,KAAK,CAAC,GAAG,OAAO,GAAGA,WAAW,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS;AACrF,EAAA,MAAMM,YAAY,GAAGzC,OAAO,KAAK,OAAO,GAClC,CAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE,GACpE,CAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE;AACtE,EAAA,MAAM0C,eAAe,GAAG1C,OAAO,KAAK,OAAO,GACrC,CAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAE,GACvBA,OAAO,KAAK,OAAO,GAAG,CAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAE,GAAG,CAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAE;AAC5E,EAAA,MAAMQ,WAAW,GAAGiC,YAAY,CAACJ,YAAY,CAAC;AAC9C,EAAA,MAAMtD,UAAU,GAAG2D,eAAe,CAACJ,eAAe,CAAC;EACnD,MAAM7B,eAAe,GAAGT,OAAO,KAAK,OAAO,GAAG,IAAI,GAAG,GAAG;EACxD,MAAMU,WAAW,GAAGa,IAAI,CAACoB,KAAK,CAAC,CAAC3C,OAAO,KAAK,OAAO,GAAG,MAAM,GAAG,KAAK,IAAIQ,WAAW,GAAGzB,UAAU,CAAC,GAAGwD,OAAO;EAC3G,IAAI1D,MAAM,GAAG6B,WAAW,GAAGzE,KAAK,CAACH,UAAU,EAAE,OAAO,IAAI;EAExD,OAAO;IACH+C,MAAM;IACNmB,OAAO;AACPO,IAAAA,KAAK,EAAE,QAAQ;IACfC,WAAW;IACXzB,UAAU;AACVC,IAAAA,QAAQ,EAAEwD,WAAW,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC/B,eAAe;AACfC,IAAAA;GACH;AACL;AAEA,SAAS9B,MAAMA,CAAC3C,KAAK,EAAE4C,MAAM,EAAE+D,MAAM,GAAG,CAAC,EACzC;EACI,IAAI5E,KAAK,GAAG,EAAE;EACd,KAAK,IAAI6E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,EAAE7E,KAAK,IAAIjD,MAAM,CAAC+H,YAAY,CAAC7G,KAAK,CAAC4C,MAAM,GAAGgE,CAAC,CAAC,IAAI,CAAC,CAAC;AACrF,EAAA,OAAO7E,KAAK;AAChB;AAEA,SAASwB,SAASA,CAACvD,KAAK,EAAE4C,MAAM,EAChC;AACI,EAAA,OAAO5C,KAAK,CAAC4C,MAAM,CAAC,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE;AACnD;AAEA,SAASQ,SAASA,CAACpD,KAAK,EAAE4C,MAAM,EAChC;AACI,EAAA,OAAO,CAAC5C,KAAK,CAAC4C,MAAM,CAAC,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,GAAG,SAAU,MAAM,CAAC;AACzH;AAEA,SAAS8C,SAASA,CAAC1F,KAAK,EAAE4C,MAAM,EAChC;AACI,EAAA,OAAS5C,KAAK,CAAC4C,MAAM,CAAC,GAAG,SAAS,IAAM5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,GAAK5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GAAG5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,CAAC,KAAM,CAAC;AAC3H;;;;"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/mp3/core/helpers.js"],"sourcesContent":["export const OUTPUT_AUDIO = \"audio\";\nexport const OUTPUT_PCM = \"pcm\";\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 wav: \"wavJson\",\n mp3: \"mp3Json\"\n});\n\n/**\n * Normalizes reader options against their supported defaults for the MP3 format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsAudioFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = normalizeInputType(values.inputType);\n values.emit = normalizeEmit(values.emit, values.inputType, readerName);\n return values;\n}\n\n/** Normalizes the requested input representation for the MP3 format reader. */\nexport function normalizeInputType(inputType)\n{\n return inputType ? String(inputType).replace(/^\\./u, \"\").toLowerCase() : \"\";\n}\n\n/** Normalizes the requested output representation for the MP3 format reader. */\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_AUDIO, OUTPUT_PCM, 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\n/** Returns a byte view over the supplied binary input for the MP3 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(\"Audio input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\n/** Inspects input using normalized format options for the MP3 format reader. */\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(`CjsAudioFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return {\n payloadType: \"audio\",\n mediaTypes: [ \"audio\" ],\n byteLength: bytes.byteLength,\n sourceFormat: expectedType || values.inputType || metadata.sourceFormat,\n ...metadata\n };\n}\n\n/**\n * Reports whether input is supported under normalized format options for the MP3\n * format reader.\n */\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n try\n {\n const metadata = inspectWithValues(input, values, expectedType);\n const mimeType = getAudioMimeType(metadata);\n const variants = [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: metadata.audioFormat || metadata.sourceFormat,\n mimeType,\n supported: true,\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false\n },\n { kind: \"pcm\", payloadType: \"pcm\", codec: \"pcm\", supported: false, reason: \"MP3 PCM decode/output is not implemented yet.\" }\n ];\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: variants.find((variant) => variant.supported)?.codec || \"\",\n reason: metadata.sourceFormat ? \"Container/header recognized.\" : \"Unrecognized audio format.\",\n metadata,\n variants,\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\n/** Reads input using normalized format options for the MP3 format reader. */\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 mimeType: getAudioMimeType(metadata),\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === DEBUG_OUTPUTS[metadata.sourceFormat]) return metadata;\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 getAudioMimeType(metadata)\n{\n if (metadata.sourceFormat === \"wav\") return \"audio/wav\";\n return \"audio/mpeg\";\n}\n\n/** Converts a parsed payload into a JSON-safe value for the MP3 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\n/**\n * Inspects the supplied bytes without decoding their payload for the MP3 format\n * reader.\n */\nexport function inspectBytes(bytes)\n{\n if (isWAV(bytes)) return inspectWAV(bytes);\n if (isMP3(bytes)) return inspectMP3(bytes);\n return { sourceFormat: \"\", audioFormat: \"\" };\n}\n\n/**\n * Reports whether the supplied bytes have a RIFF/WAVE header for the MP3 format\n * reader.\n */\nexport function isWAV(bytes)\n{\n return bytes.byteLength >= 12 && fourCc(bytes, 0) === \"RIFF\" && fourCc(bytes, 8) === \"WAVE\";\n}\n\n/**\n * Reports whether the supplied bytes have a supported MP3 header for the MP3\n * format reader.\n */\nexport function isMP3(bytes)\n{\n return bytes.byteLength >= 3 &&\n (fourCc(bytes, 0, 3) === \"ID3\" || (bytes[0] === 0xff && (bytes[1] & 0xe0) === 0xe0));\n}\n\nfunction inspectWAV(bytes)\n{\n let offset = 12;\n const info = { sourceFormat: \"wav\", audioFormat: \"wav\", sampleRate: 0, channels: 0, bitsPerSample: 0, dataBytes: 0 };\n while (offset + 8 <= bytes.byteLength)\n {\n const id = fourCc(bytes, offset), size = readU32LE(bytes, offset + 4), dataOffset = offset + 8;\n if (id === \"fmt \" && dataOffset + 16 <= bytes.byteLength)\n {\n info.formatTag = readU16LE(bytes, dataOffset);\n info.channels = readU16LE(bytes, dataOffset + 2);\n info.sampleRate = readU32LE(bytes, dataOffset + 4);\n info.bitsPerSample = readU16LE(bytes, dataOffset + 14);\n }\n if (id === \"data\") info.dataBytes = size;\n offset = dataOffset + size + (size & 1);\n }\n return info;\n}\n\nfunction inspectMP3(bytes)\n{\n const frame = readMp3FrameHeader(bytes, findMp3FrameOffset(bytes));\n const id3 = readId3Header(bytes);\n const info = {\n sourceFormat: \"mp3\",\n audioFormat: \"mp3\",\n hasId3: !!id3,\n id3Version: id3?.version || 0,\n id3Revision: id3?.revision || 0,\n id3Flags: id3?.flags || 0,\n id3Size: id3?.size || 0,\n firstFrameOffset: frame?.offset || 0,\n version: frame?.version || \"\",\n layer: frame?.layer || \"\",\n bitrateKbps: frame?.bitrateKbps || 0,\n sampleRate: frame?.sampleRate || 0,\n channels: frame?.channels || 0,\n samplesPerFrame: frame?.samplesPerFrame || 0,\n frameLength: frame?.frameLength || 0,\n frameCount: 0,\n durationSeconds: 0,\n declaredFrameCount: 0,\n declaredByteCount: 0,\n vbrHeader: \"\",\n encoderDelay: 0,\n encoderPadding: 0\n };\n\n if (frame)\n {\n const vbr = readVbrHeader(bytes, frame);\n if (vbr)\n {\n info.declaredFrameCount = vbr.frameCount;\n info.declaredByteCount = vbr.byteCount;\n info.vbrHeader = vbr.kind;\n info.encoderDelay = vbr.encoderDelay;\n info.encoderPadding = vbr.encoderPadding;\n }\n let offset = frame.offset;\n while (offset + 4 <= bytes.byteLength && info.frameCount < 1000000)\n {\n const next = readMp3FrameHeader(bytes, offset);\n if (!next || next.frameLength <= 0) break;\n info.frameCount++;\n offset += next.frameLength;\n }\n const frameCount = info.declaredFrameCount || info.frameCount;\n const trimmedSamples = Math.max(0, frameCount * info.samplesPerFrame - info.encoderDelay - info.encoderPadding);\n info.durationSeconds = info.sampleRate ? trimmedSamples / info.sampleRate : 0;\n }\n\n return info;\n}\n\nfunction readId3Header(bytes)\n{\n if (bytes.byteLength < 10 || fourCc(bytes, 0, 3) !== \"ID3\") return null;\n return {\n version: bytes[3],\n revision: bytes[4],\n flags: bytes[5],\n size: (bytes[6] << 21) | (bytes[7] << 14) | (bytes[8] << 7) | bytes[9]\n };\n}\n\nfunction readVbrHeader(bytes, frame)\n{\n const sideInfoLength = frame.version === \"mpeg1\"\n ? frame.channels === 1 ? 17 : 32\n : frame.channels === 1 ? 9 : 17;\n const xingOffset = frame.offset + 4 + sideInfoLength;\n for (const kind of [ \"Xing\", \"Info\" ])\n {\n if (fourCc(bytes, xingOffset, 4) !== kind) continue;\n const flags = readU32BE(bytes, xingOffset + 4);\n const frameCount = (flags & 1) !== 0 ? readU32BE(bytes, xingOffset + 8) : 0;\n const byteCount = (flags & 2) !== 0 ? readU32BE(bytes, xingOffset + 12) : 0;\n const gapless = readLameGapless(bytes, xingOffset + 8 + ((flags & 1) !== 0 ? 4 : 0) + ((flags & 2) !== 0 ? 4 : 0) + ((flags & 4) !== 0 ? 100 : 0));\n return { kind, frameCount, byteCount, ...gapless };\n }\n\n const vbriOffset = frame.offset + 36;\n if (fourCc(bytes, vbriOffset, 4) === \"VBRI\")\n {\n return {\n kind: \"VBRI\",\n frameCount: readU32BE(bytes, vbriOffset + 14),\n byteCount: readU32BE(bytes, vbriOffset + 10),\n encoderDelay: 0,\n encoderPadding: 0\n };\n }\n\n return null;\n}\n\nfunction readLameGapless(bytes, searchStart)\n{\n const end = Math.min(bytes.byteLength - 3, searchStart + 160);\n for (let offset = searchStart; offset < end; offset++)\n {\n if (fourCc(bytes, offset, 4) !== \"LAME\") continue;\n const value = (bytes[offset + 0x15] << 16) | (bytes[offset + 0x16] << 8) | bytes[offset + 0x17];\n return {\n encoderDelay: (value >>> 12) & 0xfff,\n encoderPadding: value & 0xfff\n };\n }\n return { encoderDelay: 0, encoderPadding: 0 };\n}\n\nfunction findMp3FrameOffset(bytes)\n{\n let offset = 0;\n if (fourCc(bytes, 0, 3) === \"ID3\" && bytes.byteLength >= 10)\n {\n const size = (bytes[6] << 21) | (bytes[7] << 14) | (bytes[8] << 7) | bytes[9];\n offset = 10 + size + (bytes[5] & 0x10 ? 10 : 0);\n }\n for (; offset + 4 <= bytes.byteLength; offset++)\n {\n if (readMp3FrameHeader(bytes, offset)) return offset;\n }\n return -1;\n}\n\nfunction readMp3FrameHeader(bytes, offset)\n{\n if (offset < 0 || offset + 4 > bytes.byteLength) return null;\n const header = ((bytes[offset] << 24) | (bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3]) >>> 0;\n if (((header & 0xffe00000) >>> 0) !== 0xffe00000) return null;\n\n const versionBits = (header >>> 19) & 3;\n const layerBits = (header >>> 17) & 3;\n const bitrateIndex = (header >>> 12) & 0xf;\n const sampleRateIndex = (header >>> 10) & 3;\n const padding = (header >>> 9) & 1;\n const channelMode = (header >>> 6) & 3;\n if (versionBits === 1 || layerBits !== 1 || bitrateIndex === 0 || bitrateIndex === 15 || sampleRateIndex === 3)\n {\n return null;\n }\n\n const version = versionBits === 3 ? \"mpeg1\" : versionBits === 2 ? \"mpeg2\" : \"mpeg2.5\";\n const bitrateTable = version === \"mpeg1\"\n ? [ 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 ]\n : [ 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 ];\n const sampleRateTable = version === \"mpeg1\"\n ? [ 44100, 48000, 32000 ]\n : version === \"mpeg2\" ? [ 22050, 24000, 16000 ] : [ 11025, 12000, 8000 ];\n const bitrateKbps = bitrateTable[bitrateIndex];\n const sampleRate = sampleRateTable[sampleRateIndex];\n const samplesPerFrame = version === \"mpeg1\" ? 1152 : 576;\n const frameLength = Math.floor((version === \"mpeg1\" ? 144000 : 72000) * bitrateKbps / sampleRate) + padding;\n if (offset + frameLength > bytes.byteLength) return null;\n\n return {\n offset,\n version,\n layer: \"layer3\",\n bitrateKbps,\n sampleRate,\n channels: channelMode === 3 ? 1 : 2,\n samplesPerFrame,\n frameLength\n };\n}\n\nfunction fourCc(bytes, offset, length = 4)\n{\n let value = \"\";\n for (let i = 0; i < length; i++) value += String.fromCharCode(bytes[offset + i] || 0);\n return value;\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n\nfunction readU32LE(bytes, offset)\n{\n return (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] * 0x1000000)) >>> 0;\n}\n\nfunction readU32BE(bytes, offset)\n{\n return ((bytes[offset] * 0x1000000) + ((bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3])) >>> 0;\n}\n"],"names":["OUTPUT_AUDIO","OUTPUT_PCM","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","DEBUG_OUTPUTS","wav","mp3","normalizeValues","base","options","readerName","values","normalizeInputType","normalizeEmit","String","replace","toLowerCase","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","inspectWithValues","expectedType","bytes","metadata","inspectBytes","sourceFormat","payloadType","mediaTypes","isSupportedWithValues","mimeType","getAudioMimeType","variants","kind","codec","audioFormat","supported","containerOnly","isDecoded","pcmDecodeSupported","reason","format","confidence","preferred","find","variant","warnings","errors","error","message","readWithValues","Error","code","toJsonValue","value","Array","isArray","map","output","key","entry","entries","isWAV","inspectWAV","isMP3","inspectMP3","fourCc","offset","info","sampleRate","channels","bitsPerSample","dataBytes","id","size","readU32LE","dataOffset","formatTag","readU16LE","frame","readMp3FrameHeader","findMp3FrameOffset","id3","readId3Header","hasId3","id3Version","version","id3Revision","revision","id3Flags","flags","id3Size","firstFrameOffset","layer","bitrateKbps","samplesPerFrame","frameLength","frameCount","durationSeconds","declaredFrameCount","declaredByteCount","vbrHeader","encoderDelay","encoderPadding","vbr","readVbrHeader","byteCount","next","trimmedSamples","Math","max","sideInfoLength","xingOffset","readU32BE","gapless","readLameGapless","vbriOffset","searchStart","end","min","header","versionBits","layerBits","bitrateIndex","sampleRateIndex","padding","channelMode","bitrateTable","sampleRateTable","floor","length","i","fromCharCode"],"mappings":"AAAO,MAAMA,YAAY,GAAG;AACrB,MAAMC,UAAU,GAAG;AACnB,MAAMC,UAAU,GAAG;AACnB,MAAMC,WAAW,GAAG;MAEdC,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;AACxCC,EAAAA,IAAI,EAAEL,UAAU;AAChBM,EAAAA,SAAS,EAAE,EAAE;AACbC,EAAAA,MAAM,EAAE;AACZ,CAAC;AAED,MAAMC,aAAa,GAAGL,MAAM,CAACC,MAAM,CAAC;AAChCK,EAAAA,GAAG,EAAE,SAAS;AACdC,EAAAA,GAAG,EAAE;AACT,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAACC,IAAI,GAAGV,cAAc,EAAEW,OAAO,GAAG,EAAE,EAAEC,UAAU,GAAG,gBAAgB,EAClG;AACI,EAAA,MAAMC,MAAM,GAAG;AAAE,IAAA,GAAGb,cAAc;AAAE,IAAA,IAAIU,IAAI,IAAI,EAAE,CAAC;IAAE,IAAIC,OAAO,IAAI,EAAE;GAAG;EACzEE,MAAM,CAACT,SAAS,GAAGU,kBAAkB,CAACD,MAAM,CAACT,SAAS,CAAC;AACvDS,EAAAA,MAAM,CAACV,IAAI,GAAGY,aAAa,CAACF,MAAM,CAACV,IAAI,EAAEU,MAAM,CAACT,SAAS,EAAEQ,UAAU,CAAC;AACtE,EAAA,OAAOC,MAAM;AACjB;;AAEA;AACO,SAASC,kBAAkBA,CAACV,SAAS,EAC5C;AACI,EAAA,OAAOA,SAAS,GAAGY,MAAM,CAACZ,SAAS,CAAC,CAACa,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAACC,WAAW,EAAE,GAAG,EAAE;AAC/E;;AAEA;AACO,SAASH,aAAaA,CAACZ,IAAI,EAAEC,SAAS,EAAEQ,UAAU,EACzD;EACI,IAAIT,IAAI,KAAKgB,SAAS,IAAIhB,IAAI,KAAK,IAAI,EAAE,OAAOL,UAAU;AAC1D,EAAA,IAAIK,IAAI,KAAKJ,WAAW,IAAIK,SAAS,EAAE,OAAOE,aAAa,CAACF,SAAS,CAAC,IAAIL,WAAW;AACrF,EAAA,IAAI,CAAEH,YAAY,EAAEC,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAE,CAACqB,QAAQ,CAACjB,IAAI,CAAC,EAAE,OAAOA,IAAI;AACrF,EAAA,IAAIF,MAAM,CAACY,MAAM,CAACP,aAAa,CAAC,CAACc,QAAQ,CAACjB,IAAI,CAAC,EAAE,OAAOA,IAAI;AAC5D,EAAA,MAAM,IAAIkB,SAAS,CAAC,CAAA,EAAGT,UAAU,CAAA,qBAAA,EAAwBU,IAAI,CAACC,SAAS,CAACpB,IAAI,CAAC,EAAE,CAAC;AACpF;;AAEA;AACO,SAASqB,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,IAAIV,SAAS,CAAC,0DAA0D,CAAC;AACnF;;AAEA;AACO,SAASW,iBAAiBA,CAACP,KAAK,EAAEZ,MAAM,GAAGb,cAAc,EAAEiC,YAAY,GAAG,EAAE,EACnF;AACI,EAAA,MAAMC,KAAK,GAAGV,OAAO,CAACC,KAAK,CAAC;AAC5B,EAAA,MAAMU,QAAQ,GAAGC,YAAY,CAACF,KAAK,CAAC;EACpC,IAAID,YAAY,IAAIE,QAAQ,CAACE,YAAY,IAAIF,QAAQ,CAACE,YAAY,KAAKJ,YAAY,EACnF;IACI,MAAM,IAAIZ,SAAS,CAAC,CAAA,yBAAA,EAA4BY,YAAY,SAASE,QAAQ,CAACE,YAAY,CAAA,CAAE,CAAC;AACjG,EAAA;EACA,OAAO;AACHC,IAAAA,WAAW,EAAE,OAAO;IACpBC,UAAU,EAAE,CAAE,OAAO,CAAE;IACvBR,UAAU,EAAEG,KAAK,CAACH,UAAU;IAC5BM,YAAY,EAAEJ,YAAY,IAAIpB,MAAM,CAACT,SAAS,IAAI+B,QAAQ,CAACE,YAAY;IACvE,GAAGF;GACN;AACL;;AAEA;AACA;AACA;AACA;AACO,SAASK,qBAAqBA,CAACf,KAAK,EAAEZ,MAAM,GAAGb,cAAc,EAAEiC,YAAY,GAAG,EAAE,EACvF;EACI,IACA;IACI,MAAME,QAAQ,GAAGH,iBAAiB,CAACP,KAAK,EAAEZ,MAAM,EAAEoB,YAAY,CAAC;AAC/D,IAAA,MAAMQ,QAAQ,GAAGC,gBAAgB,CAACP,QAAQ,CAAC;IAC3C,MAAMQ,QAAQ,GAAG,CACb;AACIC,MAAAA,IAAI,EAAE,KAAK;AACXN,MAAAA,WAAW,EAAE,KAAK;AAClBO,MAAAA,KAAK,EAAEV,QAAQ,CAACW,WAAW,IAAIX,QAAQ,CAACE,YAAY;MACpDI,QAAQ;AACRM,MAAAA,SAAS,EAAE,IAAI;AACfC,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,kBAAkB,EAAE;AACxB,KAAC,EACD;AAAEN,MAAAA,IAAI,EAAE,KAAK;AAAEN,MAAAA,WAAW,EAAE,KAAK;AAAEO,MAAAA,KAAK,EAAE,KAAK;AAAEE,MAAAA,SAAS,EAAE,KAAK;AAAEI,MAAAA,MAAM,EAAE;AAAgD,KAAC,CAC/H;IACD,OAAO;MACHC,MAAM,EAAEjB,QAAQ,CAACE,YAAY;AAC7BhC,MAAAA,MAAM,EAAEQ,MAAM,CAACR,MAAM,IAAI,QAAQ;AACjC0C,MAAAA,SAAS,EAAEZ,QAAQ,CAACE,YAAY,GAAG,SAAS,GAAG,MAAM;AACrDgB,MAAAA,UAAU,EAAElB,QAAQ,CAACE,YAAY,GAAG,CAAC,GAAG,CAAC;AACzCiB,MAAAA,SAAS,EAAEX,QAAQ,CAACY,IAAI,CAAEC,OAAO,IAAKA,OAAO,CAACT,SAAS,CAAC,EAAEF,KAAK,IAAI,EAAE;AACrEM,MAAAA,MAAM,EAAEhB,QAAQ,CAACE,YAAY,GAAG,8BAA8B,GAAG,4BAA4B;MAC7FF,QAAQ;MACRQ,QAAQ;AACRc,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,MAAM,EAAE;KACX;EACL,CAAC,CACD,OAAOC,KAAK,EACZ;IACI,OAAO;AACHP,MAAAA,MAAM,EAAEnB,YAAY,IAAIpB,MAAM,CAACT,SAAS,IAAI,EAAE;AAC9CC,MAAAA,MAAM,EAAEQ,MAAM,CAACR,MAAM,IAAI,QAAQ;AACjC0C,MAAAA,SAAS,EAAE,MAAM;AACjBM,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,SAAS,EAAE,EAAE;MACbH,MAAM,EAAEQ,KAAK,CAACC,OAAO;AACrBzB,MAAAA,QAAQ,EAAE,IAAI;AACdQ,MAAAA,QAAQ,EAAE,EAAE;AACZc,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,MAAM,EAAE,CAAEC,KAAK,CAACC,OAAO;KAC1B;AACL,EAAA;AACJ;;AAEA;AACO,SAASC,cAAcA,CAACpC,KAAK,EAAEZ,MAAM,GAAGb,cAAc,EAAEiC,YAAY,GAAG,EAAE,EAChF;AACI,EAAA,MAAMC,KAAK,GAAGV,OAAO,CAACC,KAAK,CAAC;EAC5B,MAAMU,QAAQ,GAAGH,iBAAiB,CAACE,KAAK,EAAErB,MAAM,EAAEoB,YAAY,CAAC;AAC/D,EAAA,IAAIpB,MAAM,CAACV,IAAI,KAAKL,UAAU,EAC9B;IACI,OAAO;AACHwC,MAAAA,WAAW,EAAE,KAAK;MAClBD,YAAY,EAAEF,QAAQ,CAACE,YAAY;AACnCI,MAAAA,QAAQ,EAAEC,gBAAgB,CAACP,QAAQ,CAAC;AACpCa,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,kBAAkB,EAAE,KAAK;MACzBf,QAAQ;AACRD,MAAAA;KACH;AACL,EAAA;AACA,EAAA,IAAIrB,MAAM,CAACV,IAAI,KAAKJ,WAAW,IAAIc,MAAM,CAACV,IAAI,KAAKG,aAAa,CAAC6B,QAAQ,CAACE,YAAY,CAAC,EAAE,OAAOF,QAAQ;AAExG,EAAA,MAAMwB,KAAK,GAAG,IAAIG,KAAK,CAAC,CAAA,EAAG3B,QAAQ,CAACE,YAAY,CAAA,QAAA,EAAWxB,MAAM,CAACV,IAAI,0BAA0B,CAAC;EACjGwD,KAAK,CAACI,IAAI,GAAG,mCAAmC;AAChDJ,EAAAA,KAAK,CAACtB,YAAY,GAAGF,QAAQ,CAACE,YAAY;AAC1CsB,EAAAA,KAAK,CAACxD,IAAI,GAAGU,MAAM,CAACV,IAAI;AACxB,EAAA,MAAMwD,KAAK;AACf;AAEA,SAASjB,gBAAgBA,CAACP,QAAQ,EAClC;AACI,EAAA,IAAIA,QAAQ,CAACE,YAAY,KAAK,KAAK,EAAE,OAAO,WAAW;AACvD,EAAA,OAAO,YAAY;AACvB;;AAEA;AACO,SAAS2B,WAAWA,CAACC,KAAK,EACjC;AACI,EAAA,IAAIA,KAAK,YAAYvC,UAAU,EAAE,OAAO;IAAEK,UAAU,EAAEkC,KAAK,CAAClC;GAAY;AACxE,EAAA,IAAImC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE,OAAOA,KAAK,CAACG,GAAG,CAACJ,WAAW,CAAC;AACvD,EAAA,IAAIC,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EACtC;IACI,MAAMI,MAAM,GAAG,EAAE;IACjB,KAAK,MAAM,CAAEC,GAAG,EAAEC,KAAK,CAAE,IAAItE,MAAM,CAACuE,OAAO,CAACP,KAAK,CAAC,EAAEI,MAAM,CAACC,GAAG,CAAC,GAAGN,WAAW,CAACO,KAAK,CAAC;AACpF,IAAA,OAAOF,MAAM;AACjB,EAAA;AACA,EAAA,OAAOJ,KAAK;AAChB;;AAEA;AACA;AACA;AACA;AACO,SAAS7B,YAAYA,CAACF,KAAK,EAClC;EACI,IAAIuC,KAAK,CAACvC,KAAK,CAAC,EAAE,OAAOwC,UAAU,CAACxC,KAAK,CAAC;EAC1C,IAAIyC,KAAK,CAACzC,KAAK,CAAC,EAAE,OAAO0C,UAAU,CAAC1C,KAAK,CAAC;EAC1C,OAAO;AAAEG,IAAAA,YAAY,EAAE,EAAE;AAAES,IAAAA,WAAW,EAAE;GAAI;AAChD;;AAEA;AACA;AACA;AACA;AACO,SAAS2B,KAAKA,CAACvC,KAAK,EAC3B;EACI,OAAOA,KAAK,CAACH,UAAU,IAAI,EAAE,IAAI8C,MAAM,CAAC3C,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI2C,MAAM,CAAC3C,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM;AAC/F;;AAEA;AACA;AACA;AACA;AACO,SAASyC,KAAKA,CAACzC,KAAK,EAC3B;AACI,EAAA,OAAOA,KAAK,CAACH,UAAU,IAAI,CAAC,KACvB8C,MAAM,CAAC3C,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAACA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAK,CAAC;AAC5F;AAEA,SAASwC,UAAUA,CAACxC,KAAK,EACzB;EACI,IAAI4C,MAAM,GAAG,EAAE;AACf,EAAA,MAAMC,IAAI,GAAG;AAAE1C,IAAAA,YAAY,EAAE,KAAK;AAAES,IAAAA,WAAW,EAAE,KAAK;AAAEkC,IAAAA,UAAU,EAAE,CAAC;AAAEC,IAAAA,QAAQ,EAAE,CAAC;AAAEC,IAAAA,aAAa,EAAE,CAAC;AAAEC,IAAAA,SAAS,EAAE;GAAG;AACpH,EAAA,OAAOL,MAAM,GAAG,CAAC,IAAI5C,KAAK,CAACH,UAAU,EACrC;AACI,IAAA,MAAMqD,EAAE,GAAGP,MAAM,CAAC3C,KAAK,EAAE4C,MAAM,CAAC;MAAEO,IAAI,GAAGC,SAAS,CAACpD,KAAK,EAAE4C,MAAM,GAAG,CAAC,CAAC;MAAES,UAAU,GAAGT,MAAM,GAAG,CAAC;IAC9F,IAAIM,EAAE,KAAK,MAAM,IAAIG,UAAU,GAAG,EAAE,IAAIrD,KAAK,CAACH,UAAU,EACxD;MACIgD,IAAI,CAACS,SAAS,GAAGC,SAAS,CAACvD,KAAK,EAAEqD,UAAU,CAAC;MAC7CR,IAAI,CAACE,QAAQ,GAAGQ,SAAS,CAACvD,KAAK,EAAEqD,UAAU,GAAG,CAAC,CAAC;MAChDR,IAAI,CAACC,UAAU,GAAGM,SAAS,CAACpD,KAAK,EAAEqD,UAAU,GAAG,CAAC,CAAC;MAClDR,IAAI,CAACG,aAAa,GAAGO,SAAS,CAACvD,KAAK,EAAEqD,UAAU,GAAG,EAAE,CAAC;AAC1D,IAAA;IACA,IAAIH,EAAE,KAAK,MAAM,EAAEL,IAAI,CAACI,SAAS,GAAGE,IAAI;IACxCP,MAAM,GAAGS,UAAU,GAAGF,IAAI,IAAIA,IAAI,GAAG,CAAC,CAAC;AAC3C,EAAA;AACA,EAAA,OAAON,IAAI;AACf;AAEA,SAASH,UAAUA,CAAC1C,KAAK,EACzB;EACI,MAAMwD,KAAK,GAAGC,kBAAkB,CAACzD,KAAK,EAAE0D,kBAAkB,CAAC1D,KAAK,CAAC,CAAC;AAClE,EAAA,MAAM2D,GAAG,GAAGC,aAAa,CAAC5D,KAAK,CAAC;AAChC,EAAA,MAAM6C,IAAI,GAAG;AACT1C,IAAAA,YAAY,EAAE,KAAK;AACnBS,IAAAA,WAAW,EAAE,KAAK;IAClBiD,MAAM,EAAE,CAAC,CAACF,GAAG;AACbG,IAAAA,UAAU,EAAEH,GAAG,EAAEI,OAAO,IAAI,CAAC;AAC7BC,IAAAA,WAAW,EAAEL,GAAG,EAAEM,QAAQ,IAAI,CAAC;AAC/BC,IAAAA,QAAQ,EAAEP,GAAG,EAAEQ,KAAK,IAAI,CAAC;AACzBC,IAAAA,OAAO,EAAET,GAAG,EAAER,IAAI,IAAI,CAAC;AACvBkB,IAAAA,gBAAgB,EAAEb,KAAK,EAAEZ,MAAM,IAAI,CAAC;AACpCmB,IAAAA,OAAO,EAAEP,KAAK,EAAEO,OAAO,IAAI,EAAE;AAC7BO,IAAAA,KAAK,EAAEd,KAAK,EAAEc,KAAK,IAAI,EAAE;AACzBC,IAAAA,WAAW,EAAEf,KAAK,EAAEe,WAAW,IAAI,CAAC;AACpCzB,IAAAA,UAAU,EAAEU,KAAK,EAAEV,UAAU,IAAI,CAAC;AAClCC,IAAAA,QAAQ,EAAES,KAAK,EAAET,QAAQ,IAAI,CAAC;AAC9ByB,IAAAA,eAAe,EAAEhB,KAAK,EAAEgB,eAAe,IAAI,CAAC;AAC5CC,IAAAA,WAAW,EAAEjB,KAAK,EAAEiB,WAAW,IAAI,CAAC;AACpCC,IAAAA,UAAU,EAAE,CAAC;AACbC,IAAAA,eAAe,EAAE,CAAC;AAClBC,IAAAA,kBAAkB,EAAE,CAAC;AACrBC,IAAAA,iBAAiB,EAAE,CAAC;AACpBC,IAAAA,SAAS,EAAE,EAAE;AACbC,IAAAA,YAAY,EAAE,CAAC;AACfC,IAAAA,cAAc,EAAE;GACnB;AAED,EAAA,IAAIxB,KAAK,EACT;AACI,IAAA,MAAMyB,GAAG,GAAGC,aAAa,CAAClF,KAAK,EAAEwD,KAAK,CAAC;AACvC,IAAA,IAAIyB,GAAG,EACP;AACIpC,MAAAA,IAAI,CAAC+B,kBAAkB,GAAGK,GAAG,CAACP,UAAU;AACxC7B,MAAAA,IAAI,CAACgC,iBAAiB,GAAGI,GAAG,CAACE,SAAS;AACtCtC,MAAAA,IAAI,CAACiC,SAAS,GAAGG,GAAG,CAACvE,IAAI;AACzBmC,MAAAA,IAAI,CAACkC,YAAY,GAAGE,GAAG,CAACF,YAAY;AACpClC,MAAAA,IAAI,CAACmC,cAAc,GAAGC,GAAG,CAACD,cAAc;AAC5C,IAAA;AACA,IAAA,IAAIpC,MAAM,GAAGY,KAAK,CAACZ,MAAM;AACzB,IAAA,OAAOA,MAAM,GAAG,CAAC,IAAI5C,KAAK,CAACH,UAAU,IAAIgD,IAAI,CAAC6B,UAAU,GAAG,OAAO,EAClE;AACI,MAAA,MAAMU,IAAI,GAAG3B,kBAAkB,CAACzD,KAAK,EAAE4C,MAAM,CAAC;MAC9C,IAAI,CAACwC,IAAI,IAAIA,IAAI,CAACX,WAAW,IAAI,CAAC,EAAE;MACpC5B,IAAI,CAAC6B,UAAU,EAAE;MACjB9B,MAAM,IAAIwC,IAAI,CAACX,WAAW;AAC9B,IAAA;IACA,MAAMC,UAAU,GAAG7B,IAAI,CAAC+B,kBAAkB,IAAI/B,IAAI,CAAC6B,UAAU;IAC7D,MAAMW,cAAc,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEb,UAAU,GAAG7B,IAAI,CAAC2B,eAAe,GAAG3B,IAAI,CAACkC,YAAY,GAAGlC,IAAI,CAACmC,cAAc,CAAC;AAC/GnC,IAAAA,IAAI,CAAC8B,eAAe,GAAG9B,IAAI,CAACC,UAAU,GAAGuC,cAAc,GAAGxC,IAAI,CAACC,UAAU,GAAG,CAAC;AACjF,EAAA;AAEA,EAAA,OAAOD,IAAI;AACf;AAEA,SAASe,aAAaA,CAAC5D,KAAK,EAC5B;AACI,EAAA,IAAIA,KAAK,CAACH,UAAU,GAAG,EAAE,IAAI8C,MAAM,CAAC3C,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,OAAO,IAAI;EACvE,OAAO;AACH+D,IAAAA,OAAO,EAAE/D,KAAK,CAAC,CAAC,CAAC;AACjBiE,IAAAA,QAAQ,EAAEjE,KAAK,CAAC,CAAC,CAAC;AAClBmE,IAAAA,KAAK,EAAEnE,KAAK,CAAC,CAAC,CAAC;IACfmD,IAAI,EAAGnD,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAKA,KAAK,CAAC,CAAC,CAAC,IAAI,EAAG,GAAIA,KAAK,CAAC,CAAC,CAAC,IAAI,CAAE,GAAGA,KAAK,CAAC,CAAC;GACxE;AACL;AAEA,SAASkF,aAAaA,CAAClF,KAAK,EAAEwD,KAAK,EACnC;EACI,MAAMgC,cAAc,GAAGhC,KAAK,CAACO,OAAO,KAAK,OAAO,GAC1CP,KAAK,CAACT,QAAQ,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAC9BS,KAAK,CAACT,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;EACnC,MAAM0C,UAAU,GAAGjC,KAAK,CAACZ,MAAM,GAAG,CAAC,GAAG4C,cAAc;EACpD,KAAK,MAAM9E,IAAI,IAAI,CAAE,MAAM,EAAE,MAAM,CAAE,EACrC;IACI,IAAIiC,MAAM,CAAC3C,KAAK,EAAEyF,UAAU,EAAE,CAAC,CAAC,KAAK/E,IAAI,EAAE;IAC3C,MAAMyD,KAAK,GAAGuB,SAAS,CAAC1F,KAAK,EAAEyF,UAAU,GAAG,CAAC,CAAC;AAC9C,IAAA,MAAMf,UAAU,GAAG,CAACP,KAAK,GAAG,CAAC,MAAM,CAAC,GAAGuB,SAAS,CAAC1F,KAAK,EAAEyF,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC;AAC3E,IAAA,MAAMN,SAAS,GAAG,CAAChB,KAAK,GAAG,CAAC,MAAM,CAAC,GAAGuB,SAAS,CAAC1F,KAAK,EAAEyF,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC;IAC3E,MAAME,OAAO,GAAGC,eAAe,CAAC5F,KAAK,EAAEyF,UAAU,GAAG,CAAC,IAAI,CAACtB,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAACA,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAACA,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAClJ,OAAO;MAAEzD,IAAI;MAAEgE,UAAU;MAAES,SAAS;MAAE,GAAGQ;KAAS;AACtD,EAAA;AAEA,EAAA,MAAME,UAAU,GAAGrC,KAAK,CAACZ,MAAM,GAAG,EAAE;EACpC,IAAID,MAAM,CAAC3C,KAAK,EAAE6F,UAAU,EAAE,CAAC,CAAC,KAAK,MAAM,EAC3C;IACI,OAAO;AACHnF,MAAAA,IAAI,EAAE,MAAM;MACZgE,UAAU,EAAEgB,SAAS,CAAC1F,KAAK,EAAE6F,UAAU,GAAG,EAAE,CAAC;MAC7CV,SAAS,EAAEO,SAAS,CAAC1F,KAAK,EAAE6F,UAAU,GAAG,EAAE,CAAC;AAC5Cd,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,cAAc,EAAE;KACnB;AACL,EAAA;AAEA,EAAA,OAAO,IAAI;AACf;AAEA,SAASY,eAAeA,CAAC5F,KAAK,EAAE8F,WAAW,EAC3C;AACI,EAAA,MAAMC,GAAG,GAAGT,IAAI,CAACU,GAAG,CAAChG,KAAK,CAACH,UAAU,GAAG,CAAC,EAAEiG,WAAW,GAAG,GAAG,CAAC;EAC7D,KAAK,IAAIlD,MAAM,GAAGkD,WAAW,EAAElD,MAAM,GAAGmD,GAAG,EAAEnD,MAAM,EAAE,EACrD;IACI,IAAID,MAAM,CAAC3C,KAAK,EAAE4C,MAAM,EAAE,CAAC,CAAC,KAAK,MAAM,EAAE;IACzC,MAAMb,KAAK,GAAI/B,KAAK,CAAC4C,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,GAAK5C,KAAK,CAAC4C,MAAM,GAAG,IAAI,CAAC,IAAI,CAAE,GAAG5C,KAAK,CAAC4C,MAAM,GAAG,IAAI,CAAC;IAC/F,OAAO;AACHmC,MAAAA,YAAY,EAAGhD,KAAK,KAAK,EAAE,GAAI,KAAK;MACpCiD,cAAc,EAAEjD,KAAK,GAAG;KAC3B;AACL,EAAA;EACA,OAAO;AAAEgD,IAAAA,YAAY,EAAE,CAAC;AAAEC,IAAAA,cAAc,EAAE;GAAG;AACjD;AAEA,SAAStB,kBAAkBA,CAAC1D,KAAK,EACjC;EACI,IAAI4C,MAAM,GAAG,CAAC;AACd,EAAA,IAAID,MAAM,CAAC3C,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAIA,KAAK,CAACH,UAAU,IAAI,EAAE,EAC3D;IACI,MAAMsD,IAAI,GAAInD,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAKA,KAAK,CAAC,CAAC,CAAC,IAAI,EAAG,GAAIA,KAAK,CAAC,CAAC,CAAC,IAAI,CAAE,GAAGA,KAAK,CAAC,CAAC,CAAC;AAC7E4C,IAAAA,MAAM,GAAG,EAAE,GAAGO,IAAI,IAAInD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,EAAA;EACA,OAAO4C,MAAM,GAAG,CAAC,IAAI5C,KAAK,CAACH,UAAU,EAAE+C,MAAM,EAAE,EAC/C;IACI,IAAIa,kBAAkB,CAACzD,KAAK,EAAE4C,MAAM,CAAC,EAAE,OAAOA,MAAM;AACxD,EAAA;AACA,EAAA,OAAO,EAAE;AACb;AAEA,SAASa,kBAAkBA,CAACzD,KAAK,EAAE4C,MAAM,EACzC;AACI,EAAA,IAAIA,MAAM,GAAG,CAAC,IAAIA,MAAM,GAAG,CAAC,GAAG5C,KAAK,CAACH,UAAU,EAAE,OAAO,IAAI;AAC5D,EAAA,MAAMoG,MAAM,GAAG,CAAEjG,KAAK,CAAC4C,MAAM,CAAC,IAAI,EAAE,GAAK5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GAAG5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;EACvH,IAAK,CAACqD,MAAM,GAAG,UAAU,MAAM,CAAC,KAAM,UAAU,EAAE,OAAO,IAAI;AAE7D,EAAA,MAAMC,WAAW,GAAID,MAAM,KAAK,EAAE,GAAI,CAAC;AACvC,EAAA,MAAME,SAAS,GAAIF,MAAM,KAAK,EAAE,GAAI,CAAC;AACrC,EAAA,MAAMG,YAAY,GAAIH,MAAM,KAAK,EAAE,GAAI,GAAG;AAC1C,EAAA,MAAMI,eAAe,GAAIJ,MAAM,KAAK,EAAE,GAAI,CAAC;AAC3C,EAAA,MAAMK,OAAO,GAAIL,MAAM,KAAK,CAAC,GAAI,CAAC;AAClC,EAAA,MAAMM,WAAW,GAAIN,MAAM,KAAK,CAAC,GAAI,CAAC;AACtC,EAAA,IAAIC,WAAW,KAAK,CAAC,IAAIC,SAAS,KAAK,CAAC,IAAIC,YAAY,KAAK,CAAC,IAAIA,YAAY,KAAK,EAAE,IAAIC,eAAe,KAAK,CAAC,EAC9G;AACI,IAAA,OAAO,IAAI;AACf,EAAA;AAEA,EAAA,MAAMtC,OAAO,GAAGmC,WAAW,KAAK,CAAC,GAAG,OAAO,GAAGA,WAAW,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS;AACrF,EAAA,MAAMM,YAAY,GAAGzC,OAAO,KAAK,OAAO,GAClC,CAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE,GACpE,CAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE;AACtE,EAAA,MAAM0C,eAAe,GAAG1C,OAAO,KAAK,OAAO,GACrC,CAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAE,GACvBA,OAAO,KAAK,OAAO,GAAG,CAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAE,GAAG,CAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAE;AAC5E,EAAA,MAAMQ,WAAW,GAAGiC,YAAY,CAACJ,YAAY,CAAC;AAC9C,EAAA,MAAMtD,UAAU,GAAG2D,eAAe,CAACJ,eAAe,CAAC;EACnD,MAAM7B,eAAe,GAAGT,OAAO,KAAK,OAAO,GAAG,IAAI,GAAG,GAAG;EACxD,MAAMU,WAAW,GAAGa,IAAI,CAACoB,KAAK,CAAC,CAAC3C,OAAO,KAAK,OAAO,GAAG,MAAM,GAAG,KAAK,IAAIQ,WAAW,GAAGzB,UAAU,CAAC,GAAGwD,OAAO;EAC3G,IAAI1D,MAAM,GAAG6B,WAAW,GAAGzE,KAAK,CAACH,UAAU,EAAE,OAAO,IAAI;EAExD,OAAO;IACH+C,MAAM;IACNmB,OAAO;AACPO,IAAAA,KAAK,EAAE,QAAQ;IACfC,WAAW;IACXzB,UAAU;AACVC,IAAAA,QAAQ,EAAEwD,WAAW,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC/B,eAAe;AACfC,IAAAA;GACH;AACL;AAEA,SAAS9B,MAAMA,CAAC3C,KAAK,EAAE4C,MAAM,EAAE+D,MAAM,GAAG,CAAC,EACzC;EACI,IAAI5E,KAAK,GAAG,EAAE;EACd,KAAK,IAAI6E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,EAAE7E,KAAK,IAAIjD,MAAM,CAAC+H,YAAY,CAAC7G,KAAK,CAAC4C,MAAM,GAAGgE,CAAC,CAAC,IAAI,CAAC,CAAC;AACrF,EAAA,OAAO7E,KAAK;AAChB;AAEA,SAASwB,SAASA,CAACvD,KAAK,EAAE4C,MAAM,EAChC;AACI,EAAA,OAAO5C,KAAK,CAAC4C,MAAM,CAAC,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE;AACnD;AAEA,SAASQ,SAASA,CAACpD,KAAK,EAAE4C,MAAM,EAChC;AACI,EAAA,OAAO,CAAC5C,KAAK,CAAC4C,MAAM,CAAC,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG,GAAI5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,GAAG,SAAU,MAAM,CAAC;AACzH;AAEA,SAAS8C,SAASA,CAAC1F,KAAK,EAAE4C,MAAM,EAChC;AACI,EAAA,OAAS5C,KAAK,CAAC4C,MAAM,CAAC,GAAG,SAAS,IAAM5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,GAAK5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GAAG5C,KAAK,CAAC4C,MAAM,GAAG,CAAC,CAAC,CAAC,KAAM,CAAC;AAC3H;;;;"}
|
|
@@ -11,6 +11,11 @@ const DEBUG_OUTPUTS = Object.freeze({
|
|
|
11
11
|
m4a: "mp4Json",
|
|
12
12
|
webm: "webmJson"
|
|
13
13
|
});
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Normalizes reader options against their supported defaults for the MP4 format
|
|
17
|
+
* reader.
|
|
18
|
+
*/
|
|
14
19
|
function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsVideoFormat") {
|
|
15
20
|
const values = {
|
|
16
21
|
...DEFAULT_VALUES,
|
|
@@ -21,6 +26,8 @@ function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsV
|
|
|
21
26
|
values.emit = normalizeEmit(values.emit, values.inputType, readerName);
|
|
22
27
|
return values;
|
|
23
28
|
}
|
|
29
|
+
|
|
30
|
+
/** Normalizes the requested output representation for the MP4 format reader. */
|
|
24
31
|
function normalizeEmit(emit, inputType, readerName) {
|
|
25
32
|
if (emit === undefined || emit === null) return OUTPUT_RAW;
|
|
26
33
|
if (emit === OUTPUT_JSON && inputType) return DEBUG_OUTPUTS[inputType] || OUTPUT_JSON;
|
|
@@ -28,12 +35,16 @@ function normalizeEmit(emit, inputType, readerName) {
|
|
|
28
35
|
if (Object.values(DEBUG_OUTPUTS).includes(emit)) return emit;
|
|
29
36
|
throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);
|
|
30
37
|
}
|
|
38
|
+
|
|
39
|
+
/** Returns a byte view over the supplied binary input for the MP4 format reader. */
|
|
31
40
|
function toBytes(input) {
|
|
32
41
|
if (input instanceof Uint8Array) return input;
|
|
33
42
|
if (input instanceof ArrayBuffer) return new Uint8Array(input);
|
|
34
43
|
if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
|
|
35
44
|
throw new TypeError("Video input must be Uint8Array, ArrayBuffer, or DataView");
|
|
36
45
|
}
|
|
46
|
+
|
|
47
|
+
/** Inspects input using normalized format options for the MP4 format reader. */
|
|
37
48
|
function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
38
49
|
const bytes = toBytes(input);
|
|
39
50
|
const metadata = inspectBytes(bytes);
|
|
@@ -48,6 +59,11 @@ function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
|
48
59
|
...metadata
|
|
49
60
|
};
|
|
50
61
|
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Reports whether input is supported under normalized format options for the MP4
|
|
65
|
+
* format reader.
|
|
66
|
+
*/
|
|
51
67
|
function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
52
68
|
try {
|
|
53
69
|
const metadata = inspectWithValues(input, values, expectedType);
|
|
@@ -107,6 +123,8 @@ function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = ""
|
|
|
107
123
|
};
|
|
108
124
|
}
|
|
109
125
|
}
|
|
126
|
+
|
|
127
|
+
/** Reads input using normalized format options for the MP4 format reader. */
|
|
110
128
|
function readWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
111
129
|
const bytes = toBytes(input);
|
|
112
130
|
const metadata = inspectWithValues(bytes, values, expectedType);
|
|
@@ -161,6 +179,11 @@ function getMediaMimeType(metadata) {
|
|
|
161
179
|
const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];
|
|
162
180
|
return tracks.some(track => track.type === "video") ? "video/mp4" : "audio/mp4";
|
|
163
181
|
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Inspects the supplied bytes without decoding their payload for the MP4 format
|
|
185
|
+
* reader.
|
|
186
|
+
*/
|
|
164
187
|
function inspectBytes(bytes) {
|
|
165
188
|
if (isMP4(bytes)) return inspectMP4(bytes);
|
|
166
189
|
if (isWebM(bytes)) return inspectWebM();
|
|
@@ -168,12 +191,24 @@ function inspectBytes(bytes) {
|
|
|
168
191
|
sourceFormat: ""
|
|
169
192
|
};
|
|
170
193
|
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Reports whether the supplied bytes have an ISO base-media header for the MP4
|
|
197
|
+
* format reader.
|
|
198
|
+
*/
|
|
171
199
|
function isMP4(bytes) {
|
|
172
200
|
return bytes.byteLength >= 12 && fourCc(bytes, 4) === "ftyp";
|
|
173
201
|
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Reports whether the supplied bytes have a WebM EBML header for the MP4 format
|
|
205
|
+
* reader.
|
|
206
|
+
*/
|
|
174
207
|
function isWebM(bytes) {
|
|
175
208
|
return bytes.byteLength >= 4 && bytes[0] === 0x1a && bytes[1] === 0x45 && bytes[2] === 0xdf && bytes[3] === 0xa3;
|
|
176
209
|
}
|
|
210
|
+
|
|
211
|
+
/** Converts a parsed payload into a JSON-safe value for the MP4 format reader. */
|
|
177
212
|
function toJsonValue(value) {
|
|
178
213
|
if (value instanceof Uint8Array) return {
|
|
179
214
|
byteLength: value.byteLength
|
|
@@ -1 +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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"}
|
|
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\n/**\n * Normalizes reader options against their supported defaults for the MP4 format\n * reader.\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\n/** Normalizes the requested output representation for the MP4 format reader. */\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\n/** Returns a byte view over the supplied binary input for the MP4 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(\"Video input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\n/** Inspects input using normalized format options for the MP4 format reader. */\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\n/**\n * Reports whether input is supported under normalized format options for the MP4\n * format reader.\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\n/** Reads input using normalized format options for the MP4 format reader. */\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\n/**\n * Inspects the supplied bytes without decoding their payload for the MP4 format\n * reader.\n */\nexport function inspectBytes(bytes)\n{\n if (isMP4(bytes)) return inspectMP4(bytes);\n if (isWebM(bytes)) return inspectWebM();\n return { sourceFormat: \"\" };\n}\n\n/**\n * Reports whether the supplied bytes have an ISO base-media header for the MP4\n * format reader.\n */\nexport function isMP4(bytes)\n{\n return bytes.byteLength >= 12 && fourCc(bytes, 4) === \"ftyp\";\n}\n\n/**\n * Reports whether the supplied bytes have a WebM EBML header for the MP4 format\n * reader.\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\n/** Converts a parsed payload into a JSON-safe value for the MP4 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 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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"}
|
|
@@ -9,9 +9,16 @@ const FORMAT_NAME = "CjsOggFormat";
|
|
|
9
9
|
*/
|
|
10
10
|
class CjsOggFormat {
|
|
11
11
|
#values = DEFAULT_VALUES;
|
|
12
|
+
|
|
13
|
+
/** Creates a CjsOggFormat with caller-provided reader configuration. */
|
|
12
14
|
constructor(options = {}) {
|
|
13
15
|
this.SetValues(options);
|
|
14
16
|
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Applies caller-provided options after normalizing supported fields for the
|
|
20
|
+
* Ogg format configuration.
|
|
21
|
+
*/
|
|
15
22
|
SetValues(options = {}) {
|
|
16
23
|
this.#values = normalizeValues(this.#values, {
|
|
17
24
|
inputType: "ogg",
|
|
@@ -19,51 +26,93 @@ class CjsOggFormat {
|
|
|
19
26
|
}, FORMAT_NAME);
|
|
20
27
|
return this;
|
|
21
28
|
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Returns a snapshot of the normalized reader options for the Ogg format
|
|
32
|
+
* configuration.
|
|
33
|
+
*/
|
|
22
34
|
GetValues(options = {}) {
|
|
23
35
|
return normalizeValues(this.#values, {
|
|
24
36
|
inputType: "ogg",
|
|
25
37
|
...options
|
|
26
38
|
}, FORMAT_NAME);
|
|
27
39
|
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Reads the primary public payload representation from the supplied input
|
|
43
|
+
* for the Ogg format configuration.
|
|
44
|
+
*/
|
|
28
45
|
Read(input, options = {}) {
|
|
29
46
|
return readWithValues(input, this.GetValues(options));
|
|
30
47
|
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Reads the primary public payload representation asynchronously for the Ogg
|
|
51
|
+
* format configuration.
|
|
52
|
+
*/
|
|
31
53
|
async ReadAsync(input, options = {}) {
|
|
32
54
|
return this.Read(input, options);
|
|
33
55
|
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Returns structural metadata without materializing the decoded payload for
|
|
59
|
+
* the Ogg format configuration.
|
|
60
|
+
*/
|
|
34
61
|
Inspect(input, options = {}) {
|
|
35
62
|
return inspectWithValues(input, this.GetValues(options));
|
|
36
63
|
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Reports whether input meets the active decoder capability constraints for
|
|
67
|
+
* the Ogg format configuration.
|
|
68
|
+
*/
|
|
37
69
|
IsSupported(input, options = {}) {
|
|
38
70
|
return isSupportedWithValues(input, this.GetValues(options));
|
|
39
71
|
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Converts the current decoded payload into a JSON-safe representation for
|
|
75
|
+
* the Ogg format configuration.
|
|
76
|
+
*/
|
|
40
77
|
ToJSON(value) {
|
|
41
78
|
return toJsonValue(value);
|
|
42
79
|
}
|
|
80
|
+
|
|
81
|
+
/** Provides the one-shot Ogg payload reader entry point. */
|
|
43
82
|
static read(input, options = {}) {
|
|
44
83
|
return readWithValues(input, normalizeValues(DEFAULT_VALUES, {
|
|
45
84
|
inputType: "ogg",
|
|
46
85
|
...options
|
|
47
86
|
}, FORMAT_NAME));
|
|
48
87
|
}
|
|
88
|
+
|
|
89
|
+
/** Provides the asynchronous one-shot Ogg payload reader entry point. */
|
|
49
90
|
static async readAsync(input, options = {}) {
|
|
50
91
|
return CjsOggFormat.read(input, options);
|
|
51
92
|
}
|
|
93
|
+
|
|
94
|
+
/** Provides the one-shot Ogg metadata inspection entry point. */
|
|
52
95
|
static inspect(input, options = {}) {
|
|
53
96
|
return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, {
|
|
54
97
|
inputType: "ogg",
|
|
55
98
|
...options
|
|
56
99
|
}, FORMAT_NAME));
|
|
57
100
|
}
|
|
101
|
+
|
|
102
|
+
/** Checks one input against the Ogg decoder capability contract. */
|
|
58
103
|
static isSupported(input, options = {}) {
|
|
59
104
|
return isSupportedWithValues(input, normalizeValues(DEFAULT_VALUES, {
|
|
60
105
|
inputType: "ogg",
|
|
61
106
|
...options
|
|
62
107
|
}, FORMAT_NAME));
|
|
63
108
|
}
|
|
109
|
+
|
|
110
|
+
/** Provides the one-shot Ogg JSON conversion entry point. */
|
|
64
111
|
static toJSON(value) {
|
|
65
112
|
return toJsonValue(value);
|
|
66
113
|
}
|
|
114
|
+
|
|
115
|
+
/** Checks whether caller-provided bytes carry the expected Ogg signature. */
|
|
67
116
|
static isOGG(input) {
|
|
68
117
|
try {
|
|
69
118
|
return isOGG(toBytes(input));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CjsOggFormat.js","sources":["../../../../src/formats/ogg/CjsOggFormat.js"],"sourcesContent":["import {\n DEFAULT_VALUES,\n OUTPUT_AUDIO,\n OUTPUT_JSON,\n OUTPUT_PCM,\n OUTPUT_RAW,\n inspectWithValues,\n isOGG,\n isSupportedWithValues,\n normalizeValues,\n readWithValues,\n toBytes,\n toJsonValue\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsOggFormat\";\n\n/**\n * Ogg container format profile that inspects page and stream metadata and\n * decodes Ogg Vorbis audio to PCM with the in-project pure-JS Vorbis\n * decoder, alongside raw and debug JSON output.\n */\nexport class CjsOggFormat\n{\n #values = DEFAULT_VALUES;\n\n constructor(options = {})\n {\n this.SetValues(options);\n }\n\n SetValues(options = {})\n {\n this.#values = normalizeValues(this.#values, { inputType: \"ogg\", ...options }, FORMAT_NAME);\n return this;\n }\n\n GetValues(options = {})\n {\n return normalizeValues(this.#values, { inputType: \"ogg\", ...options }, FORMAT_NAME);\n }\n\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options));\n }\n\n async ReadAsync(input, options = {})\n {\n return this.Read(input, options);\n }\n\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options));\n }\n\n IsSupported(input, options = {})\n {\n return isSupportedWithValues(input, this.GetValues(options));\n }\n\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"ogg\", ...options }, FORMAT_NAME));\n }\n\n static async readAsync(input, options = {})\n {\n return CjsOggFormat.read(input, options);\n }\n\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"ogg\", ...options }, FORMAT_NAME));\n }\n\n static isSupported(input, options = {})\n {\n return isSupportedWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"ogg\", ...options }, FORMAT_NAME));\n }\n\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n static isOGG(input)\n {\n try\n {\n return isOGG(toBytes(input));\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Emit targets for this format (canonical frozen enum).\n */\n static Output = Object.freeze({\n RAW: OUTPUT_RAW,\n JSON: OUTPUT_JSON\n });\n static OUTPUT_OGG_JSON = \"oggJson\";\n static OUTPUT_PCM = OUTPUT_PCM;\n static OUTPUT_AUDIO = OUTPUT_AUDIO;\n static type = Object.freeze([ \"audio\", \"video\" ]);\n static mediaTypes = Object.freeze([ \"audio\", \"video\" ]);\n static inputTypes = Object.freeze([ \"ogg\", \"oga\", \"ogv\" ]);\n static outputTypes = Object.freeze([ OUTPUT_PCM, OUTPUT_AUDIO ]);\n static debugOutputTypes = Object.freeze([ \"oggJson\", OUTPUT_RAW ]);\n static implementationStatus = \"vorbis-pcm\";\n}\n\nexport default CjsOggFormat;\n"],"names":["FORMAT_NAME","CjsOggFormat","DEFAULT_VALUES","constructor","options","SetValues","normalizeValues","inputType","GetValues","Read","input","readWithValues","ReadAsync","Inspect","inspectWithValues","IsSupported","isSupportedWithValues","ToJSON","value","toJsonValue","read","readAsync","inspect","isSupported","toJSON","isOGG","toBytes","Output","Object","freeze","RAW","OUTPUT_RAW","JSON","OUTPUT_JSON","OUTPUT_OGG_JSON","OUTPUT_PCM","OUTPUT_AUDIO","type","mediaTypes","inputTypes","outputTypes","debugOutputTypes","implementationStatus"],"mappings":";;AAeA,MAAMA,WAAW,GAAG,cAAc;;AAElC;AACA;AACA;AACA;AACA;AACO,MAAMC,YAAY,CACzB;EACI,OAAO,GAAGC,cAAc;
|
|
1
|
+
{"version":3,"file":"CjsOggFormat.js","sources":["../../../../src/formats/ogg/CjsOggFormat.js"],"sourcesContent":["import {\n DEFAULT_VALUES,\n OUTPUT_AUDIO,\n OUTPUT_JSON,\n OUTPUT_PCM,\n OUTPUT_RAW,\n inspectWithValues,\n isOGG,\n isSupportedWithValues,\n normalizeValues,\n readWithValues,\n toBytes,\n toJsonValue\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsOggFormat\";\n\n/**\n * Ogg container format profile that inspects page and stream metadata and\n * decodes Ogg Vorbis audio to PCM with the in-project pure-JS Vorbis\n * decoder, alongside raw and debug JSON output.\n */\nexport class CjsOggFormat\n{\n #values = DEFAULT_VALUES;\n\n /** Creates a CjsOggFormat with caller-provided reader configuration. */\n constructor(options = {})\n {\n this.SetValues(options);\n }\n\n /**\n * Applies caller-provided options after normalizing supported fields for the\n * Ogg format configuration.\n */\n SetValues(options = {})\n {\n this.#values = normalizeValues(this.#values, { inputType: \"ogg\", ...options }, FORMAT_NAME);\n return this;\n }\n\n /**\n * Returns a snapshot of the normalized reader options for the Ogg format\n * configuration.\n */\n GetValues(options = {})\n {\n return normalizeValues(this.#values, { inputType: \"ogg\", ...options }, FORMAT_NAME);\n }\n\n /**\n * Reads the primary public payload representation from the supplied input\n * for the Ogg format configuration.\n */\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options));\n }\n\n /**\n * Reads the primary public payload representation asynchronously for the Ogg\n * format configuration.\n */\n async ReadAsync(input, options = {})\n {\n return this.Read(input, options);\n }\n\n /**\n * Returns structural metadata without materializing the decoded payload for\n * the Ogg format configuration.\n */\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options));\n }\n\n /**\n * Reports whether input meets the active decoder capability constraints for\n * the Ogg format configuration.\n */\n IsSupported(input, options = {})\n {\n return isSupportedWithValues(input, this.GetValues(options));\n }\n\n /**\n * Converts the current decoded payload into a JSON-safe representation for\n * the Ogg format configuration.\n */\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n /** Provides the one-shot Ogg payload reader entry point. */\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"ogg\", ...options }, FORMAT_NAME));\n }\n\n /** Provides the asynchronous one-shot Ogg payload reader entry point. */\n static async readAsync(input, options = {})\n {\n return CjsOggFormat.read(input, options);\n }\n\n /** Provides the one-shot Ogg metadata inspection entry point. */\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"ogg\", ...options }, FORMAT_NAME));\n }\n\n /** Checks one input against the Ogg decoder capability contract. */\n static isSupported(input, options = {})\n {\n return isSupportedWithValues(input, normalizeValues(DEFAULT_VALUES, { inputType: \"ogg\", ...options }, FORMAT_NAME));\n }\n\n /** Provides the one-shot Ogg JSON conversion entry point. */\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n /** Checks whether caller-provided bytes carry the expected Ogg signature. */\n static isOGG(input)\n {\n try\n {\n return isOGG(toBytes(input));\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Emit targets for this format (canonical frozen enum).\n */\n static Output = Object.freeze({\n RAW: OUTPUT_RAW,\n JSON: OUTPUT_JSON\n });\n static OUTPUT_OGG_JSON = \"oggJson\";\n static OUTPUT_PCM = OUTPUT_PCM;\n static OUTPUT_AUDIO = OUTPUT_AUDIO;\n static type = Object.freeze([ \"audio\", \"video\" ]);\n static mediaTypes = Object.freeze([ \"audio\", \"video\" ]);\n static inputTypes = Object.freeze([ \"ogg\", \"oga\", \"ogv\" ]);\n static outputTypes = Object.freeze([ OUTPUT_PCM, OUTPUT_AUDIO ]);\n static debugOutputTypes = Object.freeze([ \"oggJson\", OUTPUT_RAW ]);\n static implementationStatus = \"vorbis-pcm\";\n}\n\nexport default CjsOggFormat;\n"],"names":["FORMAT_NAME","CjsOggFormat","DEFAULT_VALUES","constructor","options","SetValues","normalizeValues","inputType","GetValues","Read","input","readWithValues","ReadAsync","Inspect","inspectWithValues","IsSupported","isSupportedWithValues","ToJSON","value","toJsonValue","read","readAsync","inspect","isSupported","toJSON","isOGG","toBytes","Output","Object","freeze","RAW","OUTPUT_RAW","JSON","OUTPUT_JSON","OUTPUT_OGG_JSON","OUTPUT_PCM","OUTPUT_AUDIO","type","mediaTypes","inputTypes","outputTypes","debugOutputTypes","implementationStatus"],"mappings":"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"}
|