@carbonenginejs/runtime 0.1.0-alpha.4 → 0.1.0-alpha.5

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.
Files changed (384) hide show
  1. package/dist/global/blue/BlueClasses.js +200 -0
  2. package/dist/global/blue/BlueClasses.js.map +1 -0
  3. package/dist/global/blue/IBlueClasses.js +79 -0
  4. package/dist/global/blue/IBlueClasses.js.map +1 -0
  5. package/dist/global/blue/IBlueDynamicResourceConstructor.js +16 -0
  6. package/dist/global/blue/IBlueDynamicResourceConstructor.js.map +1 -1
  7. package/dist/global/blue/blue.js +8 -2
  8. package/dist/global/blue/blue.js.map +1 -1
  9. package/dist/global/blue/index.js +2 -0
  10. package/dist/global/blue/index.js.map +1 -1
  11. package/dist/global/consts/index.js +0 -1
  12. package/dist/global/consts/index.js.map +1 -1
  13. package/dist/global/consts/renderContext/formats.js +26 -25
  14. package/dist/global/consts/renderContext/formats.js.map +1 -1
  15. package/dist/{trinityal/Tr2BitmapDimensions.js → global/imageio/BitmapDimensions.js} +19 -15
  16. package/dist/global/imageio/BitmapDimensions.js.map +1 -0
  17. package/dist/global/imageio/Cutout.js +28 -0
  18. package/dist/global/imageio/Cutout.js.map +1 -0
  19. package/dist/global/imageio/HostBitmap.js +1106 -0
  20. package/dist/global/imageio/HostBitmap.js.map +1 -0
  21. package/dist/global/imageio/ImageIOResult.js +99 -0
  22. package/dist/global/imageio/ImageIOResult.js.map +1 -0
  23. package/dist/global/imageio/ImageUtility.js +205 -0
  24. package/dist/global/imageio/ImageUtility.js.map +1 -0
  25. package/dist/global/imageio/LoadParameters.js +86 -0
  26. package/dist/global/imageio/LoadParameters.js.map +1 -0
  27. package/dist/global/imageio/Metadata.js +22 -0
  28. package/dist/global/imageio/Metadata.js.map +1 -0
  29. package/dist/global/imageio/index.js +8 -0
  30. package/dist/global/{consts/webgpu → imageio}/index.js.map +1 -1
  31. package/dist/global/index.js +2 -1
  32. package/dist/global/index.js.map +1 -1
  33. package/dist/global/math/color.js +1 -1
  34. package/dist/global/math/color.js.map +1 -1
  35. package/dist/global/schema/CjsSchema.js +8 -0
  36. package/dist/global/schema/CjsSchema.js.map +1 -1
  37. package/dist/index.js +12 -4
  38. package/dist/index.js.map +1 -1
  39. package/dist/resource/CjsResMan.js +47 -7
  40. package/dist/resource/CjsResMan.js.map +1 -1
  41. package/dist/resource/Tr2LightProfileRes.js +37 -0
  42. package/dist/resource/Tr2LightProfileRes.js.map +1 -1
  43. package/dist/resource/format/CjsByteWriter.js +46 -46
  44. package/dist/resource/format/CjsByteWriter.js.map +1 -1
  45. package/dist/resource/format/CjsFormat.js +7 -8
  46. package/dist/resource/format/CjsFormat.js.map +1 -1
  47. package/dist/resource/format/CjsFormatStore.js +8 -8
  48. package/dist/resource/format/CjsFormatStore.js.map +1 -1
  49. package/dist/resource/format/CjsGeometryFormat.js +114 -0
  50. package/dist/resource/format/CjsGeometryFormat.js.map +1 -0
  51. package/dist/resource/format/CjsImageFormat.js +282 -0
  52. package/dist/resource/format/CjsImageFormat.js.map +1 -0
  53. package/dist/resource/format/CjsResourceProbe.js +12 -48
  54. package/dist/resource/format/CjsResourceProbe.js.map +1 -1
  55. package/dist/resource/format/CjsStringTable.js +37 -37
  56. package/dist/resource/format/CjsStringTable.js.map +1 -1
  57. package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js +10 -10
  58. package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
  59. package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js +37 -37
  60. package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -1
  61. package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +35 -7
  62. package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  63. package/dist/resource/format/index.js +3 -1
  64. package/dist/resource/format/index.js.map +1 -1
  65. package/dist/resource/formats/black/CjsBlackFormat.js +130 -137
  66. package/dist/resource/formats/black/CjsBlackFormat.js.map +1 -1
  67. package/dist/resource/formats/bnk/CjsBnkFormat.js +12 -19
  68. package/dist/resource/formats/bnk/CjsBnkFormat.js.map +1 -1
  69. package/dist/resource/formats/bnk/core/helpers.js +1 -3
  70. package/dist/resource/formats/bnk/core/helpers.js.map +1 -1
  71. package/dist/resource/formats/cmf/CjsCmfFormat.js +19 -82
  72. package/dist/resource/formats/cmf/CjsCmfFormat.js.map +1 -1
  73. package/dist/resource/formats/cmf/core/constants.js +1 -2
  74. package/dist/resource/formats/cmf/core/constants.js.map +1 -1
  75. package/dist/resource/formats/{stl/core/targets.js → cmf/core/flatShared.js} +9 -8
  76. package/dist/resource/formats/cmf/core/flatShared.js.map +1 -0
  77. package/dist/resource/formats/cmf/core/helpers.js +13 -13
  78. package/dist/resource/formats/cmf/core/helpers.js.map +1 -1
  79. package/dist/resource/formats/cmf/core/writer.js +24 -24
  80. package/dist/resource/formats/cmf/core/writer.js.map +1 -1
  81. package/dist/resource/formats/dds/CjsDdsFormat.js +134 -17
  82. package/dist/resource/formats/dds/CjsDdsFormat.js.map +1 -1
  83. package/dist/resource/formats/dds/core/helpers.js +125 -40
  84. package/dist/resource/formats/dds/core/helpers.js.map +1 -1
  85. package/dist/resource/formats/dxbc/CjsDxbcFormat.js +14 -16
  86. package/dist/resource/formats/dxbc/CjsDxbcFormat.js.map +1 -1
  87. package/dist/resource/formats/dxbc/core/{container.js → DxbcContainer.js} +2 -2
  88. package/dist/resource/formats/dxbc/core/DxbcContainer.js.map +1 -0
  89. package/dist/resource/formats/dxbc/core/{errors.js → DxbcReadError.js} +1 -1
  90. package/dist/resource/formats/dxbc/core/DxbcReadError.js.map +1 -0
  91. package/dist/resource/formats/dxbc/core/DxbcReader.js +1 -1
  92. package/dist/resource/formats/dxbc/core/DxbcReader.js.map +1 -1
  93. package/dist/resource/formats/dxbc/core/{program.js → DxbcShaderProgram.js} +2 -2
  94. package/dist/resource/formats/dxbc/core/DxbcShaderProgram.js.map +1 -0
  95. package/dist/resource/formats/dxbc/core/{signature.js → DxbcSignatureChunk.js} +2 -2
  96. package/dist/resource/formats/dxbc/core/DxbcSignatureChunk.js.map +1 -0
  97. package/dist/resource/formats/dxbc/core/decoder.js +2 -2
  98. package/dist/resource/formats/dxbc/core/decoder.js.map +1 -1
  99. package/dist/resource/formats/dxbc/core/helpers.js +3 -3
  100. package/dist/resource/formats/dxbc/core/helpers.js.map +1 -1
  101. package/dist/resource/formats/fbx/CjsFbxFormat.js +18 -20
  102. package/dist/resource/formats/fbx/CjsFbxFormat.js.map +1 -1
  103. package/dist/resource/formats/flac/CjsFlacFormat.js +7 -13
  104. package/dist/resource/formats/flac/CjsFlacFormat.js.map +1 -1
  105. package/dist/resource/formats/fsd/32/CjsFsd32Format.js +29 -29
  106. package/dist/resource/formats/fsd/32/CjsFsd32Format.js.map +1 -1
  107. package/dist/resource/formats/fsd/64/CjsFsd64Format.js +3 -3
  108. package/dist/resource/formats/fsd/64/CjsFsd64Format.js.map +1 -1
  109. package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js +23 -23
  110. package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js.map +1 -1
  111. package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js +8 -8
  112. package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js.map +1 -1
  113. package/dist/resource/formats/fsd/CjsFsdFormat.js +23 -23
  114. package/dist/resource/formats/fsd/CjsFsdFormat.js.map +1 -1
  115. package/dist/resource/formats/gif/CjsGifFormat.js +24 -15
  116. package/dist/resource/formats/gif/CjsGifFormat.js.map +1 -1
  117. package/dist/resource/formats/gltf/CjsGltfFormat.js +33 -98
  118. package/dist/resource/formats/gltf/CjsGltfFormat.js.map +1 -1
  119. package/dist/resource/formats/gltf/core/helpers.js +3 -12
  120. package/dist/resource/formats/gltf/core/helpers.js.map +1 -1
  121. package/dist/resource/formats/gr2/CjsGr2Format.js +27 -91
  122. package/dist/resource/formats/gr2/CjsGr2Format.js.map +1 -1
  123. package/dist/resource/formats/hlsl/CjsHlslFormat.js +22 -25
  124. package/dist/resource/formats/hlsl/CjsHlslFormat.js.map +1 -1
  125. package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js +1 -1
  126. package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  127. package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +3 -3
  128. package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -1
  129. package/dist/resource/formats/ies/CjsIESFormat.js +29 -29
  130. package/dist/resource/formats/ies/CjsIESFormat.js.map +1 -1
  131. package/dist/resource/formats/jpeg/CjsJpegFormat.js +24 -15
  132. package/dist/resource/formats/jpeg/CjsJpegFormat.js.map +1 -1
  133. package/dist/resource/formats/jpeg/core/helpers.js +3 -5
  134. package/dist/resource/formats/jpeg/core/helpers.js.map +1 -1
  135. package/dist/resource/formats/jpeg/core/jpeg.js +58 -58
  136. package/dist/resource/formats/jpeg/core/jpeg.js.map +1 -1
  137. package/dist/resource/formats/jsonl/CjsJsonlFormat.js +3 -3
  138. package/dist/resource/formats/jsonl/CjsJsonlFormat.js.map +1 -1
  139. package/dist/resource/formats/mp3/CjsMp3Format.js +7 -14
  140. package/dist/resource/formats/mp3/CjsMp3Format.js.map +1 -1
  141. package/dist/resource/formats/mp3/core/helpers.js +3 -5
  142. package/dist/resource/formats/mp3/core/helpers.js.map +1 -1
  143. package/dist/resource/formats/mp4/CjsMp4Format.js +7 -13
  144. package/dist/resource/formats/mp4/CjsMp4Format.js.map +1 -1
  145. package/dist/resource/formats/mp4/core/helpers.js +3 -5
  146. package/dist/resource/formats/mp4/core/helpers.js.map +1 -1
  147. package/dist/resource/formats/obj/CjsObjFormat.js +92 -157
  148. package/dist/resource/formats/obj/CjsObjFormat.js.map +1 -1
  149. package/dist/resource/formats/obj/core/helpers.js +5 -113
  150. package/dist/resource/formats/obj/core/helpers.js.map +1 -1
  151. package/dist/resource/formats/ogg/CjsOggFormat.js +7 -14
  152. package/dist/resource/formats/ogg/CjsOggFormat.js.map +1 -1
  153. package/dist/resource/formats/pickle/CjsPickleFormat.js +7 -12
  154. package/dist/resource/formats/pickle/CjsPickleFormat.js.map +1 -1
  155. package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js +7 -7
  156. package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -1
  157. package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js +7 -7
  158. package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js.map +1 -1
  159. package/dist/resource/formats/png/CjsPngFormat.js +40 -15
  160. package/dist/resource/formats/png/CjsPngFormat.js.map +1 -1
  161. package/dist/resource/formats/png/core/helpers.js +4 -6
  162. package/dist/resource/formats/png/core/helpers.js.map +1 -1
  163. package/dist/resource/formats/red/CjsRedFormat.js +22 -28
  164. package/dist/resource/formats/red/CjsRedFormat.js.map +1 -1
  165. package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js +3 -7
  166. package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js.map +1 -1
  167. package/dist/resource/formats/schemabound/core/schemaBoundValues.js +5 -0
  168. package/dist/resource/formats/schemabound/core/schemaBoundValues.js.map +1 -1
  169. package/dist/resource/formats/sqlite/CjsSqliteFormat.js +4 -9
  170. package/dist/resource/formats/sqlite/CjsSqliteFormat.js.map +1 -1
  171. package/dist/resource/formats/static/CjsStaticFormat.js +4 -4
  172. package/dist/resource/formats/static/CjsStaticFormat.js.map +1 -1
  173. package/dist/resource/formats/stl/CjsStlFormat.js +39 -104
  174. package/dist/resource/formats/stl/CjsStlFormat.js.map +1 -1
  175. package/dist/resource/formats/stl/core/helpers.js +5 -19
  176. package/dist/resource/formats/stl/core/helpers.js.map +1 -1
  177. package/dist/resource/formats/tga/CjsTgaFormat.js +26 -15
  178. package/dist/resource/formats/tga/CjsTgaFormat.js.map +1 -1
  179. package/dist/resource/formats/tga/core/helpers.js +3 -5
  180. package/dist/resource/formats/tga/core/helpers.js.map +1 -1
  181. package/dist/resource/formats/vta/CjsVtaFormat.js +8 -15
  182. package/dist/resource/formats/vta/CjsVtaFormat.js.map +1 -1
  183. package/dist/resource/formats/wav/CjsWavFormat.js +7 -14
  184. package/dist/resource/formats/wav/CjsWavFormat.js.map +1 -1
  185. package/dist/resource/formats/wav/core/helpers.js +3 -5
  186. package/dist/resource/formats/wav/core/helpers.js.map +1 -1
  187. package/dist/resource/formats/webgl/CjsWebglFormat.js +103 -105
  188. package/dist/resource/formats/webgl/CjsWebglFormat.js.map +1 -1
  189. package/dist/resource/formats/webgl/core/{errors.js → WebglReadError.js} +1 -1
  190. package/dist/resource/formats/webgl/core/WebglReadError.js.map +1 -0
  191. package/dist/resource/formats/webgl/core/effectPackage.js +1 -1
  192. package/dist/resource/formats/webgl/core/effectPackage.js.map +1 -1
  193. package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +3 -3
  194. package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  195. package/dist/resource/formats/webgl/core/glsl/{DxbcGlslHelpers.js → DxbcGlslHelperRegistry.js} +2 -2
  196. package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelperRegistry.js.map +1 -0
  197. package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +1 -1
  198. package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
  199. package/dist/resource/formats/webgl/core/glslBackendBlock.js +1 -1
  200. package/dist/resource/formats/webgl/core/glslBackendBlock.js.map +1 -1
  201. package/dist/resource/formats/webgl/core/helpers.js.map +1 -1
  202. package/dist/resource/formats/webgpu/CjsWebgpuFormat.js +28 -29
  203. package/dist/resource/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  204. package/dist/resource/formats/webgpu/core/{errors.js → WebgpuReadError.js} +1 -1
  205. package/dist/resource/formats/webgpu/core/WebgpuReadError.js.map +1 -0
  206. package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js +1 -1
  207. package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -1
  208. package/dist/resource/formats/webgpu/core/helpers.js +1 -1
  209. package/dist/resource/formats/webgpu/core/helpers.js.map +1 -1
  210. package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js +1 -1
  211. package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -1
  212. package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js +18 -6
  213. package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  214. package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +39 -13
  215. package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
  216. package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +16 -14
  217. package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -1
  218. package/dist/resource/formats/webm/CjsWebmFormat.js +8 -13
  219. package/dist/resource/formats/webm/CjsWebmFormat.js.map +1 -1
  220. package/dist/resource/formats/webm/core/helpers.js +3 -5
  221. package/dist/resource/formats/webm/core/helpers.js.map +1 -1
  222. package/dist/resource/formats/webp/CjsWebpFormat.js +8 -12
  223. package/dist/resource/formats/webp/CjsWebpFormat.js.map +1 -1
  224. package/dist/resource/formats/wem/CjsWemFormat.js +9 -17
  225. package/dist/resource/formats/wem/CjsWemFormat.js.map +1 -1
  226. package/dist/resource/formats/wem/core/bitStream.js +35 -35
  227. package/dist/resource/formats/wem/core/bitStream.js.map +1 -1
  228. package/dist/resource/formats/wem/core/helpers.js +1 -3
  229. package/dist/resource/formats/wem/core/helpers.js.map +1 -1
  230. package/dist/resource/formats/yaml/CjsYamlFormat.js +28 -37
  231. package/dist/resource/formats/yaml/CjsYamlFormat.js.map +1 -1
  232. package/dist/resource/imageio/ImageIO.js +142 -0
  233. package/dist/resource/imageio/ImageIO.js.map +1 -0
  234. package/dist/resource/imageio/index.js +17 -0
  235. package/dist/resource/imageio/index.js.map +1 -0
  236. package/dist/resource/index.js +7 -0
  237. package/dist/resource/index.js.map +1 -1
  238. package/dist/resource/shader/reflection/Tr2EffectResource.js +24 -2
  239. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  240. package/dist/resource/shader/reflection/Tr2Pass.js +76 -5
  241. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  242. package/dist/resource/texture/CjsTextureArrayConstructor.js +97 -0
  243. package/dist/resource/texture/CjsTextureArrayConstructor.js.map +1 -0
  244. package/dist/resource/texture/CjsTexturePackConstructor.js +160 -0
  245. package/dist/resource/texture/CjsTexturePackConstructor.js.map +1 -0
  246. package/dist/resource/texture/CjsTexturePipelineStepArray.js +72 -0
  247. package/dist/resource/texture/CjsTexturePipelineStepArray.js.map +1 -0
  248. package/dist/resource/texture/CjsTexturePipelineStepConvert.js +73 -0
  249. package/dist/resource/texture/CjsTexturePipelineStepConvert.js.map +1 -0
  250. package/dist/resource/texture/CjsTexturePipelineStepPack.js +71 -0
  251. package/dist/resource/texture/CjsTexturePipelineStepPack.js.map +1 -0
  252. package/dist/resource/texture/CjsTexturePipelineStepResize.js +123 -0
  253. package/dist/resource/texture/CjsTexturePipelineStepResize.js.map +1 -0
  254. package/dist/resource/texture/SolidColorTextureConstructor.js +11 -1
  255. package/dist/resource/texture/SolidColorTextureConstructor.js.map +1 -1
  256. package/dist/resource/texture/Tr2ImageRes.js +100 -68
  257. package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
  258. package/dist/resource/texture/Tr2TexturePipeline.js +45 -25
  259. package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -1
  260. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +34 -1
  261. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -1
  262. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +30 -3
  263. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -1
  264. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +81 -1
  265. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -1
  266. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +36 -1
  267. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -1
  268. package/dist/resource/texture/Tr2TexturePipelineStepPack.js +146 -24
  269. package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -1
  270. package/dist/resource/texture/TriTextureRes.js +151 -29
  271. package/dist/resource/texture/TriTextureRes.js.map +1 -1
  272. package/dist/resource/texture/index.js +7 -0
  273. package/dist/resource/texture/index.js.map +1 -1
  274. package/dist/resource/texture/registerTextureResources.js +83 -0
  275. package/dist/resource/texture/registerTextureResources.js.map +1 -0
  276. package/dist/resource/texture/solidColorTexture.js +10 -19
  277. package/dist/resource/texture/solidColorTexture.js.map +1 -1
  278. package/dist/sof/EveSOF.js +39 -7
  279. package/dist/sof/EveSOF.js.map +1 -1
  280. package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js +2 -2
  281. package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js.map +1 -1
  282. package/dist/trinity/core/Tr2ImageIOHelpers.js +80 -17
  283. package/dist/trinity/core/Tr2ImageIOHelpers.js.map +1 -1
  284. package/dist/trinity/core/Tr2RenderUtils.js +1 -1
  285. package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js +49 -62
  286. package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js.map +1 -1
  287. package/dist/trinity/core/Tr2TextureReference.js +114 -0
  288. package/dist/trinity/core/Tr2TextureReference.js.map +1 -0
  289. package/dist/trinity/core/device/Tr2DepthStencil.js +2 -2
  290. package/dist/trinity/core/device/Tr2DepthStencil.js.map +1 -1
  291. package/dist/trinity/core/device/Tr2RingBuffer/Tr2RingBuffer.js +1 -1
  292. package/dist/trinity/core/index.js +1 -0
  293. package/dist/trinity/core/index.js.map +1 -1
  294. package/dist/trinity/core/lighting/Tr2LightManager.js +5 -4
  295. package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
  296. package/dist/trinity/core/procedural/GradientTextureConstructor.js +5 -4
  297. package/dist/trinity/core/procedural/GradientTextureConstructor.js.map +1 -1
  298. package/dist/trinity/core/procedural/gradientTexture.js +10 -13
  299. package/dist/trinity/core/procedural/gradientTexture.js.map +1 -1
  300. package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js +1 -1
  301. package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js.map +1 -1
  302. package/dist/trinity/eve/EveImpactOverlay.js +102 -50
  303. package/dist/trinity/eve/EveImpactOverlay.js.map +1 -1
  304. package/dist/trinity/eve/EveModularObjectModifier.js +9 -18
  305. package/dist/trinity/eve/EveModularObjectModifier.js.map +1 -1
  306. package/dist/trinity/eve/attachment/turrets/EveTurretSet.js +175 -157
  307. package/dist/trinity/eve/attachment/turrets/EveTurretSet.js.map +1 -1
  308. package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js +100 -83
  309. package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js.map +1 -1
  310. package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js +26 -20
  311. package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js.map +1 -1
  312. package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js +368 -179
  313. package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js.map +1 -1
  314. package/dist/trinity/eve/child/EveChildMesh.js +242 -234
  315. package/dist/trinity/eve/child/EveChildMesh.js.map +1 -1
  316. package/dist/trinity/eve/child/EveChildTurret.js +57 -16
  317. package/dist/trinity/eve/child/EveChildTurret.js.map +1 -1
  318. package/dist/trinity/eve/child/EveSpaceObjectChild.js +28 -1
  319. package/dist/trinity/eve/child/EveSpaceObjectChild.js.map +1 -1
  320. package/dist/trinity/eve/index.js +2 -2
  321. package/dist/trinity/eve/overlays/EveDamageOverlay.js +5 -1
  322. package/dist/trinity/eve/overlays/EveDamageOverlay.js.map +1 -1
  323. package/dist/trinity/eve/scene/EveSpaceScene.js +234 -233
  324. package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
  325. package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +2 -0
  326. package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
  327. package/dist/trinity/eve/spaceObject/EveSpaceObject2.js +492 -437
  328. package/dist/trinity/eve/spaceObject/EveSpaceObject2.js.map +1 -1
  329. package/dist/trinity/generated/index.js +0 -1
  330. package/dist/trinity/generated/index.js.map +1 -1
  331. package/dist/trinity/generated/trinityCore/index.js +0 -1
  332. package/dist/trinity/generated/trinityCore/index.js.map +1 -1
  333. package/dist/trinity/index.js +3 -3
  334. package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js +10 -1
  335. package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js.map +1 -1
  336. package/dist/trinity/shader/Tr2DataTextureManager.js +152 -66
  337. package/dist/trinity/shader/Tr2DataTextureManager.js.map +1 -1
  338. package/dist/trinity/shader/Tr2Material.js +1 -1
  339. package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js +5 -5
  340. package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js.map +1 -1
  341. package/dist/trinityal/index.js +1 -1
  342. package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js +2 -2
  343. package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js.map +1 -1
  344. package/dist/trinityal/stub/Tr2SwapChainALStub.js +45 -45
  345. package/dist/trinityal/stub/Tr2SwapChainALStub.js.map +1 -1
  346. package/dist/trinityal/stub/Tr2TextureALStub.js +170 -170
  347. package/dist/trinityal/stub/Tr2TextureALStub.js.map +1 -1
  348. package/dist/trinityal/webgpu/CjsWebgpuDevice.js +234 -164
  349. package/dist/trinityal/webgpu/CjsWebgpuDevice.js.map +1 -1
  350. package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +7 -0
  351. package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
  352. package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +78 -14
  353. package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
  354. package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +94 -0
  355. package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -0
  356. package/dist/trinityal/webgpu/internal.js +1 -0
  357. package/dist/trinityal/webgpu/internal.js.map +1 -1
  358. package/docs/global/reference/classes/README.md +90 -0
  359. package/docs/resource/concepts/format-capabilities.md +3 -3
  360. package/docs/resource/formats/README.md +1 -1
  361. package/docs/resource/reference/classes/core.md +31 -1
  362. package/docs/resource/reference/classes/formats.md +7 -7
  363. package/docs/resource/reference/classes/resources.md +76 -16
  364. package/docs/trinity/reference/classes/generated.md +0 -10
  365. package/docs/trinity/reference/classes/trinity-core.md +1692 -1682
  366. package/docs/trinityal/reference/classes/README.md +0 -10
  367. package/docs/trinityal/webgpu/reference/classes/README.md +276 -266
  368. package/package.json +4 -3
  369. package/dist/global/consts/webgpu/index.js +0 -2
  370. package/dist/global/consts/webgpu/textureFormats.js +0 -180
  371. package/dist/global/consts/webgpu/textureFormats.js.map +0 -1
  372. package/dist/resource/formats/dxbc/core/container.js.map +0 -1
  373. package/dist/resource/formats/dxbc/core/errors.js.map +0 -1
  374. package/dist/resource/formats/dxbc/core/program.js.map +0 -1
  375. package/dist/resource/formats/dxbc/core/signature.js.map +0 -1
  376. package/dist/resource/formats/stl/core/targets.js.map +0 -1
  377. package/dist/resource/formats/webgl/core/errors.js.map +0 -1
  378. package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +0 -1
  379. package/dist/resource/formats/webgpu/core/errors.js.map +0 -1
  380. package/dist/resource/texture/texturePipelineBehavior.js +0 -332
  381. package/dist/resource/texture/texturePipelineBehavior.js.map +0 -1
  382. package/dist/trinity/generated/trinityCore/Tr2TextureReference.js +0 -40
  383. package/dist/trinity/generated/trinityCore/Tr2TextureReference.js.map +0 -1
  384. package/dist/trinityal/Tr2BitmapDimensions.js.map +0 -1
