@carbonenginejs/runtime-resource 0.12.2 → 0.13.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 -108
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3494
- package/dist/CjsResMan.js.map +1 -1
- 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 +408 -361
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -427
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -955
- package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -0
- package/dist/format/effect/effectBodyInventory.js.map +1 -0
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- package/dist/format/effect/effectPermutationGraph.js.map +1 -1
- 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 -292
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- 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 -156
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/busNodes.js +252 -0
- package/dist/formats/bnk/core/busNodes.js.map +1 -0
- package/dist/formats/bnk/core/effectNodes.js +147 -0
- package/dist/formats/bnk/core/effectNodes.js.map +1 -0
- package/dist/formats/bnk/core/eventAction.js +416 -305
- package/dist/formats/bnk/core/eventAction.js.map +1 -1
- package/dist/formats/bnk/core/globalSettings.js +215 -0
- package/dist/formats/bnk/core/globalSettings.js.map +1 -0
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -480
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +533 -509
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/bnk/core/nodeBase.js +553 -532
- package/dist/formats/bnk/core/nodeBase.js.map +1 -1
- 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 +862 -862
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +142 -142
- 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/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 +290 -290
- package/dist/formats/gltf/core/helpers.js +307 -307
- 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 +254 -254
- 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 -781
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
- package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
- 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 -0
- package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
- 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 -314
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -742
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
- 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 -31
- package/dist/formats/index.js.map +1 -1
- 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 +253 -253
- package/dist/formats/obj/core/helpers.js +573 -573
- 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 -0
- package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
- package/dist/formats/pickle/index.js +2 -0
- package/dist/formats/pickle/index.js.map +1 -0
- 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 -68
- package/dist/formats/red/core/redGraph.js.map +1 -1
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +365 -365
- package/dist/formats/stl/core/helpers.js +261 -261
- 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 -221
- package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
- package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/core/effectPackage.js +900 -792
- package/dist/formats/webgl/core/effectPackage.js.map +1 -1
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/errors.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2678
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -428
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
- package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
- package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
- package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
- package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +85 -81
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
- package/dist/formats/webgl/core/helpers.js +167 -306
- package/dist/formats/webgl/core/helpers.js.map +1 -1
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/core/readGlslEffectContainer.js +303 -0
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -197
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
- package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +354 -368
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
- package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
- package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +289 -289
- package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/errors.js.map +1 -1
- package/dist/formats/webgpu/core/helpers.js +443 -443
- package/dist/formats/webgpu/core/helpers.js.map +1 -1
- 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 -385
- package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
- 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/buildResourceTransformPlan.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +320 -320
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
- 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/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +400 -402
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +196 -170
- package/dist/formats/yaml/core/helpers.js.map +1 -1
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -62
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsLoadingObject.js +19 -0
- package/dist/resource/CjsLoadingObject.js.map +1 -0
- package/dist/resource/CjsResource.js +801 -797
- package/dist/resource/CjsResource.js.map +1 -1
- package/dist/resource/ResourceHandlerMode.js +14 -0
- package/dist/resource/ResourceHandlerMode.js.map +1 -0
- 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 -52
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -431
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
- 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 -261
- package/dist/resource/shader/Tr2Shader.js.map +1 -1
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -135
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -109
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -147
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -105
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -86
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -241
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -68
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -111
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
- package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
- package/dist/resource/shader/reflection/shaderStage.js +22 -0
- package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -77
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
- 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 -87
- package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
- package/dist/worker/CjsResManWorker.js +218 -217
- package/dist/worker/CjsResManWorker.js.map +1 -1
- package/dist/worker/CjsResManWorkerLoader.js +437 -434
- package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -109
- package/docs/concepts/resource-lifecycle.md +226 -225
- package/docs/concepts/shader-resource-model.md +111 -114
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -136
- package/docs/formats/carbon-effect-container.md +553 -452
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +77 -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 +65 -67
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -62
- package/docs/formats/hlsl/guides/reading-effects.md +64 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -66
- package/docs/formats/hlsl/reference/api.md +92 -98
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -100
- package/docs/formats/pickle.md +82 -0
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -57
- package/docs/formats/webgl/architecture.md +69 -70
- 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 -871
- 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 -96
- package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +215 -216
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -191
- package/docs/formats/webgpu/reference/api.md +196 -197
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1543
- package/docs/formats/wwise.md +146 -85
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -206
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -952
- 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 -110
- 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 -135
- 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
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
- package/dist/format/effect/effectReflectionPackage.js +0 -636
- package/dist/format/effect/effectReflectionPackage.js.map +0 -1
- package/dist/formats/hlsl/core/HlslReader.js +0 -16
- package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
- package/dist/formats/hlsl/core/portableReflection.js +0 -848
- package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
- package/dist/formats/hlsl/portable.js +0 -2
- package/dist/formats/hlsl/portable.js.map +0 -1
- package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
- package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
- package/dist/formats/webgl/core/cewg/binary.js +0 -19
- package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
- package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
- package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
- package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
- package/dist/resource/shader/portable.js +0 -33
- package/dist/resource/shader/portable.js.map +0 -1
- package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
- package/docs/formats/webgl/effect-reflection.md +0 -127
|
@@ -1,301 +1,301 @@
|
|
|
1
|
-
const CjsResManQueue = Object.freeze({
|
|
2
|
-
MAIN: "main",
|
|
3
|
-
BACKGROUND: "background",
|
|
4
|
-
PREPARE: "main",
|
|
5
|
-
LOAD: "background"
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Small FIFO executor used inside `CjsResMan` that tracks item ids, pause
|
|
10
|
-
* state, concurrency, cancellation, and sync/async completion while queue
|
|
11
|
-
* policy stays in the manager.
|
|
12
|
-
*
|
|
13
|
-
* The queue deliberately does not choose task priority or resource policy.
|
|
14
|
-
*/
|
|
15
|
-
class CjsResManWorkQueue {
|
|
16
|
-
#active = new Map();
|
|
17
|
-
#concurrency = 1;
|
|
18
|
-
#head = 0;
|
|
19
|
-
#items = [];
|
|
20
|
-
#name;
|
|
21
|
-
#nextId = 1;
|
|
22
|
-
#onReady;
|
|
23
|
-
#paused = false;
|
|
24
|
-
#queued = new Map();
|
|
25
|
-
|
|
26
|
-
/** Creates a CjsResManWorkQueue with caller-provided initial state. */
|
|
27
|
-
constructor(name, options = {}) {
|
|
28
|
-
this.#name = CjsResManWorkQueue.normalizeName(name);
|
|
29
|
-
this.#onReady = typeof options.onReady === "function" ? options.onReady : null;
|
|
30
|
-
this.SetConcurrency(options.concurrency ?? 1);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Updates the maximum number of tasks that may run together for the resource
|
|
35
|
-
* work queue.
|
|
36
|
-
*/
|
|
37
|
-
SetConcurrency(value) {
|
|
38
|
-
if (!Number.isInteger(value) || value < 1) {
|
|
39
|
-
throw new TypeError("CjsResMan queue concurrency must be a positive integer.");
|
|
40
|
-
}
|
|
41
|
-
this.#concurrency = value;
|
|
42
|
-
this.#NotifyReady();
|
|
43
|
-
return this;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Returns the maximum number of tasks allowed to run together for the resource
|
|
48
|
-
* work queue.
|
|
49
|
-
*/
|
|
50
|
-
GetConcurrency() {
|
|
51
|
-
return this.#concurrency;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Allocates the next monotonically increasing task identifier for the resource
|
|
56
|
-
* work queue.
|
|
57
|
-
*/
|
|
58
|
-
GetNextId() {
|
|
59
|
-
return this.#nextId;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/** Returns the number of tasks waiting to start for the resource work queue. */
|
|
63
|
-
GetQueuedCount() {
|
|
64
|
-
return this.#queued.size;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/** Returns the number of tasks currently executing for the resource work queue. */
|
|
68
|
-
GetActiveCount() {
|
|
69
|
-
return this.#active.size;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Returns the combined number of waiting and active tasks for the resource
|
|
74
|
-
* work queue.
|
|
75
|
-
*/
|
|
76
|
-
GetPendingCount() {
|
|
77
|
-
return this.#queued.size + this.#active.size;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Reports whether the queue is prevented from starting work for the resource
|
|
82
|
-
* work queue.
|
|
83
|
-
*/
|
|
84
|
-
IsPaused() {
|
|
85
|
-
return this.#paused;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Enqueues one task and returns its cancellation-aware promise for the
|
|
90
|
-
* resource work queue.
|
|
91
|
-
*/
|
|
92
|
-
Add(callback, context = null, metadata = null) {
|
|
93
|
-
if (typeof callback !== "function") {
|
|
94
|
-
throw new TypeError("CjsResMan queue items require a callback.");
|
|
95
|
-
}
|
|
96
|
-
const id = this.#nextId++;
|
|
97
|
-
let resolve;
|
|
98
|
-
let reject;
|
|
99
|
-
const promise = new Promise((onResolve, onReject) => {
|
|
100
|
-
resolve = onResolve;
|
|
101
|
-
reject = onReject;
|
|
102
|
-
});
|
|
103
|
-
const item = {
|
|
104
|
-
id,
|
|
105
|
-
queue: this.#name,
|
|
106
|
-
callback,
|
|
107
|
-
context,
|
|
108
|
-
metadata,
|
|
109
|
-
promise,
|
|
110
|
-
resolve,
|
|
111
|
-
reject,
|
|
112
|
-
state: "queued"
|
|
113
|
-
};
|
|
114
|
-
this.#items.push(item);
|
|
115
|
-
this.#queued.set(id, item);
|
|
116
|
-
this.#NotifyReady();
|
|
117
|
-
return item;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Cancels a queued task selected by its identifier for the resource work
|
|
122
|
-
* queue.
|
|
123
|
-
*/
|
|
124
|
-
Cancel(id, reason = "") {
|
|
125
|
-
const item = this.#queued.get(id);
|
|
126
|
-
if (!item) return false;
|
|
127
|
-
this.#queued.delete(id);
|
|
128
|
-
item.state = "cancelled";
|
|
129
|
-
item.reject(CjsResManWorkQueue.createCancelledError(this.#name, id, reason));
|
|
130
|
-
this.#Compact();
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Prevents queued tasks from starting until resumed for the resource work
|
|
136
|
-
* queue.
|
|
137
|
-
*/
|
|
138
|
-
Pause() {
|
|
139
|
-
this.#paused = true;
|
|
140
|
-
return this;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/** Allows queued tasks to start after a pause for the resource work queue. */
|
|
144
|
-
Resume() {
|
|
145
|
-
if (!this.#paused) return this;
|
|
146
|
-
this.#paused = false;
|
|
147
|
-
this.#NotifyReady();
|
|
148
|
-
return this;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/** Cancels every task that has not started for the resource work queue. */
|
|
152
|
-
Clear(reason = "Queue cleared.") {
|
|
153
|
-
const ids = [...this.#queued.keys()];
|
|
154
|
-
for (const id of ids) this.Cancel(id, reason);
|
|
155
|
-
this.#Compact(true);
|
|
156
|
-
return ids.length;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/** Starts queued work while concurrency permits for the resource work queue. */
|
|
160
|
-
Pump(options = {}) {
|
|
161
|
-
const maxItems = normalizeLimit(options.maxItems);
|
|
162
|
-
const maxTime = normalizeLimit(options.maxTime);
|
|
163
|
-
const now = typeof options.now === "function" ? options.now : defaultNow;
|
|
164
|
-
const startedAt = now();
|
|
165
|
-
let processed = 0;
|
|
166
|
-
if (!this.#paused) {
|
|
167
|
-
while (this.#active.size < this.#concurrency && processed < maxItems) {
|
|
168
|
-
const item = this.#TakeNext();
|
|
169
|
-
if (!item) break;
|
|
170
|
-
this.#Start(item);
|
|
171
|
-
processed++;
|
|
172
|
-
if (processed > 0 && now() - startedAt >= maxTime) break;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
this.#Compact();
|
|
176
|
-
return Object.freeze({
|
|
177
|
-
processed,
|
|
178
|
-
queued: this.GetQueuedCount(),
|
|
179
|
-
active: this.GetActiveCount(),
|
|
180
|
-
pending: this.GetPendingCount(),
|
|
181
|
-
paused: this.#paused
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Returns an immutable snapshot of queue counts and policy for the resource
|
|
187
|
-
* work queue.
|
|
188
|
-
*/
|
|
189
|
-
GetStats() {
|
|
190
|
-
return Object.freeze({
|
|
191
|
-
name: this.#name,
|
|
192
|
-
nextId: this.#nextId,
|
|
193
|
-
concurrency: this.#concurrency,
|
|
194
|
-
queued: this.GetQueuedCount(),
|
|
195
|
-
active: this.GetActiveCount(),
|
|
196
|
-
pending: this.GetPendingCount(),
|
|
197
|
-
paused: this.#paused
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/** Removes and returns the next runnable work item for the resource work queue. */
|
|
202
|
-
#TakeNext() {
|
|
203
|
-
while (this.#head < this.#items.length) {
|
|
204
|
-
const item = this.#items[this.#head++];
|
|
205
|
-
if (item.state !== "queued") continue;
|
|
206
|
-
this.#queued.delete(item.id);
|
|
207
|
-
return item;
|
|
208
|
-
}
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/** Starts one queued work item for the resource work queue. */
|
|
213
|
-
#Start(item) {
|
|
214
|
-
item.state = "active";
|
|
215
|
-
this.#active.set(item.id, item);
|
|
216
|
-
let result;
|
|
217
|
-
try {
|
|
218
|
-
result = item.callback.call(item.context, Object.freeze({
|
|
219
|
-
id: item.id,
|
|
220
|
-
queue: item.queue,
|
|
221
|
-
metadata: item.metadata
|
|
222
|
-
}));
|
|
223
|
-
} catch (error) {
|
|
224
|
-
this.#Settle(item, false, error);
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
if (result && typeof result.then === "function") {
|
|
228
|
-
Promise.resolve(result).then(value => this.#Settle(item, true, value), error => this.#Settle(item, false, error));
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
this.#Settle(item, true, result);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Settles one active work item and advances the queue for the resource work
|
|
236
|
-
* queue.
|
|
237
|
-
*/
|
|
238
|
-
#Settle(item, didResolve, value) {
|
|
239
|
-
if (!this.#active.delete(item.id)) return;
|
|
240
|
-
item.state = didResolve ? "resolved" : "rejected";
|
|
241
|
-
if (didResolve) item.resolve(value);else item.reject(value);
|
|
242
|
-
this.#NotifyReady();
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/** Removes settled work items from the queue for the resource work queue. */
|
|
246
|
-
#Compact(force = false) {
|
|
247
|
-
if (force || this.#head > 256 && this.#head > this.#items.length * 0.5) {
|
|
248
|
-
this.#items = this.#items.slice(this.#head);
|
|
249
|
-
this.#head = 0;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/** Notifies waiters when the queue becomes ready for the resource work queue. */
|
|
254
|
-
#NotifyReady() {
|
|
255
|
-
if (this.#onReady && !this.#paused && this.GetQueuedCount() > 0) {
|
|
256
|
-
this.#onReady(this);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Resolves a queue name or alias to its canonical execution lane.
|
|
262
|
-
*
|
|
263
|
-
* @param {*} value
|
|
264
|
-
* @returns {string}
|
|
265
|
-
*/
|
|
266
|
-
static normalizeName(value) {
|
|
267
|
-
const name = String(value ?? "").trim().toLowerCase();
|
|
268
|
-
if (name === "main" || name === "prepare") return CjsResManQueue.MAIN;
|
|
269
|
-
if (name === "background" || name === "load") return CjsResManQueue.BACKGROUND;
|
|
270
|
-
throw new TypeError(`Unknown CjsResMan queue: ${value}`);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Creates the structured error used when queued work is cancelled.
|
|
275
|
-
*
|
|
276
|
-
* @param {string} queue
|
|
277
|
-
* @param {number} id
|
|
278
|
-
* @param {string} reason
|
|
279
|
-
* @returns {Error}
|
|
280
|
-
*/
|
|
281
|
-
static createCancelledError(queue, id, reason = "") {
|
|
282
|
-
const error = new Error(`CjsResMan ${queue} queue item ${id} was cancelled.${reason ? ` ${reason}` : ""}`);
|
|
283
|
-
error.code = "CJS_RESMAN_QUEUE_CANCELLED";
|
|
284
|
-
error.queue = queue;
|
|
285
|
-
error.id = id;
|
|
286
|
-
return error;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
function normalizeLimit(value) {
|
|
290
|
-
if (value === undefined || value === null || value === 0) return Number.POSITIVE_INFINITY;
|
|
291
|
-
if (typeof value !== "number" || Number.isNaN(value) || value < 0) {
|
|
292
|
-
throw new TypeError("CjsResMan queue limits must be non-negative numbers.");
|
|
293
|
-
}
|
|
294
|
-
return value;
|
|
295
|
-
}
|
|
296
|
-
function defaultNow() {
|
|
297
|
-
return globalThis.performance?.now?.() ?? Date.now();
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
export { CjsResManQueue, CjsResManWorkQueue };
|
|
301
|
-
//# sourceMappingURL=CjsResManWorkQueue.js.map
|
|
1
|
+
const CjsResManQueue = Object.freeze({
|
|
2
|
+
MAIN: "main",
|
|
3
|
+
BACKGROUND: "background",
|
|
4
|
+
PREPARE: "main",
|
|
5
|
+
LOAD: "background"
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Small FIFO executor used inside `CjsResMan` that tracks item ids, pause
|
|
10
|
+
* state, concurrency, cancellation, and sync/async completion while queue
|
|
11
|
+
* policy stays in the manager.
|
|
12
|
+
*
|
|
13
|
+
* The queue deliberately does not choose task priority or resource policy.
|
|
14
|
+
*/
|
|
15
|
+
class CjsResManWorkQueue {
|
|
16
|
+
#active = new Map();
|
|
17
|
+
#concurrency = 1;
|
|
18
|
+
#head = 0;
|
|
19
|
+
#items = [];
|
|
20
|
+
#name;
|
|
21
|
+
#nextId = 1;
|
|
22
|
+
#onReady;
|
|
23
|
+
#paused = false;
|
|
24
|
+
#queued = new Map();
|
|
25
|
+
|
|
26
|
+
/** Creates a CjsResManWorkQueue with caller-provided initial state. */
|
|
27
|
+
constructor(name, options = {}) {
|
|
28
|
+
this.#name = CjsResManWorkQueue.normalizeName(name);
|
|
29
|
+
this.#onReady = typeof options.onReady === "function" ? options.onReady : null;
|
|
30
|
+
this.SetConcurrency(options.concurrency ?? 1);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Updates the maximum number of tasks that may run together for the resource
|
|
35
|
+
* work queue.
|
|
36
|
+
*/
|
|
37
|
+
SetConcurrency(value) {
|
|
38
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
39
|
+
throw new TypeError("CjsResMan queue concurrency must be a positive integer.");
|
|
40
|
+
}
|
|
41
|
+
this.#concurrency = value;
|
|
42
|
+
this.#NotifyReady();
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Returns the maximum number of tasks allowed to run together for the resource
|
|
48
|
+
* work queue.
|
|
49
|
+
*/
|
|
50
|
+
GetConcurrency() {
|
|
51
|
+
return this.#concurrency;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Allocates the next monotonically increasing task identifier for the resource
|
|
56
|
+
* work queue.
|
|
57
|
+
*/
|
|
58
|
+
GetNextId() {
|
|
59
|
+
return this.#nextId;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Returns the number of tasks waiting to start for the resource work queue. */
|
|
63
|
+
GetQueuedCount() {
|
|
64
|
+
return this.#queued.size;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Returns the number of tasks currently executing for the resource work queue. */
|
|
68
|
+
GetActiveCount() {
|
|
69
|
+
return this.#active.size;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Returns the combined number of waiting and active tasks for the resource
|
|
74
|
+
* work queue.
|
|
75
|
+
*/
|
|
76
|
+
GetPendingCount() {
|
|
77
|
+
return this.#queued.size + this.#active.size;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Reports whether the queue is prevented from starting work for the resource
|
|
82
|
+
* work queue.
|
|
83
|
+
*/
|
|
84
|
+
IsPaused() {
|
|
85
|
+
return this.#paused;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Enqueues one task and returns its cancellation-aware promise for the
|
|
90
|
+
* resource work queue.
|
|
91
|
+
*/
|
|
92
|
+
Add(callback, context = null, metadata = null) {
|
|
93
|
+
if (typeof callback !== "function") {
|
|
94
|
+
throw new TypeError("CjsResMan queue items require a callback.");
|
|
95
|
+
}
|
|
96
|
+
const id = this.#nextId++;
|
|
97
|
+
let resolve;
|
|
98
|
+
let reject;
|
|
99
|
+
const promise = new Promise((onResolve, onReject) => {
|
|
100
|
+
resolve = onResolve;
|
|
101
|
+
reject = onReject;
|
|
102
|
+
});
|
|
103
|
+
const item = {
|
|
104
|
+
id,
|
|
105
|
+
queue: this.#name,
|
|
106
|
+
callback,
|
|
107
|
+
context,
|
|
108
|
+
metadata,
|
|
109
|
+
promise,
|
|
110
|
+
resolve,
|
|
111
|
+
reject,
|
|
112
|
+
state: "queued"
|
|
113
|
+
};
|
|
114
|
+
this.#items.push(item);
|
|
115
|
+
this.#queued.set(id, item);
|
|
116
|
+
this.#NotifyReady();
|
|
117
|
+
return item;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Cancels a queued task selected by its identifier for the resource work
|
|
122
|
+
* queue.
|
|
123
|
+
*/
|
|
124
|
+
Cancel(id, reason = "") {
|
|
125
|
+
const item = this.#queued.get(id);
|
|
126
|
+
if (!item) return false;
|
|
127
|
+
this.#queued.delete(id);
|
|
128
|
+
item.state = "cancelled";
|
|
129
|
+
item.reject(CjsResManWorkQueue.createCancelledError(this.#name, id, reason));
|
|
130
|
+
this.#Compact();
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Prevents queued tasks from starting until resumed for the resource work
|
|
136
|
+
* queue.
|
|
137
|
+
*/
|
|
138
|
+
Pause() {
|
|
139
|
+
this.#paused = true;
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** Allows queued tasks to start after a pause for the resource work queue. */
|
|
144
|
+
Resume() {
|
|
145
|
+
if (!this.#paused) return this;
|
|
146
|
+
this.#paused = false;
|
|
147
|
+
this.#NotifyReady();
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Cancels every task that has not started for the resource work queue. */
|
|
152
|
+
Clear(reason = "Queue cleared.") {
|
|
153
|
+
const ids = [...this.#queued.keys()];
|
|
154
|
+
for (const id of ids) this.Cancel(id, reason);
|
|
155
|
+
this.#Compact(true);
|
|
156
|
+
return ids.length;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** Starts queued work while concurrency permits for the resource work queue. */
|
|
160
|
+
Pump(options = {}) {
|
|
161
|
+
const maxItems = normalizeLimit(options.maxItems);
|
|
162
|
+
const maxTime = normalizeLimit(options.maxTime);
|
|
163
|
+
const now = typeof options.now === "function" ? options.now : defaultNow;
|
|
164
|
+
const startedAt = now();
|
|
165
|
+
let processed = 0;
|
|
166
|
+
if (!this.#paused) {
|
|
167
|
+
while (this.#active.size < this.#concurrency && processed < maxItems) {
|
|
168
|
+
const item = this.#TakeNext();
|
|
169
|
+
if (!item) break;
|
|
170
|
+
this.#Start(item);
|
|
171
|
+
processed++;
|
|
172
|
+
if (processed > 0 && now() - startedAt >= maxTime) break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
this.#Compact();
|
|
176
|
+
return Object.freeze({
|
|
177
|
+
processed,
|
|
178
|
+
queued: this.GetQueuedCount(),
|
|
179
|
+
active: this.GetActiveCount(),
|
|
180
|
+
pending: this.GetPendingCount(),
|
|
181
|
+
paused: this.#paused
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Returns an immutable snapshot of queue counts and policy for the resource
|
|
187
|
+
* work queue.
|
|
188
|
+
*/
|
|
189
|
+
GetStats() {
|
|
190
|
+
return Object.freeze({
|
|
191
|
+
name: this.#name,
|
|
192
|
+
nextId: this.#nextId,
|
|
193
|
+
concurrency: this.#concurrency,
|
|
194
|
+
queued: this.GetQueuedCount(),
|
|
195
|
+
active: this.GetActiveCount(),
|
|
196
|
+
pending: this.GetPendingCount(),
|
|
197
|
+
paused: this.#paused
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Removes and returns the next runnable work item for the resource work queue. */
|
|
202
|
+
#TakeNext() {
|
|
203
|
+
while (this.#head < this.#items.length) {
|
|
204
|
+
const item = this.#items[this.#head++];
|
|
205
|
+
if (item.state !== "queued") continue;
|
|
206
|
+
this.#queued.delete(item.id);
|
|
207
|
+
return item;
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** Starts one queued work item for the resource work queue. */
|
|
213
|
+
#Start(item) {
|
|
214
|
+
item.state = "active";
|
|
215
|
+
this.#active.set(item.id, item);
|
|
216
|
+
let result;
|
|
217
|
+
try {
|
|
218
|
+
result = item.callback.call(item.context, Object.freeze({
|
|
219
|
+
id: item.id,
|
|
220
|
+
queue: item.queue,
|
|
221
|
+
metadata: item.metadata
|
|
222
|
+
}));
|
|
223
|
+
} catch (error) {
|
|
224
|
+
this.#Settle(item, false, error);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (result && typeof result.then === "function") {
|
|
228
|
+
Promise.resolve(result).then(value => this.#Settle(item, true, value), error => this.#Settle(item, false, error));
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
this.#Settle(item, true, result);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Settles one active work item and advances the queue for the resource work
|
|
236
|
+
* queue.
|
|
237
|
+
*/
|
|
238
|
+
#Settle(item, didResolve, value) {
|
|
239
|
+
if (!this.#active.delete(item.id)) return;
|
|
240
|
+
item.state = didResolve ? "resolved" : "rejected";
|
|
241
|
+
if (didResolve) item.resolve(value);else item.reject(value);
|
|
242
|
+
this.#NotifyReady();
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/** Removes settled work items from the queue for the resource work queue. */
|
|
246
|
+
#Compact(force = false) {
|
|
247
|
+
if (force || this.#head > 256 && this.#head > this.#items.length * 0.5) {
|
|
248
|
+
this.#items = this.#items.slice(this.#head);
|
|
249
|
+
this.#head = 0;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** Notifies waiters when the queue becomes ready for the resource work queue. */
|
|
254
|
+
#NotifyReady() {
|
|
255
|
+
if (this.#onReady && !this.#paused && this.GetQueuedCount() > 0) {
|
|
256
|
+
this.#onReady(this);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Resolves a queue name or alias to its canonical execution lane.
|
|
262
|
+
*
|
|
263
|
+
* @param {*} value
|
|
264
|
+
* @returns {string}
|
|
265
|
+
*/
|
|
266
|
+
static normalizeName(value) {
|
|
267
|
+
const name = String(value ?? "").trim().toLowerCase();
|
|
268
|
+
if (name === "main" || name === "prepare") return CjsResManQueue.MAIN;
|
|
269
|
+
if (name === "background" || name === "load") return CjsResManQueue.BACKGROUND;
|
|
270
|
+
throw new TypeError(`Unknown CjsResMan queue: ${value}`);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Creates the structured error used when queued work is cancelled.
|
|
275
|
+
*
|
|
276
|
+
* @param {string} queue
|
|
277
|
+
* @param {number} id
|
|
278
|
+
* @param {string} reason
|
|
279
|
+
* @returns {Error}
|
|
280
|
+
*/
|
|
281
|
+
static createCancelledError(queue, id, reason = "") {
|
|
282
|
+
const error = new Error(`CjsResMan ${queue} queue item ${id} was cancelled.${reason ? ` ${reason}` : ""}`);
|
|
283
|
+
error.code = "CJS_RESMAN_QUEUE_CANCELLED";
|
|
284
|
+
error.queue = queue;
|
|
285
|
+
error.id = id;
|
|
286
|
+
return error;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function normalizeLimit(value) {
|
|
290
|
+
if (value === undefined || value === null || value === 0) return Number.POSITIVE_INFINITY;
|
|
291
|
+
if (typeof value !== "number" || Number.isNaN(value) || value < 0) {
|
|
292
|
+
throw new TypeError("CjsResMan queue limits must be non-negative numbers.");
|
|
293
|
+
}
|
|
294
|
+
return value;
|
|
295
|
+
}
|
|
296
|
+
function defaultNow() {
|
|
297
|
+
return globalThis.performance?.now?.() ?? Date.now();
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export { CjsResManQueue, CjsResManWorkQueue };
|
|
301
|
+
//# sourceMappingURL=CjsResManWorkQueue.js.map
|