@carbonenginejs/runtime-resource 0.13.0 → 0.14.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/LICENSE +21 -21
- package/NOTICE +32 -32
- package/README.md +129 -129
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3858
- package/dist/CjsResManFetchProvider.js +94 -94
- package/dist/CjsResManWorkQueue.js +301 -301
- package/dist/_virtual/_rollupPluginBabelHelpers.js +150 -150
- package/dist/format/CjsBlueReader.js +358 -358
- package/dist/format/CjsByteReader.js +310 -310
- package/dist/format/CjsByteWriter.js +242 -242
- package/dist/format/CjsFormat.js +223 -223
- package/dist/format/CjsFormatError.js +41 -41
- package/dist/format/CjsReader.js +22 -22
- package/dist/format/CjsResourceProbe.js +279 -279
- package/dist/format/CjsStringTable.js +268 -268
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js +265 -265
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -182
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -321
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -1147
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -197
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -146
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- package/dist/format/effect/sha256.js +114 -114
- package/dist/format/index.js +11 -11
- package/dist/format/payloadContract.js +193 -193
- package/dist/formats/black/CjsBlackFormat.js +310 -310
- package/dist/formats/black/core/CjsBlackBinaryReader.js +260 -260
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +448 -448
- package/dist/formats/black/core/CjsBlackReader.js +764 -764
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +540 -540
- package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -4
- package/dist/formats/black/core/blackConstants.js +7 -7
- package/dist/formats/black/core/blackDefinitions.js +10 -10
- package/dist/formats/black/core/blackEnums.js +6 -6
- package/dist/formats/black/core/blackSchema.js +3 -3
- package/dist/formats/black/core/blackVersion.js +22 -22
- package/dist/formats/black/core/helpers.js +199 -199
- package/dist/formats/black/core/schema.js +4 -4
- package/dist/formats/black/index.js +2 -2
- package/dist/formats/bnk/CjsBnkFormat.js +175 -175
- package/dist/formats/bnk/core/busNodes.js +252 -252
- package/dist/formats/bnk/core/effectNodes.js +147 -147
- package/dist/formats/bnk/core/eventAction.js +416 -416
- package/dist/formats/bnk/core/globalSettings.js +215 -215
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -512
- package/dist/formats/bnk/core/musicNodes.js +540 -540
- package/dist/formats/bnk/core/nodeBase.js +553 -553
- package/dist/formats/bnk/core/sfxNodes.js +632 -632
- package/dist/formats/bnk/core/soundbanksInfo.js +209 -209
- package/dist/formats/bnk/index.js +2 -2
- package/dist/formats/cmf/CjsCmfFormat.js +497 -497
- package/dist/formats/cmf/core/binary.js +194 -194
- package/dist/formats/cmf/core/buffers.js +237 -237
- package/dist/formats/cmf/core/constants.js +47 -47
- package/dist/formats/cmf/core/gr2Anim.js +453 -453
- package/dist/formats/cmf/core/helpers.js +318 -318
- package/dist/formats/cmf/core/pack.js +276 -276
- package/dist/formats/cmf/core/schema.js +374 -374
- package/dist/formats/cmf/core/shared.js +277 -277
- package/dist/formats/cmf/core/writer.js +571 -571
- package/dist/formats/cmf/index.js +2 -2
- package/dist/formats/dds/CjsDdsFormat.js +200 -200
- package/dist/formats/dds/core/bc6h.js +298 -298
- package/dist/formats/dds/core/bc7.js +272 -272
- package/dist/formats/dds/core/helpers.js +901 -862
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +187 -142
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/formats/dxbc/core/DxbcReader.js +266 -266
- package/dist/formats/dxbc/core/container.js +169 -169
- package/dist/formats/dxbc/core/decoder.js +789 -789
- package/dist/formats/dxbc/core/disassemble.js +240 -0
- package/dist/formats/dxbc/core/disassemble.js.map +1 -0
- package/dist/formats/dxbc/core/errors.js +19 -19
- package/dist/formats/dxbc/core/helpers.js +220 -220
- package/dist/formats/dxbc/core/opcodes.js +45 -45
- package/dist/formats/dxbc/core/program.js +91 -91
- package/dist/formats/dxbc/core/signature.js +172 -172
- package/dist/formats/dxbc/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -266
- package/dist/formats/fbx/core/helpers.js +3932 -3932
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +142 -142
- package/dist/formats/flac/core/helpers.js +315 -315
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +141 -141
- package/dist/formats/gif/core/helpers.js +380 -380
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +252 -290
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +287 -307
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/json.js +79 -79
- package/dist/formats/gltf/core/parser.js +679 -679
- package/dist/formats/gltf/core/targets.js +173 -173
- package/dist/formats/gltf/index.js +2 -2
- package/dist/formats/gr2/CjsGr2Format.js +289 -289
- package/dist/formats/gr2/core/bitknit2.js +282 -282
- package/dist/formats/gr2/core/curves.js +1047 -1047
- package/dist/formats/gr2/core/gsf.js +72 -72
- package/dist/formats/gr2/core/helpers.js +352 -352
- package/dist/formats/gr2/core/json.js +622 -622
- package/dist/formats/gr2/core/oodle1.js +388 -388
- package/dist/formats/gr2/core/tangents.js +48 -48
- package/dist/formats/gr2/core/targets.js +361 -361
- package/dist/formats/gr2/index.js +2 -2
- package/dist/formats/hlsl/CjsHlslFormat.js +233 -254
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -15
- package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -19
- package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -130
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -37
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -94
- package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -44
- package/dist/formats/hlsl/core/analysis.js +51 -51
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +850 -850
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -128
- package/dist/formats/hlsl/core/helpers.js +270 -270
- package/dist/formats/hlsl/core/json.js +284 -284
- package/dist/formats/hlsl/core/localLightFamily.js +133 -133
- package/dist/formats/hlsl/core/metadata.js +327 -327
- package/dist/formats/hlsl/core/render-states.js +280 -280
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -43
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +320 -320
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +423 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -62
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -52
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -38
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -50
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -86
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -31
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -42
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -55
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -29
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -220
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -30
- package/dist/formats/hlsl/index.js +3 -3
- package/dist/formats/index.js +33 -33
- package/dist/formats/jpeg/CjsJpegFormat.js +212 -212
- package/dist/formats/jpeg/core/helpers.js +402 -402
- package/dist/formats/jpeg/core/jpeg.js +480 -480
- package/dist/formats/jpeg/index.js +2 -2
- package/dist/formats/mp3/CjsMp3Format.js +197 -197
- package/dist/formats/mp3/core/helpers.js +375 -375
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +197 -197
- package/dist/formats/mp4/core/helpers.js +484 -484
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +232 -253
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +553 -573
- package/dist/formats/obj/core/helpers.js.map +1 -1
- package/dist/formats/obj/core/json.js +64 -64
- package/dist/formats/obj/core/parser.js +321 -321
- package/dist/formats/obj/index.js +2 -2
- package/dist/formats/ogg/CjsOggFormat.js +143 -143
- package/dist/formats/ogg/core/helpers.js +410 -410
- package/dist/formats/ogg/core/imdct.js +178 -178
- package/dist/formats/ogg/core/vorbis.js +1017 -1017
- package/dist/formats/ogg/index.js +2 -2
- package/dist/formats/pickle/CjsPickleFormat.js +214 -214
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -551
- package/dist/formats/pickle/index.js +2 -2
- package/dist/formats/png/CjsPngFormat.js +201 -201
- package/dist/formats/png/core/helpers.js +635 -635
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +263 -263
- package/dist/formats/red/core/CjsRedReader.js +246 -246
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +158 -158
- package/dist/formats/red/core/redGraph.js +71 -71
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +320 -365
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/stl/core/helpers.js +241 -261
- package/dist/formats/stl/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +642 -642
- package/dist/formats/stl/core/targets.js +173 -173
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +197 -197
- package/dist/formats/tga/core/helpers.js +493 -493
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +198 -198
- package/dist/formats/wav/core/helpers.js +365 -365
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webgl/CjsWebglFormat.js +199 -199
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -70
- package/dist/formats/webgl/core/effectPackage.js +900 -900
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2820
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -486
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -98
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -552
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -243
- package/dist/formats/webgl/core/glslEffectCompleteness.js +85 -85
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -1
- package/dist/formats/webgl/core/helpers.js +167 -167
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -122
- package/dist/formats/webgl/core/readGlslEffectContainer.js +202 -256
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -1
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -89
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js +354 -354
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +306 -306
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/helpers.js +443 -443
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +212 -212
- package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -220
- package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -137
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +449 -449
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -494
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -177
- package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -61
- package/dist/formats/webgpu/core/packageEffect.js +381 -381
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- package/dist/formats/webgpu/core/packageMetadata.js +17 -17
- package/dist/formats/webgpu/core/schema.js +4 -4
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +263 -263
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +325 -325
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -356
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -77
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -451
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +735 -735
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -457
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -1572
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -659
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -734
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -583
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -621
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -824
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -697
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -559
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -1328
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -110
- package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -55
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +717 -717
- package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -78
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -196
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -37
- package/dist/formats/webgpu/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +197 -197
- package/dist/formats/webm/core/helpers.js +572 -572
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +140 -140
- package/dist/formats/webp/core/helpers.js +237 -237
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +250 -250
- package/dist/formats/wem/core/bitStream.js +261 -261
- package/dist/formats/wem/core/codebookLibrary.js +164 -164
- package/dist/formats/wem/core/helpers.js +437 -437
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -77
- package/dist/formats/wem/core/resolve.js +121 -121
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +134 -134
- package/dist/formats/yaml/core/CjsYamlReader.js +400 -400
- package/dist/formats/yaml/core/helpers.js +196 -196
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -64
- package/dist/resource/CjsLoadingObject.js +19 -19
- package/dist/resource/CjsResource.js +801 -801
- package/dist/resource/ResourceHandlerMode.js +14 -14
- package/dist/resource/Tr2LightProfileRes.js +32 -32
- package/dist/resource/audio/AudioGeometryResData.js +47 -47
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -86
- package/dist/resource/audio/CjsAudioRes.js +213 -213
- package/dist/resource/audio/index.js +4 -4
- package/dist/resource/geometry/MeshDecalData.js +37 -37
- package/dist/resource/geometry/MeshDecalLodData.js +34 -34
- package/dist/resource/geometry/TriGeometryRes.js +675 -675
- package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
- package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
- package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
- package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
- package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
- package/dist/resource/geometry/TriJointBinding.js +38 -38
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
- package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
- package/dist/resource/geometry/granny/enums.js +10 -10
- package/dist/resource/geometry/granny/index.js +6 -6
- package/dist/resource/geometry/index.js +17 -17
- package/dist/resource/index.js +54 -54
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -336
- package/dist/resource/shader/Tr2MaterialArea.js +31 -31
- package/dist/resource/shader/Tr2MaterialMesh.js +27 -27
- package/dist/resource/shader/Tr2MaterialRes.js +31 -31
- package/dist/resource/shader/Tr2Shader.js +283 -283
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -143
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -114
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -168
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -125
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -120
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -372
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -78
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -168
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -159
- package/dist/resource/shader/reflection/shaderStage.js +22 -22
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -135
- package/dist/resource/texture/CjsTextureArrayRes.js +472 -472
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js +179 -179
- package/dist/resource/texture/Tr2ImageRes.js +120 -120
- package/dist/resource/texture/Tr2TextureLodManager.js +82 -82
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resource/texture/Tr2TexturePackChannel.js +37 -37
- package/dist/resource/texture/Tr2TexturePipeline.js +54 -54
- package/dist/resource/texture/Tr2TexturePipelineParams.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +22 -22
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resource/texture/TriTextureRes.js +359 -359
- package/dist/resource/texture/index.js +15 -15
- package/dist/resource/texture/texturePipelineBehavior.js +308 -308
- package/dist/worker/CjsResManMainThreadLoader.js +89 -89
- package/dist/worker/CjsResManWorker.js +218 -218
- package/dist/worker/CjsResManWorkerLoader.js +437 -437
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -118
- package/docs/concepts/resource-lifecycle.md +226 -226
- package/docs/concepts/shader-resource-model.md +111 -111
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -138
- package/docs/formats/carbon-effect-container.md +553 -553
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +105 -77
- package/docs/formats/dxbc/reference/classes/README.md +9 -9
- package/docs/formats/dxbc/reference/decoded-output.md +122 -122
- package/docs/formats/gr2.md +160 -160
- package/docs/formats/hlsl/README.md +54 -54
- package/docs/formats/hlsl/architecture.md +66 -65
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -60
- package/docs/formats/hlsl/guides/reading-effects.md +68 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -61
- package/docs/formats/hlsl/reference/api.md +91 -92
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -97
- package/docs/formats/pickle.md +82 -82
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -115
- package/docs/formats/webgl/architecture.md +69 -69
- package/docs/formats/webgl/carbon-constant-layouts.md +326 -326
- package/docs/formats/webgl/decl-io.md +1234 -1234
- package/docs/formats/webgl/memory-structured.md +890 -890
- package/docs/formats/webgl/reference/classes/README.md +9 -9
- package/docs/formats/webgl/texture-sample.md +964 -964
- package/docs/formats/webgpu/README.md +84 -84
- package/docs/formats/webgpu/architecture.md +95 -95
- package/docs/formats/webgpu/formats/carbon-webgpu.md +215 -215
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -189
- package/docs/formats/webgpu/reference/api.md +196 -196
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1546
- package/docs/formats/wwise.md +146 -146
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -216
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -944
- package/docs/reference/classes/resources.md +456 -456
- package/docs/reference/classes/texture.md +26 -26
- package/docs/reference/events.md +117 -117
- package/docs/reference/motherlode-cache.md +275 -275
- package/docs/reference/queues.md +194 -194
- package/docs/reference/reload.md +107 -107
- package/docs/reference/texture-arrays.md +113 -113
- package/docs/reference/texture-pipeline.md +53 -53
- package/docs/reference/workers.md +142 -142
- package/docs/roadmap.md +150 -150
- package/format-notices/black/LICENSE +21 -21
- package/format-notices/black/NOTICE +47 -47
- package/format-notices/bnk/LICENSE +21 -21
- package/format-notices/bnk/NOTICE +21 -21
- package/format-notices/cmf/LICENSE +21 -21
- package/format-notices/cmf/NOTICE +36 -36
- package/format-notices/dds/LICENSE +21 -21
- package/format-notices/dds/NOTICE +14 -14
- package/format-notices/dxbc/LICENSE +21 -21
- package/format-notices/dxbc/NOTICE +20 -20
- package/format-notices/fbx/LICENSE +21 -21
- package/format-notices/fbx/NOTICE +14 -14
- package/format-notices/flac/LICENSE +21 -21
- package/format-notices/flac/NOTICE +14 -14
- package/format-notices/gif/LICENSE +21 -21
- package/format-notices/gif/NOTICE +14 -14
- package/format-notices/gltf/LICENSE +21 -21
- package/format-notices/gltf/NOTICE +27 -27
- package/format-notices/gr2/LICENSE +21 -21
- package/format-notices/gr2/NOTICE +60 -60
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -93
- package/format-notices/hlsl/LICENSE +21 -21
- package/format-notices/hlsl/NOTICE +25 -25
- package/format-notices/jpeg/LICENSE +21 -21
- package/format-notices/jpeg/NOTICE +14 -14
- package/format-notices/mp3/LICENSE +21 -21
- package/format-notices/mp3/NOTICE +14 -14
- package/format-notices/mp4/LICENSE +21 -21
- package/format-notices/mp4/NOTICE +14 -14
- package/format-notices/obj/LICENSE +21 -21
- package/format-notices/obj/NOTICE +26 -26
- package/format-notices/ogg/LICENSE +21 -21
- package/format-notices/ogg/NOTICE +28 -28
- package/format-notices/png/LICENSE +21 -21
- package/format-notices/png/NOTICE +14 -14
- package/format-notices/red/LICENSE +21 -21
- package/format-notices/red/NOTICE +31 -31
- package/format-notices/stl/LICENSE +21 -21
- package/format-notices/stl/NOTICE +21 -21
- package/format-notices/tga/LICENSE +21 -21
- package/format-notices/tga/NOTICE +14 -14
- package/format-notices/wav/LICENSE +21 -21
- package/format-notices/wav/NOTICE +14 -14
- package/format-notices/webgl/LICENSE +21 -21
- package/format-notices/webgl/NOTICE +35 -35
- package/format-notices/webgpu/LICENSE +21 -21
- package/format-notices/webgpu/NOTICE +31 -31
- package/format-notices/webm/LICENSE +21 -21
- package/format-notices/webm/NOTICE +14 -14
- package/format-notices/webp/LICENSE +21 -21
- package/format-notices/webp/NOTICE +14 -14
- package/format-notices/wem/LICENSE +57 -57
- package/format-notices/wem/NOTICE +33 -33
- package/format-notices/yaml/LICENSE +21 -21
- package/format-notices/yaml/NOTICE +44 -44
- package/package.json +63 -63
|
@@ -1,310 +1,310 @@
|
|
|
1
|
-
import { CjsReader } from './CjsReader.js';
|
|
2
|
-
import { CjsFormatReadError } from './CjsFormatError.js';
|
|
3
|
-
import { asUint8Array } from '@carbonenginejs/runtime-utils/bytes';
|
|
4
|
-
|
|
5
|
-
const textDecoder = new TextDecoder("utf-8", {
|
|
6
|
-
fatal: false
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Little-endian cursor over resource bytes, with optional string-table arena
|
|
11
|
-
* resolution.
|
|
12
|
-
*
|
|
13
|
-
* This is the shared implementation behind `HlslReader`, `WebglReader`, and
|
|
14
|
-
* the Carbon-effect reader. Specialized readers only
|
|
15
|
-
* replace the error class and the end-of-data message:
|
|
16
|
-
*
|
|
17
|
-
* ```js
|
|
18
|
-
* class MyReader extends CjsByteReader
|
|
19
|
-
* {
|
|
20
|
-
* static ReadError = MyReadError;
|
|
21
|
-
* static endOfDataMessage = "Unexpected end of my data";
|
|
22
|
-
* }
|
|
23
|
-
* ```
|
|
24
|
-
*
|
|
25
|
-
* The arena primitives (`readString`, `readStringAt`, `readStringOptional`,
|
|
26
|
-
* `readTableBlob`, `readTableBlobOptional`) model Carbon's string table, where a
|
|
27
|
-
* single `uint32` offset resolves either to a NUL-terminated string or to a
|
|
28
|
-
* sized blob inside the same arena (`trinity/shadercompiler/StringTable.cpp`).
|
|
29
|
-
*/
|
|
30
|
-
class CjsByteReader extends CjsReader {
|
|
31
|
-
/** Error class raised for out-of-bounds and arena failures. */
|
|
32
|
-
static ReadError = CjsFormatReadError;
|
|
33
|
-
|
|
34
|
-
/** Message used when a read would run past the configured end. */
|
|
35
|
-
static endOfDataMessage = "Unexpected end of data";
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Creates a reader over a byte payload and optional shared string table.
|
|
39
|
-
*
|
|
40
|
-
* @param {ArrayBuffer|ArrayBufferView|Uint8Array} bytes Source payload.
|
|
41
|
-
* @param {object} [options] Reader bounds and metadata.
|
|
42
|
-
* @param {number} [options.offset] Initial byte offset.
|
|
43
|
-
* @param {number} [options.end] Exclusive end offset.
|
|
44
|
-
* @param {string} [options.source] Source name used in error details.
|
|
45
|
-
* @param {ArrayBuffer|ArrayBufferView|Uint8Array} [options.stringTable] Arena bytes.
|
|
46
|
-
* @param {number} [options.stringTableSize] Valid arena byte count.
|
|
47
|
-
*/
|
|
48
|
-
constructor(bytes, options = {}) {
|
|
49
|
-
super(options);
|
|
50
|
-
this.bytes = asUint8Array(bytes);
|
|
51
|
-
this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);
|
|
52
|
-
this.offset = Number(options.offset) || 0;
|
|
53
|
-
this.end = Number.isInteger(options.end) ? options.end : this.bytes.length;
|
|
54
|
-
this.source = options.source || "memory";
|
|
55
|
-
this.stringTable = options.stringTable ? asUint8Array(options.stringTable) : null;
|
|
56
|
-
this.stringTableSize = Number.isInteger(options.stringTableSize) ? options.stringTableSize : this.stringTable ? this.stringTable.length : 0;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Attaches or replaces the string-table arena used by string and blob reads.
|
|
61
|
-
*
|
|
62
|
-
* @param {ArrayBuffer|ArrayBufferView|Uint8Array} bytes Arena bytes.
|
|
63
|
-
* @param {number|null} [size] Valid arena byte count.
|
|
64
|
-
*/
|
|
65
|
-
setStringTable(bytes, size = null) {
|
|
66
|
-
this.stringTable = asUint8Array(bytes);
|
|
67
|
-
this.stringTableSize = Number.isInteger(size) ? size : this.stringTable.length;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Returns the unread byte count inside the configured reader bounds.
|
|
72
|
-
*
|
|
73
|
-
* @returns {number} Remaining bytes.
|
|
74
|
-
*/
|
|
75
|
-
get remaining() {
|
|
76
|
-
return this.end - this.offset;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Advances the reader by a fixed number of bytes.
|
|
81
|
-
*
|
|
82
|
-
* @param {number} size Byte count to skip.
|
|
83
|
-
*/
|
|
84
|
-
skip(size) {
|
|
85
|
-
this._require(size);
|
|
86
|
-
this.offset += size;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Reads a byte range from the main payload.
|
|
91
|
-
*
|
|
92
|
-
* @param {number} size Byte count to read.
|
|
93
|
-
* @returns {Uint8Array} View over the read bytes.
|
|
94
|
-
*/
|
|
95
|
-
readRaw(size) {
|
|
96
|
-
this._require(size);
|
|
97
|
-
const start = this.offset;
|
|
98
|
-
this.offset += size;
|
|
99
|
-
return this.bytes.subarray(start, start + size);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Reads an unsigned 8-bit integer.
|
|
104
|
-
*
|
|
105
|
-
* @returns {number} Integer value.
|
|
106
|
-
*/
|
|
107
|
-
readUint8() {
|
|
108
|
-
this._require(1);
|
|
109
|
-
const value = this.view.getUint8(this.offset);
|
|
110
|
-
this.offset += 1;
|
|
111
|
-
return value;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Reads a little-endian unsigned 16-bit integer.
|
|
116
|
-
*
|
|
117
|
-
* @returns {number} Integer value.
|
|
118
|
-
*/
|
|
119
|
-
readUint16() {
|
|
120
|
-
this._require(2);
|
|
121
|
-
const value = this.view.getUint16(this.offset, true);
|
|
122
|
-
this.offset += 2;
|
|
123
|
-
return value;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Reads a little-endian unsigned 32-bit integer.
|
|
128
|
-
*
|
|
129
|
-
* @returns {number} Integer value.
|
|
130
|
-
*/
|
|
131
|
-
readUint32() {
|
|
132
|
-
this._require(4);
|
|
133
|
-
const value = this.view.getUint32(this.offset, true);
|
|
134
|
-
this.offset += 4;
|
|
135
|
-
return value;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Reads a little-endian signed 32-bit integer.
|
|
140
|
-
*
|
|
141
|
-
* @returns {number} Integer value.
|
|
142
|
-
*/
|
|
143
|
-
readInt32() {
|
|
144
|
-
this._require(4);
|
|
145
|
-
const value = this.view.getInt32(this.offset, true);
|
|
146
|
-
this.offset += 4;
|
|
147
|
-
return value;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Reads a little-endian 32-bit float.
|
|
152
|
-
*
|
|
153
|
-
* @returns {number} Float value.
|
|
154
|
-
*/
|
|
155
|
-
readFloat32() {
|
|
156
|
-
this._require(4);
|
|
157
|
-
const value = this.view.getFloat32(this.offset, true);
|
|
158
|
-
this.offset += 4;
|
|
159
|
-
return value;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Reads Carbon's byte-sized boolean encoding.
|
|
164
|
-
*
|
|
165
|
-
* @returns {boolean} Boolean value.
|
|
166
|
-
*/
|
|
167
|
-
readBool() {
|
|
168
|
-
return this.readUint8() !== 0;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Reads a string-table offset and resolves it to a UTF-8 string.
|
|
173
|
-
*
|
|
174
|
-
* @param {number} [sizeHint] Optional maximum byte span for bounds checking.
|
|
175
|
-
* @returns {string} Decoded string.
|
|
176
|
-
*/
|
|
177
|
-
readString(sizeHint = 0) {
|
|
178
|
-
const offset = this.readUint32();
|
|
179
|
-
return this.readStringAt(offset, sizeHint);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Reads an optional string-table offset, returning null for zero-length fields.
|
|
184
|
-
*
|
|
185
|
-
* Carbon consumes the offset word regardless of the length and only
|
|
186
|
-
* dereferences it when the length is non-zero, which is the single site
|
|
187
|
-
* where the `0xffffffff` null reference is legal
|
|
188
|
-
* (`Tr2EffectDescription.cpp:80-91`).
|
|
189
|
-
*
|
|
190
|
-
* @param {number} length Source field length.
|
|
191
|
-
* @returns {string|null} Decoded string or null.
|
|
192
|
-
*/
|
|
193
|
-
readStringOptional(length) {
|
|
194
|
-
const offset = this.readUint32();
|
|
195
|
-
if (length === 0) {
|
|
196
|
-
return null;
|
|
197
|
-
}
|
|
198
|
-
return this.readStringAt(offset, length);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Reads a string-table blob offset and returns the referenced byte range.
|
|
203
|
-
*
|
|
204
|
-
* @param {number} size Blob byte count.
|
|
205
|
-
* @returns {{offset:number,bytes:Uint8Array}} Blob location and bytes.
|
|
206
|
-
*/
|
|
207
|
-
readTableBlob(size) {
|
|
208
|
-
const offset = this.readUint32();
|
|
209
|
-
this._requireStringTable(offset, size);
|
|
210
|
-
return {
|
|
211
|
-
offset,
|
|
212
|
-
bytes: this.stringTable.subarray(offset, offset + size)
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Reads a possibly empty string-table blob reference.
|
|
218
|
-
*
|
|
219
|
-
* @param {number} size Blob byte count.
|
|
220
|
-
* @returns {{offset:number,bytes:Uint8Array}} Blob location and bytes.
|
|
221
|
-
*/
|
|
222
|
-
readTableBlobOptional(size) {
|
|
223
|
-
const offset = this.readUint32();
|
|
224
|
-
if (size === 0) {
|
|
225
|
-
return {
|
|
226
|
-
offset,
|
|
227
|
-
bytes: new Uint8Array(0)
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
this._requireStringTable(offset, size);
|
|
231
|
-
return {
|
|
232
|
-
offset,
|
|
233
|
-
bytes: this.stringTable.subarray(offset, offset + size)
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Resolves a string table offset to a null-terminated UTF-8 string.
|
|
239
|
-
*
|
|
240
|
-
* @param {number} offset String-table byte offset.
|
|
241
|
-
* @param {number} [sizeHint] Optional maximum byte span for bounds checking.
|
|
242
|
-
* @returns {string} Decoded string.
|
|
243
|
-
*/
|
|
244
|
-
readStringAt(offset, sizeHint = 0) {
|
|
245
|
-
this._requireStringTable(offset, sizeHint);
|
|
246
|
-
let end = offset;
|
|
247
|
-
while (end < this.stringTableSize && this.stringTable[end] !== 0) {
|
|
248
|
-
end += 1;
|
|
249
|
-
}
|
|
250
|
-
return textDecoder.decode(this.stringTable.subarray(offset, end));
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Creates this reader's error type with shared reader-state details.
|
|
255
|
-
*
|
|
256
|
-
* @param {string} message Human-readable failure reason.
|
|
257
|
-
* @param {object} [details] Extra reader state.
|
|
258
|
-
* @returns {Error} Reader-specific error instance.
|
|
259
|
-
* @protected
|
|
260
|
-
*/
|
|
261
|
-
_error(message, details = {}) {
|
|
262
|
-
const ReadError = this.constructor.ReadError ?? CjsFormatReadError;
|
|
263
|
-
return new ReadError(message, {
|
|
264
|
-
source: this.source,
|
|
265
|
-
...details
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Ensures the requested read fits inside the configured payload bounds.
|
|
271
|
-
*
|
|
272
|
-
* @param {number} size Requested byte count.
|
|
273
|
-
* @private
|
|
274
|
-
*/
|
|
275
|
-
_require(size) {
|
|
276
|
-
if (!Number.isInteger(size) || size < 0 || this.offset + size > this.end) {
|
|
277
|
-
throw this._error(this.constructor.endOfDataMessage, {
|
|
278
|
-
offset: this.offset,
|
|
279
|
-
requested: size,
|
|
280
|
-
end: this.end
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Ensures a string-table offset and optional span are valid.
|
|
287
|
-
*
|
|
288
|
-
* @param {number} offset String-table byte offset.
|
|
289
|
-
* @param {number} [sizeHint] Optional byte span for bounds checking.
|
|
290
|
-
* @private
|
|
291
|
-
*/
|
|
292
|
-
_requireStringTable(offset, sizeHint = 0) {
|
|
293
|
-
const size = Number(sizeHint) || 0;
|
|
294
|
-
if (!this.stringTable) {
|
|
295
|
-
throw this._error("Missing effect string table", {
|
|
296
|
-
offset
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
if (!Number.isInteger(offset) || offset < 0 || offset >= this.stringTableSize || offset + size > this.stringTableSize) {
|
|
300
|
-
throw this._error("Invalid string-table offset", {
|
|
301
|
-
offset,
|
|
302
|
-
sizeHint: size,
|
|
303
|
-
stringTableSize: this.stringTableSize
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
export { CjsByteReader };
|
|
310
|
-
//# sourceMappingURL=CjsByteReader.js.map
|
|
1
|
+
import { CjsReader } from './CjsReader.js';
|
|
2
|
+
import { CjsFormatReadError } from './CjsFormatError.js';
|
|
3
|
+
import { asUint8Array } from '@carbonenginejs/runtime-utils/bytes';
|
|
4
|
+
|
|
5
|
+
const textDecoder = new TextDecoder("utf-8", {
|
|
6
|
+
fatal: false
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Little-endian cursor over resource bytes, with optional string-table arena
|
|
11
|
+
* resolution.
|
|
12
|
+
*
|
|
13
|
+
* This is the shared implementation behind `HlslReader`, `WebglReader`, and
|
|
14
|
+
* the Carbon-effect reader. Specialized readers only
|
|
15
|
+
* replace the error class and the end-of-data message:
|
|
16
|
+
*
|
|
17
|
+
* ```js
|
|
18
|
+
* class MyReader extends CjsByteReader
|
|
19
|
+
* {
|
|
20
|
+
* static ReadError = MyReadError;
|
|
21
|
+
* static endOfDataMessage = "Unexpected end of my data";
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* The arena primitives (`readString`, `readStringAt`, `readStringOptional`,
|
|
26
|
+
* `readTableBlob`, `readTableBlobOptional`) model Carbon's string table, where a
|
|
27
|
+
* single `uint32` offset resolves either to a NUL-terminated string or to a
|
|
28
|
+
* sized blob inside the same arena (`trinity/shadercompiler/StringTable.cpp`).
|
|
29
|
+
*/
|
|
30
|
+
class CjsByteReader extends CjsReader {
|
|
31
|
+
/** Error class raised for out-of-bounds and arena failures. */
|
|
32
|
+
static ReadError = CjsFormatReadError;
|
|
33
|
+
|
|
34
|
+
/** Message used when a read would run past the configured end. */
|
|
35
|
+
static endOfDataMessage = "Unexpected end of data";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Creates a reader over a byte payload and optional shared string table.
|
|
39
|
+
*
|
|
40
|
+
* @param {ArrayBuffer|ArrayBufferView|Uint8Array} bytes Source payload.
|
|
41
|
+
* @param {object} [options] Reader bounds and metadata.
|
|
42
|
+
* @param {number} [options.offset] Initial byte offset.
|
|
43
|
+
* @param {number} [options.end] Exclusive end offset.
|
|
44
|
+
* @param {string} [options.source] Source name used in error details.
|
|
45
|
+
* @param {ArrayBuffer|ArrayBufferView|Uint8Array} [options.stringTable] Arena bytes.
|
|
46
|
+
* @param {number} [options.stringTableSize] Valid arena byte count.
|
|
47
|
+
*/
|
|
48
|
+
constructor(bytes, options = {}) {
|
|
49
|
+
super(options);
|
|
50
|
+
this.bytes = asUint8Array(bytes);
|
|
51
|
+
this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);
|
|
52
|
+
this.offset = Number(options.offset) || 0;
|
|
53
|
+
this.end = Number.isInteger(options.end) ? options.end : this.bytes.length;
|
|
54
|
+
this.source = options.source || "memory";
|
|
55
|
+
this.stringTable = options.stringTable ? asUint8Array(options.stringTable) : null;
|
|
56
|
+
this.stringTableSize = Number.isInteger(options.stringTableSize) ? options.stringTableSize : this.stringTable ? this.stringTable.length : 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Attaches or replaces the string-table arena used by string and blob reads.
|
|
61
|
+
*
|
|
62
|
+
* @param {ArrayBuffer|ArrayBufferView|Uint8Array} bytes Arena bytes.
|
|
63
|
+
* @param {number|null} [size] Valid arena byte count.
|
|
64
|
+
*/
|
|
65
|
+
setStringTable(bytes, size = null) {
|
|
66
|
+
this.stringTable = asUint8Array(bytes);
|
|
67
|
+
this.stringTableSize = Number.isInteger(size) ? size : this.stringTable.length;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Returns the unread byte count inside the configured reader bounds.
|
|
72
|
+
*
|
|
73
|
+
* @returns {number} Remaining bytes.
|
|
74
|
+
*/
|
|
75
|
+
get remaining() {
|
|
76
|
+
return this.end - this.offset;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Advances the reader by a fixed number of bytes.
|
|
81
|
+
*
|
|
82
|
+
* @param {number} size Byte count to skip.
|
|
83
|
+
*/
|
|
84
|
+
skip(size) {
|
|
85
|
+
this._require(size);
|
|
86
|
+
this.offset += size;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Reads a byte range from the main payload.
|
|
91
|
+
*
|
|
92
|
+
* @param {number} size Byte count to read.
|
|
93
|
+
* @returns {Uint8Array} View over the read bytes.
|
|
94
|
+
*/
|
|
95
|
+
readRaw(size) {
|
|
96
|
+
this._require(size);
|
|
97
|
+
const start = this.offset;
|
|
98
|
+
this.offset += size;
|
|
99
|
+
return this.bytes.subarray(start, start + size);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Reads an unsigned 8-bit integer.
|
|
104
|
+
*
|
|
105
|
+
* @returns {number} Integer value.
|
|
106
|
+
*/
|
|
107
|
+
readUint8() {
|
|
108
|
+
this._require(1);
|
|
109
|
+
const value = this.view.getUint8(this.offset);
|
|
110
|
+
this.offset += 1;
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Reads a little-endian unsigned 16-bit integer.
|
|
116
|
+
*
|
|
117
|
+
* @returns {number} Integer value.
|
|
118
|
+
*/
|
|
119
|
+
readUint16() {
|
|
120
|
+
this._require(2);
|
|
121
|
+
const value = this.view.getUint16(this.offset, true);
|
|
122
|
+
this.offset += 2;
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Reads a little-endian unsigned 32-bit integer.
|
|
128
|
+
*
|
|
129
|
+
* @returns {number} Integer value.
|
|
130
|
+
*/
|
|
131
|
+
readUint32() {
|
|
132
|
+
this._require(4);
|
|
133
|
+
const value = this.view.getUint32(this.offset, true);
|
|
134
|
+
this.offset += 4;
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Reads a little-endian signed 32-bit integer.
|
|
140
|
+
*
|
|
141
|
+
* @returns {number} Integer value.
|
|
142
|
+
*/
|
|
143
|
+
readInt32() {
|
|
144
|
+
this._require(4);
|
|
145
|
+
const value = this.view.getInt32(this.offset, true);
|
|
146
|
+
this.offset += 4;
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Reads a little-endian 32-bit float.
|
|
152
|
+
*
|
|
153
|
+
* @returns {number} Float value.
|
|
154
|
+
*/
|
|
155
|
+
readFloat32() {
|
|
156
|
+
this._require(4);
|
|
157
|
+
const value = this.view.getFloat32(this.offset, true);
|
|
158
|
+
this.offset += 4;
|
|
159
|
+
return value;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Reads Carbon's byte-sized boolean encoding.
|
|
164
|
+
*
|
|
165
|
+
* @returns {boolean} Boolean value.
|
|
166
|
+
*/
|
|
167
|
+
readBool() {
|
|
168
|
+
return this.readUint8() !== 0;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Reads a string-table offset and resolves it to a UTF-8 string.
|
|
173
|
+
*
|
|
174
|
+
* @param {number} [sizeHint] Optional maximum byte span for bounds checking.
|
|
175
|
+
* @returns {string} Decoded string.
|
|
176
|
+
*/
|
|
177
|
+
readString(sizeHint = 0) {
|
|
178
|
+
const offset = this.readUint32();
|
|
179
|
+
return this.readStringAt(offset, sizeHint);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Reads an optional string-table offset, returning null for zero-length fields.
|
|
184
|
+
*
|
|
185
|
+
* Carbon consumes the offset word regardless of the length and only
|
|
186
|
+
* dereferences it when the length is non-zero, which is the single site
|
|
187
|
+
* where the `0xffffffff` null reference is legal
|
|
188
|
+
* (`Tr2EffectDescription.cpp:80-91`).
|
|
189
|
+
*
|
|
190
|
+
* @param {number} length Source field length.
|
|
191
|
+
* @returns {string|null} Decoded string or null.
|
|
192
|
+
*/
|
|
193
|
+
readStringOptional(length) {
|
|
194
|
+
const offset = this.readUint32();
|
|
195
|
+
if (length === 0) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
return this.readStringAt(offset, length);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Reads a string-table blob offset and returns the referenced byte range.
|
|
203
|
+
*
|
|
204
|
+
* @param {number} size Blob byte count.
|
|
205
|
+
* @returns {{offset:number,bytes:Uint8Array}} Blob location and bytes.
|
|
206
|
+
*/
|
|
207
|
+
readTableBlob(size) {
|
|
208
|
+
const offset = this.readUint32();
|
|
209
|
+
this._requireStringTable(offset, size);
|
|
210
|
+
return {
|
|
211
|
+
offset,
|
|
212
|
+
bytes: this.stringTable.subarray(offset, offset + size)
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Reads a possibly empty string-table blob reference.
|
|
218
|
+
*
|
|
219
|
+
* @param {number} size Blob byte count.
|
|
220
|
+
* @returns {{offset:number,bytes:Uint8Array}} Blob location and bytes.
|
|
221
|
+
*/
|
|
222
|
+
readTableBlobOptional(size) {
|
|
223
|
+
const offset = this.readUint32();
|
|
224
|
+
if (size === 0) {
|
|
225
|
+
return {
|
|
226
|
+
offset,
|
|
227
|
+
bytes: new Uint8Array(0)
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
this._requireStringTable(offset, size);
|
|
231
|
+
return {
|
|
232
|
+
offset,
|
|
233
|
+
bytes: this.stringTable.subarray(offset, offset + size)
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Resolves a string table offset to a null-terminated UTF-8 string.
|
|
239
|
+
*
|
|
240
|
+
* @param {number} offset String-table byte offset.
|
|
241
|
+
* @param {number} [sizeHint] Optional maximum byte span for bounds checking.
|
|
242
|
+
* @returns {string} Decoded string.
|
|
243
|
+
*/
|
|
244
|
+
readStringAt(offset, sizeHint = 0) {
|
|
245
|
+
this._requireStringTable(offset, sizeHint);
|
|
246
|
+
let end = offset;
|
|
247
|
+
while (end < this.stringTableSize && this.stringTable[end] !== 0) {
|
|
248
|
+
end += 1;
|
|
249
|
+
}
|
|
250
|
+
return textDecoder.decode(this.stringTable.subarray(offset, end));
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Creates this reader's error type with shared reader-state details.
|
|
255
|
+
*
|
|
256
|
+
* @param {string} message Human-readable failure reason.
|
|
257
|
+
* @param {object} [details] Extra reader state.
|
|
258
|
+
* @returns {Error} Reader-specific error instance.
|
|
259
|
+
* @protected
|
|
260
|
+
*/
|
|
261
|
+
_error(message, details = {}) {
|
|
262
|
+
const ReadError = this.constructor.ReadError ?? CjsFormatReadError;
|
|
263
|
+
return new ReadError(message, {
|
|
264
|
+
source: this.source,
|
|
265
|
+
...details
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Ensures the requested read fits inside the configured payload bounds.
|
|
271
|
+
*
|
|
272
|
+
* @param {number} size Requested byte count.
|
|
273
|
+
* @private
|
|
274
|
+
*/
|
|
275
|
+
_require(size) {
|
|
276
|
+
if (!Number.isInteger(size) || size < 0 || this.offset + size > this.end) {
|
|
277
|
+
throw this._error(this.constructor.endOfDataMessage, {
|
|
278
|
+
offset: this.offset,
|
|
279
|
+
requested: size,
|
|
280
|
+
end: this.end
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Ensures a string-table offset and optional span are valid.
|
|
287
|
+
*
|
|
288
|
+
* @param {number} offset String-table byte offset.
|
|
289
|
+
* @param {number} [sizeHint] Optional byte span for bounds checking.
|
|
290
|
+
* @private
|
|
291
|
+
*/
|
|
292
|
+
_requireStringTable(offset, sizeHint = 0) {
|
|
293
|
+
const size = Number(sizeHint) || 0;
|
|
294
|
+
if (!this.stringTable) {
|
|
295
|
+
throw this._error("Missing effect string table", {
|
|
296
|
+
offset
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
if (!Number.isInteger(offset) || offset < 0 || offset >= this.stringTableSize || offset + size > this.stringTableSize) {
|
|
300
|
+
throw this._error("Invalid string-table offset", {
|
|
301
|
+
offset,
|
|
302
|
+
sizeHint: size,
|
|
303
|
+
stringTableSize: this.stringTableSize
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
export { CjsByteReader };
|
|
310
|
+
//# sourceMappingURL=CjsByteReader.js.map
|