@@ -0,0 +1,282 @@
1
+ import { CjsFormat } from './CjsFormat.js';
2
+ import { ImageIOResult, Cutout, HostBitmap, BitmapDimensions } from '#imageio';
3
+ import { PixelFormatFromCanonical, PixelFormat, IsCompressedFormat } from '#consts/render-context';
4
+ import { canDecodeDdsBlockFormat, decodeDdsSlice } from '../formats/dds/core/helpers.js';
5
+
6
+ /** PixelFormat -> the block decoders' format string (the inverse of PixelFormatFromCanonical). */
7
+ const CANONICAL_BY_PIXEL_FORMAT = new Map(Object.entries(PixelFormatFromCanonical).map(([name, value]) => [value, name]));
8
+
9
+ /** sRGB block formats decode to the sRGB variant of RGBA8; everything else to linear. */
10
+ const SRGB_BLOCK_FORMATS = new Set([PixelFormat.PIXEL_FORMAT_BC1_UNORM_SRGB, PixelFormat.PIXEL_FORMAT_BC2_UNORM_SRGB, PixelFormat.PIXEL_FORMAT_BC3_UNORM_SRGB, PixelFormat.PIXEL_FORMAT_BC7_UNORM_SRGB]);
11
+
12
+ /**
13
+ * The base of every image format: it gives each subclass Carbon's image-handler
14
+ * table and the step that turns a native read into the format a caller asked
15
+ * for.
16
+ *
17
+ * `Format.carbon` IS Carbon's `ImageIO::ImageFormatFunctions`
18
+ * (imageio/include/Tr2ImageHandler.h:74-80) - `checkExtension`, `readImage`,
19
+ * `isSaveSupported`, `save` - built per subclass from its hooks, so the ImageIO
20
+ * registry in resource/imageio can register any image format the way Carbon's
21
+ * `RegisterImageIOHandlers` registers its handlers. Carbon has seven handlers;
22
+ * we have more formats, and each one gets the table by extending this class.
23
+ *
24
+ * A subclass supplies:
25
+ * - `static extensions` (already declared by every format) for checkExtension;
26
+ * - `static readImageNative(bytes, loadParameters, bitmap, metadata)`, which
27
+ * fills the bitmap it is handed in its natural format and returns an
28
+ * ImageIOResult. It calls methods on the bitmap; it never imports HostBitmap.
29
+ *
30
+ * NOT CARBON: `LoadParameters.requestedFormat`. When a caller asks for a format
31
+ * other than the native one, `readImage` converts after the native read
32
+ * (`convertImage`): HostBitmap's own ConvertFormat, then block decode. Encoding
33
+ * to a block format is the next step here, so every image format inherits it
34
+ * from this one place (/docs/projects/hostbitmap-port.md).
35
+ */
36
+ class CjsImageFormat extends CjsFormat {
37
+ /**
38
+ * Carbon's handler table for this format class, built once per subclass.
39
+ *
40
+ * @returns {{checkExtension: Function, readImage: Function, isSaveSupported: Function, save: Function}} The table.
41
+ */
42
+ static get carbon() {
43
+ if (!Object.hasOwn(this, "_carbon")) {
44
+ this._carbon = {
45
+ checkExtension: extension => this.checkExtension(extension),
46
+ readImage: (bytes, loadParameters, bitmap, metadata = null) => this.readImage(bytes, loadParameters, bitmap, metadata),
47
+ // Not Carbon: see readImageAsync.
48
+ readImageAsync: (bytes, loadParameters, bitmap, metadata = null) => this.readImageAsync(bytes, loadParameters, bitmap, metadata),
49
+ isSaveSupported: dimensions => this.isSaveSupported(dimensions),
50
+ save: (bitmap, metadata = null) => this.save(bitmap, metadata)
51
+ };
52
+ }
53
+ return this._carbon;
54
+ }
55
+
56
+ /**
57
+ * Whether an extension (without the dot) is one of this format's, case-insensitively.
58
+ *
59
+ * @param {string} extension Extension.
60
+ * @returns {boolean} Whether this format reads it.
61
+ */
62
+ static checkExtension(extension) {
63
+ const wanted = `.${extension.toLowerCase()}`;
64
+ return this.extensions.includes(wanted);
65
+ }
66
+
67
+ /**
68
+ * Fill `bitmap` in the format's natural pixel format. Every image format
69
+ * implements this.
70
+ *
71
+ * @param {Uint8Array} _bytes File bytes.
72
+ * @param {LoadParameters} _loadParameters Load parameters.
73
+ * @param {object} _bitmap Destination HostBitmap.
74
+ * @param {object|null} _metadata Optional Metadata out.
75
+ * @returns {ImageIOResult} The result.
76
+ */
77
+ static readImageNative(_bytes, _loadParameters, _bitmap, _metadata) {
78
+ throw new Error(`${this.name}.readImageNative is not implemented`);
79
+ }
80
+
81
+ /**
82
+ * Fill a bitmap from one of our readers' RGBA8 outputs (`read(bytes, { emit: "rgba" })`),
83
+ * for the formats whose decoders already produce one: PNG, JPEG, TGA, GIF.
84
+ *
85
+ * The bitmap is a single-mip 2D B8G8R8A8_UNORM image, as Carbon's JPEG handler
86
+ * and its PNG/TGA handlers for images with alpha produce, and as the texture
87
+ * pipeline's pack step requires of its inputs (BGRA, BGRX or R8).
88
+ *
89
+ * adapted: Carbon's PNG/TGA handlers keep an opaque RGB image as BGRX and a
90
+ * grey one as R8 (Tr2PngHandler.cpp:125-160, Tr2TgaHandler.cpp:98-110); our
91
+ * decoders report RGBA only, so those arrive as BGRA with their alpha. The
92
+ * metadata cutout is the default: the PNG cutout chunk is not read yet.
93
+ *
94
+ * @param {object} payload An RGBA8 payload: width, height, data, strideBytes.
95
+ * @param {object} bitmap Destination HostBitmap.
96
+ * @param {object|null} [metadata] Optional Metadata out.
97
+ * @returns {ImageIOResult} The result.
98
+ */
99
+ static readImageFromRgbaPayload(payload, bitmap, metadata = null) {
100
+ if (!(payload.data instanceof Uint8Array)) {
101
+ return new ImageIOResult(ImageIOResult.Code.HEADER_NOT_SUPPORTED, `${payload.pixelFormat} is not an 8-bit image`);
102
+ }
103
+ if (!bitmap.Create(payload.width, payload.height, 1, PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM)) {
104
+ return new ImageIOResult(ImageIOResult.Code.ERROR_CREATING_BITMAP);
105
+ }
106
+ const dst = bitmap.GetRawData();
107
+ const row = payload.width * 4;
108
+ const stride = payload.strideBytes || row;
109
+ for (let y = 0; y < payload.height; y++) {
110
+ dst.set(payload.data.subarray(y * stride, y * stride + row), y * row);
111
+ }
112
+ bitmap.ConvertFormat(PixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM);
113
+ if (metadata) metadata.cutout = new Cutout();
114
+ return new ImageIOResult(ImageIOResult.Code.OK);
115
+ }
116
+
117
+ /**
118
+ * The asynchronous native read. Defaults to the synchronous one; a format
119
+ * whose decoder is asynchronous (PNG, which inflates through the browser's
120
+ * DecompressionStream) overrides this instead.
121
+ *
122
+ * @param {Uint8Array} bytes File bytes.
123
+ * @param {LoadParameters} loadParameters Load parameters.
124
+ * @param {object} bitmap Destination HostBitmap.
125
+ * @param {object|null} metadata Optional Metadata out.
126
+ * @returns {Promise<ImageIOResult>} The result.
127
+ */
128
+ static async readImageNativeAsync(bytes, loadParameters, bitmap, metadata) {
129
+ return this.readImageNative(bytes, loadParameters, bitmap, metadata);
130
+ }
131
+
132
+ /**
133
+ * `readImage` for any image format, including those whose decoder is
134
+ * asynchronous.
135
+ *
136
+ * Not Carbon: Carbon's ReadImage is synchronous because its zlib is. In a
137
+ * browser, inflation is DecompressionStream, which has only an asynchronous
138
+ * API, so PNG cannot answer the synchronous call. Resource loading is
139
+ * asynchronous anyway; every format answers this one.
140
+ *
141
+ * @param {Uint8Array} bytes File bytes.
142
+ * @param {LoadParameters} loadParameters Load parameters.
143
+ * @param {object} bitmap Destination HostBitmap.
144
+ * @param {object|null} [metadata] Optional Metadata out.
145
+ * @returns {Promise<ImageIOResult>} The result.
146
+ */
147
+ static async readImageAsync(bytes, loadParameters, bitmap, metadata = null) {
148
+ const result = await this.readImageNativeAsync(bytes, loadParameters, bitmap, metadata);
149
+ return this._finishRead(result, loadParameters, bitmap);
150
+ }
151
+
152
+ /**
153
+ * Read an image into `bitmap`, then convert it to `loadParameters.requestedFormat`
154
+ * when one is asked for.
155
+ *
156
+ * @param {Uint8Array} bytes File bytes.
157
+ * @param {LoadParameters} loadParameters Load parameters.
158
+ * @param {object} bitmap Destination HostBitmap.
159
+ * @param {object|null} [metadata] Optional Metadata out.
160
+ * @returns {ImageIOResult} The result.
161
+ */
162
+ static readImage(bytes, loadParameters, bitmap, metadata = null) {
163
+ return this._finishRead(this.readImageNative(bytes, loadParameters, bitmap, metadata), loadParameters, bitmap);
164
+ }
165
+
166
+ /** The conversion to the requested format, shared by both reads. */
167
+ static _finishRead(result, loadParameters, bitmap) {
168
+ if (!result.IsOk()) return result;
169
+ const requested = loadParameters.requestedFormat;
170
+ if (requested === null || requested === bitmap.GetFormat()) return result;
171
+ if (!this.convertImage(bitmap, requested)) {
172
+ return new ImageIOResult(ImageIOResult.Code.ERROR_CONVERTING_FORMAT, `cannot convert pixel format ${bitmap.GetFormat()} to ${requested} yet`);
173
+ }
174
+ return result;
175
+ }
176
+
177
+ /**
178
+ * Convert a bitmap in place to a pixel format, for every image format.
179
+ *
180
+ * First HostBitmap's own conversions (Carbon's ConvertFormat); then, for
181
+ * block-compressed data, a decode of every mip of every array element (and
182
+ * every slice of a volume) to RGBA8 - or RGBA32F for BC6H - followed by
183
+ * Carbon's conversion from there when the request was, say, BGRA. sRGB is
184
+ * kept: an sRGB block format decodes to R8G8B8A8_UNORM_SRGB.
185
+ *
186
+ * Not Carbon: D3D takes block formats directly, so Carbon never decodes. A
187
+ * browser may refuse a block format (/docs/projects/hostbitmap-port.md,
188
+ * "Declared divergence"). Encoding to a block format is the next step.
189
+ *
190
+ * @param {HostBitmap} bitmap Bitmap to convert in place.
191
+ * @param {number} requested A `PixelFormat` value.
192
+ * @returns {boolean} Whether the bitmap is now in the requested format.
193
+ */
194
+ static convertImage(bitmap, requested) {
195
+ if (bitmap.ConvertFormat(requested)) return true;
196
+ const source = bitmap.GetFormat();
197
+ const name = CANONICAL_BY_PIXEL_FORMAT.get(source);
198
+ if (!IsCompressedFormat(source) || !canDecodeDdsBlockFormat(name)) return false;
199
+ const decoded = this.decodeBlocks(bitmap, name);
200
+ if (!decoded) return false;
201
+ if (decoded.GetFormat() !== requested && !decoded.ConvertFormat(requested)) return false;
202
+ bitmap.Swap(decoded);
203
+ return true;
204
+ }
205
+
206
+ /**
207
+ * Decode a block-compressed bitmap into a new uncompressed one.
208
+ *
209
+ * @param {HostBitmap} bitmap Block-compressed source.
210
+ * @param {string} name The source's block format string, e.g. "bc7-rgba-unorm".
211
+ * @returns {HostBitmap|null} The decoded bitmap.
212
+ */
213
+ static decodeBlocks(bitmap, name) {
214
+ const isFloat = name.startsWith("bc6h-");
215
+ const format = isFloat ? PixelFormat.PIXEL_FORMAT_R32G32B32A32_FLOAT : SRGB_BLOCK_FORMATS.has(bitmap.GetFormat()) ? PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB : PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM;
216
+ const target = new HostBitmap();
217
+ const created = target.CreateFromBitmapDimensions(new BitmapDimensions({
218
+ type: bitmap.GetType(),
219
+ format,
220
+ width: bitmap.GetWidth(),
221
+ height: bitmap.GetHeight(),
222
+ depth: bitmap.GetDepth(),
223
+ mipCount: bitmap.GetMipCount(),
224
+ arraySize: bitmap.GetArraySize()
225
+ }));
226
+ if (!created) return null;
227
+ const mips = bitmap.GetTrueMipCount();
228
+ for (let element = 0; element < bitmap.GetArraySize(); element++) {
229
+ for (let mip = 0; mip < mips; mip++) {
230
+ const width = Math.max(bitmap.GetWidth() >>> mip, 1);
231
+ const height = Math.max(bitmap.GetHeight() >>> mip, 1);
232
+ const depth = bitmap.GetMipDepth(mip);
233
+ const sliceBytes = bitmap.GetMipSize(mip) / depth;
234
+ const rowPitch = bitmap.GetMipPitch(mip);
235
+ const src = bitmap.GetMipRawData(mip, element);
236
+ const dst = target.GetMipRawData(mip, element);
237
+ const dstSlice = target.GetMipSize(mip) / depth;
238
+ for (let slice = 0; slice < depth; slice++) {
239
+ const pixels = decodeDdsSlice(src.subarray(slice * sliceBytes, (slice + 1) * sliceBytes), {
240
+ width,
241
+ height,
242
+ pixelFormat: name
243
+ }, {
244
+ rowPitch
245
+ });
246
+ dst.set(new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength), slice * dstSlice);
247
+ }
248
+ }
249
+ }
250
+ return target;
251
+ }
252
+
253
+ /**
254
+ * Whether this format can save a bitmap of these dimensions. Formats that
255
+ * write override this.
256
+ *
257
+ * @param {object} _dimensions BitmapDimensions.
258
+ * @returns {ImageIOResult} METHOD_NOT_SUPPORTED unless overridden.
259
+ */
260
+ static isSaveSupported(_dimensions) {
261
+ return new ImageIOResult(ImageIOResult.Code.METHOD_NOT_SUPPORTED);
262
+ }
263
+
264
+ /**
265
+ * Save a bitmap. Formats that write override this.
266
+ *
267
+ * adapted: Carbon writes to a stream; this returns `{result, bytes}`.
268
+ *
269
+ * @param {object} _bitmap HostBitmap.
270
+ * @param {object|null} _metadata Optional Metadata.
271
+ * @returns {{result: ImageIOResult, bytes: Uint8Array|null}} The outcome.
272
+ */
273
+ static save(_bitmap, _metadata = null) {
274
+ return {
275
+ result: new ImageIOResult(ImageIOResult.Code.METHOD_NOT_SUPPORTED),
276
+ bytes: null
277
+ };
278
+ }
279
+ }
280
+
281
+ export { CjsImageFormat };
282
+ //# sourceMappingURL=CjsImageFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CjsImageFormat.js","sources":["../../../../src/resource/format/CjsImageFormat.js"],"sourcesContent":["import { CjsFormat } from \"./CjsFormat.js\";\nimport { BitmapDimensions, Cutout, HostBitmap, ImageIOResult, LoadParameters } from \"#imageio\";\nimport { IsCompressedFormat, PixelFormat, PixelFormatFromCanonical } from \"#consts/render-context\";\nimport { canDecodeDdsBlockFormat, decodeDdsSlice } from \"../formats/dds/core/helpers.js\";\n\n/** PixelFormat -> the block decoders' format string (the inverse of PixelFormatFromCanonical). */\nconst CANONICAL_BY_PIXEL_FORMAT = new Map(Object.entries(PixelFormatFromCanonical).map(([ name, value ]) => [ value, name ]));\n\n/** sRGB block formats decode to the sRGB variant of RGBA8; everything else to linear. */\nconst SRGB_BLOCK_FORMATS = new Set([\n PixelFormat.PIXEL_FORMAT_BC1_UNORM_SRGB,\n PixelFormat.PIXEL_FORMAT_BC2_UNORM_SRGB,\n PixelFormat.PIXEL_FORMAT_BC3_UNORM_SRGB,\n PixelFormat.PIXEL_FORMAT_BC7_UNORM_SRGB\n]);\n\n/**\n * The base of every image format: it gives each subclass Carbon's image-handler\n * table and the step that turns a native read into the format a caller asked\n * for.\n *\n * `Format.carbon` IS Carbon's `ImageIO::ImageFormatFunctions`\n * (imageio/include/Tr2ImageHandler.h:74-80) - `checkExtension`, `readImage`,\n * `isSaveSupported`, `save` - built per subclass from its hooks, so the ImageIO\n * registry in resource/imageio can register any image format the way Carbon's\n * `RegisterImageIOHandlers` registers its handlers. Carbon has seven handlers;\n * we have more formats, and each one gets the table by extending this class.\n *\n * A subclass supplies:\n * - `static extensions` (already declared by every format) for checkExtension;\n * - `static readImageNative(bytes, loadParameters, bitmap, metadata)`, which\n * fills the bitmap it is handed in its natural format and returns an\n * ImageIOResult. It calls methods on the bitmap; it never imports HostBitmap.\n *\n * NOT CARBON: `LoadParameters.requestedFormat`. When a caller asks for a format\n * other than the native one, `readImage` converts after the native read\n * (`convertImage`): HostBitmap's own ConvertFormat, then block decode. Encoding\n * to a block format is the next step here, so every image format inherits it\n * from this one place (/docs/projects/hostbitmap-port.md).\n */\nexport class CjsImageFormat extends CjsFormat\n{\n\n /**\n * Carbon's handler table for this format class, built once per subclass.\n *\n * @returns {{checkExtension: Function, readImage: Function, isSaveSupported: Function, save: Function}} The table.\n */\n static get carbon()\n {\n if (!Object.hasOwn(this, \"_carbon\"))\n {\n this._carbon = {\n checkExtension: extension => this.checkExtension(extension),\n readImage: (bytes, loadParameters, bitmap, metadata = null) => this.readImage(bytes, loadParameters, bitmap, metadata),\n // Not Carbon: see readImageAsync.\n readImageAsync: (bytes, loadParameters, bitmap, metadata = null) => this.readImageAsync(bytes, loadParameters, bitmap, metadata),\n isSaveSupported: dimensions => this.isSaveSupported(dimensions),\n save: (bitmap, metadata = null) => this.save(bitmap, metadata)\n };\n }\n\n return this._carbon;\n }\n\n /**\n * Whether an extension (without the dot) is one of this format's, case-insensitively.\n *\n * @param {string} extension Extension.\n * @returns {boolean} Whether this format reads it.\n */\n static checkExtension(extension)\n {\n const wanted = `.${extension.toLowerCase()}`;\n\n return this.extensions.includes(wanted);\n }\n\n /**\n * Fill `bitmap` in the format's natural pixel format. Every image format\n * implements this.\n *\n * @param {Uint8Array} _bytes File bytes.\n * @param {LoadParameters} _loadParameters Load parameters.\n * @param {object} _bitmap Destination HostBitmap.\n * @param {object|null} _metadata Optional Metadata out.\n * @returns {ImageIOResult} The result.\n */\n static readImageNative(_bytes, _loadParameters, _bitmap, _metadata)\n {\n throw new Error(`${this.name}.readImageNative is not implemented`);\n }\n\n /**\n * Fill a bitmap from one of our readers' RGBA8 outputs (`read(bytes, { emit: \"rgba\" })`),\n * for the formats whose decoders already produce one: PNG, JPEG, TGA, GIF.\n *\n * The bitmap is a single-mip 2D B8G8R8A8_UNORM image, as Carbon's JPEG handler\n * and its PNG/TGA handlers for images with alpha produce, and as the texture\n * pipeline's pack step requires of its inputs (BGRA, BGRX or R8).\n *\n * adapted: Carbon's PNG/TGA handlers keep an opaque RGB image as BGRX and a\n * grey one as R8 (Tr2PngHandler.cpp:125-160, Tr2TgaHandler.cpp:98-110); our\n * decoders report RGBA only, so those arrive as BGRA with their alpha. The\n * metadata cutout is the default: the PNG cutout chunk is not read yet.\n *\n * @param {object} payload An RGBA8 payload: width, height, data, strideBytes.\n * @param {object} bitmap Destination HostBitmap.\n * @param {object|null} [metadata] Optional Metadata out.\n * @returns {ImageIOResult} The result.\n */\n static readImageFromRgbaPayload(payload, bitmap, metadata = null)\n {\n if (!(payload.data instanceof Uint8Array))\n {\n return new ImageIOResult(ImageIOResult.Code.HEADER_NOT_SUPPORTED, `${payload.pixelFormat} is not an 8-bit image`);\n }\n\n if (!bitmap.Create(payload.width, payload.height, 1, PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM))\n {\n return new ImageIOResult(ImageIOResult.Code.ERROR_CREATING_BITMAP);\n }\n\n const dst = bitmap.GetRawData();\n const row = payload.width * 4;\n const stride = payload.strideBytes || row;\n\n for (let y = 0; y < payload.height; y++)\n {\n dst.set(payload.data.subarray(y * stride, y * stride + row), y * row);\n }\n\n bitmap.ConvertFormat(PixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM);\n\n if (metadata) metadata.cutout = new Cutout();\n\n return new ImageIOResult(ImageIOResult.Code.OK);\n }\n\n /**\n * The asynchronous native read. Defaults to the synchronous one; a format\n * whose decoder is asynchronous (PNG, which inflates through the browser's\n * DecompressionStream) overrides this instead.\n *\n * @param {Uint8Array} bytes File bytes.\n * @param {LoadParameters} loadParameters Load parameters.\n * @param {object} bitmap Destination HostBitmap.\n * @param {object|null} metadata Optional Metadata out.\n * @returns {Promise<ImageIOResult>} The result.\n */\n static async readImageNativeAsync(bytes, loadParameters, bitmap, metadata)\n {\n return this.readImageNative(bytes, loadParameters, bitmap, metadata);\n }\n\n /**\n * `readImage` for any image format, including those whose decoder is\n * asynchronous.\n *\n * Not Carbon: Carbon's ReadImage is synchronous because its zlib is. In a\n * browser, inflation is DecompressionStream, which has only an asynchronous\n * API, so PNG cannot answer the synchronous call. Resource loading is\n * asynchronous anyway; every format answers this one.\n *\n * @param {Uint8Array} bytes File bytes.\n * @param {LoadParameters} loadParameters Load parameters.\n * @param {object} bitmap Destination HostBitmap.\n * @param {object|null} [metadata] Optional Metadata out.\n * @returns {Promise<ImageIOResult>} The result.\n */\n static async readImageAsync(bytes, loadParameters, bitmap, metadata = null)\n {\n const result = await this.readImageNativeAsync(bytes, loadParameters, bitmap, metadata);\n\n return this._finishRead(result, loadParameters, bitmap);\n }\n\n /**\n * Read an image into `bitmap`, then convert it to `loadParameters.requestedFormat`\n * when one is asked for.\n *\n * @param {Uint8Array} bytes File bytes.\n * @param {LoadParameters} loadParameters Load parameters.\n * @param {object} bitmap Destination HostBitmap.\n * @param {object|null} [metadata] Optional Metadata out.\n * @returns {ImageIOResult} The result.\n */\n static readImage(bytes, loadParameters, bitmap, metadata = null)\n {\n return this._finishRead(this.readImageNative(bytes, loadParameters, bitmap, metadata), loadParameters, bitmap);\n }\n\n /** The conversion to the requested format, shared by both reads. */\n static _finishRead(result, loadParameters, bitmap)\n {\n if (!result.IsOk()) return result;\n\n const requested = loadParameters.requestedFormat;\n\n if (requested === null || requested === bitmap.GetFormat()) return result;\n\n if (!this.convertImage(bitmap, requested))\n {\n return new ImageIOResult(ImageIOResult.Code.ERROR_CONVERTING_FORMAT,\n `cannot convert pixel format ${bitmap.GetFormat()} to ${requested} yet`);\n }\n\n return result;\n }\n\n /**\n * Convert a bitmap in place to a pixel format, for every image format.\n *\n * First HostBitmap's own conversions (Carbon's ConvertFormat); then, for\n * block-compressed data, a decode of every mip of every array element (and\n * every slice of a volume) to RGBA8 - or RGBA32F for BC6H - followed by\n * Carbon's conversion from there when the request was, say, BGRA. sRGB is\n * kept: an sRGB block format decodes to R8G8B8A8_UNORM_SRGB.\n *\n * Not Carbon: D3D takes block formats directly, so Carbon never decodes. A\n * browser may refuse a block format (/docs/projects/hostbitmap-port.md,\n * \"Declared divergence\"). Encoding to a block format is the next step.\n *\n * @param {HostBitmap} bitmap Bitmap to convert in place.\n * @param {number} requested A `PixelFormat` value.\n * @returns {boolean} Whether the bitmap is now in the requested format.\n */\n static convertImage(bitmap, requested)\n {\n if (bitmap.ConvertFormat(requested)) return true;\n\n const source = bitmap.GetFormat();\n const name = CANONICAL_BY_PIXEL_FORMAT.get(source);\n\n if (!IsCompressedFormat(source) || !canDecodeDdsBlockFormat(name)) return false;\n\n const decoded = this.decodeBlocks(bitmap, name);\n if (!decoded) return false;\n\n if (decoded.GetFormat() !== requested && !decoded.ConvertFormat(requested)) return false;\n\n bitmap.Swap(decoded);\n\n return true;\n }\n\n /**\n * Decode a block-compressed bitmap into a new uncompressed one.\n *\n * @param {HostBitmap} bitmap Block-compressed source.\n * @param {string} name The source's block format string, e.g. \"bc7-rgba-unorm\".\n * @returns {HostBitmap|null} The decoded bitmap.\n */\n static decodeBlocks(bitmap, name)\n {\n const isFloat = name.startsWith(\"bc6h-\");\n const format = isFloat\n ? PixelFormat.PIXEL_FORMAT_R32G32B32A32_FLOAT\n : (SRGB_BLOCK_FORMATS.has(bitmap.GetFormat()) ? PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB : PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM);\n\n const target = new HostBitmap();\n const created = target.CreateFromBitmapDimensions(new BitmapDimensions({\n type: bitmap.GetType(),\n format,\n width: bitmap.GetWidth(),\n height: bitmap.GetHeight(),\n depth: bitmap.GetDepth(),\n mipCount: bitmap.GetMipCount(),\n arraySize: bitmap.GetArraySize()\n }));\n\n if (!created) return null;\n\n const mips = bitmap.GetTrueMipCount();\n\n for (let element = 0; element < bitmap.GetArraySize(); element++)\n {\n for (let mip = 0; mip < mips; mip++)\n {\n const width = Math.max(bitmap.GetWidth() >>> mip, 1);\n const height = Math.max(bitmap.GetHeight() >>> mip, 1);\n const depth = bitmap.GetMipDepth(mip);\n const sliceBytes = bitmap.GetMipSize(mip) / depth;\n const rowPitch = bitmap.GetMipPitch(mip);\n const src = bitmap.GetMipRawData(mip, element);\n const dst = target.GetMipRawData(mip, element);\n const dstSlice = target.GetMipSize(mip) / depth;\n\n for (let slice = 0; slice < depth; slice++)\n {\n const pixels = decodeDdsSlice(src.subarray(slice * sliceBytes, (slice + 1) * sliceBytes), { width, height, pixelFormat: name }, { rowPitch });\n dst.set(new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength), slice * dstSlice);\n }\n }\n }\n\n return target;\n }\n\n /**\n * Whether this format can save a bitmap of these dimensions. Formats that\n * write override this.\n *\n * @param {object} _dimensions BitmapDimensions.\n * @returns {ImageIOResult} METHOD_NOT_SUPPORTED unless overridden.\n */\n static isSaveSupported(_dimensions)\n {\n return new ImageIOResult(ImageIOResult.Code.METHOD_NOT_SUPPORTED);\n }\n\n /**\n * Save a bitmap. Formats that write override this.\n *\n * adapted: Carbon writes to a stream; this returns `{result, bytes}`.\n *\n * @param {object} _bitmap HostBitmap.\n * @param {object|null} _metadata Optional Metadata.\n * @returns {{result: ImageIOResult, bytes: Uint8Array|null}} The outcome.\n */\n static save(_bitmap, _metadata = null)\n {\n return { result: new ImageIOResult(ImageIOResult.Code.METHOD_NOT_SUPPORTED), bytes: null };\n }\n\n}\n"],"names":["CANONICAL_BY_PIXEL_FORMAT","Map","Object","entries","PixelFormatFromCanonical","map","name","value","SRGB_BLOCK_FORMATS","Set","PixelFormat","PIXEL_FORMAT_BC1_UNORM_SRGB","PIXEL_FORMAT_BC2_UNORM_SRGB","PIXEL_FORMAT_BC3_UNORM_SRGB","PIXEL_FORMAT_BC7_UNORM_SRGB","CjsImageFormat","CjsFormat","carbon","hasOwn","_carbon","checkExtension","extension","readImage","bytes","loadParameters","bitmap","metadata","readImageAsync","isSaveSupported","dimensions","save","wanted","toLowerCase","extensions","includes","readImageNative","_bytes","_loadParameters","_bitmap","_metadata","Error","readImageFromRgbaPayload","payload","data","Uint8Array","ImageIOResult","Code","HEADER_NOT_SUPPORTED","pixelFormat","Create","width","height","PIXEL_FORMAT_R8G8B8A8_UNORM","ERROR_CREATING_BITMAP","dst","GetRawData","row","stride","strideBytes","y","set","subarray","ConvertFormat","PIXEL_FORMAT_B8G8R8A8_UNORM","cutout","Cutout","OK","readImageNativeAsync","result","_finishRead","IsOk","requested","requestedFormat","GetFormat","convertImage","ERROR_CONVERTING_FORMAT","source","get","IsCompressedFormat","canDecodeDdsBlockFormat","decoded","decodeBlocks","Swap","isFloat","startsWith","format","PIXEL_FORMAT_R32G32B32A32_FLOAT","has","PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB","target","HostBitmap","created","CreateFromBitmapDimensions","BitmapDimensions","type","GetType","GetWidth","GetHeight","depth","GetDepth","mipCount","GetMipCount","arraySize","GetArraySize","mips","GetTrueMipCount","element","mip","Math","max","GetMipDepth","sliceBytes","GetMipSize","rowPitch","GetMipPitch","src","GetMipRawData","dstSlice","slice","pixels","decodeDdsSlice","buffer","byteOffset","byteLength","_dimensions","METHOD_NOT_SUPPORTED"],"mappings":"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"}
@@ -1,14 +1,11 @@
1
- import { CjsModel } from '#model';
2
- import { CjsSchema, edit, type } from '#schema';
3
-
4
- /**
5
- * Persistable resource-layer view of a format support report.
6
- *
7
- * Concrete formats return decorator-free plain objects so their direct
8
- * subpaths stay importable without a build transform. Consumers that need a
9
- * model normalize those reports here with {@link CjsResourceProbe.from}.
1
+ /**
2
+ * A format support report, normalized.
3
+ *
4
+ * Formats return plain report objects; this gives every field its type and
5
+ * default, and answers the two questions a caller asks of one. It is a plain
6
+ * record, never persisted or hydrated, so it carries no schema.
10
7
  */
