@carbonenginejs/runtime-resource 0.13.0 → 0.15.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 +570 -467
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- 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,89 +1,89 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Direct execution strategy that reads through a structural source and invokes registered format facades on the caller thread.
|
|
3
|
-
*
|
|
4
|
-
* It is used when no browser worker is selected or when a source or format
|
|
5
|
-
* does not declare a worker-safe operation.
|
|
6
|
-
*/
|
|
7
|
-
class CjsResManMainThreadLoader {
|
|
8
|
-
/**
|
|
9
|
-
* Read through an injected resource source.
|
|
10
|
-
*
|
|
11
|
-
* @param {object|Function} source Source exposing `Read(path, options)`.
|
|
12
|
-
* @param {string} path Normalized resource path.
|
|
13
|
-
* @param {object} [options={}] Source read options.
|
|
14
|
-
* @returns {*} Source result or promise.
|
|
15
|
-
*/
|
|
16
|
-
Read(source, path, options = {}) {
|
|
17
|
-
assertResourceSource(source);
|
|
18
|
-
return source.Read(path, options);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Main-thread loaders never claim worker execution.
|
|
23
|
-
*
|
|
24
|
-
* @returns {false}
|
|
25
|
-
*/
|
|
26
|
-
CanReadFormat() {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Execute one normalized format read on the current thread.
|
|
32
|
-
*
|
|
33
|
-
* @param {object} descriptor Registered format descriptor.
|
|
34
|
-
* @param {*} input Reader input.
|
|
35
|
-
* @param {object} [formatOptions={}] Normalized format options.
|
|
36
|
-
* @param {object|null} [context=null] Normalized resource path context.
|
|
37
|
-
* @returns {Promise<*>} Format result.
|
|
38
|
-
*/
|
|
39
|
-
ReadFormat(descriptor, input, formatOptions = {}, context = null) {
|
|
40
|
-
return readFormatOnCurrentThread(descriptor, input, formatOptions, context);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Main-thread execution owns no pending worker requests.
|
|
45
|
-
*
|
|
46
|
-
* @returns {0}
|
|
47
|
-
*/
|
|
48
|
-
GetPendingCount() {
|
|
49
|
-
return 0;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Invoke a format facade without crossing a worker boundary.
|
|
55
|
-
*
|
|
56
|
-
* @param {object} descriptor Registered format descriptor.
|
|
57
|
-
* @param {*} input Reader input.
|
|
58
|
-
* @param {object} formatOptions Normalized format options.
|
|
59
|
-
* @param {object|null} context Normalized resource path context.
|
|
60
|
-
* @returns {Promise<*>} Reader result.
|
|
61
|
-
*/
|
|
62
|
-
function readFormatOnCurrentThread(descriptor, input, formatOptions = {}, context = null) {
|
|
63
|
-
const Format = descriptor?.Format;
|
|
64
|
-
if (typeof Format !== "function") {
|
|
65
|
-
throw new TypeError("Resource format descriptor requires a Format class.");
|
|
66
|
-
}
|
|
67
|
-
if (typeof Format.readAsync === "function") {
|
|
68
|
-
return Format.readAsync(input, formatOptions, context);
|
|
69
|
-
}
|
|
70
|
-
if (typeof Format.read === "function") {
|
|
71
|
-
return Format.read(input, formatOptions, context);
|
|
72
|
-
}
|
|
73
|
-
const reader = new Format(formatOptions);
|
|
74
|
-
if (typeof reader.ReadAsync === "function") {
|
|
75
|
-
return reader.ReadAsync(input, formatOptions, context);
|
|
76
|
-
}
|
|
77
|
-
if (typeof reader.Read === "function") {
|
|
78
|
-
return reader.Read(input, formatOptions, context);
|
|
79
|
-
}
|
|
80
|
-
throw new TypeError(`${Format.name} does not expose a read operation.`);
|
|
81
|
-
}
|
|
82
|
-
function assertResourceSource(source) {
|
|
83
|
-
if (!source || typeof source !== "object" && typeof source !== "function" || typeof source.Read !== "function") {
|
|
84
|
-
throw new TypeError("Resource source must provide Read(path, options).");
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export { CjsResManMainThreadLoader };
|
|
89
|
-
//# sourceMappingURL=CjsResManMainThreadLoader.js.map
|
|
1
|
+
/**
|
|
2
|
+
* Direct execution strategy that reads through a structural source and invokes registered format facades on the caller thread.
|
|
3
|
+
*
|
|
4
|
+
* It is used when no browser worker is selected or when a source or format
|
|
5
|
+
* does not declare a worker-safe operation.
|
|
6
|
+
*/
|
|
7
|
+
class CjsResManMainThreadLoader {
|
|
8
|
+
/**
|
|
9
|
+
* Read through an injected resource source.
|
|
10
|
+
*
|
|
11
|
+
* @param {object|Function} source Source exposing `Read(path, options)`.
|
|
12
|
+
* @param {string} path Normalized resource path.
|
|
13
|
+
* @param {object} [options={}] Source read options.
|
|
14
|
+
* @returns {*} Source result or promise.
|
|
15
|
+
*/
|
|
16
|
+
Read(source, path, options = {}) {
|
|
17
|
+
assertResourceSource(source);
|
|
18
|
+
return source.Read(path, options);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Main-thread loaders never claim worker execution.
|
|
23
|
+
*
|
|
24
|
+
* @returns {false}
|
|
25
|
+
*/
|
|
26
|
+
CanReadFormat() {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Execute one normalized format read on the current thread.
|
|
32
|
+
*
|
|
33
|
+
* @param {object} descriptor Registered format descriptor.
|
|
34
|
+
* @param {*} input Reader input.
|
|
35
|
+
* @param {object} [formatOptions={}] Normalized format options.
|
|
36
|
+
* @param {object|null} [context=null] Normalized resource path context.
|
|
37
|
+
* @returns {Promise<*>} Format result.
|
|
38
|
+
*/
|
|
39
|
+
ReadFormat(descriptor, input, formatOptions = {}, context = null) {
|
|
40
|
+
return readFormatOnCurrentThread(descriptor, input, formatOptions, context);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Main-thread execution owns no pending worker requests.
|
|
45
|
+
*
|
|
46
|
+
* @returns {0}
|
|
47
|
+
*/
|
|
48
|
+
GetPendingCount() {
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Invoke a format facade without crossing a worker boundary.
|
|
55
|
+
*
|
|
56
|
+
* @param {object} descriptor Registered format descriptor.
|
|
57
|
+
* @param {*} input Reader input.
|
|
58
|
+
* @param {object} formatOptions Normalized format options.
|
|
59
|
+
* @param {object|null} context Normalized resource path context.
|
|
60
|
+
* @returns {Promise<*>} Reader result.
|
|
61
|
+
*/
|
|
62
|
+
function readFormatOnCurrentThread(descriptor, input, formatOptions = {}, context = null) {
|
|
63
|
+
const Format = descriptor?.Format;
|
|
64
|
+
if (typeof Format !== "function") {
|
|
65
|
+
throw new TypeError("Resource format descriptor requires a Format class.");
|
|
66
|
+
}
|
|
67
|
+
if (typeof Format.readAsync === "function") {
|
|
68
|
+
return Format.readAsync(input, formatOptions, context);
|
|
69
|
+
}
|
|
70
|
+
if (typeof Format.read === "function") {
|
|
71
|
+
return Format.read(input, formatOptions, context);
|
|
72
|
+
}
|
|
73
|
+
const reader = new Format(formatOptions);
|
|
74
|
+
if (typeof reader.ReadAsync === "function") {
|
|
75
|
+
return reader.ReadAsync(input, formatOptions, context);
|
|
76
|
+
}
|
|
77
|
+
if (typeof reader.Read === "function") {
|
|
78
|
+
return reader.Read(input, formatOptions, context);
|
|
79
|
+
}
|
|
80
|
+
throw new TypeError(`${Format.name} does not expose a read operation.`);
|
|
81
|
+
}
|
|
82
|
+
function assertResourceSource(source) {
|
|
83
|
+
if (!source || typeof source !== "object" && typeof source !== "function" || typeof source.Read !== "function") {
|
|
84
|
+
throw new TypeError("Resource source must provide Read(path, options).");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export { CjsResManMainThreadLoader };
|
|
89
|
+
//# sourceMappingURL=CjsResManMainThreadLoader.js.map
|
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
import { Operation, Message } from './protocol.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Static browser-worker host that owns its operation/message vocabulary,
|
|
5
|
-
* executes clone-safe source and format operations, installs the message
|
|
6
|
-
* envelope, transfers owned buffers, and serializes failures for `CjsResMan`.
|
|
7
|
-
*/
|
|
8
|
-
class CjsResManWorker {
|
|
9
|
-
/** Stable operations understood by the bundled resource module worker. */
|
|
10
|
-
static Operation = Operation;
|
|
11
|
-
|
|
12
|
-
/** Stable message kinds exchanged with the resource module worker. */
|
|
13
|
-
static Message = Message;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Execute one bundled resource worker operation.
|
|
17
|
-
*
|
|
18
|
-
* This method also permits deterministic non-browser tests and custom
|
|
19
|
-
* worker hosts without installing global message handlers.
|
|
20
|
-
*
|
|
21
|
-
* @param {string} operation Worker operation name.
|
|
22
|
-
* @param {*} payload Structured-cloneable operation payload.
|
|
23
|
-
* @param {object} [context={}] Optional fetch and abort context.
|
|
24
|
-
* @returns {Promise<*>} Operation result.
|
|
25
|
-
*/
|
|
26
|
-
static async execute(operation, payload, context = {}) {
|
|
27
|
-
switch (operation) {
|
|
28
|
-
case Operation.FETCH:
|
|
29
|
-
return fetchResource(payload, context);
|
|
30
|
-
case Operation.FORMAT_READ:
|
|
31
|
-
return readFormat(payload);
|
|
32
|
-
default:
|
|
33
|
-
{
|
|
34
|
-
const error = new Error(`Unknown resource worker operation: ${operation}`);
|
|
35
|
-
error.code = "CJS_RESOURCE_WORKER_OPERATION_UNKNOWN";
|
|
36
|
-
error.operation = operation;
|
|
37
|
-
throw error;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Install the ResMan message protocol on a Worker-compatible scope.
|
|
44
|
-
*
|
|
45
|
-
* @param {WorkerGlobalScope|object} scope Worker global.
|
|
46
|
-
* @returns {() => void} Uninstall callback.
|
|
47
|
-
*/
|
|
48
|
-
static install(scope = globalThis) {
|
|
49
|
-
if (!scope || typeof scope.postMessage !== "function") {
|
|
50
|
-
throw new TypeError("Resource worker scope must provide postMessage.");
|
|
51
|
-
}
|
|
52
|
-
const controllers = new Map();
|
|
53
|
-
const onMessage = async event => {
|
|
54
|
-
const message = event?.data;
|
|
55
|
-
if (!message || typeof message !== "object") return;
|
|
56
|
-
if (message.type === Message.CANCEL) {
|
|
57
|
-
controllers.get(message.id)?.abort();
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (message.type !== Message.EXECUTE) return;
|
|
61
|
-
const controller = typeof AbortController === "function" ? new AbortController() : null;
|
|
62
|
-
if (controller) controllers.set(message.id, controller);
|
|
63
|
-
try {
|
|
64
|
-
const result = await CjsResManWorker.execute(message.operation, message.payload, {
|
|
65
|
-
signal: controller?.signal
|
|
66
|
-
});
|
|
67
|
-
scope.postMessage({
|
|
68
|
-
type: Message.RESULT,
|
|
69
|
-
id: message.id,
|
|
70
|
-
ok: true,
|
|
71
|
-
result
|
|
72
|
-
}, CjsResManWorker.collectTransferables(result));
|
|
73
|
-
} catch (error) {
|
|
74
|
-
scope.postMessage({
|
|
75
|
-
type: Message.RESULT,
|
|
76
|
-
id: message.id,
|
|
77
|
-
ok: false,
|
|
78
|
-
error: CjsResManWorker.serializeError(error, message.operation)
|
|
79
|
-
});
|
|
80
|
-
} finally {
|
|
81
|
-
controllers.delete(message.id);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
if (typeof scope.addEventListener === "function") {
|
|
85
|
-
scope.addEventListener("message", onMessage);
|
|
86
|
-
return () => scope.removeEventListener?.("message", onMessage);
|
|
87
|
-
}
|
|
88
|
-
const previous = scope.onmessage;
|
|
89
|
-
scope.onmessage = onMessage;
|
|
90
|
-
return () => {
|
|
91
|
-
if (scope.onmessage === onMessage) scope.onmessage = previous || null;
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Collect unique transferable ArrayBuffers from a worker result.
|
|
97
|
-
*
|
|
98
|
-
* SharedArrayBuffer is intentionally excluded because it is shared rather
|
|
99
|
-
* than transferable.
|
|
100
|
-
*
|
|
101
|
-
* @param {*} value Result graph.
|
|
102
|
-
* @returns {ArrayBuffer[]} Transfer list.
|
|
103
|
-
*/
|
|
104
|
-
static collectTransferables(value) {
|
|
105
|
-
const buffers = new Set();
|
|
106
|
-
const seen = new Set();
|
|
107
|
-
const visit = entry => {
|
|
108
|
-
if (entry === null || entry === undefined) return;
|
|
109
|
-
if (entry instanceof ArrayBuffer) {
|
|
110
|
-
buffers.add(entry);
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
if (ArrayBuffer.isView(entry)) {
|
|
114
|
-
if (entry.buffer instanceof ArrayBuffer) buffers.add(entry.buffer);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
if (typeof entry !== "object" || seen.has(entry)) return;
|
|
118
|
-
seen.add(entry);
|
|
119
|
-
if (Array.isArray(entry)) {
|
|
120
|
-
for (const item of entry) visit(item);
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
for (const item of Object.values(entry)) visit(item);
|
|
124
|
-
};
|
|
125
|
-
visit(value);
|
|
126
|
-
return [...buffers];
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Convert an exception into a cloneable diagnostic.
|
|
131
|
-
*
|
|
132
|
-
* @param {*} value Failure value.
|
|
133
|
-
* @param {string} [operation] Operation name.
|
|
134
|
-
* @returns {object} Cloneable error data.
|
|
135
|
-
*/
|
|
136
|
-
static serializeError(value, operation = undefined) {
|
|
137
|
-
return {
|
|
138
|
-
name: value?.name || "CjsResManWorkerError",
|
|
139
|
-
message: value?.message || String(value),
|
|
140
|
-
code: value?.code,
|
|
141
|
-
operation: value?.operation || operation,
|
|
142
|
-
path: value?.path,
|
|
143
|
-
status: value?.status,
|
|
144
|
-
statusText: value?.statusText
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
async function fetchResource(payload, context) {
|
|
149
|
-
if (!payload || typeof payload.url !== "string") {
|
|
150
|
-
throw new TypeError("Worker fetch requires a URL.");
|
|
151
|
-
}
|
|
152
|
-
const fetchImplementation = context.fetch || globalThis.fetch;
|
|
153
|
-
if (typeof fetchImplementation !== "function") {
|
|
154
|
-
throw new ReferenceError("Worker fetch is unavailable.");
|
|
155
|
-
}
|
|
156
|
-
const options = {
|
|
157
|
-
...(payload.options || {}),
|
|
158
|
-
...(context.signal ? {
|
|
159
|
-
signal: context.signal
|
|
160
|
-
} : {})
|
|
161
|
-
};
|
|
162
|
-
const response = await fetchImplementation(payload.url, options);
|
|
163
|
-
if (!response.ok) {
|
|
164
|
-
const error = new Error(`Resource fetch failed: ${response.status} ${response.statusText}`);
|
|
165
|
-
error.code = "CJS_RESOURCE_FETCH_FAILED";
|
|
166
|
-
error.path = payload.path;
|
|
167
|
-
error.status = response.status;
|
|
168
|
-
error.statusText = response.statusText;
|
|
169
|
-
throw error;
|
|
170
|
-
}
|
|
171
|
-
switch (payload.responseType || "arraybuffer") {
|
|
172
|
-
case "arraybuffer":
|
|
173
|
-
return response.arrayBuffer();
|
|
174
|
-
case "blob":
|
|
175
|
-
return response.blob();
|
|
176
|
-
case "json":
|
|
177
|
-
return response.json();
|
|
178
|
-
case "text":
|
|
179
|
-
return response.text();
|
|
180
|
-
default:
|
|
181
|
-
{
|
|
182
|
-
const error = new Error(`Unsupported worker fetch response type: ${payload.responseType}`);
|
|
183
|
-
error.code = "CJS_RESOURCE_WORKER_RESPONSE_TYPE";
|
|
184
|
-
throw error;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
async function readFormat(payload) {
|
|
189
|
-
if (!payload || typeof payload.module !== "string" || payload.module === "") {
|
|
190
|
-
throw new TypeError("Worker format read requires a module URL.");
|
|
191
|
-
}
|
|
192
|
-
const module = await import(payload.module);
|
|
193
|
-
const Format = module[payload.exportName || "default"];
|
|
194
|
-
if (typeof Format !== "function") {
|
|
195
|
-
throw new TypeError(`Worker format export was not found: ${payload.exportName || "default"}`);
|
|
196
|
-
}
|
|
197
|
-
const options = payload.options || {};
|
|
198
|
-
const context = payload.context || null;
|
|
199
|
-
if (typeof Format.readAsync === "function") {
|
|
200
|
-
return Format.readAsync(payload.input, options, context);
|
|
201
|
-
}
|
|
202
|
-
if (typeof Format.read === "function") {
|
|
203
|
-
return Format.read(payload.input, options, context);
|
|
204
|
-
}
|
|
205
|
-
const reader = new Format(options);
|
|
206
|
-
if (typeof reader.ReadAsync === "function") {
|
|
207
|
-
return reader.ReadAsync(payload.input, options, context);
|
|
208
|
-
}
|
|
209
|
-
if (typeof reader.Read === "function") {
|
|
210
|
-
return reader.Read(payload.input, options, context);
|
|
211
|
-
}
|
|
212
|
-
throw new TypeError(`${Format.name} does not expose a read operation.`);
|
|
213
|
-
}
|
|
214
|
-
const isWorkerScope = typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
|
|
215
|
-
if (isWorkerScope) CjsResManWorker.install(globalThis);
|
|
216
|
-
|
|
217
|
-
export { CjsResManWorker };
|
|
218
|
-
//# sourceMappingURL=CjsResManWorker.js.map
|
|
1
|
+
import { Operation, Message } from './protocol.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Static browser-worker host that owns its operation/message vocabulary,
|
|
5
|
+
* executes clone-safe source and format operations, installs the message
|
|
6
|
+
* envelope, transfers owned buffers, and serializes failures for `CjsResMan`.
|
|
7
|
+
*/
|
|
8
|
+
class CjsResManWorker {
|
|
9
|
+
/** Stable operations understood by the bundled resource module worker. */
|
|
10
|
+
static Operation = Operation;
|
|
11
|
+
|
|
12
|
+
/** Stable message kinds exchanged with the resource module worker. */
|
|
13
|
+
static Message = Message;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Execute one bundled resource worker operation.
|
|
17
|
+
*
|
|
18
|
+
* This method also permits deterministic non-browser tests and custom
|
|
19
|
+
* worker hosts without installing global message handlers.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} operation Worker operation name.
|
|
22
|
+
* @param {*} payload Structured-cloneable operation payload.
|
|
23
|
+
* @param {object} [context={}] Optional fetch and abort context.
|
|
24
|
+
* @returns {Promise<*>} Operation result.
|
|
25
|
+
*/
|
|
26
|
+
static async execute(operation, payload, context = {}) {
|
|
27
|
+
switch (operation) {
|
|
28
|
+
case Operation.FETCH:
|
|
29
|
+
return fetchResource(payload, context);
|
|
30
|
+
case Operation.FORMAT_READ:
|
|
31
|
+
return readFormat(payload);
|
|
32
|
+
default:
|
|
33
|
+
{
|
|
34
|
+
const error = new Error(`Unknown resource worker operation: ${operation}`);
|
|
35
|
+
error.code = "CJS_RESOURCE_WORKER_OPERATION_UNKNOWN";
|
|
36
|
+
error.operation = operation;
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Install the ResMan message protocol on a Worker-compatible scope.
|
|
44
|
+
*
|
|
45
|
+
* @param {WorkerGlobalScope|object} scope Worker global.
|
|
46
|
+
* @returns {() => void} Uninstall callback.
|
|
47
|
+
*/
|
|
48
|
+
static install(scope = globalThis) {
|
|
49
|
+
if (!scope || typeof scope.postMessage !== "function") {
|
|
50
|
+
throw new TypeError("Resource worker scope must provide postMessage.");
|
|
51
|
+
}
|
|
52
|
+
const controllers = new Map();
|
|
53
|
+
const onMessage = async event => {
|
|
54
|
+
const message = event?.data;
|
|
55
|
+
if (!message || typeof message !== "object") return;
|
|
56
|
+
if (message.type === Message.CANCEL) {
|
|
57
|
+
controllers.get(message.id)?.abort();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (message.type !== Message.EXECUTE) return;
|
|
61
|
+
const controller = typeof AbortController === "function" ? new AbortController() : null;
|
|
62
|
+
if (controller) controllers.set(message.id, controller);
|
|
63
|
+
try {
|
|
64
|
+
const result = await CjsResManWorker.execute(message.operation, message.payload, {
|
|
65
|
+
signal: controller?.signal
|
|
66
|
+
});
|
|
67
|
+
scope.postMessage({
|
|
68
|
+
type: Message.RESULT,
|
|
69
|
+
id: message.id,
|
|
70
|
+
ok: true,
|
|
71
|
+
result
|
|
72
|
+
}, CjsResManWorker.collectTransferables(result));
|
|
73
|
+
} catch (error) {
|
|
74
|
+
scope.postMessage({
|
|
75
|
+
type: Message.RESULT,
|
|
76
|
+
id: message.id,
|
|
77
|
+
ok: false,
|
|
78
|
+
error: CjsResManWorker.serializeError(error, message.operation)
|
|
79
|
+
});
|
|
80
|
+
} finally {
|
|
81
|
+
controllers.delete(message.id);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
if (typeof scope.addEventListener === "function") {
|
|
85
|
+
scope.addEventListener("message", onMessage);
|
|
86
|
+
return () => scope.removeEventListener?.("message", onMessage);
|
|
87
|
+
}
|
|
88
|
+
const previous = scope.onmessage;
|
|
89
|
+
scope.onmessage = onMessage;
|
|
90
|
+
return () => {
|
|
91
|
+
if (scope.onmessage === onMessage) scope.onmessage = previous || null;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Collect unique transferable ArrayBuffers from a worker result.
|
|
97
|
+
*
|
|
98
|
+
* SharedArrayBuffer is intentionally excluded because it is shared rather
|
|
99
|
+
* than transferable.
|
|
100
|
+
*
|
|
101
|
+
* @param {*} value Result graph.
|
|
102
|
+
* @returns {ArrayBuffer[]} Transfer list.
|
|
103
|
+
*/
|
|
104
|
+
static collectTransferables(value) {
|
|
105
|
+
const buffers = new Set();
|
|
106
|
+
const seen = new Set();
|
|
107
|
+
const visit = entry => {
|
|
108
|
+
if (entry === null || entry === undefined) return;
|
|
109
|
+
if (entry instanceof ArrayBuffer) {
|
|
110
|
+
buffers.add(entry);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (ArrayBuffer.isView(entry)) {
|
|
114
|
+
if (entry.buffer instanceof ArrayBuffer) buffers.add(entry.buffer);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (typeof entry !== "object" || seen.has(entry)) return;
|
|
118
|
+
seen.add(entry);
|
|
119
|
+
if (Array.isArray(entry)) {
|
|
120
|
+
for (const item of entry) visit(item);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
for (const item of Object.values(entry)) visit(item);
|
|
124
|
+
};
|
|
125
|
+
visit(value);
|
|
126
|
+
return [...buffers];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Convert an exception into a cloneable diagnostic.
|
|
131
|
+
*
|
|
132
|
+
* @param {*} value Failure value.
|
|
133
|
+
* @param {string} [operation] Operation name.
|
|
134
|
+
* @returns {object} Cloneable error data.
|
|
135
|
+
*/
|
|
136
|
+
static serializeError(value, operation = undefined) {
|
|
137
|
+
return {
|
|
138
|
+
name: value?.name || "CjsResManWorkerError",
|
|
139
|
+
message: value?.message || String(value),
|
|
140
|
+
code: value?.code,
|
|
141
|
+
operation: value?.operation || operation,
|
|
142
|
+
path: value?.path,
|
|
143
|
+
status: value?.status,
|
|
144
|
+
statusText: value?.statusText
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function fetchResource(payload, context) {
|
|
149
|
+
if (!payload || typeof payload.url !== "string") {
|
|
150
|
+
throw new TypeError("Worker fetch requires a URL.");
|
|
151
|
+
}
|
|
152
|
+
const fetchImplementation = context.fetch || globalThis.fetch;
|
|
153
|
+
if (typeof fetchImplementation !== "function") {
|
|
154
|
+
throw new ReferenceError("Worker fetch is unavailable.");
|
|
155
|
+
}
|
|
156
|
+
const options = {
|
|
157
|
+
...(payload.options || {}),
|
|
158
|
+
...(context.signal ? {
|
|
159
|
+
signal: context.signal
|
|
160
|
+
} : {})
|
|
161
|
+
};
|
|
162
|
+
const response = await fetchImplementation(payload.url, options);
|
|
163
|
+
if (!response.ok) {
|
|
164
|
+
const error = new Error(`Resource fetch failed: ${response.status} ${response.statusText}`);
|
|
165
|
+
error.code = "CJS_RESOURCE_FETCH_FAILED";
|
|
166
|
+
error.path = payload.path;
|
|
167
|
+
error.status = response.status;
|
|
168
|
+
error.statusText = response.statusText;
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
switch (payload.responseType || "arraybuffer") {
|
|
172
|
+
case "arraybuffer":
|
|
173
|
+
return response.arrayBuffer();
|
|
174
|
+
case "blob":
|
|
175
|
+
return response.blob();
|
|
176
|
+
case "json":
|
|
177
|
+
return response.json();
|
|
178
|
+
case "text":
|
|
179
|
+
return response.text();
|
|
180
|
+
default:
|
|
181
|
+
{
|
|
182
|
+
const error = new Error(`Unsupported worker fetch response type: ${payload.responseType}`);
|
|
183
|
+
error.code = "CJS_RESOURCE_WORKER_RESPONSE_TYPE";
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async function readFormat(payload) {
|
|
189
|
+
if (!payload || typeof payload.module !== "string" || payload.module === "") {
|
|
190
|
+
throw new TypeError("Worker format read requires a module URL.");
|
|
191
|
+
}
|
|
192
|
+
const module = await import(payload.module);
|
|
193
|
+
const Format = module[payload.exportName || "default"];
|
|
194
|
+
if (typeof Format !== "function") {
|
|
195
|
+
throw new TypeError(`Worker format export was not found: ${payload.exportName || "default"}`);
|
|
196
|
+
}
|
|
197
|
+
const options = payload.options || {};
|
|
198
|
+
const context = payload.context || null;
|
|
199
|
+
if (typeof Format.readAsync === "function") {
|
|
200
|
+
return Format.readAsync(payload.input, options, context);
|
|
201
|
+
}
|
|
202
|
+
if (typeof Format.read === "function") {
|
|
203
|
+
return Format.read(payload.input, options, context);
|
|
204
|
+
}
|
|
205
|
+
const reader = new Format(options);
|
|
206
|
+
if (typeof reader.ReadAsync === "function") {
|
|
207
|
+
return reader.ReadAsync(payload.input, options, context);
|
|
208
|
+
}
|
|
209
|
+
if (typeof reader.Read === "function") {
|
|
210
|
+
return reader.Read(payload.input, options, context);
|
|
211
|
+
}
|
|
212
|
+
throw new TypeError(`${Format.name} does not expose a read operation.`);
|
|
213
|
+
}
|
|
214
|
+
const isWorkerScope = typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
|
|
215
|
+
if (isWorkerScope) CjsResManWorker.install(globalThis);
|
|
216
|
+
|
|
217
|
+
export { CjsResManWorker };
|
|
218
|
+
//# sourceMappingURL=CjsResManWorker.js.map
|