@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/webp/core/helpers.js"],"sourcesContent":["export const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"webp\",\n source: \"\"\n});\n\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsWebpFormat\")\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n const allowed = new Set([ \"emit\", \"inputType\", \"source\" ]);\n for (const key of Object.keys(options))\n {\n if (!allowed.has(key)) throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...options };\n if (![ OUTPUT_RAW, OUTPUT_JSON, \"webpJson\" ].includes(values.emit))\n {\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(values.emit)}`);\n }\n return values;\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(\"WebP input must be Uint8Array, ArrayBuffer, or a view\");\n}\n\nexport function isWebP(bytes)\n{\n return bytes.byteLength >= 12 &&\n ascii(bytes, 0, 4) === \"RIFF\" && ascii(bytes, 8, 4) === \"WEBP\";\n}\n\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"webp\")\n{\n const bytes = toBytes(input);\n if (!isWebP(bytes)) throw new TypeError(\"CjsWebpFormat: input is not a RIFF WebP container\");\n const metadata = inspectWebP(bytes);\n if (expectedType && metadata.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsWebpFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return { ...metadata, byteLength: bytes.byteLength, source: values.source || \"buffer\" };\n}\n\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n return {\n format: \"webp\",\n source: values.source || \"buffer\",\n supported: \"partial\",\n confidence: 1,\n preferred: \"raw\",\n reason: \"WebP container and image metadata are recognized; software RGBA decode is not implemented.\",\n metadata,\n variants: [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: \"webp\",\n mimeType: \"image/webp\",\n supported: true,\n containerOnly: true,\n isDecoded: false,\n rgbaDecodeSupported: false\n },\n { kind: \"rgba\", payloadType: \"rgba\", codec: \"rgba8unorm\", supported: false, reason: \"WebP software RGBA decode is not implemented yet.\" }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"webp\",\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)\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values);\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: \"webp\",\n mimeType: \"image/webp\",\n containerOnly: true,\n isDecoded: false,\n rgbaDecodeSupported: false,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === \"webpJson\") return metadata;\n const error = new Error(`webp: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n throw error;\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 inspectWebP(bytes)\n{\n const riffLength = readU32LE(bytes, 4);\n const chunks = [];\n let width = 0;\n let height = 0;\n let codec = \"webp\";\n let hasAlpha = false;\n let animated = false;\n const animationFrames = [];\n let offset = 12;\n while (offset + 8 <= bytes.byteLength)\n {\n const type = ascii(bytes, offset, 4);\n const size = readU32LE(bytes, offset + 4);\n const dataOffset = offset + 8;\n if (dataOffset + size > bytes.byteLength) throw new Error(`webp: ${type} chunk is truncated`);\n chunks.push({ type, byteOffset: dataOffset, byteLength: size });\n if (type === \"VP8 \")\n {\n codec = \"vp8\";\n if (size >= 10 && bytes[dataOffset + 3] === 0x9d && bytes[dataOffset + 4] === 0x01 && bytes[dataOffset + 5] === 0x2a)\n {\n width = readU16LE(bytes, dataOffset + 6) & 0x3fff;\n height = readU16LE(bytes, dataOffset + 8) & 0x3fff;\n }\n }\n else if (type === \"VP8L\")\n {\n codec = \"vp8l\";\n if (size >= 5 && bytes[dataOffset] === 0x2f)\n {\n width = 1 + (bytes[dataOffset + 1] | ((bytes[dataOffset + 2] & 0x3f) << 8));\n height = 1 + ((bytes[dataOffset + 2] >>> 6) | (bytes[dataOffset + 3] << 2) | ((bytes[dataOffset + 4] & 0x0f) << 10));\n hasAlpha = true;\n }\n }\n else if (type === \"VP8X\")\n {\n codec = \"vp8x\";\n if (size >= 10)\n {\n const flags = bytes[dataOffset];\n hasAlpha = !!(flags & 0x10);\n animated = !!(flags & 0x02);\n width = 1 + readU24LE(bytes, dataOffset + 4);\n height = 1 + readU24LE(bytes, dataOffset + 7);\n }\n }\n else if (type === \"ALPH\") hasAlpha = true;\n else if (type === \"ANIM\") animated = true;\n else if (type === \"ANMF\")\n {\n animated = true;\n if (size >= 16)\n {\n animationFrames.push({\n x: readU24LE(bytes, dataOffset),\n y: readU24LE(bytes, dataOffset + 3),\n width: 1 + readU24LE(bytes, dataOffset + 6),\n height: 1 + readU24LE(bytes, dataOffset + 9),\n durationMs: readU24LE(bytes, dataOffset + 12),\n flags: bytes[dataOffset + 15]\n });\n }\n }\n offset = dataOffset + size + (size & 1);\n }\n return {\n payloadType: \"image\",\n mediaTypes: [ \"image\" ],\n sourceFormat: \"webp\",\n container: \"riff\",\n riffLength,\n codec,\n width,\n height,\n hasAlpha,\n animated,\n animationFrameCount: animationFrames.length,\n animationDurationMs: animationFrames.reduce((sum, frame) => sum + frame.durationMs, 0),\n animationFrames,\n isCompressed: true,\n chunks\n };\n}\n\nfunction ascii(bytes, offset, length)\n{\n return String.fromCharCode(...bytes.subarray(offset, offset + length));\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n\nfunction readU24LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16);\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"],"names":["OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","normalizeValues","base","options","readerName","Array","isArray","TypeError","allowed","Set","key","keys","has","JSON","stringify","values","includes","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isWebP","bytes","ascii","inspectWithValues","expectedType","metadata","inspectWebP","sourceFormat","isSupportedWithValues","format","supported","confidence","preferred","reason","variants","kind","payloadType","codec","mimeType","containerOnly","isDecoded","rgbaDecodeSupported","warnings","errors","error","message","readWithValues","Error","code","toJsonValue","value","map","output","entry","entries","riffLength","readU32LE","chunks","width","height","hasAlpha","animated","animationFrames","offset","type","size","dataOffset","push","readU16LE","flags","readU24LE","x","y","durationMs","mediaTypes","container","animationFrameCount","length","animationDurationMs","reduce","sum","frame","isCompressed","String","fromCharCode","subarray"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/webp/core/helpers.js"],"sourcesContent":["export const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"webp\",\n source: \"\"\n});\n\n/**\n * Normalizes reader options against their supported defaults for the WebP format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsWebpFormat\")\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n const allowed = new Set([ \"emit\", \"inputType\", \"source\" ]);\n for (const key of Object.keys(options))\n {\n if (!allowed.has(key)) throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...options };\n if (![ OUTPUT_RAW, OUTPUT_JSON, \"webpJson\" ].includes(values.emit))\n {\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(values.emit)}`);\n }\n return values;\n}\n\n/** Returns a byte view over the supplied binary input for the WebP 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(\"WebP input must be Uint8Array, ArrayBuffer, or a view\");\n}\n\n/**\n * Reports whether the supplied bytes have a RIFF/WebP header for the WebP format\n * reader.\n */\nexport function isWebP(bytes)\n{\n return bytes.byteLength >= 12 &&\n ascii(bytes, 0, 4) === \"RIFF\" && ascii(bytes, 8, 4) === \"WEBP\";\n}\n\n/** Inspects input using normalized format options for the WebP format reader. */\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"webp\")\n{\n const bytes = toBytes(input);\n if (!isWebP(bytes)) throw new TypeError(\"CjsWebpFormat: input is not a RIFF WebP container\");\n const metadata = inspectWebP(bytes);\n if (expectedType && metadata.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsWebpFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return { ...metadata, byteLength: bytes.byteLength, source: values.source || \"buffer\" };\n}\n\n/**\n * Reports whether input is supported under normalized format options for the\n * WebP format reader.\n */\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n return {\n format: \"webp\",\n source: values.source || \"buffer\",\n supported: \"partial\",\n confidence: 1,\n preferred: \"raw\",\n reason: \"WebP container and image metadata are recognized; software RGBA decode is not implemented.\",\n metadata,\n variants: [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: \"webp\",\n mimeType: \"image/webp\",\n supported: true,\n containerOnly: true,\n isDecoded: false,\n rgbaDecodeSupported: false\n },\n { kind: \"rgba\", payloadType: \"rgba\", codec: \"rgba8unorm\", supported: false, reason: \"WebP software RGBA decode is not implemented yet.\" }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"webp\",\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 WebP format reader. */\nexport function readWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values);\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: \"webp\",\n mimeType: \"image/webp\",\n containerOnly: true,\n isDecoded: false,\n rgbaDecodeSupported: false,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === \"webpJson\") return metadata;\n const error = new Error(`webp: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n throw error;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the WebP 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 inspectWebP(bytes)\n{\n const riffLength = readU32LE(bytes, 4);\n const chunks = [];\n let width = 0;\n let height = 0;\n let codec = \"webp\";\n let hasAlpha = false;\n let animated = false;\n const animationFrames = [];\n let offset = 12;\n while (offset + 8 <= bytes.byteLength)\n {\n const type = ascii(bytes, offset, 4);\n const size = readU32LE(bytes, offset + 4);\n const dataOffset = offset + 8;\n if (dataOffset + size > bytes.byteLength) throw new Error(`webp: ${type} chunk is truncated`);\n chunks.push({ type, byteOffset: dataOffset, byteLength: size });\n if (type === \"VP8 \")\n {\n codec = \"vp8\";\n if (size >= 10 && bytes[dataOffset + 3] === 0x9d && bytes[dataOffset + 4] === 0x01 && bytes[dataOffset + 5] === 0x2a)\n {\n width = readU16LE(bytes, dataOffset + 6) & 0x3fff;\n height = readU16LE(bytes, dataOffset + 8) & 0x3fff;\n }\n }\n else if (type === \"VP8L\")\n {\n codec = \"vp8l\";\n if (size >= 5 && bytes[dataOffset] === 0x2f)\n {\n width = 1 + (bytes[dataOffset + 1] | ((bytes[dataOffset + 2] & 0x3f) << 8));\n height = 1 + ((bytes[dataOffset + 2] >>> 6) | (bytes[dataOffset + 3] << 2) | ((bytes[dataOffset + 4] & 0x0f) << 10));\n hasAlpha = true;\n }\n }\n else if (type === \"VP8X\")\n {\n codec = \"vp8x\";\n if (size >= 10)\n {\n const flags = bytes[dataOffset];\n hasAlpha = !!(flags & 0x10);\n animated = !!(flags & 0x02);\n width = 1 + readU24LE(bytes, dataOffset + 4);\n height = 1 + readU24LE(bytes, dataOffset + 7);\n }\n }\n else if (type === \"ALPH\") hasAlpha = true;\n else if (type === \"ANIM\") animated = true;\n else if (type === \"ANMF\")\n {\n animated = true;\n if (size >= 16)\n {\n animationFrames.push({\n x: readU24LE(bytes, dataOffset),\n y: readU24LE(bytes, dataOffset + 3),\n width: 1 + readU24LE(bytes, dataOffset + 6),\n height: 1 + readU24LE(bytes, dataOffset + 9),\n durationMs: readU24LE(bytes, dataOffset + 12),\n flags: bytes[dataOffset + 15]\n });\n }\n }\n offset = dataOffset + size + (size & 1);\n }\n return {\n payloadType: \"image\",\n mediaTypes: [ \"image\" ],\n sourceFormat: \"webp\",\n container: \"riff\",\n riffLength,\n codec,\n width,\n height,\n hasAlpha,\n animated,\n animationFrameCount: animationFrames.length,\n animationDurationMs: animationFrames.reduce((sum, frame) => sum + frame.durationMs, 0),\n animationFrames,\n isCompressed: true,\n chunks\n };\n}\n\nfunction ascii(bytes, offset, length)\n{\n return String.fromCharCode(...bytes.subarray(offset, offset + length));\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n\nfunction readU24LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16);\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"],"names":["OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","normalizeValues","base","options","readerName","Array","isArray","TypeError","allowed","Set","key","keys","has","JSON","stringify","values","includes","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isWebP","bytes","ascii","inspectWithValues","expectedType","metadata","inspectWebP","sourceFormat","isSupportedWithValues","format","supported","confidence","preferred","reason","variants","kind","payloadType","codec","mimeType","containerOnly","isDecoded","rgbaDecodeSupported","warnings","errors","error","message","readWithValues","Error","code","toJsonValue","value","map","output","entry","entries","riffLength","readU32LE","chunks","width","height","hasAlpha","animated","animationFrames","offset","type","size","dataOffset","push","readU16LE","flags","readU24LE","x","y","durationMs","mediaTypes","container","animationFrameCount","length","animationDurationMs","reduce","sum","frame","isCompressed","String","fromCharCode","subarray"],"mappings":"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"}
|
|
@@ -14,6 +14,14 @@ const FORMAT_NAME = "CjsWemFormat";
|
|
|
14
14
|
class CjsWemFormat {
|
|
15
15
|
#values = DEFAULT_VALUES;
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Browser-worker module declaration consumed by CjsResManWorkerLoader.
|
|
19
|
+
*/
|
|
20
|
+
static worker = Object.freeze({
|
|
21
|
+
module: import.meta.url,
|
|
22
|
+
exportName: "CjsWemFormat"
|
|
23
|
+
});
|
|
24
|
+
|
|
17
25
|
/**
|
|
18
26
|
* Create a reusable wem format profile.
|
|
19
27
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CjsWemFormat.js","sources":["../../../../src/formats/wem/CjsWemFormat.js"],"sourcesContent":["import {\n DEFAULT_VALUES,\n OUTPUT_JSON,\n OUTPUT_OGG,\n OUTPUT_PCM,\n OUTPUT_RAW,\n OUTPUT_WEM_JSON,\n WEM_CODEC_NAMES,\n inspectWithValues,\n isSupportedWithValues,\n isWEM,\n normalizeValues,\n readWithValues,\n toBytes,\n toJsonValue\n} from \"./core/helpers.js\";\nimport { resolveTypeWithValues } from \"./core/resolve.js\";\n\nconst FORMAT_NAME = \"CjsWemFormat\";\n\n/**\n * Reader for Audiokinetic Wwise media (.wem) containers.\n *\n * Inspection identifies the codec, channel/rate layout, and Vorbis duration\n * without decoding audio data. Read emits the container bytes untouched by\n * default; `emit: \"ogg\"` repacks Wwise Vorbis into a standard Ogg stream and\n * `emit: \"pcm\"` decodes PTADPCM / 16-bit PCM media to float32 samples.\n */\nexport class CjsWemFormat\n{\n #values = DEFAULT_VALUES;\n\n /**\n * Create a reusable wem format profile.\n *\n * @param {object} [options] Default read/inspect options.\n */\n constructor(options = {})\n {\n this.SetValues(options);\n }\n\n /**\n * Merge options into this profile.\n *\n * @param {object} [options] Values to merge.\n * @returns {CjsWemFormat} This format profile.\n */\n SetValues(options = {})\n {\n this.#values = normalizeValues(this.#values, options, FORMAT_NAME);\n return this;\n }\n\n /**\n * Get normalized profile values with optional per-call overrides.\n *\n * @param {object} [options] Per-call values.\n * @returns {object} Normalized read values.\n */\n GetValues(options = {})\n {\n return normalizeValues(this.#values, options, FORMAT_NAME);\n }\n\n /**\n * Read wem bytes with this profile.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} GPU-free raw/debug payload for the selected emit target.\n */\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options));\n }\n\n /**\n * Read wem bytes asynchronously with this profile.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Per-call values.\n * @returns {Promise<object>} GPU-free raw/debug payload for the selected emit target.\n */\n async ReadAsync(input, options = {})\n {\n return this.Read(input, options);\n }\n\n /**\n * Inspect wem bytes without decoding audio data.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} Wwise container metadata.\n */\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options));\n }\n\n /**\n * Report whether wem input and requested output variants are supported.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} Support/probe report.\n */\n IsSupported(input, options = {})\n {\n return isSupportedWithValues(input, this.GetValues(options));\n }\n\n /**\n * Convert format output into JSON-compatible debug data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * One-shot wem read.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Read options.\n * @returns {object} GPU-free raw/debug payload for the selected emit target.\n */\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * One-shot asynchronous wem read.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Read options.\n * @returns {Promise<object>} GPU-free raw/debug payload for the selected emit target.\n */\n static async readAsync(input, options = {})\n {\n return CjsWemFormat.read(input, options);\n }\n\n /**\n * One-shot wem inspection.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Inspect options.\n * @returns {object} Wwise container metadata.\n */\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * One-shot wem support probe.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Probe options.\n * @returns {object} Support/probe report.\n */\n static isSupported(input, options = {})\n {\n return isSupportedWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Content-verified codec/route resolution (kb §5 resolveType seam).\n *\n * Where `isSupported` trusts the fmt tag, this validates the declared\n * codec against the container's actual structure (Vorbis sidecar,\n * PTADPCM frame layout, PCM size consistency - bounded, no audio\n * decode) and tries the other codecs when the declaration fails.\n * The report carries `verified: true`, `preferred` = `ogg`/`pcm`/`raw`,\n * and declared/resolved/mismatch evidence in `metadata`.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Probe options.\n * @returns {Promise<object>} Content-verified probe report.\n */\n static async resolveType(input, options = {})\n {\n return resolveTypeWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Convert format output into JSON-compatible debug data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * Test whether bytes look like a Wwise media container.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Candidate wem bytes.\n * @returns {boolean} True when RIFF/RIFX WAVE signatures are present.\n */\n static isWEM(input)\n {\n try\n {\n return isWEM(toBytes(input));\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Repack Wwise Vorbis wem bytes into a standard Ogg Vorbis stream.\n *\n * Lossless container transform (no audio decode/re-encode); output plays\n * natively where Ogg Vorbis is supported. Equivalent to\n * `read(input, { emit: \"ogg\" })`.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Options, including a `codebooks` override.\n * @returns {object} Ogg payload with bytes, timing, and loop metadata.\n */\n static toOgg(input, options = {})\n {\n return CjsWemFormat.read(input, { ...options, emit: OUTPUT_OGG });\n }\n\n /**\n * Decode wem audio data to per-channel float32 PCM (AudioBuffer-ready).\n *\n * Covers Wwise PTADPCM (0x8311) and uncompressed 16-bit PCM. Wwise Vorbis\n * is not decoded here - repack it with `toOgg()` instead. Equivalent to\n * `read(input, { emit: \"pcm\" })`.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Read options.\n * @returns {object} PCM payload with channelData, sample rate, and timing.\n */\n static toPcm(input, options = {})\n {\n return CjsWemFormat.read(input, { ...options, emit: OUTPUT_PCM });\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 WEM_JSON: OUTPUT_WEM_JSON,\n OGG: OUTPUT_OGG,\n PCM: OUTPUT_PCM\n });\n static CODEC_NAMES = WEM_CODEC_NAMES;\n static type = Object.freeze([ \"audio\" ]);\n static mediaTypes = Object.freeze([ \"audio\" ]);\n static inputTypes = Object.freeze([ \"wem\" ]);\n static outputTypes = Object.freeze([ OUTPUT_RAW, OUTPUT_OGG, OUTPUT_PCM ]);\n static debugOutputTypes = Object.freeze([ OUTPUT_WEM_JSON, OUTPUT_RAW ]);\n}\n\nexport default CjsWemFormat;\n"],"names":["FORMAT_NAME","CjsWemFormat","DEFAULT_VALUES","constructor","options","SetValues","normalizeValues","GetValues","Read","input","readWithValues","ReadAsync","Inspect","inspectWithValues","IsSupported","isSupportedWithValues","ToJSON","value","toJsonValue","read","readAsync","inspect","isSupported","resolveType","resolveTypeWithValues","toJSON","isWEM","toBytes","toOgg","emit","OUTPUT_OGG","toPcm","OUTPUT_PCM","Output","Object","freeze","RAW","OUTPUT_RAW","JSON","OUTPUT_JSON","WEM_JSON","OUTPUT_WEM_JSON","OGG","PCM","CODEC_NAMES","WEM_CODEC_NAMES","type","mediaTypes","inputTypes","outputTypes","debugOutputTypes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CjsWemFormat.js","sources":["../../../../src/formats/wem/CjsWemFormat.js"],"sourcesContent":["import {\n DEFAULT_VALUES,\n OUTPUT_JSON,\n OUTPUT_OGG,\n OUTPUT_PCM,\n OUTPUT_RAW,\n OUTPUT_WEM_JSON,\n WEM_CODEC_NAMES,\n inspectWithValues,\n isSupportedWithValues,\n isWEM,\n normalizeValues,\n readWithValues,\n toBytes,\n toJsonValue\n} from \"./core/helpers.js\";\nimport { resolveTypeWithValues } from \"./core/resolve.js\";\n\nconst FORMAT_NAME = \"CjsWemFormat\";\n\n/**\n * Reader for Audiokinetic Wwise media (.wem) containers.\n *\n * Inspection identifies the codec, channel/rate layout, and Vorbis duration\n * without decoding audio data. Read emits the container bytes untouched by\n * default; `emit: \"ogg\"` repacks Wwise Vorbis into a standard Ogg stream and\n * `emit: \"pcm\"` decodes PTADPCM / 16-bit PCM media to float32 samples.\n */\nexport class CjsWemFormat\n{\n #values = DEFAULT_VALUES;\n\n /**\n * Browser-worker module declaration consumed by CjsResManWorkerLoader.\n */\n static worker = Object.freeze({\n module: import.meta.url,\n exportName: \"CjsWemFormat\"\n });\n\n /**\n * Create a reusable wem format profile.\n *\n * @param {object} [options] Default read/inspect options.\n */\n constructor(options = {})\n {\n this.SetValues(options);\n }\n\n /**\n * Merge options into this profile.\n *\n * @param {object} [options] Values to merge.\n * @returns {CjsWemFormat} This format profile.\n */\n SetValues(options = {})\n {\n this.#values = normalizeValues(this.#values, options, FORMAT_NAME);\n return this;\n }\n\n /**\n * Get normalized profile values with optional per-call overrides.\n *\n * @param {object} [options] Per-call values.\n * @returns {object} Normalized read values.\n */\n GetValues(options = {})\n {\n return normalizeValues(this.#values, options, FORMAT_NAME);\n }\n\n /**\n * Read wem bytes with this profile.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} GPU-free raw/debug payload for the selected emit target.\n */\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options));\n }\n\n /**\n * Read wem bytes asynchronously with this profile.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Per-call values.\n * @returns {Promise<object>} GPU-free raw/debug payload for the selected emit target.\n */\n async ReadAsync(input, options = {})\n {\n return this.Read(input, options);\n }\n\n /**\n * Inspect wem bytes without decoding audio data.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} Wwise container metadata.\n */\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options));\n }\n\n /**\n * Report whether wem input and requested output variants are supported.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Per-call values.\n * @returns {object} Support/probe report.\n */\n IsSupported(input, options = {})\n {\n return isSupportedWithValues(input, this.GetValues(options));\n }\n\n /**\n * Convert format output into JSON-compatible debug data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * One-shot wem read.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Read options.\n * @returns {object} GPU-free raw/debug payload for the selected emit target.\n */\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * One-shot asynchronous wem read.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Read options.\n * @returns {Promise<object>} GPU-free raw/debug payload for the selected emit target.\n */\n static async readAsync(input, options = {})\n {\n return CjsWemFormat.read(input, options);\n }\n\n /**\n * One-shot wem inspection.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Inspect options.\n * @returns {object} Wwise container metadata.\n */\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * One-shot wem support probe.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Probe options.\n * @returns {object} Support/probe report.\n */\n static isSupported(input, options = {})\n {\n return isSupportedWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Content-verified codec/route resolution (kb §5 resolveType seam).\n *\n * Where `isSupported` trusts the fmt tag, this validates the declared\n * codec against the container's actual structure (Vorbis sidecar,\n * PTADPCM frame layout, PCM size consistency - bounded, no audio\n * decode) and tries the other codecs when the declaration fails.\n * The report carries `verified: true`, `preferred` = `ogg`/`pcm`/`raw`,\n * and declared/resolved/mismatch evidence in `metadata`.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Probe options.\n * @returns {Promise<object>} Content-verified probe report.\n */\n static async resolveType(input, options = {})\n {\n return resolveTypeWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Convert format output into JSON-compatible debug data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * Test whether bytes look like a Wwise media container.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Candidate wem bytes.\n * @returns {boolean} True when RIFF/RIFX WAVE signatures are present.\n */\n static isWEM(input)\n {\n try\n {\n return isWEM(toBytes(input));\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Repack Wwise Vorbis wem bytes into a standard Ogg Vorbis stream.\n *\n * Lossless container transform (no audio decode/re-encode); output plays\n * natively where Ogg Vorbis is supported. Equivalent to\n * `read(input, { emit: \"ogg\" })`.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Options, including a `codebooks` override.\n * @returns {object} Ogg payload with bytes, timing, and loop metadata.\n */\n static toOgg(input, options = {})\n {\n return CjsWemFormat.read(input, { ...options, emit: OUTPUT_OGG });\n }\n\n /**\n * Decode wem audio data to per-channel float32 PCM (AudioBuffer-ready).\n *\n * Covers Wwise PTADPCM (0x8311) and uncompressed 16-bit PCM. Wwise Vorbis\n * is not decoded here - repack it with `toOgg()` instead. Equivalent to\n * `read(input, { emit: \"pcm\" })`.\n *\n * @param {Uint8Array|ArrayBuffer|DataView} input Wem bytes.\n * @param {object} [options] Read options.\n * @returns {object} PCM payload with channelData, sample rate, and timing.\n */\n static toPcm(input, options = {})\n {\n return CjsWemFormat.read(input, { ...options, emit: OUTPUT_PCM });\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 WEM_JSON: OUTPUT_WEM_JSON,\n OGG: OUTPUT_OGG,\n PCM: OUTPUT_PCM\n });\n static CODEC_NAMES = WEM_CODEC_NAMES;\n static type = Object.freeze([ \"audio\" ]);\n static mediaTypes = Object.freeze([ \"audio\" ]);\n static inputTypes = Object.freeze([ \"wem\" ]);\n static outputTypes = Object.freeze([ OUTPUT_RAW, OUTPUT_OGG, OUTPUT_PCM ]);\n static debugOutputTypes = Object.freeze([ OUTPUT_WEM_JSON, OUTPUT_RAW ]);\n}\n\nexport default CjsWemFormat;\n"],"names":["FORMAT_NAME","CjsWemFormat","DEFAULT_VALUES","worker","Object","freeze","module","import","meta","url","exportName","constructor","options","SetValues","normalizeValues","GetValues","Read","input","readWithValues","ReadAsync","Inspect","inspectWithValues","IsSupported","isSupportedWithValues","ToJSON","value","toJsonValue","read","readAsync","inspect","isSupported","resolveType","resolveTypeWithValues","toJSON","isWEM","toBytes","toOgg","emit","OUTPUT_OGG","toPcm","OUTPUT_PCM","Output","RAW","OUTPUT_RAW","JSON","OUTPUT_JSON","WEM_JSON","OUTPUT_WEM_JSON","OGG","PCM","CODEC_NAMES","WEM_CODEC_NAMES","type","mediaTypes","inputTypes","outputTypes","debugOutputTypes"],"mappings":"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"}
|
|
@@ -152,6 +152,8 @@ class OggPageWriter {
|
|
|
152
152
|
setGranule(granule) {
|
|
153
153
|
this.#granule = granule;
|
|
154
154
|
}
|
|
155
|
+
|
|
156
|
+
/** Flushes bits into the current WEM binary writer output. */
|
|
155
157
|
#flushBits() {
|
|
156
158
|
if (this.#bitsStored === 0) return;
|
|
157
159
|
if (this.#payloadBytes === OGG_MAX_PAYLOAD) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitStream.js","sources":["../../../../../src/formats/wem/core/bitStream.js"],"sourcesContent":["/**\n * Bit-level IO for Wwise Vorbis repacking.\n *\n * Vorbis bitstreams are LSB-first within each byte; both the reader and the\n * Ogg writer here follow that convention. The writer assembles one Ogg page\n * per packet (identification, comment, setup, then one page per audio\n * packet), matching the ww2ogg reference behavior.\n */\n\nconst OGG_HEADER_BYTES = 27;\nconst OGG_MAX_SEGMENTS = 255;\nconst OGG_SEGMENT_SIZE = 255;\nconst OGG_MAX_PAYLOAD = OGG_MAX_SEGMENTS * OGG_SEGMENT_SIZE;\n\nconst CRC_TABLE = buildCrcTable();\n\nfunction buildCrcTable()\n{\n const table = new Uint32Array(256);\n for (let i = 0; i < 256; i++)\n {\n let r = (i << 24) >>> 0;\n for (let bit = 0; bit < 8; bit++)\n {\n r = ((r & 0x80000000) ? ((r << 1) ^ 0x04c11db7) : (r << 1)) >>> 0;\n }\n table[i] = r;\n }\n return table;\n}\n\n/**\n * Compute the Ogg page checksum (forward CRC-32, polynomial 0x04c11db7,\n * zero initial value, no final xor).\n *\n * @param {Uint8Array} bytes Page bytes with the checksum field zeroed.\n * @param {number} length Number of bytes to include.\n * @returns {number} Unsigned 32-bit checksum.\n */\nexport function oggChecksum(bytes, length)\n{\n let crc = 0;\n for (let i = 0; i < length; i++)\n {\n crc = (((crc << 8) >>> 0) ^ CRC_TABLE[((crc >>> 24) ^ bytes[i]) & 0xff]) >>> 0;\n }\n return crc;\n}\n\n/**\n * LSB-first bit reader over a byte range.\n */\nexport class BitReader\n{\n #bytes;\n #position;\n #bitBuffer = 0;\n #bitsLeft = 0;\n #totalBitsRead = 0;\n\n /**\n * Create a reader over `bytes` starting at `offset`.\n *\n * @param {Uint8Array} bytes Source bytes.\n * @param {number} [offset] Starting byte offset.\n */\n constructor(bytes, offset = 0)\n {\n this.#bytes = bytes;\n this.#position = offset;\n }\n\n /**\n * Read a single bit.\n *\n * @returns {number} 0 or 1.\n */\n readBit()\n {\n if (this.#bitsLeft === 0)\n {\n if (this.#position >= this.#bytes.length)\n {\n const error = new Error(\"wem: bitstream out of bits\");\n error.code = \"CJS_FORMAT_TRUNCATED\";\n throw error;\n }\n this.#bitBuffer = this.#bytes[this.#position++];\n this.#bitsLeft = 8;\n }\n const bit = this.#bitBuffer & 1;\n this.#bitBuffer >>= 1;\n this.#bitsLeft--;\n this.#totalBitsRead++;\n return bit;\n }\n\n /**\n * Read `count` bits as an unsigned integer (LSB-first).\n *\n * @param {number} count Bit count (0..32).\n * @returns {number} Unsigned value.\n */\n readBits(count)\n {\n let value = 0;\n for (let i = 0; i < count; i++)\n {\n if (this.readBit()) value |= (1 << i);\n }\n return value >>> 0;\n }\n\n /**\n * Total bits consumed so far.\n *\n * @returns {number} Bit count.\n */\n get totalBitsRead()\n {\n return this.#totalBitsRead;\n }\n}\n\n/**\n * LSB-first bit writer that assembles Ogg pages, one packet per page.\n */\nexport class OggPageWriter\n{\n #pages = [];\n #payload = new Uint8Array(OGG_MAX_PAYLOAD);\n #payloadBytes = 0;\n #bitBuffer = 0;\n #bitsStored = 0;\n #granule = 0;\n #sequenceNumber = 0;\n #first = true;\n #continued = false;\n\n /**\n * Write a single bit.\n *\n * @param {number|boolean} bit Bit value.\n */\n writeBit(bit)\n {\n if (bit) this.#bitBuffer |= (1 << this.#bitsStored);\n this.#bitsStored++;\n if (this.#bitsStored === 8) this.#flushBits();\n }\n\n /**\n * Write `count` bits of `value` (LSB-first).\n *\n * @param {number} value Unsigned value.\n * @param {number} count Bit count (0..32).\n */\n writeBits(value, count)\n {\n for (let i = 0; i < count; i++)\n {\n this.writeBit((value >>> i) & 1);\n }\n }\n\n /**\n * Set the granule position recorded on the next flushed page.\n *\n * @param {number} granule Unsigned granule position (< 2^53).\n */\n setGranule(granule)\n {\n this.#granule = granule;\n }\n\n #flushBits()\n {\n if (this.#bitsStored === 0) return;\n if (this.#payloadBytes === OGG_MAX_PAYLOAD)\n {\n const error = new Error(\"wem: packet too large for one Ogg page\");\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n throw error;\n }\n this.#payload[this.#payloadBytes++] = this.#bitBuffer;\n this.#bitsStored = 0;\n this.#bitBuffer = 0;\n }\n\n /**\n * Finish the current packet and emit it as one Ogg page.\n *\n * @param {boolean} [last] Mark this page as end-of-stream.\n */\n flushPage(last = false)\n {\n this.#flushBits();\n if (this.#payloadBytes === 0) return;\n\n const payloadBytes = this.#payloadBytes;\n let segments = Math.floor((payloadBytes + OGG_SEGMENT_SIZE) / OGG_SEGMENT_SIZE);\n if (segments === OGG_MAX_SEGMENTS + 1) segments = OGG_MAX_SEGMENTS;\n\n const page = new Uint8Array(OGG_HEADER_BYTES + segments + payloadBytes);\n page[0] = 0x4f;\n page[1] = 0x67;\n page[2] = 0x67;\n page[3] = 0x53;\n page[4] = 0;\n page[5] = (this.#continued ? 1 : 0) | (this.#first ? 2 : 0) | (last ? 4 : 0);\n writeU32(page, 6, this.#granule % 0x100000000);\n writeU32(page, 10, Math.floor(this.#granule / 0x100000000));\n writeU32(page, 14, 1);\n writeU32(page, 18, this.#sequenceNumber);\n writeU32(page, 22, 0);\n page[26] = segments;\n\n let bytesLeft = payloadBytes;\n for (let i = 0; i < segments; i++)\n {\n if (bytesLeft >= OGG_SEGMENT_SIZE)\n {\n page[27 + i] = OGG_SEGMENT_SIZE;\n bytesLeft -= OGG_SEGMENT_SIZE;\n }\n else\n {\n page[27 + i] = bytesLeft;\n }\n }\n\n page.set(this.#payload.subarray(0, payloadBytes), OGG_HEADER_BYTES + segments);\n writeU32(page, 22, oggChecksum(page, page.length));\n\n this.#pages.push(page);\n this.#sequenceNumber++;\n this.#first = false;\n this.#continued = false;\n this.#payloadBytes = 0;\n }\n\n /**\n * Concatenate all flushed pages into one buffer.\n *\n * @returns {Uint8Array} Complete Ogg stream bytes.\n */\n toBytes()\n {\n let total = 0;\n for (const page of this.#pages) total += page.length;\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const page of this.#pages)\n {\n bytes.set(page, offset);\n offset += page.length;\n }\n return bytes;\n }\n\n /**\n * Number of pages flushed so far.\n *\n * @returns {number} Page count.\n */\n get pageCount()\n {\n return this.#pages.length;\n }\n}\n\nfunction writeU32(bytes, offset, value)\n{\n bytes[offset] = value & 0xff;\n bytes[offset + 1] = (value >>> 8) & 0xff;\n bytes[offset + 2] = (value >>> 16) & 0xff;\n bytes[offset + 3] = (value >>> 24) & 0xff;\n}\n\n/**\n * Smallest number of bits needed to represent `value` (Vorbis ilog).\n *\n * @param {number} value Unsigned value.\n * @returns {number} Bit count; 0 when value is 0.\n */\nexport function ilog(value)\n{\n let result = 0;\n let v = value >>> 0;\n while (v)\n {\n result++;\n v >>>= 1;\n }\n return result;\n}\n"],"names":["OGG_HEADER_BYTES","OGG_MAX_SEGMENTS","OGG_SEGMENT_SIZE","OGG_MAX_PAYLOAD","CRC_TABLE","buildCrcTable","table","Uint32Array","i","r","bit","oggChecksum","bytes","length","crc","BitReader","constructor","offset","readBit","error","Error","code","readBits","count","value","totalBitsRead","OggPageWriter","Uint8Array","writeBit","writeBits","setGranule","granule","#flushBits","flushPage","last","payloadBytes","segments","Math","floor","page","writeU32","bytesLeft","set","subarray","push","toBytes","total","pageCount","ilog","result","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bitStream.js","sources":["../../../../../src/formats/wem/core/bitStream.js"],"sourcesContent":["/**\n * Bit-level IO for Wwise Vorbis repacking.\n *\n * Vorbis bitstreams are LSB-first within each byte; both the reader and the\n * Ogg writer here follow that convention. The writer assembles one Ogg page\n * per packet (identification, comment, setup, then one page per audio\n * packet), matching the ww2ogg reference behavior.\n */\n\nconst OGG_HEADER_BYTES = 27;\nconst OGG_MAX_SEGMENTS = 255;\nconst OGG_SEGMENT_SIZE = 255;\nconst OGG_MAX_PAYLOAD = OGG_MAX_SEGMENTS * OGG_SEGMENT_SIZE;\n\nconst CRC_TABLE = buildCrcTable();\n\nfunction buildCrcTable()\n{\n const table = new Uint32Array(256);\n for (let i = 0; i < 256; i++)\n {\n let r = (i << 24) >>> 0;\n for (let bit = 0; bit < 8; bit++)\n {\n r = ((r & 0x80000000) ? ((r << 1) ^ 0x04c11db7) : (r << 1)) >>> 0;\n }\n table[i] = r;\n }\n return table;\n}\n\n/**\n * Compute the Ogg page checksum (forward CRC-32, polynomial 0x04c11db7,\n * zero initial value, no final xor).\n *\n * @param {Uint8Array} bytes Page bytes with the checksum field zeroed.\n * @param {number} length Number of bytes to include.\n * @returns {number} Unsigned 32-bit checksum.\n */\nexport function oggChecksum(bytes, length)\n{\n let crc = 0;\n for (let i = 0; i < length; i++)\n {\n crc = (((crc << 8) >>> 0) ^ CRC_TABLE[((crc >>> 24) ^ bytes[i]) & 0xff]) >>> 0;\n }\n return crc;\n}\n\n/**\n * LSB-first bit reader over a byte range.\n */\nexport class BitReader\n{\n #bytes;\n #position;\n #bitBuffer = 0;\n #bitsLeft = 0;\n #totalBitsRead = 0;\n\n /**\n * Create a reader over `bytes` starting at `offset`.\n *\n * @param {Uint8Array} bytes Source bytes.\n * @param {number} [offset] Starting byte offset.\n */\n constructor(bytes, offset = 0)\n {\n this.#bytes = bytes;\n this.#position = offset;\n }\n\n /**\n * Read a single bit.\n *\n * @returns {number} 0 or 1.\n */\n readBit()\n {\n if (this.#bitsLeft === 0)\n {\n if (this.#position >= this.#bytes.length)\n {\n const error = new Error(\"wem: bitstream out of bits\");\n error.code = \"CJS_FORMAT_TRUNCATED\";\n throw error;\n }\n this.#bitBuffer = this.#bytes[this.#position++];\n this.#bitsLeft = 8;\n }\n const bit = this.#bitBuffer & 1;\n this.#bitBuffer >>= 1;\n this.#bitsLeft--;\n this.#totalBitsRead++;\n return bit;\n }\n\n /**\n * Read `count` bits as an unsigned integer (LSB-first).\n *\n * @param {number} count Bit count (0..32).\n * @returns {number} Unsigned value.\n */\n readBits(count)\n {\n let value = 0;\n for (let i = 0; i < count; i++)\n {\n if (this.readBit()) value |= (1 << i);\n }\n return value >>> 0;\n }\n\n /**\n * Total bits consumed so far.\n *\n * @returns {number} Bit count.\n */\n get totalBitsRead()\n {\n return this.#totalBitsRead;\n }\n}\n\n/**\n * LSB-first bit writer that assembles Ogg pages, one packet per page.\n */\nexport class OggPageWriter\n{\n #pages = [];\n #payload = new Uint8Array(OGG_MAX_PAYLOAD);\n #payloadBytes = 0;\n #bitBuffer = 0;\n #bitsStored = 0;\n #granule = 0;\n #sequenceNumber = 0;\n #first = true;\n #continued = false;\n\n /**\n * Write a single bit.\n *\n * @param {number|boolean} bit Bit value.\n */\n writeBit(bit)\n {\n if (bit) this.#bitBuffer |= (1 << this.#bitsStored);\n this.#bitsStored++;\n if (this.#bitsStored === 8) this.#flushBits();\n }\n\n /**\n * Write `count` bits of `value` (LSB-first).\n *\n * @param {number} value Unsigned value.\n * @param {number} count Bit count (0..32).\n */\n writeBits(value, count)\n {\n for (let i = 0; i < count; i++)\n {\n this.writeBit((value >>> i) & 1);\n }\n }\n\n /**\n * Set the granule position recorded on the next flushed page.\n *\n * @param {number} granule Unsigned granule position (< 2^53).\n */\n setGranule(granule)\n {\n this.#granule = granule;\n }\n\n /** Flushes bits into the current WEM binary writer output. */\n #flushBits()\n {\n if (this.#bitsStored === 0) return;\n if (this.#payloadBytes === OGG_MAX_PAYLOAD)\n {\n const error = new Error(\"wem: packet too large for one Ogg page\");\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n throw error;\n }\n this.#payload[this.#payloadBytes++] = this.#bitBuffer;\n this.#bitsStored = 0;\n this.#bitBuffer = 0;\n }\n\n /**\n * Finish the current packet and emit it as one Ogg page.\n *\n * @param {boolean} [last] Mark this page as end-of-stream.\n */\n flushPage(last = false)\n {\n this.#flushBits();\n if (this.#payloadBytes === 0) return;\n\n const payloadBytes = this.#payloadBytes;\n let segments = Math.floor((payloadBytes + OGG_SEGMENT_SIZE) / OGG_SEGMENT_SIZE);\n if (segments === OGG_MAX_SEGMENTS + 1) segments = OGG_MAX_SEGMENTS;\n\n const page = new Uint8Array(OGG_HEADER_BYTES + segments + payloadBytes);\n page[0] = 0x4f;\n page[1] = 0x67;\n page[2] = 0x67;\n page[3] = 0x53;\n page[4] = 0;\n page[5] = (this.#continued ? 1 : 0) | (this.#first ? 2 : 0) | (last ? 4 : 0);\n writeU32(page, 6, this.#granule % 0x100000000);\n writeU32(page, 10, Math.floor(this.#granule / 0x100000000));\n writeU32(page, 14, 1);\n writeU32(page, 18, this.#sequenceNumber);\n writeU32(page, 22, 0);\n page[26] = segments;\n\n let bytesLeft = payloadBytes;\n for (let i = 0; i < segments; i++)\n {\n if (bytesLeft >= OGG_SEGMENT_SIZE)\n {\n page[27 + i] = OGG_SEGMENT_SIZE;\n bytesLeft -= OGG_SEGMENT_SIZE;\n }\n else\n {\n page[27 + i] = bytesLeft;\n }\n }\n\n page.set(this.#payload.subarray(0, payloadBytes), OGG_HEADER_BYTES + segments);\n writeU32(page, 22, oggChecksum(page, page.length));\n\n this.#pages.push(page);\n this.#sequenceNumber++;\n this.#first = false;\n this.#continued = false;\n this.#payloadBytes = 0;\n }\n\n /**\n * Concatenate all flushed pages into one buffer.\n *\n * @returns {Uint8Array} Complete Ogg stream bytes.\n */\n toBytes()\n {\n let total = 0;\n for (const page of this.#pages) total += page.length;\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const page of this.#pages)\n {\n bytes.set(page, offset);\n offset += page.length;\n }\n return bytes;\n }\n\n /**\n * Number of pages flushed so far.\n *\n * @returns {number} Page count.\n */\n get pageCount()\n {\n return this.#pages.length;\n }\n}\n\nfunction writeU32(bytes, offset, value)\n{\n bytes[offset] = value & 0xff;\n bytes[offset + 1] = (value >>> 8) & 0xff;\n bytes[offset + 2] = (value >>> 16) & 0xff;\n bytes[offset + 3] = (value >>> 24) & 0xff;\n}\n\n/**\n * Smallest number of bits needed to represent `value` (Vorbis ilog).\n *\n * @param {number} value Unsigned value.\n * @returns {number} Bit count; 0 when value is 0.\n */\nexport function ilog(value)\n{\n let result = 0;\n let v = value >>> 0;\n while (v)\n {\n result++;\n v >>>= 1;\n }\n return result;\n}\n"],"names":["OGG_HEADER_BYTES","OGG_MAX_SEGMENTS","OGG_SEGMENT_SIZE","OGG_MAX_PAYLOAD","CRC_TABLE","buildCrcTable","table","Uint32Array","i","r","bit","oggChecksum","bytes","length","crc","BitReader","constructor","offset","readBit","error","Error","code","readBits","count","value","totalBitsRead","OggPageWriter","Uint8Array","writeBit","writeBits","setGranule","granule","#flushBits","flushPage","last","payloadBytes","segments","Math","floor","page","writeU32","bytesLeft","set","subarray","push","toBytes","total","pageCount","ilog","result","v"],"mappings":"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"}
|
|
@@ -33,6 +33,11 @@ const WEM_CODEC_NAMES = Object.freeze({
|
|
|
33
33
|
0xfffe: "pcm-extensible",
|
|
34
34
|
0xffff: "wwise-vorbis"
|
|
35
35
|
});
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Normalizes reader options against their supported defaults for the WEM format
|
|
39
|
+
* reader.
|
|
40
|
+
*/
|
|
36
41
|
function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsWemFormat") {
|
|
37
42
|
const values = {
|
|
38
43
|
...DEFAULT_VALUES,
|
|
@@ -43,12 +48,16 @@ function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsW
|
|
|
43
48
|
values.emit = normalizeEmit(values.emit, readerName);
|
|
44
49
|
return values;
|
|
45
50
|
}
|
|
51
|
+
|
|
52
|
+
/** Normalizes the requested output representation for the WEM format reader. */
|
|
46
53
|
function normalizeEmit(emit, readerName) {
|
|
47
54
|
if (emit === undefined || emit === null) return OUTPUT_RAW;
|
|
48
55
|
if (emit === OUTPUT_JSON) return OUTPUT_WEM_JSON;
|
|
49
56
|
if ([OUTPUT_RAW, OUTPUT_WEM_JSON, OUTPUT_OGG, OUTPUT_PCM].includes(emit)) return emit;
|
|
50
57
|
throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);
|
|
51
58
|
}
|
|
59
|
+
|
|
60
|
+
/** Returns a byte view over the supplied binary input for the WEM format reader. */
|
|
52
61
|
function toBytes(input) {
|
|
53
62
|
if (input instanceof Uint8Array) return input;
|
|
54
63
|
if (input instanceof ArrayBuffer) return new Uint8Array(input);
|
|
@@ -171,6 +180,8 @@ function inspectWEM(bytes) {
|
|
|
171
180
|
}
|
|
172
181
|
return info;
|
|
173
182
|
}
|
|
183
|
+
|
|
184
|
+
/** Inspects input using normalized format options for the WEM format reader. */
|
|
174
185
|
function inspectWithValues(input, values = DEFAULT_VALUES) {
|
|
175
186
|
const bytes = toBytes(input);
|
|
176
187
|
if (!isWEM(bytes)) {
|
|
@@ -184,6 +195,11 @@ function inspectWithValues(input, values = DEFAULT_VALUES) {
|
|
|
184
195
|
...inspectWEM(bytes)
|
|
185
196
|
};
|
|
186
197
|
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Reports whether input is supported under normalized format options for the WEM
|
|
201
|
+
* format reader.
|
|
202
|
+
*/
|
|
187
203
|
function isSupportedWithValues(input, values = DEFAULT_VALUES) {
|
|
188
204
|
try {
|
|
189
205
|
const metadata = inspectWithValues(input, values);
|
|
@@ -319,6 +335,8 @@ function getOggSupport(metadata) {
|
|
|
319
335
|
reason: ""
|
|
320
336
|
};
|
|
321
337
|
}
|
|
338
|
+
|
|
339
|
+
/** Reads input using normalized format options for the WEM format reader. */
|
|
322
340
|
function readWithValues(input, values = DEFAULT_VALUES) {
|
|
323
341
|
const bytes = toBytes(input);
|
|
324
342
|
const metadata = inspectWithValues(bytes, values);
|
|
@@ -389,6 +407,8 @@ function readWithValues(input, values = DEFAULT_VALUES) {
|
|
|
389
407
|
error.emit = values.emit;
|
|
390
408
|
throw error;
|
|
391
409
|
}
|
|
410
|
+
|
|
411
|
+
/** Converts a parsed payload into a JSON-safe value for the WEM format reader. */
|
|
392
412
|
function toJsonValue(value) {
|
|
393
413
|
if (value instanceof Uint8Array) return {
|
|
394
414
|
byteLength: value.byteLength
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/wem/core/helpers.js"],"sourcesContent":["import { convertWemToOgg } from \"./wemToOgg.js\";\nimport { decodePtadpcm } from \"./ptadpcm.js\";\n\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_WEM_JSON = \"wemJson\";\nexport const OUTPUT_OGG = \"ogg\";\nexport const OUTPUT_PCM = \"pcm\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"wem\",\n source: \"\"\n});\n\n/**\n * Wwise RIFF format tags mapped to codec names.\n *\n * Tag meanings follow the publicly documented behavior of Wwise media as\n * observed by community tooling (ww2ogg, vgmstream, wwiser). Unknown tags are\n * reported as `wwise-format-0x<tag>` rather than rejected.\n */\nexport const WEM_CODEC_NAMES = Object.freeze({\n 0x0001: \"pcm\",\n 0x0002: \"wwise-ima-adpcm\",\n 0x0069: \"wwise-ima-adpcm\",\n 0x0165: \"xma2\",\n 0x0166: \"xma2\",\n 0x3040: \"wwise-opus\",\n 0x3041: \"wwise-opus-nx\",\n 0x3042: \"wwise-opus-wem\",\n 0x8311: \"wwise-ptadpcm\",\n 0xaac0: \"aac\",\n 0xfffe: \"pcm-extensible\",\n 0xffff: \"wwise-vorbis\"\n});\n\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsWemFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = values.inputType ? String(values.inputType).replace(/^\\./u, \"\").toLowerCase() : \"wem\";\n values.emit = normalizeEmit(values.emit, readerName);\n return values;\n}\n\nexport function normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === null) return OUTPUT_RAW;\n if (emit === OUTPUT_JSON) return OUTPUT_WEM_JSON;\n if ([ OUTPUT_RAW, OUTPUT_WEM_JSON, OUTPUT_OGG, OUTPUT_PCM ].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(\"Wem input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\n/**\n * Test for a Wwise RIFF/RIFX WAVE signature.\n *\n * @param {Uint8Array} bytes Candidate bytes.\n * @returns {boolean} True when a RIFF or RIFX WAVE container is present.\n */\nexport function isWEM(bytes)\n{\n if (bytes.byteLength < 12) return false;\n const container = fourCc(bytes, 0);\n return (container === \"RIFF\" || container === \"RIFX\") && fourCc(bytes, 8) === \"WAVE\";\n}\n\n/**\n * Inspect Wwise media bytes without decoding audio data.\n *\n * Reports the chunk map, `fmt ` fields, codec identity, and Vorbis sample\n * count/duration when present. Inspection never throws on unknown chunks or\n * codecs; truncated trailing chunks stop the walk.\n *\n * @param {Uint8Array} bytes Wem bytes.\n * @returns {object} Wem metadata.\n */\nexport function inspectWEM(bytes)\n{\n const littleEndian = fourCc(bytes, 0) !== \"RIFX\";\n const info = {\n sourceFormat: \"wem\",\n container: fourCc(bytes, 0),\n littleEndian,\n riffSize: readU32(bytes, 4, littleEndian),\n codec: \"\",\n codecTag: 0,\n channels: 0,\n sampleRate: 0,\n byteRate: 0,\n blockAlign: 0,\n bitsPerSample: 0,\n extraSize: 0,\n sampleCount: 0,\n durationSeconds: 0,\n dataOffset: 0,\n dataBytes: 0,\n vorbis: null,\n chunks: []\n };\n\n let offset = 12;\n let fmtOffset = 0;\n let fmtSize = 0;\n let vorbOffset = 0;\n let vorbSize = 0;\n\n while (offset + 8 <= bytes.byteLength)\n {\n const id = fourCc(bytes, offset);\n const size = readU32(bytes, offset + 4, littleEndian);\n const dataOffset = offset + 8;\n if (dataOffset + size > bytes.byteLength)\n {\n info.chunks.push({ id, offset, dataOffset, size, truncated: true });\n break;\n }\n info.chunks.push({ id, offset, dataOffset, size });\n\n if (id === \"fmt \" && size >= 16)\n {\n fmtOffset = dataOffset;\n fmtSize = size;\n info.codecTag = readU16(bytes, dataOffset, littleEndian);\n info.channels = readU16(bytes, dataOffset + 2, littleEndian);\n info.sampleRate = readU32(bytes, dataOffset + 4, littleEndian);\n info.byteRate = readU32(bytes, dataOffset + 8, littleEndian);\n info.blockAlign = readU16(bytes, dataOffset + 12, littleEndian);\n info.bitsPerSample = readU16(bytes, dataOffset + 14, littleEndian);\n if (size >= 18) info.extraSize = readU16(bytes, dataOffset + 16, littleEndian);\n info.codec = WEM_CODEC_NAMES[info.codecTag] || `wwise-format-0x${info.codecTag.toString(16).padStart(4, \"0\")}`;\n }\n if (id === \"vorb\")\n {\n vorbOffset = dataOffset;\n vorbSize = size;\n }\n if (id === \"data\")\n {\n info.dataOffset = dataOffset;\n info.dataBytes = size;\n }\n\n offset = dataOffset + size + (size & 1);\n }\n\n if (info.codec === \"wwise-vorbis\")\n {\n // Wwise Vorbis stores its sample count in a separate \"vorb\" chunk, or\n // inline in \"fmt \" at +0x18 when the fmt chunk is 0x42 bytes.\n if (!vorbOffset && fmtSize === 0x42)\n {\n vorbOffset = fmtOffset + 0x18;\n vorbSize = fmtSize - 0x18;\n }\n if (vorbOffset && vorbOffset + 4 <= bytes.byteLength)\n {\n info.sampleCount = readU32(bytes, vorbOffset, littleEndian);\n info.vorbis = {\n vorbOffset,\n vorbSize,\n inline: fmtSize === 0x42,\n sampleCount: info.sampleCount\n };\n }\n }\n\n if (info.sampleCount && info.sampleRate)\n {\n info.durationSeconds = info.sampleCount / info.sampleRate;\n }\n else if ((info.codec === \"pcm\" || info.codec === \"pcm-extensible\") && info.byteRate)\n {\n info.durationSeconds = info.dataBytes / info.byteRate;\n }\n\n return info;\n}\n\nexport function inspectWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n if (!isWEM(bytes))\n {\n throw new TypeError(\"CjsWemFormat: expected a RIFF/RIFX WAVE (wem) container\");\n }\n return {\n payloadType: \"audio\",\n mediaTypes: [ \"audio\" ],\n byteLength: bytes.byteLength,\n source: values.source || \"buffer\",\n ...inspectWEM(bytes)\n };\n}\n\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n const oggSupport = getOggSupport(metadata);\n const pcmSupport = getPcmSupport(metadata);\n return {\n format: \"wem\",\n source: values.source || \"buffer\",\n supported: metadata.codec ? \"partial\" : \"none\",\n confidence: metadata.codec ? 1 : 0.5,\n preferred: oggSupport.supported ? OUTPUT_OGG : (pcmSupport.supported ? OUTPUT_PCM : \"raw\"),\n reason: metadata.codec\n ? (oggSupport.supported\n ? \"Wwise Vorbis recognized; repacks losslessly to Ogg Vorbis.\"\n : (metadata.codec === \"wwise-vorbis\"\n ? oggSupport.reason\n : \"Wwise media container recognized; payloads pass through undecoded.\"))\n : \"RIFF/RIFX container recognized but no fmt chunk was found.\",\n metadata,\n variants: [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: metadata.codec || \"unknown\",\n mimeType: \"application/octet-stream\",\n supported: true,\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false\n },\n {\n kind: OUTPUT_OGG,\n payloadType: \"raw\",\n codec: \"vorbis\",\n mimeType: \"audio/ogg\",\n supported: oggSupport.supported,\n containerOnly: true,\n isDecoded: false,\n reason: oggSupport.supported ? \"\" : oggSupport.reason\n },\n {\n kind: OUTPUT_PCM,\n payloadType: OUTPUT_PCM,\n codec: \"float32\",\n supported: pcmSupport.supported,\n containerOnly: false,\n isDecoded: true,\n pcmDecodeSupported: pcmSupport.supported,\n reason: pcmSupport.supported ? \"\" : pcmSupport.reason\n }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"wem\",\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// PCM decode routing by codec: PTADPCM decodes through its own module;\n// uncompressed 16-bit PCM deinterleaves directly. Compressed codecs with\n// their own containers (Vorbis, Opus, XMA) are not decoded here - Vorbis\n// repacks to Ogg instead (OUTPUT_OGG).\nfunction decodeToPcm(bytes, metadata)\n{\n if (metadata.codec === \"wwise-ptadpcm\")\n {\n return decodePtadpcm(bytes, metadata);\n }\n if ((metadata.codec === \"pcm\" || metadata.codec === \"pcm-extensible\") && metadata.bitsPerSample === 16)\n {\n const channels = Math.max(1, metadata.channels);\n const sampleCount = Math.floor(metadata.dataBytes / (2 * channels));\n const channelData = [];\n for (let channel = 0; channel < channels; channel++)\n {\n channelData.push(new Float32Array(sampleCount));\n }\n for (let i = 0; i < sampleCount; i++)\n {\n for (let channel = 0; channel < channels; channel++)\n {\n const at = metadata.dataOffset + (i * channels + channel) * 2;\n const raw = bytes[at] | (bytes[at + 1] << 8);\n channelData[channel][i] = (raw >= 0x8000 ? raw - 0x10000 : raw) / 32768;\n }\n }\n return { channelData, sampleCount, sampleRate: metadata.sampleRate, channels };\n }\n const error = new Error(`wem: pcm decode is not supported for codec ${metadata.codec || \"unknown\"}`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n error.sourceFormat = \"wem\";\n throw error;\n}\n\nfunction getPcmSupport(metadata)\n{\n if (metadata.codec === \"wwise-ptadpcm\") return { supported: true, reason: \"\" };\n if ((metadata.codec === \"pcm\" || metadata.codec === \"pcm-extensible\") && metadata.bitsPerSample === 16)\n {\n return { supported: true, reason: \"\" };\n }\n return {\n supported: false,\n reason: \"PCM decode covers PTADPCM and 16-bit PCM; use the ogg emit for Wwise Vorbis.\"\n };\n}\n\nfunction getOggSupport(metadata)\n{\n if (metadata.codec !== \"wwise-vorbis\")\n {\n return {\n supported: false,\n reason: \"Only Wwise Vorbis media can be repacked to Ogg.\"\n };\n }\n\n const vorbSize = metadata.vorbis?.vorbSize;\n if (vorbSize === 0x28 || vorbSize === 0x2c)\n {\n return {\n supported: false,\n reason: \"Wwise Vorbis recognized, but old header-triad Wwise Vorbis is not supported by this repacker.\"\n };\n }\n\n if (!metadata.vorbis)\n {\n return {\n supported: false,\n reason: \"Wwise Vorbis recognized, but no Vorbis layout metadata was found.\"\n };\n }\n\n return { supported: true, reason: \"\" };\n}\n\nexport function readWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values);\n if (values.emit === OUTPUT_WEM_JSON) return metadata;\n if (values.emit === OUTPUT_OGG)\n {\n if (metadata.codec !== \"wwise-vorbis\")\n {\n const error = new Error(`wem: only Wwise Vorbis can be repacked to Ogg (found ${metadata.codec || \"unknown\"})`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n error.sourceFormat = \"wem\";\n throw error;\n }\n const ogg = convertWemToOgg(bytes, { codebooks: values.codebooks });\n return {\n payloadType: \"raw\",\n sourceFormat: \"wem\",\n outputFormat: \"ogg\",\n codec: \"vorbis\",\n mimeType: \"audio/ogg\",\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false,\n sampleCount: ogg.sampleCount,\n sampleRate: ogg.sampleRate,\n channels: ogg.channels,\n durationSeconds: ogg.durationSeconds,\n loop: ogg.loop,\n pageCount: ogg.pageCount,\n metadata,\n bytes: ogg.bytes\n };\n }\n if (values.emit === OUTPUT_PCM)\n {\n const decoded = decodeToPcm(bytes, metadata);\n return {\n payloadType: OUTPUT_PCM,\n sourceFormat: \"wem\",\n outputFormat: OUTPUT_PCM,\n codec: \"float32\",\n sourceCodec: metadata.codec,\n isDecoded: true,\n pcmDecodeSupported: true,\n sampleCount: decoded.sampleCount,\n sampleRate: decoded.sampleRate,\n channels: decoded.channels,\n durationSeconds: decoded.sampleRate ? decoded.sampleCount / decoded.sampleRate : 0,\n channelData: decoded.channelData,\n metadata\n };\n }\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: \"wem\",\n codec: metadata.codec,\n mimeType: \"application/octet-stream\",\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false,\n metadata,\n bytes\n };\n }\n\n const error = new Error(`wem: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n error.sourceFormat = \"wem\";\n error.emit = values.emit;\n throw error;\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 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 readU16(bytes, offset, littleEndian)\n{\n return littleEndian\n ? bytes[offset] | (bytes[offset + 1] << 8)\n : (bytes[offset] << 8) | bytes[offset + 1];\n}\n\nfunction readU32(bytes, offset, littleEndian)\n{\n return littleEndian\n ? (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] * 0x1000000)) >>> 0\n : ((bytes[offset] * 0x1000000) + (bytes[offset + 1] << 16) + (bytes[offset + 2] << 8) + bytes[offset + 3]) >>> 0;\n}\n"],"names":["OUTPUT_RAW","OUTPUT_JSON","OUTPUT_WEM_JSON","OUTPUT_OGG","OUTPUT_PCM","DEFAULT_VALUES","Object","freeze","emit","inputType","source","WEM_CODEC_NAMES","normalizeValues","base","options","readerName","values","String","replace","toLowerCase","normalizeEmit","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isWEM","bytes","container","fourCc","inspectWEM","littleEndian","info","sourceFormat","riffSize","readU32","codec","codecTag","channels","sampleRate","byteRate","blockAlign","bitsPerSample","extraSize","sampleCount","durationSeconds","dataOffset","dataBytes","vorbis","chunks","offset","fmtOffset","fmtSize","vorbOffset","vorbSize","id","size","push","truncated","readU16","toString","padStart","inline","inspectWithValues","payloadType","mediaTypes","isSupportedWithValues","metadata","oggSupport","getOggSupport","pcmSupport","getPcmSupport","format","supported","confidence","preferred","reason","variants","kind","mimeType","containerOnly","isDecoded","pcmDecodeSupported","warnings","errors","error","message","decodeToPcm","decodePtadpcm","Math","max","floor","channelData","channel","Float32Array","i","at","raw","Error","code","readWithValues","ogg","convertWemToOgg","codebooks","outputFormat","loop","pageCount","decoded","sourceCodec","toJsonValue","value","Array","isArray","map","output","key","entry","entries","length","fromCharCode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/wem/core/helpers.js"],"sourcesContent":["import { convertWemToOgg } from \"./wemToOgg.js\";\nimport { decodePtadpcm } from \"./ptadpcm.js\";\n\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_WEM_JSON = \"wemJson\";\nexport const OUTPUT_OGG = \"ogg\";\nexport const OUTPUT_PCM = \"pcm\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"wem\",\n source: \"\"\n});\n\n/**\n * Wwise RIFF format tags mapped to codec names.\n *\n * Tag meanings follow the publicly documented behavior of Wwise media as\n * observed by community tooling (ww2ogg, vgmstream, wwiser). Unknown tags are\n * reported as `wwise-format-0x<tag>` rather than rejected.\n */\nexport const WEM_CODEC_NAMES = Object.freeze({\n 0x0001: \"pcm\",\n 0x0002: \"wwise-ima-adpcm\",\n 0x0069: \"wwise-ima-adpcm\",\n 0x0165: \"xma2\",\n 0x0166: \"xma2\",\n 0x3040: \"wwise-opus\",\n 0x3041: \"wwise-opus-nx\",\n 0x3042: \"wwise-opus-wem\",\n 0x8311: \"wwise-ptadpcm\",\n 0xaac0: \"aac\",\n 0xfffe: \"pcm-extensible\",\n 0xffff: \"wwise-vorbis\"\n});\n\n/**\n * Normalizes reader options against their supported defaults for the WEM format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsWemFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = values.inputType ? String(values.inputType).replace(/^\\./u, \"\").toLowerCase() : \"wem\";\n values.emit = normalizeEmit(values.emit, readerName);\n return values;\n}\n\n/** Normalizes the requested output representation for the WEM format reader. */\nexport function normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === null) return OUTPUT_RAW;\n if (emit === OUTPUT_JSON) return OUTPUT_WEM_JSON;\n if ([ OUTPUT_RAW, OUTPUT_WEM_JSON, OUTPUT_OGG, OUTPUT_PCM ].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 WEM 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(\"Wem input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\n/**\n * Test for a Wwise RIFF/RIFX WAVE signature.\n *\n * @param {Uint8Array} bytes Candidate bytes.\n * @returns {boolean} True when a RIFF or RIFX WAVE container is present.\n */\nexport function isWEM(bytes)\n{\n if (bytes.byteLength < 12) return false;\n const container = fourCc(bytes, 0);\n return (container === \"RIFF\" || container === \"RIFX\") && fourCc(bytes, 8) === \"WAVE\";\n}\n\n/**\n * Inspect Wwise media bytes without decoding audio data.\n *\n * Reports the chunk map, `fmt ` fields, codec identity, and Vorbis sample\n * count/duration when present. Inspection never throws on unknown chunks or\n * codecs; truncated trailing chunks stop the walk.\n *\n * @param {Uint8Array} bytes Wem bytes.\n * @returns {object} Wem metadata.\n */\nexport function inspectWEM(bytes)\n{\n const littleEndian = fourCc(bytes, 0) !== \"RIFX\";\n const info = {\n sourceFormat: \"wem\",\n container: fourCc(bytes, 0),\n littleEndian,\n riffSize: readU32(bytes, 4, littleEndian),\n codec: \"\",\n codecTag: 0,\n channels: 0,\n sampleRate: 0,\n byteRate: 0,\n blockAlign: 0,\n bitsPerSample: 0,\n extraSize: 0,\n sampleCount: 0,\n durationSeconds: 0,\n dataOffset: 0,\n dataBytes: 0,\n vorbis: null,\n chunks: []\n };\n\n let offset = 12;\n let fmtOffset = 0;\n let fmtSize = 0;\n let vorbOffset = 0;\n let vorbSize = 0;\n\n while (offset + 8 <= bytes.byteLength)\n {\n const id = fourCc(bytes, offset);\n const size = readU32(bytes, offset + 4, littleEndian);\n const dataOffset = offset + 8;\n if (dataOffset + size > bytes.byteLength)\n {\n info.chunks.push({ id, offset, dataOffset, size, truncated: true });\n break;\n }\n info.chunks.push({ id, offset, dataOffset, size });\n\n if (id === \"fmt \" && size >= 16)\n {\n fmtOffset = dataOffset;\n fmtSize = size;\n info.codecTag = readU16(bytes, dataOffset, littleEndian);\n info.channels = readU16(bytes, dataOffset + 2, littleEndian);\n info.sampleRate = readU32(bytes, dataOffset + 4, littleEndian);\n info.byteRate = readU32(bytes, dataOffset + 8, littleEndian);\n info.blockAlign = readU16(bytes, dataOffset + 12, littleEndian);\n info.bitsPerSample = readU16(bytes, dataOffset + 14, littleEndian);\n if (size >= 18) info.extraSize = readU16(bytes, dataOffset + 16, littleEndian);\n info.codec = WEM_CODEC_NAMES[info.codecTag] || `wwise-format-0x${info.codecTag.toString(16).padStart(4, \"0\")}`;\n }\n if (id === \"vorb\")\n {\n vorbOffset = dataOffset;\n vorbSize = size;\n }\n if (id === \"data\")\n {\n info.dataOffset = dataOffset;\n info.dataBytes = size;\n }\n\n offset = dataOffset + size + (size & 1);\n }\n\n if (info.codec === \"wwise-vorbis\")\n {\n // Wwise Vorbis stores its sample count in a separate \"vorb\" chunk, or\n // inline in \"fmt \" at +0x18 when the fmt chunk is 0x42 bytes.\n if (!vorbOffset && fmtSize === 0x42)\n {\n vorbOffset = fmtOffset + 0x18;\n vorbSize = fmtSize - 0x18;\n }\n if (vorbOffset && vorbOffset + 4 <= bytes.byteLength)\n {\n info.sampleCount = readU32(bytes, vorbOffset, littleEndian);\n info.vorbis = {\n vorbOffset,\n vorbSize,\n inline: fmtSize === 0x42,\n sampleCount: info.sampleCount\n };\n }\n }\n\n if (info.sampleCount && info.sampleRate)\n {\n info.durationSeconds = info.sampleCount / info.sampleRate;\n }\n else if ((info.codec === \"pcm\" || info.codec === \"pcm-extensible\") && info.byteRate)\n {\n info.durationSeconds = info.dataBytes / info.byteRate;\n }\n\n return info;\n}\n\n/** Inspects input using normalized format options for the WEM format reader. */\nexport function inspectWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n if (!isWEM(bytes))\n {\n throw new TypeError(\"CjsWemFormat: expected a RIFF/RIFX WAVE (wem) container\");\n }\n return {\n payloadType: \"audio\",\n mediaTypes: [ \"audio\" ],\n byteLength: bytes.byteLength,\n source: values.source || \"buffer\",\n ...inspectWEM(bytes)\n };\n}\n\n/**\n * Reports whether input is supported under normalized format options for the WEM\n * format reader.\n */\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n const oggSupport = getOggSupport(metadata);\n const pcmSupport = getPcmSupport(metadata);\n return {\n format: \"wem\",\n source: values.source || \"buffer\",\n supported: metadata.codec ? \"partial\" : \"none\",\n confidence: metadata.codec ? 1 : 0.5,\n preferred: oggSupport.supported ? OUTPUT_OGG : (pcmSupport.supported ? OUTPUT_PCM : \"raw\"),\n reason: metadata.codec\n ? (oggSupport.supported\n ? \"Wwise Vorbis recognized; repacks losslessly to Ogg Vorbis.\"\n : (metadata.codec === \"wwise-vorbis\"\n ? oggSupport.reason\n : \"Wwise media container recognized; payloads pass through undecoded.\"))\n : \"RIFF/RIFX container recognized but no fmt chunk was found.\",\n metadata,\n variants: [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: metadata.codec || \"unknown\",\n mimeType: \"application/octet-stream\",\n supported: true,\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false\n },\n {\n kind: OUTPUT_OGG,\n payloadType: \"raw\",\n codec: \"vorbis\",\n mimeType: \"audio/ogg\",\n supported: oggSupport.supported,\n containerOnly: true,\n isDecoded: false,\n reason: oggSupport.supported ? \"\" : oggSupport.reason\n },\n {\n kind: OUTPUT_PCM,\n payloadType: OUTPUT_PCM,\n codec: \"float32\",\n supported: pcmSupport.supported,\n containerOnly: false,\n isDecoded: true,\n pcmDecodeSupported: pcmSupport.supported,\n reason: pcmSupport.supported ? \"\" : pcmSupport.reason\n }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"wem\",\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// PCM decode routing by codec: PTADPCM decodes through its own module;\n// uncompressed 16-bit PCM deinterleaves directly. Compressed codecs with\n// their own containers (Vorbis, Opus, XMA) are not decoded here - Vorbis\n// repacks to Ogg instead (OUTPUT_OGG).\nfunction decodeToPcm(bytes, metadata)\n{\n if (metadata.codec === \"wwise-ptadpcm\")\n {\n return decodePtadpcm(bytes, metadata);\n }\n if ((metadata.codec === \"pcm\" || metadata.codec === \"pcm-extensible\") && metadata.bitsPerSample === 16)\n {\n const channels = Math.max(1, metadata.channels);\n const sampleCount = Math.floor(metadata.dataBytes / (2 * channels));\n const channelData = [];\n for (let channel = 0; channel < channels; channel++)\n {\n channelData.push(new Float32Array(sampleCount));\n }\n for (let i = 0; i < sampleCount; i++)\n {\n for (let channel = 0; channel < channels; channel++)\n {\n const at = metadata.dataOffset + (i * channels + channel) * 2;\n const raw = bytes[at] | (bytes[at + 1] << 8);\n channelData[channel][i] = (raw >= 0x8000 ? raw - 0x10000 : raw) / 32768;\n }\n }\n return { channelData, sampleCount, sampleRate: metadata.sampleRate, channels };\n }\n const error = new Error(`wem: pcm decode is not supported for codec ${metadata.codec || \"unknown\"}`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n error.sourceFormat = \"wem\";\n throw error;\n}\n\nfunction getPcmSupport(metadata)\n{\n if (metadata.codec === \"wwise-ptadpcm\") return { supported: true, reason: \"\" };\n if ((metadata.codec === \"pcm\" || metadata.codec === \"pcm-extensible\") && metadata.bitsPerSample === 16)\n {\n return { supported: true, reason: \"\" };\n }\n return {\n supported: false,\n reason: \"PCM decode covers PTADPCM and 16-bit PCM; use the ogg emit for Wwise Vorbis.\"\n };\n}\n\nfunction getOggSupport(metadata)\n{\n if (metadata.codec !== \"wwise-vorbis\")\n {\n return {\n supported: false,\n reason: \"Only Wwise Vorbis media can be repacked to Ogg.\"\n };\n }\n\n const vorbSize = metadata.vorbis?.vorbSize;\n if (vorbSize === 0x28 || vorbSize === 0x2c)\n {\n return {\n supported: false,\n reason: \"Wwise Vorbis recognized, but old header-triad Wwise Vorbis is not supported by this repacker.\"\n };\n }\n\n if (!metadata.vorbis)\n {\n return {\n supported: false,\n reason: \"Wwise Vorbis recognized, but no Vorbis layout metadata was found.\"\n };\n }\n\n return { supported: true, reason: \"\" };\n}\n\n/** Reads input using normalized format options for the WEM format reader. */\nexport function readWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values);\n if (values.emit === OUTPUT_WEM_JSON) return metadata;\n if (values.emit === OUTPUT_OGG)\n {\n if (metadata.codec !== \"wwise-vorbis\")\n {\n const error = new Error(`wem: only Wwise Vorbis can be repacked to Ogg (found ${metadata.codec || \"unknown\"})`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_SUPPORTED\";\n error.sourceFormat = \"wem\";\n throw error;\n }\n const ogg = convertWemToOgg(bytes, { codebooks: values.codebooks });\n return {\n payloadType: \"raw\",\n sourceFormat: \"wem\",\n outputFormat: \"ogg\",\n codec: \"vorbis\",\n mimeType: \"audio/ogg\",\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false,\n sampleCount: ogg.sampleCount,\n sampleRate: ogg.sampleRate,\n channels: ogg.channels,\n durationSeconds: ogg.durationSeconds,\n loop: ogg.loop,\n pageCount: ogg.pageCount,\n metadata,\n bytes: ogg.bytes\n };\n }\n if (values.emit === OUTPUT_PCM)\n {\n const decoded = decodeToPcm(bytes, metadata);\n return {\n payloadType: OUTPUT_PCM,\n sourceFormat: \"wem\",\n outputFormat: OUTPUT_PCM,\n codec: \"float32\",\n sourceCodec: metadata.codec,\n isDecoded: true,\n pcmDecodeSupported: true,\n sampleCount: decoded.sampleCount,\n sampleRate: decoded.sampleRate,\n channels: decoded.channels,\n durationSeconds: decoded.sampleRate ? decoded.sampleCount / decoded.sampleRate : 0,\n channelData: decoded.channelData,\n metadata\n };\n }\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: \"wem\",\n codec: metadata.codec,\n mimeType: \"application/octet-stream\",\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false,\n metadata,\n bytes\n };\n }\n\n const error = new Error(`wem: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n error.sourceFormat = \"wem\";\n error.emit = values.emit;\n throw error;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the WEM 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 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 readU16(bytes, offset, littleEndian)\n{\n return littleEndian\n ? bytes[offset] | (bytes[offset + 1] << 8)\n : (bytes[offset] << 8) | bytes[offset + 1];\n}\n\nfunction readU32(bytes, offset, littleEndian)\n{\n return littleEndian\n ? (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] * 0x1000000)) >>> 0\n : ((bytes[offset] * 0x1000000) + (bytes[offset + 1] << 16) + (bytes[offset + 2] << 8) + bytes[offset + 3]) >>> 0;\n}\n"],"names":["OUTPUT_RAW","OUTPUT_JSON","OUTPUT_WEM_JSON","OUTPUT_OGG","OUTPUT_PCM","DEFAULT_VALUES","Object","freeze","emit","inputType","source","WEM_CODEC_NAMES","normalizeValues","base","options","readerName","values","String","replace","toLowerCase","normalizeEmit","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isWEM","bytes","container","fourCc","inspectWEM","littleEndian","info","sourceFormat","riffSize","readU32","codec","codecTag","channels","sampleRate","byteRate","blockAlign","bitsPerSample","extraSize","sampleCount","durationSeconds","dataOffset","dataBytes","vorbis","chunks","offset","fmtOffset","fmtSize","vorbOffset","vorbSize","id","size","push","truncated","readU16","toString","padStart","inline","inspectWithValues","payloadType","mediaTypes","isSupportedWithValues","metadata","oggSupport","getOggSupport","pcmSupport","getPcmSupport","format","supported","confidence","preferred","reason","variants","kind","mimeType","containerOnly","isDecoded","pcmDecodeSupported","warnings","errors","error","message","decodeToPcm","decodePtadpcm","Math","max","floor","channelData","channel","Float32Array","i","at","raw","Error","code","readWithValues","ogg","convertWemToOgg","codebooks","outputFormat","loop","pageCount","decoded","sourceCodec","toJsonValue","value","Array","isArray","map","output","key","entry","entries","length","fromCharCode"],"mappings":";;;AAGO,MAAMA,UAAU,GAAG;AACnB,MAAMC,WAAW,GAAG;AACpB,MAAMC,eAAe,GAAG;AACxB,MAAMC,UAAU,GAAG;AACnB,MAAMC,UAAU,GAAG;MAEbC,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;AACxCC,EAAAA,IAAI,EAAER,UAAU;AAChBS,EAAAA,SAAS,EAAE,KAAK;AAChBC,EAAAA,MAAM,EAAE;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;MACaC,eAAe,GAAGL,MAAM,CAACC,MAAM,CAAC;AACzC,EAAA,MAAM,EAAE,KAAK;AACb,EAAA,MAAM,EAAE,iBAAiB;AACzB,EAAA,MAAM,EAAE,iBAAiB;AACzB,EAAA,MAAM,EAAE,MAAM;AACd,EAAA,MAAM,EAAE,MAAM;AACd,EAAA,MAAM,EAAE,YAAY;AACpB,EAAA,MAAM,EAAE,eAAe;AACvB,EAAA,MAAM,EAAE,gBAAgB;AACxB,EAAA,MAAM,EAAE,eAAe;AACvB,EAAA,MAAM,EAAE,KAAK;AACb,EAAA,MAAM,EAAE,gBAAgB;AACxB,EAAA,MAAM,EAAE;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACO,SAASK,eAAeA,CAACC,IAAI,GAAGR,cAAc,EAAES,OAAO,GAAG,EAAE,EAAEC,UAAU,GAAG,cAAc,EAChG;AACI,EAAA,MAAMC,MAAM,GAAG;AAAE,IAAA,GAAGX,cAAc;AAAE,IAAA,IAAIQ,IAAI,IAAI,EAAE,CAAC;IAAE,IAAIC,OAAO,IAAI,EAAE;GAAG;EACzEE,MAAM,CAACP,SAAS,GAAGO,MAAM,CAACP,SAAS,GAAGQ,MAAM,CAACD,MAAM,CAACP,SAAS,CAAC,CAACS,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAACC,WAAW,EAAE,GAAG,KAAK;EACxGH,MAAM,CAACR,IAAI,GAAGY,aAAa,CAACJ,MAAM,CAACR,IAAI,EAAEO,UAAU,CAAC;AACpD,EAAA,OAAOC,MAAM;AACjB;;AAEA;AACO,SAASI,aAAaA,CAACZ,IAAI,EAAEO,UAAU,EAC9C;EACI,IAAIP,IAAI,KAAKa,SAAS,IAAIb,IAAI,KAAK,IAAI,EAAE,OAAOR,UAAU;AAC1D,EAAA,IAAIQ,IAAI,KAAKP,WAAW,EAAE,OAAOC,eAAe;AAChD,EAAA,IAAI,CAAEF,UAAU,EAAEE,eAAe,EAAEC,UAAU,EAAEC,UAAU,CAAE,CAACkB,QAAQ,CAACd,IAAI,CAAC,EAAE,OAAOA,IAAI;AACvF,EAAA,MAAM,IAAIe,SAAS,CAAC,CAAA,EAAGR,UAAU,CAAA,qBAAA,EAAwBS,IAAI,CAACC,SAAS,CAACjB,IAAI,CAAC,EAAE,CAAC;AACpF;;AAEA;AACO,SAASkB,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,wDAAwD,CAAC;AACjF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASW,KAAKA,CAACC,KAAK,EAC3B;AACI,EAAA,IAAIA,KAAK,CAACF,UAAU,GAAG,EAAE,EAAE,OAAO,KAAK;AACvC,EAAA,MAAMG,SAAS,GAAGC,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;AAClC,EAAA,OAAO,CAACC,SAAS,KAAK,MAAM,IAAIA,SAAS,KAAK,MAAM,KAAKC,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM;AACxF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,UAAUA,CAACH,KAAK,EAChC;EACI,MAAMI,YAAY,GAAGF,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM;AAChD,EAAA,MAAMK,IAAI,GAAG;AACTC,IAAAA,YAAY,EAAE,KAAK;AACnBL,IAAAA,SAAS,EAAEC,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;IAC3BI,YAAY;IACZG,QAAQ,EAAEC,OAAO,CAACR,KAAK,EAAE,CAAC,EAAEI,YAAY,CAAC;AACzCK,IAAAA,KAAK,EAAE,EAAE;AACTC,IAAAA,QAAQ,EAAE,CAAC;AACXC,IAAAA,QAAQ,EAAE,CAAC;AACXC,IAAAA,UAAU,EAAE,CAAC;AACbC,IAAAA,QAAQ,EAAE,CAAC;AACXC,IAAAA,UAAU,EAAE,CAAC;AACbC,IAAAA,aAAa,EAAE,CAAC;AAChBC,IAAAA,SAAS,EAAE,CAAC;AACZC,IAAAA,WAAW,EAAE,CAAC;AACdC,IAAAA,eAAe,EAAE,CAAC;AAClBC,IAAAA,UAAU,EAAE,CAAC;AACbC,IAAAA,SAAS,EAAE,CAAC;AACZC,IAAAA,MAAM,EAAE,IAAI;AACZC,IAAAA,MAAM,EAAE;GACX;EAED,IAAIC,MAAM,GAAG,EAAE;EACf,IAAIC,SAAS,GAAG,CAAC;EACjB,IAAIC,OAAO,GAAG,CAAC;EACf,IAAIC,UAAU,GAAG,CAAC;EAClB,IAAIC,QAAQ,GAAG,CAAC;AAEhB,EAAA,OAAOJ,MAAM,GAAG,CAAC,IAAIvB,KAAK,CAACF,UAAU,EACrC;AACI,IAAA,MAAM8B,EAAE,GAAG1B,MAAM,CAACF,KAAK,EAAEuB,MAAM,CAAC;IAChC,MAAMM,IAAI,GAAGrB,OAAO,CAACR,KAAK,EAAEuB,MAAM,GAAG,CAAC,EAAEnB,YAAY,CAAC;AACrD,IAAA,MAAMe,UAAU,GAAGI,MAAM,GAAG,CAAC;AAC7B,IAAA,IAAIJ,UAAU,GAAGU,IAAI,GAAG7B,KAAK,CAACF,UAAU,EACxC;AACIO,MAAAA,IAAI,CAACiB,MAAM,CAACQ,IAAI,CAAC;QAAEF,EAAE;QAAEL,MAAM;QAAEJ,UAAU;QAAEU,IAAI;AAAEE,QAAAA,SAAS,EAAE;AAAK,OAAC,CAAC;AACnE,MAAA;AACJ,IAAA;AACA1B,IAAAA,IAAI,CAACiB,MAAM,CAACQ,IAAI,CAAC;MAAEF,EAAE;MAAEL,MAAM;MAAEJ,UAAU;AAAEU,MAAAA;AAAK,KAAC,CAAC;AAElD,IAAA,IAAID,EAAE,KAAK,MAAM,IAAIC,IAAI,IAAI,EAAE,EAC/B;AACIL,MAAAA,SAAS,GAAGL,UAAU;AACtBM,MAAAA,OAAO,GAAGI,IAAI;MACdxB,IAAI,CAACK,QAAQ,GAAGsB,OAAO,CAAChC,KAAK,EAAEmB,UAAU,EAAEf,YAAY,CAAC;AACxDC,MAAAA,IAAI,CAACM,QAAQ,GAAGqB,OAAO,CAAChC,KAAK,EAAEmB,UAAU,GAAG,CAAC,EAAEf,YAAY,CAAC;AAC5DC,MAAAA,IAAI,CAACO,UAAU,GAAGJ,OAAO,CAACR,KAAK,EAAEmB,UAAU,GAAG,CAAC,EAAEf,YAAY,CAAC;AAC9DC,MAAAA,IAAI,CAACQ,QAAQ,GAAGL,OAAO,CAACR,KAAK,EAAEmB,UAAU,GAAG,CAAC,EAAEf,YAAY,CAAC;AAC5DC,MAAAA,IAAI,CAACS,UAAU,GAAGkB,OAAO,CAAChC,KAAK,EAAEmB,UAAU,GAAG,EAAE,EAAEf,YAAY,CAAC;AAC/DC,MAAAA,IAAI,CAACU,aAAa,GAAGiB,OAAO,CAAChC,KAAK,EAAEmB,UAAU,GAAG,EAAE,EAAEf,YAAY,CAAC;AAClE,MAAA,IAAIyB,IAAI,IAAI,EAAE,EAAExB,IAAI,CAACW,SAAS,GAAGgB,OAAO,CAAChC,KAAK,EAAEmB,UAAU,GAAG,EAAE,EAAEf,YAAY,CAAC;MAC9EC,IAAI,CAACI,KAAK,GAAGjC,eAAe,CAAC6B,IAAI,CAACK,QAAQ,CAAC,IAAI,CAAA,eAAA,EAAkBL,IAAI,CAACK,QAAQ,CAACuB,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;AAClH,IAAA;IACA,IAAIN,EAAE,KAAK,MAAM,EACjB;AACIF,MAAAA,UAAU,GAAGP,UAAU;AACvBQ,MAAAA,QAAQ,GAAGE,IAAI;AACnB,IAAA;IACA,IAAID,EAAE,KAAK,MAAM,EACjB;MACIvB,IAAI,CAACc,UAAU,GAAGA,UAAU;MAC5Bd,IAAI,CAACe,SAAS,GAAGS,IAAI;AACzB,IAAA;IAEAN,MAAM,GAAGJ,UAAU,GAAGU,IAAI,IAAIA,IAAI,GAAG,CAAC,CAAC;AAC3C,EAAA;AAEA,EAAA,IAAIxB,IAAI,CAACI,KAAK,KAAK,cAAc,EACjC;AACI;AACA;AACA,IAAA,IAAI,CAACiB,UAAU,IAAID,OAAO,KAAK,IAAI,EACnC;MACIC,UAAU,GAAGF,SAAS,GAAG,IAAI;MAC7BG,QAAQ,GAAGF,OAAO,GAAG,IAAI;AAC7B,IAAA;IACA,IAAIC,UAAU,IAAIA,UAAU,GAAG,CAAC,IAAI1B,KAAK,CAACF,UAAU,EACpD;MACIO,IAAI,CAACY,WAAW,GAAGT,OAAO,CAACR,KAAK,EAAE0B,UAAU,EAAEtB,YAAY,CAAC;MAC3DC,IAAI,CAACgB,MAAM,GAAG;QACVK,UAAU;QACVC,QAAQ;QACRQ,MAAM,EAAEV,OAAO,KAAK,IAAI;QACxBR,WAAW,EAAEZ,IAAI,CAACY;OACrB;AACL,IAAA;AACJ,EAAA;AAEA,EAAA,IAAIZ,IAAI,CAACY,WAAW,IAAIZ,IAAI,CAACO,UAAU,EACvC;IACIP,IAAI,CAACa,eAAe,GAAGb,IAAI,CAACY,WAAW,GAAGZ,IAAI,CAACO,UAAU;AAC7D,EAAA,CAAC,MACI,IAAI,CAACP,IAAI,CAACI,KAAK,KAAK,KAAK,IAAIJ,IAAI,CAACI,KAAK,KAAK,gBAAgB,KAAKJ,IAAI,CAACQ,QAAQ,EACnF;IACIR,IAAI,CAACa,eAAe,GAAGb,IAAI,CAACe,SAAS,GAAGf,IAAI,CAACQ,QAAQ;AACzD,EAAA;AAEA,EAAA,OAAOR,IAAI;AACf;;AAEA;AACO,SAAS+B,iBAAiBA,CAAC5C,KAAK,EAAEX,MAAM,GAAGX,cAAc,EAChE;AACI,EAAA,MAAM8B,KAAK,GAAGT,OAAO,CAACC,KAAK,CAAC;AAC5B,EAAA,IAAI,CAACO,KAAK,CAACC,KAAK,CAAC,EACjB;AACI,IAAA,MAAM,IAAIZ,SAAS,CAAC,yDAAyD,CAAC;AAClF,EAAA;EACA,OAAO;AACHiD,IAAAA,WAAW,EAAE,OAAO;IACpBC,UAAU,EAAE,CAAE,OAAO,CAAE;IACvBxC,UAAU,EAAEE,KAAK,CAACF,UAAU;AAC5BvB,IAAAA,MAAM,EAAEM,MAAM,CAACN,MAAM,IAAI,QAAQ;IACjC,GAAG4B,UAAU,CAACH,KAAK;GACtB;AACL;;AAEA;AACA;AACA;AACA;AACO,SAASuC,qBAAqBA,CAAC/C,KAAK,EAAEX,MAAM,GAAGX,cAAc,EACpE;EACI,IACA;AACI,IAAA,MAAMsE,QAAQ,GAAGJ,iBAAiB,CAAC5C,KAAK,EAAEX,MAAM,CAAC;AACjD,IAAA,MAAM4D,UAAU,GAAGC,aAAa,CAACF,QAAQ,CAAC;AAC1C,IAAA,MAAMG,UAAU,GAAGC,aAAa,CAACJ,QAAQ,CAAC;IAC1C,OAAO;AACHK,MAAAA,MAAM,EAAE,KAAK;AACbtE,MAAAA,MAAM,EAAEM,MAAM,CAACN,MAAM,IAAI,QAAQ;AACjCuE,MAAAA,SAAS,EAAEN,QAAQ,CAAC/B,KAAK,GAAG,SAAS,GAAG,MAAM;AAC9CsC,MAAAA,UAAU,EAAEP,QAAQ,CAAC/B,KAAK,GAAG,CAAC,GAAG,GAAG;AACpCuC,MAAAA,SAAS,EAAEP,UAAU,CAACK,SAAS,GAAG9E,UAAU,GAAI2E,UAAU,CAACG,SAAS,GAAG7E,UAAU,GAAG,KAAM;MAC1FgF,MAAM,EAAET,QAAQ,CAAC/B,KAAK,GACfgC,UAAU,CAACK,SAAS,GACjB,4DAA4D,GAC3DN,QAAQ,CAAC/B,KAAK,KAAK,cAAc,GAC9BgC,UAAU,CAACQ,MAAM,GACjB,oEAAqE,GAC7E,4DAA4D;MAClET,QAAQ;AACRU,MAAAA,QAAQ,EAAE,CACN;AACIC,QAAAA,IAAI,EAAE,KAAK;AACXd,QAAAA,WAAW,EAAE,KAAK;AAClB5B,QAAAA,KAAK,EAAE+B,QAAQ,CAAC/B,KAAK,IAAI,SAAS;AAClC2C,QAAAA,QAAQ,EAAE,0BAA0B;AACpCN,QAAAA,SAAS,EAAE,IAAI;AACfO,QAAAA,aAAa,EAAE,IAAI;AACnBC,QAAAA,SAAS,EAAE,KAAK;AAChBC,QAAAA,kBAAkB,EAAE;AACxB,OAAC,EACD;AACIJ,QAAAA,IAAI,EAAEnF,UAAU;AAChBqE,QAAAA,WAAW,EAAE,KAAK;AAClB5B,QAAAA,KAAK,EAAE,QAAQ;AACf2C,QAAAA,QAAQ,EAAE,WAAW;QACrBN,SAAS,EAAEL,UAAU,CAACK,SAAS;AAC/BO,QAAAA,aAAa,EAAE,IAAI;AACnBC,QAAAA,SAAS,EAAE,KAAK;QAChBL,MAAM,EAAER,UAAU,CAACK,SAAS,GAAG,EAAE,GAAGL,UAAU,CAACQ;AACnD,OAAC,EACD;AACIE,QAAAA,IAAI,EAAElF,UAAU;AAChBoE,QAAAA,WAAW,EAAEpE,UAAU;AACvBwC,QAAAA,KAAK,EAAE,SAAS;QAChBqC,SAAS,EAAEH,UAAU,CAACG,SAAS;AAC/BO,QAAAA,aAAa,EAAE,KAAK;AACpBC,QAAAA,SAAS,EAAE,IAAI;QACfC,kBAAkB,EAAEZ,UAAU,CAACG,SAAS;QACxCG,MAAM,EAAEN,UAAU,CAACG,SAAS,GAAG,EAAE,GAAGH,UAAU,CAACM;AACnD,OAAC,CACJ;AACDO,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,MAAM,EAAE;KACX;EACL,CAAC,CACD,OAAOC,KAAK,EACZ;IACI,OAAO;AACHb,MAAAA,MAAM,EAAE,KAAK;AACbtE,MAAAA,MAAM,EAAEM,MAAM,CAACN,MAAM,IAAI,QAAQ;AACjCuE,MAAAA,SAAS,EAAE,MAAM;AACjBC,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,SAAS,EAAE,EAAE;MACbC,MAAM,EAAES,KAAK,CAACC,OAAO;AACrBnB,MAAAA,QAAQ,EAAE,IAAI;AACdU,MAAAA,QAAQ,EAAE,EAAE;AACZM,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,MAAM,EAAE,CAAEC,KAAK,CAACC,OAAO;KAC1B;AACL,EAAA;AACJ;;AAEA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CAAC5D,KAAK,EAAEwC,QAAQ,EACpC;AACI,EAAA,IAAIA,QAAQ,CAAC/B,KAAK,KAAK,eAAe,EACtC;AACI,IAAA,OAAOoD,aAAa,CAAC7D,KAAK,EAAEwC,QAAQ,CAAC;AACzC,EAAA;AACA,EAAA,IAAI,CAACA,QAAQ,CAAC/B,KAAK,KAAK,KAAK,IAAI+B,QAAQ,CAAC/B,KAAK,KAAK,gBAAgB,KAAK+B,QAAQ,CAACzB,aAAa,KAAK,EAAE,EACtG;IACI,MAAMJ,QAAQ,GAAGmD,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEvB,QAAQ,CAAC7B,QAAQ,CAAC;AAC/C,IAAA,MAAMM,WAAW,GAAG6C,IAAI,CAACE,KAAK,CAACxB,QAAQ,CAACpB,SAAS,IAAI,CAAC,GAAGT,QAAQ,CAAC,CAAC;IACnE,MAAMsD,WAAW,GAAG,EAAE;IACtB,KAAK,IAAIC,OAAO,GAAG,CAAC,EAAEA,OAAO,GAAGvD,QAAQ,EAAEuD,OAAO,EAAE,EACnD;MACID,WAAW,CAACnC,IAAI,CAAC,IAAIqC,YAAY,CAAClD,WAAW,CAAC,CAAC;AACnD,IAAA;IACA,KAAK,IAAImD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGnD,WAAW,EAAEmD,CAAC,EAAE,EACpC;MACI,KAAK,IAAIF,OAAO,GAAG,CAAC,EAAEA,OAAO,GAAGvD,QAAQ,EAAEuD,OAAO,EAAE,EACnD;AACI,QAAA,MAAMG,EAAE,GAAG7B,QAAQ,CAACrB,UAAU,GAAG,CAACiD,CAAC,GAAGzD,QAAQ,GAAGuD,OAAO,IAAI,CAAC;AAC7D,QAAA,MAAMI,GAAG,GAAGtE,KAAK,CAACqE,EAAE,CAAC,GAAIrE,KAAK,CAACqE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAE;AAC5CJ,QAAAA,WAAW,CAACC,OAAO,CAAC,CAACE,CAAC,CAAC,GAAG,CAACE,GAAG,IAAI,MAAM,GAAGA,GAAG,GAAG,OAAO,GAAGA,GAAG,IAAI,KAAK;AAC3E,MAAA;AACJ,IAAA;IACA,OAAO;MAAEL,WAAW;MAAEhD,WAAW;MAAEL,UAAU,EAAE4B,QAAQ,CAAC5B,UAAU;AAAED,MAAAA;KAAU;AAClF,EAAA;AACA,EAAA,MAAM+C,KAAK,GAAG,IAAIa,KAAK,CAAC,CAAA,2CAAA,EAA8C/B,QAAQ,CAAC/B,KAAK,IAAI,SAAS,CAAA,CAAE,CAAC;EACpGiD,KAAK,CAACc,IAAI,GAAG,iCAAiC;EAC9Cd,KAAK,CAACpD,YAAY,GAAG,KAAK;AAC1B,EAAA,MAAMoD,KAAK;AACf;AAEA,SAASd,aAAaA,CAACJ,QAAQ,EAC/B;AACI,EAAA,IAAIA,QAAQ,CAAC/B,KAAK,KAAK,eAAe,EAAE,OAAO;AAAEqC,IAAAA,SAAS,EAAE,IAAI;AAAEG,IAAAA,MAAM,EAAE;GAAI;AAC9E,EAAA,IAAI,CAACT,QAAQ,CAAC/B,KAAK,KAAK,KAAK,IAAI+B,QAAQ,CAAC/B,KAAK,KAAK,gBAAgB,KAAK+B,QAAQ,CAACzB,aAAa,KAAK,EAAE,EACtG;IACI,OAAO;AAAE+B,MAAAA,SAAS,EAAE,IAAI;AAAEG,MAAAA,MAAM,EAAE;KAAI;AAC1C,EAAA;EACA,OAAO;AACHH,IAAAA,SAAS,EAAE,KAAK;AAChBG,IAAAA,MAAM,EAAE;GACX;AACL;AAEA,SAASP,aAAaA,CAACF,QAAQ,EAC/B;AACI,EAAA,IAAIA,QAAQ,CAAC/B,KAAK,KAAK,cAAc,EACrC;IACI,OAAO;AACHqC,MAAAA,SAAS,EAAE,KAAK;AAChBG,MAAAA,MAAM,EAAE;KACX;AACL,EAAA;AAEA,EAAA,MAAMtB,QAAQ,GAAGa,QAAQ,CAACnB,MAAM,EAAEM,QAAQ;AAC1C,EAAA,IAAIA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAK,IAAI,EAC1C;IACI,OAAO;AACHmB,MAAAA,SAAS,EAAE,KAAK;AAChBG,MAAAA,MAAM,EAAE;KACX;AACL,EAAA;AAEA,EAAA,IAAI,CAACT,QAAQ,CAACnB,MAAM,EACpB;IACI,OAAO;AACHyB,MAAAA,SAAS,EAAE,KAAK;AAChBG,MAAAA,MAAM,EAAE;KACX;AACL,EAAA;EAEA,OAAO;AAAEH,IAAAA,SAAS,EAAE,IAAI;AAAEG,IAAAA,MAAM,EAAE;GAAI;AAC1C;;AAEA;AACO,SAASwB,cAAcA,CAACjF,KAAK,EAAEX,MAAM,GAAGX,cAAc,EAC7D;AACI,EAAA,MAAM8B,KAAK,GAAGT,OAAO,CAACC,KAAK,CAAC;AAC5B,EAAA,MAAMgD,QAAQ,GAAGJ,iBAAiB,CAACpC,KAAK,EAAEnB,MAAM,CAAC;AACjD,EAAA,IAAIA,MAAM,CAACR,IAAI,KAAKN,eAAe,EAAE,OAAOyE,QAAQ;AACpD,EAAA,IAAI3D,MAAM,CAACR,IAAI,KAAKL,UAAU,EAC9B;AACI,IAAA,IAAIwE,QAAQ,CAAC/B,KAAK,KAAK,cAAc,EACrC;AACI,MAAA,MAAMiD,KAAK,GAAG,IAAIa,KAAK,CAAC,CAAA,qDAAA,EAAwD/B,QAAQ,CAAC/B,KAAK,IAAI,SAAS,CAAA,CAAA,CAAG,CAAC;MAC/GiD,KAAK,CAACc,IAAI,GAAG,iCAAiC;MAC9Cd,KAAK,CAACpD,YAAY,GAAG,KAAK;AAC1B,MAAA,MAAMoD,KAAK;AACf,IAAA;AACA,IAAA,MAAMgB,GAAG,GAAGC,eAAe,CAAC3E,KAAK,EAAE;MAAE4E,SAAS,EAAE/F,MAAM,CAAC+F;AAAU,KAAC,CAAC;IACnE,OAAO;AACHvC,MAAAA,WAAW,EAAE,KAAK;AAClB/B,MAAAA,YAAY,EAAE,KAAK;AACnBuE,MAAAA,YAAY,EAAE,KAAK;AACnBpE,MAAAA,KAAK,EAAE,QAAQ;AACf2C,MAAAA,QAAQ,EAAE,WAAW;AACrBC,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,kBAAkB,EAAE,KAAK;MACzBtC,WAAW,EAAEyD,GAAG,CAACzD,WAAW;MAC5BL,UAAU,EAAE8D,GAAG,CAAC9D,UAAU;MAC1BD,QAAQ,EAAE+D,GAAG,CAAC/D,QAAQ;MACtBO,eAAe,EAAEwD,GAAG,CAACxD,eAAe;MACpC4D,IAAI,EAAEJ,GAAG,CAACI,IAAI;MACdC,SAAS,EAAEL,GAAG,CAACK,SAAS;MACxBvC,QAAQ;MACRxC,KAAK,EAAE0E,GAAG,CAAC1E;KACd;AACL,EAAA;AACA,EAAA,IAAInB,MAAM,CAACR,IAAI,KAAKJ,UAAU,EAC9B;AACI,IAAA,MAAM+G,OAAO,GAAGpB,WAAW,CAAC5D,KAAK,EAAEwC,QAAQ,CAAC;IAC5C,OAAO;AACHH,MAAAA,WAAW,EAAEpE,UAAU;AACvBqC,MAAAA,YAAY,EAAE,KAAK;AACnBuE,MAAAA,YAAY,EAAE5G,UAAU;AACxBwC,MAAAA,KAAK,EAAE,SAAS;MAChBwE,WAAW,EAAEzC,QAAQ,CAAC/B,KAAK;AAC3B6C,MAAAA,SAAS,EAAE,IAAI;AACfC,MAAAA,kBAAkB,EAAE,IAAI;MACxBtC,WAAW,EAAE+D,OAAO,CAAC/D,WAAW;MAChCL,UAAU,EAAEoE,OAAO,CAACpE,UAAU;MAC9BD,QAAQ,EAAEqE,OAAO,CAACrE,QAAQ;AAC1BO,MAAAA,eAAe,EAAE8D,OAAO,CAACpE,UAAU,GAAGoE,OAAO,CAAC/D,WAAW,GAAG+D,OAAO,CAACpE,UAAU,GAAG,CAAC;MAClFqD,WAAW,EAAEe,OAAO,CAACf,WAAW;AAChCzB,MAAAA;KACH;AACL,EAAA;AACA,EAAA,IAAI3D,MAAM,CAACR,IAAI,KAAKR,UAAU,EAC9B;IACI,OAAO;AACHwE,MAAAA,WAAW,EAAE,KAAK;AAClB/B,MAAAA,YAAY,EAAE,KAAK;MACnBG,KAAK,EAAE+B,QAAQ,CAAC/B,KAAK;AACrB2C,MAAAA,QAAQ,EAAE,0BAA0B;AACpCC,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,kBAAkB,EAAE,KAAK;MACzBf,QAAQ;AACRxC,MAAAA;KACH;AACL,EAAA;EAEA,MAAM0D,KAAK,GAAG,IAAIa,KAAK,CAAC,cAAc1F,MAAM,CAACR,IAAI,CAAA,wBAAA,CAA0B,CAAC;EAC5EqF,KAAK,CAACc,IAAI,GAAG,mCAAmC;EAChDd,KAAK,CAACpD,YAAY,GAAG,KAAK;AAC1BoD,EAAAA,KAAK,CAACrF,IAAI,GAAGQ,MAAM,CAACR,IAAI;AACxB,EAAA,MAAMqF,KAAK;AACf;;AAEA;AACO,SAASwB,WAAWA,CAACC,KAAK,EACjC;AACI,EAAA,IAAIA,KAAK,YAAY1F,UAAU,EAAE,OAAO;IAAEK,UAAU,EAAEqF,KAAK,CAACrF;GAAY;AACxE,EAAA,IAAIsF,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,IAAItH,MAAM,CAACuH,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,SAASjF,MAAMA,CAACF,KAAK,EAAEuB,MAAM,EAAEoE,MAAM,GAAG,CAAC,EACzC;EACI,IAAIR,KAAK,GAAG,EAAE;EACd,KAAK,IAAIf,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuB,MAAM,EAAEvB,CAAC,EAAE,EAAEe,KAAK,IAAIrG,MAAM,CAAC8G,YAAY,CAAC5F,KAAK,CAACuB,MAAM,GAAG6C,CAAC,CAAC,IAAI,CAAC,CAAC;AACrF,EAAA,OAAOe,KAAK;AAChB;AAEA,SAASnD,OAAOA,CAAChC,KAAK,EAAEuB,MAAM,EAAEnB,YAAY,EAC5C;AACI,EAAA,OAAOA,YAAY,GACbJ,KAAK,CAACuB,MAAM,CAAC,GAAIvB,KAAK,CAACuB,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GACvCvB,KAAK,CAACuB,MAAM,CAAC,IAAI,CAAC,GAAIvB,KAAK,CAACuB,MAAM,GAAG,CAAC,CAAC;AAClD;AAEA,SAASf,OAAOA,CAACR,KAAK,EAAEuB,MAAM,EAAEnB,YAAY,EAC5C;AACI,EAAA,OAAOA,YAAY,GACb,CAACJ,KAAK,CAACuB,MAAM,CAAC,GAAIvB,KAAK,CAACuB,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GAAIvB,KAAK,CAACuB,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG,GAAIvB,KAAK,CAACuB,MAAM,GAAG,CAAC,CAAC,GAAG,SAAU,MAAM,CAAC,GAC5GvB,KAAK,CAACuB,MAAM,CAAC,GAAG,SAAS,IAAKvB,KAAK,CAACuB,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAIvB,KAAK,CAACuB,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAGvB,KAAK,CAACuB,MAAM,GAAG,CAAC,CAAC,KAAM,CAAC;AACxH;;;;"}
|
|
@@ -10,56 +10,101 @@ const FORMAT_NAME = "CjsYamlFormat";
|
|
|
10
10
|
*/
|
|
11
11
|
class CjsYamlFormat {
|
|
12
12
|
#values = DEFAULT_VALUES;
|
|
13
|
+
|
|
14
|
+
/** Creates a CjsYamlFormat with caller-provided reader configuration. */
|
|
13
15
|
constructor(options = {}) {
|
|
14
16
|
this.SetValues(options);
|
|
15
17
|
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Applies caller-provided options after normalizing supported fields for the
|
|
21
|
+
* YAML document reader.
|
|
22
|
+
*/
|
|
16
23
|
SetValues(options = {}) {
|
|
17
24
|
this.#values = normalizeValues(this.#values, options, FORMAT_NAME);
|
|
18
25
|
return this;
|
|
19
26
|
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Returns a snapshot of the normalized reader options for the YAML document
|
|
30
|
+
* reader.
|
|
31
|
+
*/
|
|
20
32
|
GetValues(options = {}) {
|
|
21
33
|
return normalizeValues(this.#values, options, FORMAT_NAME);
|
|
22
34
|
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Reads the primary public payload representation from the supplied input
|
|
38
|
+
* for the YAML document reader.
|
|
39
|
+
*/
|
|
23
40
|
Read(input, options = {}) {
|
|
24
41
|
return CjsYamlFormat.read(input, this.GetValues(options));
|
|
25
42
|
}
|
|
43
|
+
|
|
44
|
+
/** Reads payload from the current YAML document reader. */
|
|
26
45
|
ReadPayload(input, options = {}) {
|
|
27
46
|
return CjsYamlFormat.readPayload(input, this.GetValues(options));
|
|
28
47
|
}
|
|
48
|
+
|
|
49
|
+
/** Reads raw from the current YAML document reader. */
|
|
29
50
|
ReadRaw(input, options = {}) {
|
|
30
51
|
return CjsYamlFormat.readRaw(input, this.GetValues(options));
|
|
31
52
|
}
|
|
53
|
+
|
|
54
|
+
/** Reads document from the current YAML document reader. */
|
|
32
55
|
ReadDocument(input, options = {}) {
|
|
33
56
|
return CjsYamlFormat.readDocument(input, this.GetValues(options));
|
|
34
57
|
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Returns structural metadata without materializing the decoded payload for
|
|
61
|
+
* the YAML document reader.
|
|
62
|
+
*/
|
|
35
63
|
Inspect(input, options = {}) {
|
|
36
64
|
return CjsYamlFormat.inspect(input, this.GetValues(options));
|
|
37
65
|
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Converts the current decoded payload into a JSON-safe representation for
|
|
69
|
+
* the YAML document reader.
|
|
70
|
+
*/
|
|
38
71
|
ToJSON(value, options = {}) {
|
|
39
72
|
return toJsonGraph(value, this.GetValues(options));
|
|
40
73
|
}
|
|
74
|
+
|
|
75
|
+
/** Provides the one-shot YAML payload reader entry point. */
|
|
41
76
|
static read(input, options = {}) {
|
|
42
77
|
const values = normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME);
|
|
43
78
|
if (values.emit === OUTPUT_RAW) return new CjsYamlReader(input, values).ReadRaw();
|
|
44
79
|
if (values.emit === OUTPUT_DOCUMENT) return new CjsYamlReader(input, values).ReadDocument();
|
|
45
80
|
return new CjsYamlReader(input, values).ReadPayload();
|
|
46
81
|
}
|
|
82
|
+
|
|
83
|
+
/** Provides the one-shot YAML normalized-payload reader entry point. */
|
|
47
84
|
static readPayload(input, options = {}) {
|
|
48
85
|
const values = normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME);
|
|
49
86
|
return new CjsYamlReader(input, values).ReadPayload();
|
|
50
87
|
}
|
|
88
|
+
|
|
89
|
+
/** Provides the one-shot YAML raw-value reader entry point. */
|
|
51
90
|
static readRaw(input, options = {}) {
|
|
52
91
|
const values = normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME);
|
|
53
92
|
return new CjsYamlReader(input, values).ReadRaw();
|
|
54
93
|
}
|
|
94
|
+
|
|
95
|
+
/** Provides the one-shot YAML document reader entry point. */
|
|
55
96
|
static readDocument(input, options = {}) {
|
|
56
97
|
const values = normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME);
|
|
57
98
|
return new CjsYamlReader(input, values).ReadDocument();
|
|
58
99
|
}
|
|
100
|
+
|
|
101
|
+
/** Provides the one-shot YAML metadata inspection entry point. */
|
|
59
102
|
static inspect(input, options = {}) {
|
|
60
103
|
const values = normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME);
|
|
61
104
|
return new CjsYamlReader(input, values).Inspect();
|
|
62
105
|
}
|
|
106
|
+
|
|
107
|
+
/** Provides the one-shot YAML JSON conversion entry point. */
|
|
63
108
|
static toJSON(value, options = {}) {
|
|
64
109
|
return toJsonGraph(value, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));
|
|
65
110
|
}
|