11
- class CjsResourceProbe extends CjsModel {
8
+ class CjsResourceProbe {
12
9
  format = "";
13
10
  source = "";
14
11
  recognized = false;
@@ -24,29 +21,16 @@ class CjsResourceProbe extends CjsModel {
24
21
  errors = [];
25
22
  error = null;
26
23
 
27
- /**
28
- * Create a normalized resource-layer support report.
29
- * @param {object|null} [values] Plain format support report.
24
+ /**
25
+ * Create a normalized resource-layer support report.
26
+ * @param {object|null} [values] Plain format support report.
30
27
  */
31
28
  constructor(values = null) {
32
- super();
33
- this.SetValues(normalizeReport(values), {
34
- skipUpdate: true,
35
- skipEvents: true
36
- });
37
- }
38
-
39
- /** Replace this report from a plain format result. */
40
- Initialize(values = null) {
41
- this.SetValues(normalizeReport(values), {
42
- skipEvents: true
43
- });
44
- return this;
29
+ Object.assign(this, normalizeReport(values));
45
30
  }
46
31
 
47
- /** Normalize a plain format report at the decorated resource boundary. */
32
+ /** Normalize a plain format report at the resource boundary. */
48
33
  static from(input) {
49
- if (input instanceof CjsResourceProbe) return input;
50
34
  if (input && typeof input.toJSON === "function") return new this(input.toJSON());
51
35
  return new this(input);
52
36
  }
@@ -95,26 +79,6 @@ function normalizeCapability(input) {
95
79
  requires: Array.isArray(capability.requires) ? capability.requires.map(String) : []
96
80
  };
97
81
  }
98
- CjsSchema.define(CjsResourceProbe, {
99
- className: "CjsResourceProbe",
100
- family: "resource",
101
- fields: {
102
- format: [edit.persist, type.string],
103
- source: [edit.persist, type.string],
104
- recognized: [edit.persist, type.boolean],
105
- output: [edit.persist, type.string],
106
- supported: [edit.persist, type.boolean],
107
- verified: [edit.persist, type.boolean],
108
- preferredOutput: [edit.persist, type.string],
109
- reason: [edit.persist, type.string],
110
- metadata: [edit.persist, type.unknown],
111
- capability: [edit.persist, type.unknown],
112
- outputs: [edit.persist, type.list("unknown")],
113
- warnings: [edit.persist, type.list("string")],
114
- errors: [edit.persist, type.list("string")],
115
- error: [edit.persist, type.unknown]
116
- }
117
- });
118
82
 
119
83
  export { CjsResourceProbe };
120
84
  //# sourceMappingURL=CjsResourceProbe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CjsResourceProbe.js","sources":["../../../../src/resource/format/CjsResourceProbe.js"],"sourcesContent":["import { CjsModel } from \"#model\";\r\nimport { CjsSchema, edit, type } from \"#schema\";\r\n\r\n/**\r\n * Persistable resource-layer view of a format support report.\r\n *\r\n * Concrete formats return decorator-free plain objects so their direct\r\n * subpaths stay importable without a build transform. Consumers that need a\r\n * model normalize those reports here with {@link CjsResourceProbe.from}.\r\n */\r\nexport class CjsResourceProbe extends CjsModel\r\n{\r\n format = \"\";\r\n\r\n source = \"\";\r\n\r\n recognized = false;\r\n\r\n output = \"\";\r\n\r\n supported = false;\r\n\r\n verified = false;\r\n\r\n preferredOutput = \"\";\r\n\r\n reason = \"\";\r\n\r\n metadata = null;\r\n\r\n capability = null;\r\n\r\n outputs = [];\r\n\r\n warnings = [];\r\n\r\n errors = [];\r\n\r\n error = null;\r\n\r\n /**\r\n * Create a normalized resource-layer support report.\r\n * @param {object|null} [values] Plain format support report.\r\n */\r\n constructor(values = null)\r\n {\r\n super();\r\n this.SetValues(normalizeReport(values), {\r\n skipUpdate: true,\r\n skipEvents: true\r\n });\r\n }\r\n\r\n /** Replace this report from a plain format result. */\r\n Initialize(values = null)\r\n {\r\n this.SetValues(normalizeReport(values), { skipEvents: true });\r\n return this;\r\n }\r\n\r\n /** Normalize a plain format report at the decorated resource boundary. */\r\n static from(input)\r\n {\r\n if (input instanceof CjsResourceProbe) return input;\r\n if (input && typeof input.toJSON === \"function\") return new this(input.toJSON());\r\n return new this(input);\r\n }\r\n\r\n /** Whether the selected output is usable, optionally requiring real proof. */\r\n canUseSelected(options = null)\r\n {\r\n return this.supported === true && (!options?.verified || this.verified === true);\r\n }\r\n\r\n /** Whether one declared output is usable, optionally requiring real proof. */\r\n canUse(output, options = null)\r\n {\r\n const normalized = String(output || \"\").toLowerCase();\r\n const capability = this.outputs.find(entry =>\r\n String(entry?.output || \"\").toLowerCase() === normalized);\r\n return capability?.supported === true\r\n && (!options?.verified || capability.verified === true);\r\n }\r\n}\r\n\r\nfunction normalizeReport(input)\r\n{\r\n const report = input && typeof input === \"object\" ? input : {};\r\n const outputs = Array.isArray(report.outputs)\r\n ? report.outputs.map(normalizeCapability)\r\n : [];\r\n const selected = report.capability && typeof report.capability === \"object\"\r\n ? normalizeCapability(report.capability)\r\n : outputs.find(entry => entry.output === report.output) || null;\r\n return {\r\n format: String(report.format || \"\"),\r\n source: String(report.source || \"\"),\r\n recognized: report.recognized === true,\r\n output: String(report.output || \"\"),\r\n supported: report.supported === true,\r\n verified: report.verified === true,\r\n preferredOutput: String(report.preferredOutput || \"\"),\r\n reason: String(report.reason || \"\"),\r\n metadata: report.metadata ?? null,\r\n capability: selected,\r\n outputs,\r\n warnings: Array.isArray(report.warnings) ? report.warnings.map(String) : [],\r\n errors: Array.isArray(report.errors) ? report.errors.map(String) : [],\r\n error: report.error ?? null\r\n };\r\n}\r\n\r\nfunction normalizeCapability(input)\r\n{\r\n const capability = input && typeof input === \"object\" ? input : {};\r\n return {\r\n ...capability,\r\n output: String(capability.output || \"\"),\r\n payloadType: String(capability.payloadType || capability.output || \"\"),\r\n supported: capability.supported === true,\r\n verified: capability.verified === true,\r\n requires: Array.isArray(capability.requires) ? capability.requires.map(String) : []\r\n };\r\n}\r\n\r\nexport default CjsResourceProbe;\r\n\r\nCjsSchema.define(CjsResourceProbe, {\r\n className: \"CjsResourceProbe\", family: \"resource\",\r\n fields: {\r\n format: [ edit.persist, type.string ],\r\n source: [ edit.persist, type.string ],\r\n recognized: [ edit.persist, type.boolean ],\r\n output: [ edit.persist, type.string ],\r\n supported: [ edit.persist, type.boolean ],\r\n verified: [ edit.persist, type.boolean ],\r\n preferredOutput: [ edit.persist, type.string ],\r\n reason: [ edit.persist, type.string ],\r\n metadata: [ edit.persist, type.unknown ],\r\n capability: [ edit.persist, type.unknown ],\r\n outputs: [ edit.persist, type.list(\"unknown\") ],\r\n warnings: [ edit.persist, type.list(\"string\") ],\r\n errors: [ edit.persist, type.list(\"string\") ],\r\n error: [ edit.persist, type.unknown ]\r\n }\r\n});\r\n"],"names":["CjsResourceProbe","CjsModel","format","source","recognized","output","supported","verified","preferredOutput","reason","metadata","capability","outputs","warnings","errors","error","constructor","values","SetValues","normalizeReport","skipUpdate","skipEvents","Initialize","from","input","toJSON","canUseSelected","options","canUse","normalized","String","toLowerCase","find","entry","report","Array","isArray","map","normalizeCapability","selected","payloadType","requires","CjsSchema","define","className","family","fields","edit","persist","type","string","boolean","unknown","list"],"mappings":"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"}
1
+ {"version":3,"file":"CjsResourceProbe.js","sources":["../../../../src/resource/format/CjsResourceProbe.js"],"sourcesContent":["/**\n * A format support report, normalized.\n *\n * Formats return plain report objects; this gives every field its type and\n * default, and answers the two questions a caller asks of one. It is a plain\n * record, never persisted or hydrated, so it carries no schema.\n */\nexport class CjsResourceProbe\n{\n format = \"\";\n\n source = \"\";\n\n recognized = false;\n\n output = \"\";\n\n supported = false;\n\n verified = false;\n\n preferredOutput = \"\";\n\n reason = \"\";\n\n metadata = null;\n\n capability = null;\n\n outputs = [];\n\n warnings = [];\n\n errors = [];\n\n error = null;\n\n /**\n * Create a normalized resource-layer support report.\n * @param {object|null} [values] Plain format support report.\n */\n constructor(values = null)\n {\n Object.assign(this, normalizeReport(values));\n }\n\n /** Normalize a plain format report at the resource boundary. */\n static from(input)\n {\n if (input && typeof input.toJSON === \"function\") return new this(input.toJSON());\n return new this(input);\n }\n\n /** Whether the selected output is usable, optionally requiring real proof. */\n canUseSelected(options = null)\n {\n return this.supported === true && (!options?.verified || this.verified === true);\n }\n\n /** Whether one declared output is usable, optionally requiring real proof. */\n canUse(output, options = null)\n {\n const normalized = String(output || \"\").toLowerCase();\n const capability = this.outputs.find(entry =>\n String(entry?.output || \"\").toLowerCase() === normalized);\n return capability?.supported === true\n && (!options?.verified || capability.verified === true);\n }\n}\n\nfunction normalizeReport(input)\n{\n const report = input && typeof input === \"object\" ? input : {};\n const outputs = Array.isArray(report.outputs)\n ? report.outputs.map(normalizeCapability)\n : [];\n const selected = report.capability && typeof report.capability === \"object\"\n ? normalizeCapability(report.capability)\n : outputs.find(entry => entry.output === report.output) || null;\n return {\n format: String(report.format || \"\"),\n source: String(report.source || \"\"),\n recognized: report.recognized === true,\n output: String(report.output || \"\"),\n supported: report.supported === true,\n verified: report.verified === true,\n preferredOutput: String(report.preferredOutput || \"\"),\n reason: String(report.reason || \"\"),\n metadata: report.metadata ?? null,\n capability: selected,\n outputs,\n warnings: Array.isArray(report.warnings) ? report.warnings.map(String) : [],\n errors: Array.isArray(report.errors) ? report.errors.map(String) : [],\n error: report.error ?? null\n };\n}\n\nfunction normalizeCapability(input)\n{\n const capability = input && typeof input === \"object\" ? input : {};\n return {\n ...capability,\n output: String(capability.output || \"\"),\n payloadType: String(capability.payloadType || capability.output || \"\"),\n supported: capability.supported === true,\n verified: capability.verified === true,\n requires: Array.isArray(capability.requires) ? capability.requires.map(String) : []\n };\n}\n\nexport default CjsResourceProbe;\n"],"names":["CjsResourceProbe","format","source","recognized","output","supported","verified","preferredOutput","reason","metadata","capability","outputs","warnings","errors","error","constructor","values","Object","assign","normalizeReport","from","input","toJSON","canUseSelected","options","canUse","normalized","String","toLowerCase","find","entry","report","Array","isArray","map","normalizeCapability","selected","payloadType","requires"],"mappings":"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"}
@@ -79,11 +79,11 @@ function hashBytes(bytes) {
79
79
  * interning all late strings before the packing pass; we fail closed instead.
80
80
  */
81
81
  class CjsStringTable {
82
- #blobs = [];
83
- #buckets = new Map();
84
- #byteLength = 0;
85
- #offsets = null;
86
- #handedOutOffsets = false;
82
+ _blobs = [];
83
+ _buckets = new Map();
84
+ _byteLength = 0;
85
+ _offsets = null;
86
+ _handedOutOffsets = false;
87
87
 
88
88
  /**
89
89
  * Returns the arena payload byte count, excluding the `u32` size prefix.
@@ -94,7 +94,7 @@ class CjsStringTable {
94
94
  * @returns {number} Payload byte count.
95
95
  */
96
96
  get byteLength() {
97
- return this.#byteLength;
97
+ return this._byteLength;
98
98
  }
99
99
 
100
100
  /**
@@ -107,7 +107,7 @@ class CjsStringTable {
107
107
  * @returns {number} On-disk byte count.
108
108
  */
109
109
  get containerSize() {
110
- return this.#byteLength + 4;
110
+ return this._byteLength + 4;
111
111
  }
112
112
 
113
113
  /**
@@ -116,7 +116,7 @@ class CjsStringTable {
116
116
  * @returns {number} Deduplicated entry count.
117
117
  */
118
118
  get entryCount() {
119
- return this.#blobs.length;
119
+ return this._blobs.length;
120
120
  }
121
121
 
122
122
  /**
@@ -129,7 +129,7 @@ class CjsStringTable {
129
129
  const text = textEncoder.encode(String(value));
130
130
  const bytes = new Uint8Array(text.length + 1);
131
131
  bytes.set(text, 0);
132
- return this.#add(bytes);
132
+ return this._add(bytes);
133
133
  }
134
134
 
135
135
  /**
@@ -140,7 +140,7 @@ class CjsStringTable {
140
140
  */
141
141
  addBytes(value) {
142
142
  const source = value instanceof Uint8Array ? value : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
143
- return this.#add(Uint8Array.from(source));
143
+ return this._add(Uint8Array.from(source));
144
144
  }
145
145
 
146
146
  /**
@@ -152,16 +152,16 @@ class CjsStringTable {
152
152
  * @returns {CjsStringTable} This table.
153
153
  */
154
154
  finish() {
155
- if (this.#offsets) return this;
156
- const order = this.#blobs.map((blob, index) => index);
157
- order.sort((a, b) => compareTableBlobs(this.#blobs[a], this.#blobs[b]));
158
- const offsets = new Array(this.#blobs.length);
155
+ if (this._offsets) return this;
156
+ const order = this._blobs.map((blob, index) => index);
157
+ order.sort((a, b) => compareTableBlobs(this._blobs[a], this._blobs[b]));
158
+ const offsets = new Array(this._blobs.length);
159
159
  let cursor = 0;
160
160
  for (const index of order) {
161
161
  offsets[index] = cursor;
162
- cursor += this.#blobs[index].length;
162
+ cursor += this._blobs[index].length;
163
163
  }
164
- this.#offsets = offsets;
164
+ this._offsets = offsets;
165
165
  return this;
166
166
  }
167
167
 
@@ -178,15 +178,15 @@ class CjsStringTable {
178
178
  if (reference === null || reference === undefined) {
179
179
  return CJS_STRING_TABLE_NULL_REFERENCE;
180
180
  }
181
- if (!Number.isInteger(reference) || reference < 0 || reference >= this.#blobs.length) {
181
+ if (!Number.isInteger(reference) || reference < 0 || reference >= this._blobs.length) {
182
182
  throw new CjsFormatWriteError("Unknown string-table reference", {
183
183
  reference,
184
- entryCount: this.#blobs.length
184
+ entryCount: this._blobs.length
185
185
  });
186
186
  }
187
187
  this.finish();
188
- this.#handedOutOffsets = true;
189
- return this.#offsets[reference];
188
+ this._handedOutOffsets = true;
189
+ return this._offsets[reference];
190
190
  }
191
191
 
192
192
  /**
@@ -196,13 +196,13 @@ class CjsStringTable {
196
196
  * @returns {Uint8Array} View over the interned bytes.
197
197
  */
198
198
  bytesOf(reference) {
199
- if (!Number.isInteger(reference) || reference < 0 || reference >= this.#blobs.length) {
199
+ if (!Number.isInteger(reference) || reference < 0 || reference >= this._blobs.length) {
200
200
  throw new CjsFormatWriteError("Unknown string-table reference", {
201
201
  reference,
202
- entryCount: this.#blobs.length
202
+ entryCount: this._blobs.length
203
203
  });
204
204
  }
205
- return this.#blobs[reference];
205
+ return this._blobs[reference];
206
206
  }
207
207
 
208
208
  /**
@@ -212,9 +212,9 @@ class CjsStringTable {
212
212
  */
213
213
  toBytes() {
214
214
  this.finish();
215
- const out = new Uint8Array(this.#byteLength);
216
- for (let index = 0; index < this.#blobs.length; index += 1) {
217
- out.set(this.#blobs[index], this.#offsets[index]);
215
+ const out = new Uint8Array(this._byteLength);
216
+ for (let index = 0; index < this._blobs.length; index += 1) {
217
+ out.set(this._blobs[index], this._offsets[index]);
218
218
  }
219
219
  return out;
220
220
  }
@@ -227,8 +227,8 @@ class CjsStringTable {
227
227
  */
228
228
  write(writer) {
229
229
  this.finish();
230
- writer.u32(this.#byteLength);
231
- if (this.#byteLength === 0) return;
230
+ writer.u32(this._byteLength);
231
+ if (this._byteLength === 0) return;
232
232
  writer.bytes(this.toBytes());
233
233
  }
234
234
 
@@ -240,26 +240,26 @@ class CjsStringTable {
240
240
  * @param {Uint8Array} bytes Owned bytes to intern.
241
241
  * @returns {number} Arena reference.
242
242
  */
243
- #add(bytes) {
243
+ _add(bytes) {
244
244
  const key = hashBytes(bytes);
245
- const bucket = this.#buckets.get(key);
245
+ const bucket = this._buckets.get(key);
246
246
  if (bucket) {
247
247
  for (const candidate of bucket) {
248
- if (compareTableBlobs(this.#blobs[candidate], bytes) === 0) {
248
+ if (compareTableBlobs(this._blobs[candidate], bytes) === 0) {
249
249
  return candidate;
250
250
  }
251
251
  }
252
252
  }
253
- if (this.#handedOutOffsets) {
253
+ if (this._handedOutOffsets) {
254
254
  throw new CjsFormatWriteError("String-table entry added after offsets were resolved; every offset already handed out would shift", {
255
255
  byteLength: bytes.length
256
256
  });
257
257
  }
258
- const reference = this.#blobs.length;
259
- this.#blobs.push(bytes);
260
- this.#byteLength += bytes.length;
261
- this.#offsets = null;
262
- if (bucket) bucket.push(reference);else this.#buckets.set(key, [reference]);
258
+ const reference = this._blobs.length;
259
+ this._blobs.push(bytes);
260
+ this._byteLength += bytes.length;
261
+ this._offsets = null;
262
+ if (bucket) bucket.push(reference);else this._buckets.set(key, [reference]);
263
263
  return reference;
264
264
  }
265
265
  }