@carbonenginejs/runtime-resource 0.9.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/NOTICE +3 -2
  2. package/README.md +47 -6
  3. package/dist/CjsMotherLode.js +88 -88
  4. package/dist/CjsMotherLode.js.map +1 -1
  5. package/dist/CjsResMan.js +717 -228
  6. package/dist/CjsResMan.js.map +1 -1
  7. package/dist/CjsResManFetchProvider.js +94 -0
  8. package/dist/CjsResManFetchProvider.js.map +1 -0
  9. package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
  10. package/dist/CjsResManWorkQueue.js.map +1 -0
  11. package/dist/format/CjsBlueReader.js +89 -0
  12. package/dist/format/CjsBlueReader.js.map +1 -1
  13. package/dist/format/CjsFormat.js +42 -16
  14. package/dist/format/CjsFormat.js.map +1 -1
  15. package/dist/format/CjsReader.js +4 -0
  16. package/dist/format/CjsReader.js.map +1 -1
  17. package/dist/format/CjsResourceProbe.js +2 -0
  18. package/dist/format/CjsResourceProbe.js.map +1 -1
  19. package/dist/format/payloadContract.js +20 -0
  20. package/dist/format/payloadContract.js.map +1 -1
  21. package/dist/formats/black/CjsBlackFormat.js +15 -1
  22. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  23. package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
  24. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
  25. package/dist/formats/black/core/CjsBlackPropertyReaders.js +61 -0
  26. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
  27. package/dist/formats/black/core/CjsBlackReader.js +125 -0
  28. package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
  29. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
  30. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
  31. package/dist/formats/black/core/helpers.js +17 -0
  32. package/dist/formats/black/core/helpers.js.map +1 -1
  33. package/dist/formats/bnk/CjsBnkFormat.js +8 -0
  34. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  35. package/dist/formats/bnk/core/helpers.js +20 -0
  36. package/dist/formats/bnk/core/helpers.js.map +1 -1
  37. package/dist/formats/bnk/core/musicNodes.js +40 -3
  38. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  39. package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
  40. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
  41. package/dist/formats/cmf/core/binary.js +71 -0
  42. package/dist/formats/cmf/core/binary.js.map +1 -1
  43. package/dist/formats/cmf/core/buffers.js +4 -0
  44. package/dist/formats/cmf/core/buffers.js.map +1 -1
  45. package/dist/formats/cmf/core/helpers.js +31 -0
  46. package/dist/formats/cmf/core/helpers.js.map +1 -1
  47. package/dist/formats/cmf/core/schema.js +10 -0
  48. package/dist/formats/cmf/core/schema.js.map +1 -1
  49. package/dist/formats/cmf/core/shared.js +9 -0
  50. package/dist/formats/cmf/core/shared.js.map +1 -1
  51. package/dist/formats/cmf/core/writer.js +54 -0
  52. package/dist/formats/cmf/core/writer.js.map +1 -1
  53. package/dist/formats/dds/core/bc6h.js +10 -0
  54. package/dist/formats/dds/core/bc6h.js.map +1 -1
  55. package/dist/formats/dds/core/bc7.js +16 -0
  56. package/dist/formats/dds/core/bc7.js.map +1 -1
  57. package/dist/formats/dds/core/helpers.js +47 -0
  58. package/dist/formats/dds/core/helpers.js.map +1 -1
  59. package/dist/formats/fbx/core/helpers.js +21 -0
  60. package/dist/formats/fbx/core/helpers.js.map +1 -1
  61. package/dist/formats/flac/CjsFlacFormat.js +49 -0
  62. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  63. package/dist/formats/flac/core/helpers.js +20 -0
  64. package/dist/formats/flac/core/helpers.js.map +1 -1
  65. package/dist/formats/gif/CjsGifFormat.js +49 -0
  66. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  67. package/dist/formats/gif/core/helpers.js +20 -0
  68. package/dist/formats/gif/core/helpers.js.map +1 -1
  69. package/dist/formats/gltf/core/helpers.js +15 -0
  70. package/dist/formats/gltf/core/helpers.js.map +1 -1
  71. package/dist/formats/gltf/core/parser.js +13 -0
  72. package/dist/formats/gltf/core/parser.js.map +1 -1
  73. package/dist/formats/gltf/core/targets.js +10 -0
  74. package/dist/formats/gltf/core/targets.js.map +1 -1
  75. package/dist/formats/gr2/core/bitknit2.js +2 -0
  76. package/dist/formats/gr2/core/bitknit2.js.map +1 -1
  77. package/dist/formats/gr2/core/helpers.js +20 -0
  78. package/dist/formats/gr2/core/helpers.js.map +1 -1
  79. package/dist/formats/gr2/core/targets.js +10 -0
  80. package/dist/formats/gr2/core/targets.js.map +1 -1
  81. package/dist/formats/jpeg/core/helpers.js +52 -0
  82. package/dist/formats/jpeg/core/helpers.js.map +1 -1
  83. package/dist/formats/jpeg/core/jpeg.js +93 -0
  84. package/dist/formats/jpeg/core/jpeg.js.map +1 -1
  85. package/dist/formats/mp3/core/helpers.js +37 -0
  86. package/dist/formats/mp3/core/helpers.js.map +1 -1
  87. package/dist/formats/mp4/core/helpers.js +35 -0
  88. package/dist/formats/mp4/core/helpers.js.map +1 -1
  89. package/dist/formats/ogg/CjsOggFormat.js +49 -0
  90. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  91. package/dist/formats/ogg/core/helpers.js +23 -0
  92. package/dist/formats/ogg/core/helpers.js.map +1 -1
  93. package/dist/formats/ogg/core/vorbis.js +13 -0
  94. package/dist/formats/ogg/core/vorbis.js.map +1 -1
  95. package/dist/formats/png/core/helpers.js +52 -0
  96. package/dist/formats/png/core/helpers.js.map +1 -1
  97. package/dist/formats/red/CjsRedFormat.js +2 -0
  98. package/dist/formats/red/CjsRedFormat.js.map +1 -1
  99. package/dist/formats/red/core/CjsRedReader.js +52 -0
  100. package/dist/formats/red/core/CjsRedReader.js.map +1 -1
  101. package/dist/formats/red/core/helpers.js +19 -0
  102. package/dist/formats/red/core/helpers.js.map +1 -1
  103. package/dist/formats/stl/core/stl.js +8 -0
  104. package/dist/formats/stl/core/stl.js.map +1 -1
  105. package/dist/formats/stl/core/targets.js +10 -0
  106. package/dist/formats/stl/core/targets.js.map +1 -1
  107. package/dist/formats/tga/core/helpers.js +47 -0
  108. package/dist/formats/tga/core/helpers.js.map +1 -1
  109. package/dist/formats/wav/core/helpers.js +37 -0
  110. package/dist/formats/wav/core/helpers.js.map +1 -1
  111. package/dist/formats/webm/core/helpers.js +35 -0
  112. package/dist/formats/webm/core/helpers.js.map +1 -1
  113. package/dist/formats/webp/CjsWebpFormat.js +49 -0
  114. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  115. package/dist/formats/webp/core/helpers.js +23 -0
  116. package/dist/formats/webp/core/helpers.js.map +1 -1
  117. package/dist/formats/wem/CjsWemFormat.js +8 -0
  118. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  119. package/dist/formats/wem/core/bitStream.js +2 -0
  120. package/dist/formats/wem/core/bitStream.js.map +1 -1
  121. package/dist/formats/wem/core/helpers.js +20 -0
  122. package/dist/formats/wem/core/helpers.js.map +1 -1
  123. package/dist/formats/yaml/CjsYamlFormat.js +45 -0
  124. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  125. package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
  126. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  127. package/dist/formats/yaml/core/helpers.js +10 -0
  128. package/dist/formats/yaml/core/helpers.js.map +1 -1
  129. package/dist/index.js +56 -43
  130. package/dist/index.js.map +1 -1
  131. package/dist/{CjsResource.js → resource/CjsResource.js} +232 -17
  132. package/dist/resource/CjsResource.js.map +1 -0
  133. package/dist/{resources → resource}/Tr2LightProfileRes.js +4 -3
  134. package/dist/resource/Tr2LightProfileRes.js.map +1 -0
  135. package/dist/{resources → resource/audio}/AudioGeometryResData.js +1 -1
  136. package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
  137. package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
  138. package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
  139. package/dist/resource/audio/CjsAudioRes.js +213 -0
  140. package/dist/resource/audio/CjsAudioRes.js.map +1 -0
  141. package/dist/resource/audio/index.js +4 -0
  142. package/dist/resource/audio/index.js.map +1 -0
  143. package/dist/{resources → resource/geometry}/MeshDecalData.js +1 -1
  144. package/dist/resource/geometry/MeshDecalData.js.map +1 -0
  145. package/dist/{resources → resource/geometry}/MeshDecalLodData.js +1 -1
  146. package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
  147. package/dist/resource/geometry/TriGeometryRes.js +656 -0
  148. package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
  149. package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +1 -1
  150. package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
  151. package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +1 -1
  152. package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
  153. package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +1 -1
  154. package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
  155. package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +1 -1
  156. package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
  157. package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +1 -1
  158. package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
  159. package/dist/{resources → resource/geometry}/TriJointBinding.js +1 -1
  160. package/dist/resource/geometry/TriJointBinding.js.map +1 -0
  161. package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +1 -1
  162. package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
  163. package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +1 -1
  164. package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
  165. package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +1 -1
  166. package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
  167. package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +1 -1
  168. package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
  169. package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +6 -5
  170. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
  171. package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +6 -5
  172. package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
  173. package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
  174. package/dist/resource/geometry/granny/enums.js.map +1 -0
  175. package/dist/resource/geometry/granny/index.js +6 -0
  176. package/dist/resource/geometry/granny/index.js.map +1 -0
  177. package/dist/resource/geometry/index.js +17 -0
  178. package/dist/resource/geometry/index.js.map +1 -0
  179. package/dist/resource/index.js +52 -0
  180. package/dist/resource/index.js.map +1 -0
  181. package/dist/resource/resourceBoundary.js +64 -0
  182. package/dist/resource/resourceBoundary.js.map +1 -0
  183. package/dist/resource/shader/Tr2EffectRes.js +420 -0
  184. package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
  185. package/dist/{resources → resource/shader}/Tr2MaterialArea.js +9 -4
  186. package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
  187. package/dist/{resources → resource/shader}/Tr2MaterialMesh.js +8 -3
  188. package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
  189. package/dist/{resources → resource/shader}/Tr2MaterialRes.js +10 -4
  190. package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
  191. package/dist/resource/shader/Tr2Shader.js +250 -0
  192. package/dist/resource/shader/Tr2Shader.js.map +1 -0
  193. package/dist/{resources → resource/shader}/Tr2ShaderPermutation.js +13 -7
  194. package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
  195. package/dist/resource/shader/index.js +17 -0
  196. package/dist/resource/shader/index.js.map +1 -0
  197. package/dist/resource/shader/portable.js +33 -0
  198. package/dist/resource/shader/portable.js.map +1 -0
  199. package/dist/resource/shader/portableValidation.js +461 -0
  200. package/dist/resource/shader/portableValidation.js.map +1 -0
  201. package/dist/resource/shader/reflection/Tr2EffectConstant.js +100 -0
  202. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
  203. package/dist/resource/shader/reflection/Tr2EffectDefine.js +34 -0
  204. package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
  205. package/dist/resource/shader/reflection/Tr2EffectDescription.js +113 -0
  206. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
  207. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +141 -0
  208. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
  209. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +107 -0
  210. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
  211. package/dist/resource/shader/reflection/Tr2EffectResource.js +90 -0
  212. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
  213. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +235 -0
  214. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
  215. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +71 -0
  216. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
  217. package/dist/resource/shader/reflection/Tr2Pass.js +111 -0
  218. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
  219. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +80 -0
  220. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
  221. package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +83 -6
  222. package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
  223. package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +56 -10
  224. package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
  225. package/dist/{resources → resource/texture}/Tr2ImageRes.js +6 -4
  226. package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
  227. package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +3 -1
  228. package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
  229. package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +1 -1
  230. package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
  231. package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +1 -1
  232. package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
  233. package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +6 -4
  234. package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
  235. package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +1 -1
  236. package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
  237. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +1 -1
  238. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
  239. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +1 -1
  240. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
  241. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +1 -1
  242. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  243. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +1 -1
  244. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
  245. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +1 -1
  246. package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
  247. package/dist/{resources → resource/texture}/TriTextureRes.js +42 -26
  248. package/dist/resource/texture/TriTextureRes.js.map +1 -0
  249. package/dist/resource/texture/index.js +15 -0
  250. package/dist/resource/texture/index.js.map +1 -0
  251. package/dist/{resources → resource/texture}/texturePipelineBehavior.js +59 -59
  252. package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
  253. package/dist/worker/CjsResManMainThreadLoader.js +87 -0
  254. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
  255. package/dist/worker/CjsResManWorker.js +217 -0
  256. package/dist/worker/CjsResManWorker.js.map +1 -0
  257. package/dist/worker/CjsResManWorkerLoader.js +434 -0
  258. package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
  259. package/dist/worker/protocol.js +12 -0
  260. package/dist/worker/protocol.js.map +1 -0
  261. package/docs/README.md +16 -3
  262. package/docs/architecture.md +39 -16
  263. package/docs/concepts/resource-lifecycle.md +2 -1
  264. package/docs/formats/README.md +4 -0
  265. package/docs/reference/classes/README.md +6 -4
  266. package/docs/reference/classes/audio.md +30 -0
  267. package/docs/reference/classes/core.md +31 -11
  268. package/docs/reference/classes/resources.md +151 -41
  269. package/docs/reference/classes/texture.md +7 -7
  270. package/docs/reference/motherlode-cache.md +17 -0
  271. package/docs/reference/queues.md +9 -1
  272. package/docs/reference/workers.md +135 -0
  273. package/docs/roadmap.md +27 -1
  274. package/package.json +8 -1
  275. package/dist/CjsResManQueue.js.map +0 -1
  276. package/dist/CjsResource.js.map +0 -1
  277. package/dist/CjsResourceSource.js +0 -68
  278. package/dist/CjsResourceSource.js.map +0 -1
  279. package/dist/resourcePath.js +0 -18
  280. package/dist/resourcePath.js.map +0 -1
  281. package/dist/resourceStates.js +0 -9
  282. package/dist/resourceStates.js.map +0 -1
  283. package/dist/resources/AudioGeometryResData.js.map +0 -1
  284. package/dist/resources/GStateBindingCallbackData.js.map +0 -1
  285. package/dist/resources/MeshDecalData.js.map +0 -1
  286. package/dist/resources/MeshDecalLodData.js.map +0 -1
  287. package/dist/resources/Tr2EffectRes.js +0 -71
  288. package/dist/resources/Tr2EffectRes.js.map +0 -1
  289. package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
  290. package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
  291. package/dist/resources/Tr2ImageRes.js.map +0 -1
  292. package/dist/resources/Tr2LightProfileRes.js.map +0 -1
  293. package/dist/resources/Tr2MaterialArea.js.map +0 -1
  294. package/dist/resources/Tr2MaterialMesh.js.map +0 -1
  295. package/dist/resources/Tr2MaterialRes.js.map +0 -1
  296. package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
  297. package/dist/resources/Tr2TextureLodManager.js.map +0 -1
  298. package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
  299. package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
  300. package/dist/resources/Tr2TexturePipeline.js.map +0 -1
  301. package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
  302. package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
  303. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
  304. package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
  305. package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
  306. package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
  307. package/dist/resources/TriGeometryRes.js +0 -239
  308. package/dist/resources/TriGeometryRes.js.map +0 -1
  309. package/dist/resources/TriGeometryResAreaData.js.map +0 -1
  310. package/dist/resources/TriGeometryResJointData.js.map +0 -1
  311. package/dist/resources/TriGeometryResLodData.js.map +0 -1
  312. package/dist/resources/TriGeometryResMeshData.js.map +0 -1
  313. package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
  314. package/dist/resources/TriGrannyRes.js.map +0 -1
  315. package/dist/resources/TriJointBinding.js.map +0 -1
  316. package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
  317. package/dist/resources/TriRtGeometryConstants.js.map +0 -1
  318. package/dist/resources/TriTextureRes.js.map +0 -1
  319. package/dist/resources/enums.js.map +0 -1
  320. package/dist/resources/resourceBoundary.js +0 -47
  321. package/dist/resources/resourceBoundary.js.map +0 -1
  322. package/dist/resources/texturePipelineBehavior.js.map +0 -1
  323. package/dist/texture/CjsTextureArrayRes.js.map +0 -1
  324. package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gif/core/helpers.js"],"sourcesContent":["export const OUTPUT_IMAGE = \"image\";\nexport const OUTPUT_RGBA = \"rgba\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"gif\",\n source: \"\"\n});\n\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsGifFormat\")\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n const allowed = new Set([ \"emit\", \"inputType\", \"source\" ]);\n for (const key of Object.keys(options))\n {\n if (!allowed.has(key)) throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...options };\n if (![ OUTPUT_IMAGE, OUTPUT_RGBA, OUTPUT_RAW, OUTPUT_JSON, \"gifJson\" ].includes(values.emit))\n {\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(values.emit)}`);\n }\n return values;\n}\n\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"GIF input must be Uint8Array, ArrayBuffer, or a view\");\n}\n\nexport function isGIF(bytes)\n{\n return bytes.byteLength >= 13 && (ascii(bytes, 0, 6) === \"GIF87a\" || ascii(bytes, 0, 6) === \"GIF89a\");\n}\n\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"gif\")\n{\n const bytes = toBytes(input);\n if (!isGIF(bytes)) throw new TypeError(\"CjsGifFormat: input is not a GIF87a/GIF89a image\");\n const metadata = inspectGif(bytes);\n if (expectedType && metadata.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsGifFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return { ...metadata, byteLength: bytes.byteLength, source: values.source || \"buffer\" };\n}\n\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n const decoded = metadata.frameCount > 0 && metadata.lzwSupported;\n return {\n format: \"gif\",\n source: values.source || \"buffer\",\n supported: decoded ? \"full\" : \"partial\",\n confidence: 1,\n preferred: decoded ? \"rgba8unorm\" : \"raw\",\n reason: decoded ? \"GIF frame RGBA decode and compositing are available.\" : \"GIF metadata/raw input is recognized but no decodable image frame was found.\",\n metadata,\n variants: [\n { kind: \"rgba\", payloadType: \"rgba\", codec: \"rgba8unorm\", supported: decoded, reason: decoded ? \"\" : \"GIF LZW frame decode is unavailable.\", containerOnly: false, isDecoded: decoded, rgbaDecodeSupported: decoded },\n { kind: \"raw\", payloadType: \"raw\", codec: \"gif\", mimeType: \"image/gif\", supported: true, containerOnly: true, isDecoded: false, rgbaDecodeSupported: decoded }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"gif\",\n source: values.source || \"buffer\",\n supported: \"none\",\n confidence: 0,\n preferred: \"\",\n reason: error.message,\n metadata: null,\n variants: [],\n warnings: [],\n errors: [ error.message ]\n };\n }\n}\n\nexport function readWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values);\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: \"gif\",\n mimeType: \"image/gif\",\n containerOnly: true,\n isDecoded: false,\n rgbaDecodeSupported: metadata.frameCount > 0 && metadata.lzwSupported,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === \"gifJson\") return metadata;\n if (values.emit === OUTPUT_RGBA || values.emit === OUTPUT_IMAGE)\n {\n return decodeFrames(bytes, metadata);\n }\n const error = new Error(`gif: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n throw error;\n}\n\nexport function toJsonValue(value)\n{\n if (value instanceof Uint8Array) return { byteLength: value.byteLength };\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value && typeof value === \"object\")\n {\n const output = {};\n for (const [ key, entry ] of Object.entries(value)) output[key] = toJsonValue(entry);\n return output;\n }\n return value;\n}\n\nfunction inspectGif(bytes)\n{\n const width = readU16LE(bytes, 6);\n const height = readU16LE(bytes, 8);\n const packed = bytes[10];\n const hasGlobalPalette = !!(packed & 0x80);\n const globalPaletteCount = hasGlobalPalette ? 1 << ((packed & 7) + 1) : 0;\n if (hasGlobalPalette) readPalette(bytes, 13, globalPaletteCount);\n let offset = 13 + globalPaletteCount * 3;\n let frameCount = 0;\n const frames = [];\n let firstFrame = null;\n let graphicsControl = null;\n let loopCount = null;\n while (offset < bytes.length)\n {\n const marker = bytes[offset++];\n if (marker === 0x3b) break;\n if (marker === 0x21)\n {\n const label = bytes[offset++];\n if (label === 0xf9)\n {\n if (bytes[offset++] !== 4) throw new Error(\"gif: invalid graphics control extension\");\n const control = bytes[offset++];\n graphicsControl = {\n disposalMethod: (control >>> 2) & 7,\n userInput: !!(control & 2),\n transparent: !!(control & 1),\n delayCentiseconds: readU16LE(bytes, offset)\n };\n offset += 2;\n graphicsControl.transparentIndex = bytes[offset++];\n if (bytes[offset++] !== 0) throw new Error(\"gif: unterminated graphics control extension\");\n }\n else if (label === 0xff)\n {\n const size = bytes[offset++];\n const application = ascii(bytes, offset, size);\n offset += size;\n const data = readSubBlocks(bytes, offset);\n offset = data.offset;\n if (application === \"NETSCAPE2.0\" || application === \"ANIMEXTS1.0\")\n {\n if (data.bytes.length >= 3 && data.bytes[0] === 1) loopCount = readU16LE(data.bytes, 1);\n }\n }\n else\n {\n offset = skipSubBlocks(bytes, offset);\n }\n }\n else if (marker === 0x2c)\n {\n if (offset + 9 > bytes.length) throw new Error(\"gif: truncated image descriptor\");\n const frame = {\n left: readU16LE(bytes, offset),\n top: readU16LE(bytes, offset + 2),\n width: readU16LE(bytes, offset + 4),\n height: readU16LE(bytes, offset + 6),\n packed: bytes[offset + 8],\n graphicsControl\n };\n offset += 9;\n const localPaletteCount = frame.packed & 0x80 ? 1 << ((frame.packed & 7) + 1) : 0;\n frame.localPalette = localPaletteCount ? readPalette(bytes, offset, localPaletteCount) : null;\n offset += localPaletteCount * 3;\n frame.lzwMinCodeSize = bytes[offset++];\n const data = readSubBlocks(bytes, offset);\n frame.compressed = data.bytes;\n offset = data.offset;\n frame.interlaced = !!(frame.packed & 0x40);\n frameCount++;\n frames.push(frame);\n if (!firstFrame) firstFrame = frame;\n graphicsControl = null;\n }\n else if (marker === 0x00)\n {\n throw new Error(\"gif: unexpected data before image descriptor\");\n }\n else\n {\n throw new Error(`gif: unsupported block marker 0x${marker.toString(16)}`);\n }\n }\n return {\n payloadType: \"image\",\n mediaTypes: [ \"image\" ],\n sourceFormat: \"gif\",\n version: ascii(bytes, 0, 6),\n width,\n height,\n frameCount,\n animated: frameCount > 1,\n loopCount,\n hasGlobalPalette,\n backgroundColorIndex: bytes[11],\n colorResolution: ((packed >>> 4) & 7) + 1,\n lzwSupported: frames.length > 0 && frames.every((frame) => frame.lzwMinCodeSize >= 2 && frame.lzwMinCodeSize <= 8),\n firstFrame,\n frames\n };\n}\n\nfunction decodeFrames(bytes, metadata)\n{\n if (!metadata.firstFrame || !metadata.lzwSupported) throw new Error(\"gif: no supported LZW image frame found\");\n const globalPalette = readPalette(bytes, 13, metadata.hasGlobalPalette ? 1 << ((bytes[10] & 7) + 1) : 0);\n const canvas = new Uint8Array(metadata.width * metadata.height * 4);\n const frames = [];\n\n for (const frame of metadata.frames)\n {\n const restore = frame.graphicsControl?.disposalMethod === 3 ? canvas.slice() : null;\n const palette = frame.localPalette || globalPalette;\n const indices = decodeLzw(frame.compressed, frame.lzwMinCodeSize, frame.width * frame.height);\n const rows = frame.interlaced ? interlacedRows(frame.height) : Array.from({ length: frame.height }, (_, row) => row);\n for (let sourceRow = 0; sourceRow < frame.height; sourceRow++)\n {\n const targetRow = rows[sourceRow];\n for (let x = 0; x < frame.width; x++)\n {\n const index = indices[sourceRow * frame.width + x];\n const targetX = frame.left + x;\n const targetY = frame.top + targetRow;\n if (targetX >= metadata.width || targetY >= metadata.height) continue;\n if (frame.graphicsControl?.transparent && index === frame.graphicsControl.transparentIndex) continue;\n const target = (targetY * metadata.width + targetX) * 4;\n const color = palette[index] || [ 0, 0, 0 ];\n canvas[target] = color[0];\n canvas[target + 1] = color[1];\n canvas[target + 2] = color[2];\n canvas[target + 3] = 255;\n }\n }\n\n frames.push({\n index: frames.length,\n delayCentiseconds: frame.graphicsControl?.delayCentiseconds || 0,\n disposalMethod: frame.graphicsControl?.disposalMethod || 0,\n data: canvas.slice()\n });\n const disposal = frame.graphicsControl?.disposalMethod || 0;\n if (disposal === 2) canvas.fill(0);\n else if (disposal === 3 && restore) canvas.set(restore);\n }\n\n const data = frames[0].data;\n return {\n payloadType: \"rgba\",\n sourceFormat: \"gif\",\n mimeType: \"image/gif\",\n containerOnly: false,\n isDecoded: true,\n rgbaDecodeSupported: true,\n width: metadata.width,\n height: metadata.height,\n pixelFormat: \"rgba8unorm\",\n data,\n frames,\n strideBytes: metadata.width * 4,\n origin: \"top-left\",\n colorSpace: \"srgb\",\n alphaMode: \"straight\",\n metadata\n };\n}\n\nfunction decodeLzw(bytes, minimumCodeSize, expectedLength)\n{\n const clear = 1 << minimumCodeSize;\n const end = clear + 1;\n let codeSize = minimumCodeSize + 1;\n let dictionary = Array.from({ length: clear }, (_, index) => [ index ]);\n let bitOffset = 0;\n let previous = null;\n const output = [];\n while (bitOffset + codeSize <= bytes.length * 8)\n {\n let code = 0;\n for (let bit = 0; bit < codeSize; bit++)\n {\n code |= (((bytes[bitOffset >>> 3] >>> (bitOffset & 7)) & 1) << bit);\n bitOffset++;\n }\n if (code === clear)\n {\n dictionary = Array.from({ length: clear }, (_, index) => [ index ]);\n codeSize = minimumCodeSize + 1;\n previous = null;\n continue;\n }\n if (code === end) break;\n let entry;\n if (code < dictionary.length) entry = dictionary[code];\n else if (code === dictionary.length && previous) entry = previous.concat(previous[0]);\n else throw new Error(\"gif: invalid LZW code\");\n output.push(...entry);\n if (previous)\n {\n dictionary.push(previous.concat(entry[0]));\n if (dictionary.length === (1 << codeSize) && codeSize < 12) codeSize++;\n }\n previous = entry;\n if (output.length >= expectedLength) break;\n }\n if (output.length < expectedLength) throw new Error(\"gif: LZW stream ended before the frame was filled\");\n return output.slice(0, expectedLength);\n}\n\nfunction readSubBlocks(bytes, offset)\n{\n const output = [];\n while (offset < bytes.length)\n {\n if (offset >= bytes.length) throw new Error(\"gif: truncated sub-block sequence\");\n const length = bytes[offset++];\n if (!length) return { bytes: Uint8Array.from(output), offset };\n if (offset + length > bytes.length) throw new Error(\"gif: truncated sub-block payload\");\n output.push(...bytes.subarray(offset, offset + length));\n offset += length;\n }\n throw new Error(\"gif: truncated sub-block sequence\");\n}\n\nfunction skipSubBlocks(bytes, offset)\n{\n return readSubBlocks(bytes, offset).offset;\n}\n\nfunction readPalette(bytes, offset, count)\n{\n const palette = [];\n for (let i = 0; i < count; i++)\n {\n if (offset + 3 > bytes.length) throw new Error(\"gif: truncated color table\");\n palette.push([ bytes[offset], bytes[offset + 1], bytes[offset + 2] ]);\n offset += 3;\n }\n return palette;\n}\n\nfunction interlacedRows(height)\n{\n const rows = [];\n for (const [ start, step ] of [ [ 0, 8 ], [ 4, 8 ], [ 2, 4 ], [ 1, 2 ] ])\n {\n for (let row = start; row < height; row += step) rows.push(row);\n }\n return rows;\n}\n\nfunction ascii(bytes, offset, length)\n{\n return String.fromCharCode(...bytes.subarray(offset, offset + length));\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n"],"names":["OUTPUT_IMAGE","OUTPUT_RGBA","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","normalizeValues","base","options","readerName","Array","isArray","TypeError","allowed","Set","key","keys","has","JSON","stringify","values","includes","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isGIF","bytes","ascii","inspectWithValues","expectedType","metadata","inspectGif","sourceFormat","isSupportedWithValues","decoded","frameCount","lzwSupported","format","supported","confidence","preferred","reason","variants","kind","payloadType","codec","containerOnly","isDecoded","rgbaDecodeSupported","mimeType","warnings","errors","error","message","readWithValues","decodeFrames","Error","code","toJsonValue","value","map","output","entry","entries","width","readU16LE","height","packed","hasGlobalPalette","globalPaletteCount","readPalette","offset","frames","firstFrame","graphicsControl","loopCount","length","marker","label","control","disposalMethod","userInput","transparent","delayCentiseconds","transparentIndex","size","application","data","readSubBlocks","skipSubBlocks","frame","left","top","localPaletteCount","localPalette","lzwMinCodeSize","compressed","interlaced","push","toString","mediaTypes","version","animated","backgroundColorIndex","colorResolution","every","globalPalette","canvas","restore","slice","palette","indices","decodeLzw","rows","interlacedRows","from","_","row","sourceRow","targetRow","x","index","targetX","targetY","target","color","disposal","fill","set","pixelFormat","strideBytes","origin","colorSpace","alphaMode","minimumCodeSize","expectedLength","clear","end","codeSize","dictionary","bitOffset","previous","bit","concat","subarray","count","i","start","step","String","fromCharCode"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gif/core/helpers.js"],"sourcesContent":["export const OUTPUT_IMAGE = \"image\";\nexport const OUTPUT_RGBA = \"rgba\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"gif\",\n source: \"\"\n});\n\n/**\n * Normalizes reader options against their supported defaults for the GIF format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsGifFormat\")\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n const allowed = new Set([ \"emit\", \"inputType\", \"source\" ]);\n for (const key of Object.keys(options))\n {\n if (!allowed.has(key)) throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...options };\n if (![ OUTPUT_IMAGE, OUTPUT_RGBA, OUTPUT_RAW, OUTPUT_JSON, \"gifJson\" ].includes(values.emit))\n {\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(values.emit)}`);\n }\n return values;\n}\n\n/** Returns a byte view over the supplied binary input for the GIF format reader. */\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"GIF input must be Uint8Array, ArrayBuffer, or a view\");\n}\n\n/** Reports whether the current GIF format reader satisfies GIF. */\nexport function isGIF(bytes)\n{\n return bytes.byteLength >= 13 && (ascii(bytes, 0, 6) === \"GIF87a\" || ascii(bytes, 0, 6) === \"GIF89a\");\n}\n\n/** Inspects input using normalized format options for the GIF format reader. */\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"gif\")\n{\n const bytes = toBytes(input);\n if (!isGIF(bytes)) throw new TypeError(\"CjsGifFormat: input is not a GIF87a/GIF89a image\");\n const metadata = inspectGif(bytes);\n if (expectedType && metadata.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsGifFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return { ...metadata, byteLength: bytes.byteLength, source: values.source || \"buffer\" };\n}\n\n/**\n * Reports whether input is supported under normalized format options for the GIF\n * format reader.\n */\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n const decoded = metadata.frameCount > 0 && metadata.lzwSupported;\n return {\n format: \"gif\",\n source: values.source || \"buffer\",\n supported: decoded ? \"full\" : \"partial\",\n confidence: 1,\n preferred: decoded ? \"rgba8unorm\" : \"raw\",\n reason: decoded ? \"GIF frame RGBA decode and compositing are available.\" : \"GIF metadata/raw input is recognized but no decodable image frame was found.\",\n metadata,\n variants: [\n { kind: \"rgba\", payloadType: \"rgba\", codec: \"rgba8unorm\", supported: decoded, reason: decoded ? \"\" : \"GIF LZW frame decode is unavailable.\", containerOnly: false, isDecoded: decoded, rgbaDecodeSupported: decoded },\n { kind: \"raw\", payloadType: \"raw\", codec: \"gif\", mimeType: \"image/gif\", supported: true, containerOnly: true, isDecoded: false, rgbaDecodeSupported: decoded }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"gif\",\n source: values.source || \"buffer\",\n supported: \"none\",\n confidence: 0,\n preferred: \"\",\n reason: error.message,\n metadata: null,\n variants: [],\n warnings: [],\n errors: [ error.message ]\n };\n }\n}\n\n/** Reads input using normalized format options for the GIF format reader. */\nexport function readWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values);\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: \"gif\",\n mimeType: \"image/gif\",\n containerOnly: true,\n isDecoded: false,\n rgbaDecodeSupported: metadata.frameCount > 0 && metadata.lzwSupported,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === \"gifJson\") return metadata;\n if (values.emit === OUTPUT_RGBA || values.emit === OUTPUT_IMAGE)\n {\n return decodeFrames(bytes, metadata);\n }\n const error = new Error(`gif: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n throw error;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the GIF format reader. */\nexport function toJsonValue(value)\n{\n if (value instanceof Uint8Array) return { byteLength: value.byteLength };\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value && typeof value === \"object\")\n {\n const output = {};\n for (const [ key, entry ] of Object.entries(value)) output[key] = toJsonValue(entry);\n return output;\n }\n return value;\n}\n\nfunction inspectGif(bytes)\n{\n const width = readU16LE(bytes, 6);\n const height = readU16LE(bytes, 8);\n const packed = bytes[10];\n const hasGlobalPalette = !!(packed & 0x80);\n const globalPaletteCount = hasGlobalPalette ? 1 << ((packed & 7) + 1) : 0;\n if (hasGlobalPalette) readPalette(bytes, 13, globalPaletteCount);\n let offset = 13 + globalPaletteCount * 3;\n let frameCount = 0;\n const frames = [];\n let firstFrame = null;\n let graphicsControl = null;\n let loopCount = null;\n while (offset < bytes.length)\n {\n const marker = bytes[offset++];\n if (marker === 0x3b) break;\n if (marker === 0x21)\n {\n const label = bytes[offset++];\n if (label === 0xf9)\n {\n if (bytes[offset++] !== 4) throw new Error(\"gif: invalid graphics control extension\");\n const control = bytes[offset++];\n graphicsControl = {\n disposalMethod: (control >>> 2) & 7,\n userInput: !!(control & 2),\n transparent: !!(control & 1),\n delayCentiseconds: readU16LE(bytes, offset)\n };\n offset += 2;\n graphicsControl.transparentIndex = bytes[offset++];\n if (bytes[offset++] !== 0) throw new Error(\"gif: unterminated graphics control extension\");\n }\n else if (label === 0xff)\n {\n const size = bytes[offset++];\n const application = ascii(bytes, offset, size);\n offset += size;\n const data = readSubBlocks(bytes, offset);\n offset = data.offset;\n if (application === \"NETSCAPE2.0\" || application === \"ANIMEXTS1.0\")\n {\n if (data.bytes.length >= 3 && data.bytes[0] === 1) loopCount = readU16LE(data.bytes, 1);\n }\n }\n else\n {\n offset = skipSubBlocks(bytes, offset);\n }\n }\n else if (marker === 0x2c)\n {\n if (offset + 9 > bytes.length) throw new Error(\"gif: truncated image descriptor\");\n const frame = {\n left: readU16LE(bytes, offset),\n top: readU16LE(bytes, offset + 2),\n width: readU16LE(bytes, offset + 4),\n height: readU16LE(bytes, offset + 6),\n packed: bytes[offset + 8],\n graphicsControl\n };\n offset += 9;\n const localPaletteCount = frame.packed & 0x80 ? 1 << ((frame.packed & 7) + 1) : 0;\n frame.localPalette = localPaletteCount ? readPalette(bytes, offset, localPaletteCount) : null;\n offset += localPaletteCount * 3;\n frame.lzwMinCodeSize = bytes[offset++];\n const data = readSubBlocks(bytes, offset);\n frame.compressed = data.bytes;\n offset = data.offset;\n frame.interlaced = !!(frame.packed & 0x40);\n frameCount++;\n frames.push(frame);\n if (!firstFrame) firstFrame = frame;\n graphicsControl = null;\n }\n else if (marker === 0x00)\n {\n throw new Error(\"gif: unexpected data before image descriptor\");\n }\n else\n {\n throw new Error(`gif: unsupported block marker 0x${marker.toString(16)}`);\n }\n }\n return {\n payloadType: \"image\",\n mediaTypes: [ \"image\" ],\n sourceFormat: \"gif\",\n version: ascii(bytes, 0, 6),\n width,\n height,\n frameCount,\n animated: frameCount > 1,\n loopCount,\n hasGlobalPalette,\n backgroundColorIndex: bytes[11],\n colorResolution: ((packed >>> 4) & 7) + 1,\n lzwSupported: frames.length > 0 && frames.every((frame) => frame.lzwMinCodeSize >= 2 && frame.lzwMinCodeSize <= 8),\n firstFrame,\n frames\n };\n}\n\nfunction decodeFrames(bytes, metadata)\n{\n if (!metadata.firstFrame || !metadata.lzwSupported) throw new Error(\"gif: no supported LZW image frame found\");\n const globalPalette = readPalette(bytes, 13, metadata.hasGlobalPalette ? 1 << ((bytes[10] & 7) + 1) : 0);\n const canvas = new Uint8Array(metadata.width * metadata.height * 4);\n const frames = [];\n\n for (const frame of metadata.frames)\n {\n const restore = frame.graphicsControl?.disposalMethod === 3 ? canvas.slice() : null;\n const palette = frame.localPalette || globalPalette;\n const indices = decodeLzw(frame.compressed, frame.lzwMinCodeSize, frame.width * frame.height);\n const rows = frame.interlaced ? interlacedRows(frame.height) : Array.from({ length: frame.height }, (_, row) => row);\n for (let sourceRow = 0; sourceRow < frame.height; sourceRow++)\n {\n const targetRow = rows[sourceRow];\n for (let x = 0; x < frame.width; x++)\n {\n const index = indices[sourceRow * frame.width + x];\n const targetX = frame.left + x;\n const targetY = frame.top + targetRow;\n if (targetX >= metadata.width || targetY >= metadata.height) continue;\n if (frame.graphicsControl?.transparent && index === frame.graphicsControl.transparentIndex) continue;\n const target = (targetY * metadata.width + targetX) * 4;\n const color = palette[index] || [ 0, 0, 0 ];\n canvas[target] = color[0];\n canvas[target + 1] = color[1];\n canvas[target + 2] = color[2];\n canvas[target + 3] = 255;\n }\n }\n\n frames.push({\n index: frames.length,\n delayCentiseconds: frame.graphicsControl?.delayCentiseconds || 0,\n disposalMethod: frame.graphicsControl?.disposalMethod || 0,\n data: canvas.slice()\n });\n const disposal = frame.graphicsControl?.disposalMethod || 0;\n if (disposal === 2) canvas.fill(0);\n else if (disposal === 3 && restore) canvas.set(restore);\n }\n\n const data = frames[0].data;\n return {\n payloadType: \"rgba\",\n sourceFormat: \"gif\",\n mimeType: \"image/gif\",\n containerOnly: false,\n isDecoded: true,\n rgbaDecodeSupported: true,\n width: metadata.width,\n height: metadata.height,\n pixelFormat: \"rgba8unorm\",\n data,\n frames,\n strideBytes: metadata.width * 4,\n origin: \"top-left\",\n colorSpace: \"srgb\",\n alphaMode: \"straight\",\n metadata\n };\n}\n\nfunction decodeLzw(bytes, minimumCodeSize, expectedLength)\n{\n const clear = 1 << minimumCodeSize;\n const end = clear + 1;\n let codeSize = minimumCodeSize + 1;\n let dictionary = Array.from({ length: clear }, (_, index) => [ index ]);\n let bitOffset = 0;\n let previous = null;\n const output = [];\n while (bitOffset + codeSize <= bytes.length * 8)\n {\n let code = 0;\n for (let bit = 0; bit < codeSize; bit++)\n {\n code |= (((bytes[bitOffset >>> 3] >>> (bitOffset & 7)) & 1) << bit);\n bitOffset++;\n }\n if (code === clear)\n {\n dictionary = Array.from({ length: clear }, (_, index) => [ index ]);\n codeSize = minimumCodeSize + 1;\n previous = null;\n continue;\n }\n if (code === end) break;\n let entry;\n if (code < dictionary.length) entry = dictionary[code];\n else if (code === dictionary.length && previous) entry = previous.concat(previous[0]);\n else throw new Error(\"gif: invalid LZW code\");\n output.push(...entry);\n if (previous)\n {\n dictionary.push(previous.concat(entry[0]));\n if (dictionary.length === (1 << codeSize) && codeSize < 12) codeSize++;\n }\n previous = entry;\n if (output.length >= expectedLength) break;\n }\n if (output.length < expectedLength) throw new Error(\"gif: LZW stream ended before the frame was filled\");\n return output.slice(0, expectedLength);\n}\n\nfunction readSubBlocks(bytes, offset)\n{\n const output = [];\n while (offset < bytes.length)\n {\n if (offset >= bytes.length) throw new Error(\"gif: truncated sub-block sequence\");\n const length = bytes[offset++];\n if (!length) return { bytes: Uint8Array.from(output), offset };\n if (offset + length > bytes.length) throw new Error(\"gif: truncated sub-block payload\");\n output.push(...bytes.subarray(offset, offset + length));\n offset += length;\n }\n throw new Error(\"gif: truncated sub-block sequence\");\n}\n\nfunction skipSubBlocks(bytes, offset)\n{\n return readSubBlocks(bytes, offset).offset;\n}\n\nfunction readPalette(bytes, offset, count)\n{\n const palette = [];\n for (let i = 0; i < count; i++)\n {\n if (offset + 3 > bytes.length) throw new Error(\"gif: truncated color table\");\n palette.push([ bytes[offset], bytes[offset + 1], bytes[offset + 2] ]);\n offset += 3;\n }\n return palette;\n}\n\nfunction interlacedRows(height)\n{\n const rows = [];\n for (const [ start, step ] of [ [ 0, 8 ], [ 4, 8 ], [ 2, 4 ], [ 1, 2 ] ])\n {\n for (let row = start; row < height; row += step) rows.push(row);\n }\n return rows;\n}\n\nfunction ascii(bytes, offset, length)\n{\n return String.fromCharCode(...bytes.subarray(offset, offset + length));\n}\n\nfunction readU16LE(bytes, offset)\n{\n return bytes[offset] | (bytes[offset + 1] << 8);\n}\n"],"names":["OUTPUT_IMAGE","OUTPUT_RGBA","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","normalizeValues","base","options","readerName","Array","isArray","TypeError","allowed","Set","key","keys","has","JSON","stringify","values","includes","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isGIF","bytes","ascii","inspectWithValues","expectedType","metadata","inspectGif","sourceFormat","isSupportedWithValues","decoded","frameCount","lzwSupported","format","supported","confidence","preferred","reason","variants","kind","payloadType","codec","containerOnly","isDecoded","rgbaDecodeSupported","mimeType","warnings","errors","error","message","readWithValues","decodeFrames","Error","code","toJsonValue","value","map","output","entry","entries","width","readU16LE","height","packed","hasGlobalPalette","globalPaletteCount","readPalette","offset","frames","firstFrame","graphicsControl","loopCount","length","marker","label","control","disposalMethod","userInput","transparent","delayCentiseconds","transparentIndex","size","application","data","readSubBlocks","skipSubBlocks","frame","left","top","localPaletteCount","localPalette","lzwMinCodeSize","compressed","interlaced","push","toString","mediaTypes","version","animated","backgroundColorIndex","colorResolution","every","globalPalette","canvas","restore","slice","palette","indices","decodeLzw","rows","interlacedRows","from","_","row","sourceRow","targetRow","x","index","targetX","targetY","target","color","disposal","fill","set","pixelFormat","strideBytes","origin","colorSpace","alphaMode","minimumCodeSize","expectedLength","clear","end","codeSize","dictionary","bitOffset","previous","bit","concat","subarray","count","i","start","step","String","fromCharCode"],"mappings":"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"}
@@ -28,11 +28,15 @@ const DEFAULT_VALUES = Object.freeze({
28
28
  classes: Object.freeze({})
29
29
  });
30
30
  const OPTION_KEYS = new Set(["emit", "source", "buffers", "packTangents", "uvHandedness", "rebuildMissingNormals", "rebuildMissingTangents", "rebuildMissingBiNormals", "classes"]);
31
+
32
+ /** Validates a requested runtime class key for the glTF format reader. */
31
33
  function validateClassKey(key, readerName = "CjsGltfFormat") {
32
34
  if (!CLASS_KEYS.includes(key)) {
33
35
  throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(", ")}`);
34
36
  }
35
37
  }
38
+
39
+ /** Validates a resolved runtime class constructor for the glTF format reader. */
36
40
  function validateClass(key, Class, readerName = "CjsGltfFormat") {
37
41
  validateClassKey(key, readerName);
38
42
  if (typeof Class !== "function") {
@@ -66,6 +70,11 @@ function normalizeUvHandedness(value, readerName) {
66
70
  if (value === "left" || value === -1 || value === "negative") return "left";
67
71
  throw new TypeError(`${readerName}: uvHandedness must be "right" or "left"`);
68
72
  }
73
+
74
+ /**
75
+ * Normalizes reader options against their supported defaults for the glTF format
76
+ * reader.
77
+ */
69
78
  function normalizeValues(base, options = {}, readerName = "CjsGltfFormat") {
70
79
  if (!options || typeof options !== "object") {
71
80
  throw new TypeError(`${readerName}: options must be an object`);
@@ -229,6 +238,8 @@ function rebuildMissingMeshData(format, json, values) {
229
238
  }
230
239
  }
231
240
  }
241
+
242
+ /** Reads input using normalized format options for the glTF format reader. */
232
243
  function readWithValues(format, input, values) {
233
244
  const parsed = parseInput(input);
234
245
  const json = parseGltfToJson(parsed.gltf, {
@@ -245,6 +256,8 @@ function readWithValues(format, input, values) {
245
256
  source: values.source
246
257
  });
247
258
  }
259
+
260
+ /** Inspects input using normalized format options for the glTF format reader. */
248
261
  function inspectWithValues(input, values) {
249
262
  const parsed = parseInput(input);
250
263
  return inspectGltf(parsed.gltf, {
@@ -252,6 +265,8 @@ function inspectWithValues(input, values) {
252
265
  source: values.source
253
266
  });
254
267
  }
268
+
269
+ /** Converts a parsed payload into a JSON-safe value for the glTF format reader. */
255
270
  function toJsonValue(value) {
256
271
  if (value === null || value === undefined) return value;
257
272
  if (typeof value !== "object") return value;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gltf/core/helpers.js"],"sourcesContent":["/**\n * Internal read-pipeline glue for CjsGltfFormat.\n */\n\nimport { CLASS_KEYS as GR2_CLASS_KEYS, hydrateJson } from \"./json.js\";\nimport { buildCmfFromShared, CMF_CLASS_KEYS, hydrateCmf } from \"./targets.js\";\nimport { inspectGltf, isGlb, parseGltfToJson, parseInput, toBytes } from \"./parser.js\";\nimport {\n generateBiNormals,\n generateNormals,\n generateTangents\n} from \"@carbonenginejs/runtime-utils/mesh\";\nimport {\n packTangentFrames\n} from \"@carbonenginejs/runtime-utils/tangent\";\nimport {\n cross,\n normalize\n} from \"@carbonenginejs/runtime-utils/vec3\";\n\nexport const CLASS_KEYS = Object.freeze(Array.from(new Set([\n ...GR2_CLASS_KEYS,\n ...CMF_CLASS_KEYS\n])));\n\nexport { isGlb, toBytes };\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_GLTF_JSON = \"gltfJson\";\nexport const OUTPUT_SHARED = \"shared\";\nexport const OUTPUT_GR2 = \"gr2\";\nexport const OUTPUT_CMF = \"cmf\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_GLTF_JSON,\n source: \"memory\",\n buffers: null,\n packTangents: false,\n uvHandedness: \"right\",\n rebuildMissingNormals: false,\n rebuildMissingTangents: false,\n rebuildMissingBiNormals: false,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([\n \"emit\",\n \"source\",\n \"buffers\",\n \"packTangents\",\n \"uvHandedness\",\n \"rebuildMissingNormals\",\n \"rebuildMissingTangents\",\n \"rebuildMissingBiNormals\",\n \"classes\"\n]);\n\nexport function validateClassKey(key, readerName = \"CjsGltfFormat\")\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(\", \")}`);\n }\n}\n\nexport function validateClass(key, Class, readerName = \"CjsGltfFormat\")\n{\n validateClassKey(key, readerName);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`${readerName}: class ${JSON.stringify(key)} must be a constructor`);\n }\n}\n\nfunction mergeClasses(base, classes, readerName)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(`${readerName}: classes option must be an object`);\n }\n\n const next = { ...base };\n for (const [ key, Class ] of Object.entries(classes))\n {\n if (Class === null || Class === undefined)\n {\n delete next[key];\n continue;\n }\n validateClass(key, Class, readerName);\n next[key] = Class;\n }\n return next;\n}\n\nfunction validateRule(name, value, readerName)\n{\n if (typeof value === \"boolean\" || typeof value === \"function\") return value;\n throw new TypeError(`${readerName}: ${name} must be true, false, or a function`);\n}\n\nfunction normalizeUvHandedness(value, readerName)\n{\n if (value === undefined || value === null) return DEFAULT_VALUES.uvHandedness;\n if (value === \"right\" || value === 1 || value === \"positive\") return \"right\";\n if (value === \"left\" || value === -1 || value === \"negative\") return \"left\";\n throw new TypeError(`${readerName}: uvHandedness must be \"right\" or \"left\"`);\n}\n\nexport function normalizeValues(base, options = {}, readerName = \"CjsGltfFormat\")\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n }\n\n const values = { ...base, ...options };\n const emit = normalizeEmit(values.emit, readerName);\n const classes = Object.prototype.hasOwnProperty.call(options, \"classes\")\n ? mergeClasses(base.classes || {}, options.classes, readerName)\n : { ...(base.classes || {}) };\n if ((emit === OUTPUT_GR2 || emit === OUTPUT_CMF) && !hasClasses(classes))\n {\n throw new TypeError(`${readerName}: emit \"${emit}\" requires explicit classes`);\n }\n if (typeof values.source !== \"string\" || !values.source)\n {\n values.source = DEFAULT_VALUES.source;\n }\n\n return {\n emit,\n source: values.source,\n buffers: values.buffers || null,\n packTangents: validateRule(\"packTangents\", values.packTangents, readerName),\n uvHandedness: normalizeUvHandedness(values.uvHandedness, readerName),\n rebuildMissingNormals: validateRule(\"rebuildMissingNormals\", values.rebuildMissingNormals, readerName),\n rebuildMissingTangents: validateRule(\"rebuildMissingTangents\", values.rebuildMissingTangents, readerName),\n rebuildMissingBiNormals: validateRule(\"rebuildMissingBiNormals\", values.rebuildMissingBiNormals, readerName),\n classes\n };\n}\n\nfunction normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === null || emit === OUTPUT_JSON || emit === OUTPUT_GLTF_JSON || emit === OUTPUT_SHARED)\n {\n return OUTPUT_GLTF_JSON;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_CMF) return emit;\n throw new TypeError(`${readerName}: emit must be \"${OUTPUT_SHARED}\", \"${OUTPUT_GLTF_JSON}\", \"${OUTPUT_GR2}\", or \"${OUTPUT_CMF}\", got ${JSON.stringify(emit)}`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nfunction hasVertexChannel(mesh, channel)\n{\n const value = mesh && mesh.vertex && mesh.vertex[channel];\n return !!value && value.length > 0;\n}\n\nfunction requireVertexChannel(mesh, meshIndex, channel, feature)\n{\n const value = mesh && mesh.vertex && mesh.vertex[channel];\n if (!value || value.length === 0)\n {\n const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;\n throw new Error(`CjsGltfFormat: ${feature} requires mesh.vertex.${channel} for mesh ${name}`);\n }\n return value;\n}\n\nfunction triangleFaces(mesh, meshIndex, feature)\n{\n const faces = [];\n for (const group of mesh.indices || [])\n {\n if (group && group.faces) faces.push(...group.faces);\n }\n if (faces.length === 0)\n {\n const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;\n throw new Error(`CjsGltfFormat: ${feature} requires triangle indices for mesh ${name}`);\n }\n return faces;\n}\n\nfunction shouldApplyMeshRule(format, rule, context)\n{\n if (typeof rule === \"function\")\n {\n const result = rule({ format, reader: format, ...context });\n if (typeof result !== \"boolean\")\n {\n throw new TypeError(`CjsGltfFormat: ${context.feature} rule must return true or false`);\n }\n return result;\n }\n return rule;\n}\n\nfunction vertexCount(mesh)\n{\n return mesh.vertex.position.length / 3;\n}\n\nfunction tangentXyz(mesh)\n{\n const\n tangent = requireVertexChannel(mesh, 0, \"tangent\", \"tangent conversion\"),\n count = vertexCount(mesh),\n width = tangent.length / count;\n\n if (width === 3) return tangent.slice();\n if (width !== 4) throw new Error(\"CjsGltfFormat: tangent channel must have 3 or 4 components per vertex\");\n\n const out = new Array(count * 3);\n for (let i = 0, o = 0; i < tangent.length; i += 4, o += 3)\n {\n out[o] = tangent[i];\n out[o + 1] = tangent[i + 1];\n out[o + 2] = tangent[i + 2];\n }\n return out;\n}\n\nfunction generatedBiNormalsForMesh(mesh, values)\n{\n const\n normals = requireVertexChannel(mesh, 0, \"normal\", \"binormal generation\"),\n tangent = requireVertexChannel(mesh, 0, \"tangent\", \"binormal generation\"),\n count = vertexCount(mesh),\n width = tangent.length / count;\n\n if (width === 3)\n {\n return generateBiNormals(normals, tangent, { uvHandedness: values.uvHandedness });\n }\n\n if (width !== 4) throw new Error(\"CjsGltfFormat: tangent channel must have 3 or 4 components per vertex\");\n\n const out = new Array(count * 3);\n for (let i = 0, o = 0; i < tangent.length; i += 4, o += 3)\n {\n const b = normalize(\n [ 0, 0, 0 ],\n cross(\n [ 0, 0, 0 ],\n [ normals[o], normals[o + 1], normals[o + 2] ],\n [ tangent[i], tangent[i + 1], tangent[i + 2] ]\n )\n );\n const sign = tangent[i + 3] < 0 ? -1 : 1;\n out[o] = b[0] * sign;\n out[o + 1] = b[1] * sign;\n out[o + 2] = b[2] * sign;\n }\n return out;\n}\n\nfunction rebuildMissingMeshData(format, json, values)\n{\n for (let meshIndex = 0; meshIndex < json.meshes.length; meshIndex++)\n {\n const\n mesh = json.meshes[meshIndex],\n common = { options: values, raw: null, json, mesh, meshIndex },\n shouldPackTangents = shouldApplyMeshRule(\n format,\n values.packTangents,\n { ...common, feature: \"packTangents\", channel: \"tangent\" }\n );\n\n if (!hasVertexChannel(mesh, \"normal\") && (shouldApplyMeshRule(\n format,\n values.rebuildMissingNormals,\n { ...common, feature: \"rebuildMissingNormals\", channel: \"normal\" }) || shouldPackTangents))\n {\n mesh.vertex.normal = generateNormals(\n requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingNormals\"),\n triangleFaces(mesh, meshIndex, \"rebuildMissingNormals\")\n );\n }\n\n if (!hasVertexChannel(mesh, \"tangent\") && (shouldApplyMeshRule(\n format,\n values.rebuildMissingTangents,\n { ...common, feature: \"rebuildMissingTangents\", channel: \"tangent\" }) || shouldPackTangents))\n {\n mesh.vertex.tangent = generateTangents(\n requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingTangents\"),\n requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingTangents\"),\n requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"rebuildMissingTangents\"),\n triangleFaces(mesh, meshIndex, \"rebuildMissingTangents\")\n );\n }\n\n if (!hasVertexChannel(mesh, \"binormal\") && (shouldApplyMeshRule(\n format,\n values.rebuildMissingBiNormals,\n { ...common, feature: \"rebuildMissingBiNormals\", channel: \"binormal\" }) || shouldPackTangents))\n {\n mesh.vertex.binormal = generatedBiNormalsForMesh(mesh, values);\n }\n\n if (shouldPackTangents)\n {\n mesh.vertex.tangent = packTangentFrames(\n requireVertexChannel(mesh, meshIndex, \"normal\", \"packTangents\"),\n tangentXyz(mesh),\n requireVertexChannel(mesh, meshIndex, \"binormal\", \"packTangents\")\n );\n mesh.vertex.normal = [];\n mesh.vertex.binormal = [];\n }\n }\n}\n\nexport function readWithValues(format, input, values)\n{\n const parsed = parseInput(input);\n const json = parseGltfToJson(parsed.gltf, {\n binaryChunk: parsed.binaryChunk,\n source: values.source,\n buffers: values.buffers\n });\n rebuildMissingMeshData(format, json, values);\n if (values.emit === OUTPUT_CMF) return hydrateCmf(buildCmfFromShared(json), values.classes, { source: values.source });\n return hydrateJson(json, { classes: values.classes, source: values.source });\n}\n\nexport function inspectWithValues(input, values)\n{\n const parsed = parseInput(input);\n return inspectGltf(parsed.gltf, { format: parsed.format, source: values.source });\n}\n\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined) return value;\n if (typeof value !== \"object\") return value;\n\n if (typeof value.toJSON === \"function\")\n {\n const next = value.toJSON();\n if (next !== value) return toJsonValue(next);\n }\n\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (ArrayBuffer.isView(value) && !(value instanceof DataView)) return Array.from(value);\n\n const out = {};\n for (const key of Object.keys(value))\n {\n out[key] = toJsonValue(value[key]);\n }\n return out;\n}\n\n/**\n * Imports a Node built-in module without exposing the specifier to any\n * bundler's static import graph.\n *\n * `await import(\"node:fs/promises\")` written as a literal is resolved\n * eagerly by webpack/Rollup/esbuild alike when they walk the module\n * graph, breaking browser builds even though this path only ever runs\n * under Node (readFile is a Node-only convenience). Building the\n * specifier inside a `Function` body hides it from every bundler's\n * static analysis - it only exists at runtime, in the Node process that\n * actually calls readFile.\n *\n * @param {string} specifier Node built-in module specifier, e.g. \"node:fs/promises\".\n * @returns {Promise<any>} The imported module namespace.\n */\nexport function importNodeModule(specifier)\n{\n // eslint-disable-next-line no-new-func\n return new Function(\"s\", \"return import(s)\")(specifier);\n}\n"],"names":["CLASS_KEYS","Object","freeze","Array","from","Set","GR2_CLASS_KEYS","CMF_CLASS_KEYS","OUTPUT_JSON","OUTPUT_GLTF_JSON","OUTPUT_SHARED","OUTPUT_GR2","OUTPUT_CMF","DEFAULT_VALUES","emit","source","buffers","packTangents","uvHandedness","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","OPTION_KEYS","validateClassKey","key","readerName","includes","Error","JSON","stringify","join","validateClass","Class","TypeError","mergeClasses","base","next","entries","undefined","validateRule","name","value","normalizeUvHandedness","normalizeValues","options","keys","has","values","normalizeEmit","prototype","hasOwnProperty","call","hasClasses","some","hasVertexChannel","mesh","channel","vertex","length","requireVertexChannel","meshIndex","feature","triangleFaces","faces","group","indices","push","shouldApplyMeshRule","format","rule","context","result","reader","vertexCount","position","tangentXyz","tangent","count","width","slice","out","i","o","generatedBiNormalsForMesh","normals","generateBiNormals","b","normalize","cross","sign","rebuildMissingMeshData","json","meshes","common","raw","shouldPackTangents","normal","generateNormals","generateTangents","binormal","packTangentFrames","readWithValues","input","parsed","parseInput","parseGltfToJson","gltf","binaryChunk","hydrateCmf","buildCmfFromShared","hydrateJson","inspectWithValues","inspectGltf","toJsonValue","toJSON","isArray","map","ArrayBuffer","isView","DataView","importNodeModule","specifier","Function"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gltf/core/helpers.js"],"sourcesContent":["/**\n * Internal read-pipeline glue for CjsGltfFormat.\n */\n\nimport { CLASS_KEYS as GR2_CLASS_KEYS, hydrateJson } from \"./json.js\";\nimport { buildCmfFromShared, CMF_CLASS_KEYS, hydrateCmf } from \"./targets.js\";\nimport { inspectGltf, isGlb, parseGltfToJson, parseInput, toBytes } from \"./parser.js\";\nimport {\n generateBiNormals,\n generateNormals,\n generateTangents\n} from \"@carbonenginejs/runtime-utils/mesh\";\nimport {\n packTangentFrames\n} from \"@carbonenginejs/runtime-utils/tangent\";\nimport {\n cross,\n normalize\n} from \"@carbonenginejs/runtime-utils/vec3\";\n\nexport const CLASS_KEYS = Object.freeze(Array.from(new Set([\n ...GR2_CLASS_KEYS,\n ...CMF_CLASS_KEYS\n])));\n\nexport { isGlb, toBytes };\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_GLTF_JSON = \"gltfJson\";\nexport const OUTPUT_SHARED = \"shared\";\nexport const OUTPUT_GR2 = \"gr2\";\nexport const OUTPUT_CMF = \"cmf\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_GLTF_JSON,\n source: \"memory\",\n buffers: null,\n packTangents: false,\n uvHandedness: \"right\",\n rebuildMissingNormals: false,\n rebuildMissingTangents: false,\n rebuildMissingBiNormals: false,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([\n \"emit\",\n \"source\",\n \"buffers\",\n \"packTangents\",\n \"uvHandedness\",\n \"rebuildMissingNormals\",\n \"rebuildMissingTangents\",\n \"rebuildMissingBiNormals\",\n \"classes\"\n]);\n\n/** Validates a requested runtime class key for the glTF format reader. */\nexport function validateClassKey(key, readerName = \"CjsGltfFormat\")\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(\", \")}`);\n }\n}\n\n/** Validates a resolved runtime class constructor for the glTF format reader. */\nexport function validateClass(key, Class, readerName = \"CjsGltfFormat\")\n{\n validateClassKey(key, readerName);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`${readerName}: class ${JSON.stringify(key)} must be a constructor`);\n }\n}\n\nfunction mergeClasses(base, classes, readerName)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(`${readerName}: classes option must be an object`);\n }\n\n const next = { ...base };\n for (const [ key, Class ] of Object.entries(classes))\n {\n if (Class === null || Class === undefined)\n {\n delete next[key];\n continue;\n }\n validateClass(key, Class, readerName);\n next[key] = Class;\n }\n return next;\n}\n\nfunction validateRule(name, value, readerName)\n{\n if (typeof value === \"boolean\" || typeof value === \"function\") return value;\n throw new TypeError(`${readerName}: ${name} must be true, false, or a function`);\n}\n\nfunction normalizeUvHandedness(value, readerName)\n{\n if (value === undefined || value === null) return DEFAULT_VALUES.uvHandedness;\n if (value === \"right\" || value === 1 || value === \"positive\") return \"right\";\n if (value === \"left\" || value === -1 || value === \"negative\") return \"left\";\n throw new TypeError(`${readerName}: uvHandedness must be \"right\" or \"left\"`);\n}\n\n/**\n * Normalizes reader options against their supported defaults for the glTF format\n * reader.\n */\nexport function normalizeValues(base, options = {}, readerName = \"CjsGltfFormat\")\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n }\n\n const values = { ...base, ...options };\n const emit = normalizeEmit(values.emit, readerName);\n const classes = Object.prototype.hasOwnProperty.call(options, \"classes\")\n ? mergeClasses(base.classes || {}, options.classes, readerName)\n : { ...(base.classes || {}) };\n if ((emit === OUTPUT_GR2 || emit === OUTPUT_CMF) && !hasClasses(classes))\n {\n throw new TypeError(`${readerName}: emit \"${emit}\" requires explicit classes`);\n }\n if (typeof values.source !== \"string\" || !values.source)\n {\n values.source = DEFAULT_VALUES.source;\n }\n\n return {\n emit,\n source: values.source,\n buffers: values.buffers || null,\n packTangents: validateRule(\"packTangents\", values.packTangents, readerName),\n uvHandedness: normalizeUvHandedness(values.uvHandedness, readerName),\n rebuildMissingNormals: validateRule(\"rebuildMissingNormals\", values.rebuildMissingNormals, readerName),\n rebuildMissingTangents: validateRule(\"rebuildMissingTangents\", values.rebuildMissingTangents, readerName),\n rebuildMissingBiNormals: validateRule(\"rebuildMissingBiNormals\", values.rebuildMissingBiNormals, readerName),\n classes\n };\n}\n\nfunction normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === null || emit === OUTPUT_JSON || emit === OUTPUT_GLTF_JSON || emit === OUTPUT_SHARED)\n {\n return OUTPUT_GLTF_JSON;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_CMF) return emit;\n throw new TypeError(`${readerName}: emit must be \"${OUTPUT_SHARED}\", \"${OUTPUT_GLTF_JSON}\", \"${OUTPUT_GR2}\", or \"${OUTPUT_CMF}\", got ${JSON.stringify(emit)}`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nfunction hasVertexChannel(mesh, channel)\n{\n const value = mesh && mesh.vertex && mesh.vertex[channel];\n return !!value && value.length > 0;\n}\n\nfunction requireVertexChannel(mesh, meshIndex, channel, feature)\n{\n const value = mesh && mesh.vertex && mesh.vertex[channel];\n if (!value || value.length === 0)\n {\n const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;\n throw new Error(`CjsGltfFormat: ${feature} requires mesh.vertex.${channel} for mesh ${name}`);\n }\n return value;\n}\n\nfunction triangleFaces(mesh, meshIndex, feature)\n{\n const faces = [];\n for (const group of mesh.indices || [])\n {\n if (group && group.faces) faces.push(...group.faces);\n }\n if (faces.length === 0)\n {\n const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;\n throw new Error(`CjsGltfFormat: ${feature} requires triangle indices for mesh ${name}`);\n }\n return faces;\n}\n\nfunction shouldApplyMeshRule(format, rule, context)\n{\n if (typeof rule === \"function\")\n {\n const result = rule({ format, reader: format, ...context });\n if (typeof result !== \"boolean\")\n {\n throw new TypeError(`CjsGltfFormat: ${context.feature} rule must return true or false`);\n }\n return result;\n }\n return rule;\n}\n\nfunction vertexCount(mesh)\n{\n return mesh.vertex.position.length / 3;\n}\n\nfunction tangentXyz(mesh)\n{\n const\n tangent = requireVertexChannel(mesh, 0, \"tangent\", \"tangent conversion\"),\n count = vertexCount(mesh),\n width = tangent.length / count;\n\n if (width === 3) return tangent.slice();\n if (width !== 4) throw new Error(\"CjsGltfFormat: tangent channel must have 3 or 4 components per vertex\");\n\n const out = new Array(count * 3);\n for (let i = 0, o = 0; i < tangent.length; i += 4, o += 3)\n {\n out[o] = tangent[i];\n out[o + 1] = tangent[i + 1];\n out[o + 2] = tangent[i + 2];\n }\n return out;\n}\n\nfunction generatedBiNormalsForMesh(mesh, values)\n{\n const\n normals = requireVertexChannel(mesh, 0, \"normal\", \"binormal generation\"),\n tangent = requireVertexChannel(mesh, 0, \"tangent\", \"binormal generation\"),\n count = vertexCount(mesh),\n width = tangent.length / count;\n\n if (width === 3)\n {\n return generateBiNormals(normals, tangent, { uvHandedness: values.uvHandedness });\n }\n\n if (width !== 4) throw new Error(\"CjsGltfFormat: tangent channel must have 3 or 4 components per vertex\");\n\n const out = new Array(count * 3);\n for (let i = 0, o = 0; i < tangent.length; i += 4, o += 3)\n {\n const b = normalize(\n [ 0, 0, 0 ],\n cross(\n [ 0, 0, 0 ],\n [ normals[o], normals[o + 1], normals[o + 2] ],\n [ tangent[i], tangent[i + 1], tangent[i + 2] ]\n )\n );\n const sign = tangent[i + 3] < 0 ? -1 : 1;\n out[o] = b[0] * sign;\n out[o + 1] = b[1] * sign;\n out[o + 2] = b[2] * sign;\n }\n return out;\n}\n\nfunction rebuildMissingMeshData(format, json, values)\n{\n for (let meshIndex = 0; meshIndex < json.meshes.length; meshIndex++)\n {\n const\n mesh = json.meshes[meshIndex],\n common = { options: values, raw: null, json, mesh, meshIndex },\n shouldPackTangents = shouldApplyMeshRule(\n format,\n values.packTangents,\n { ...common, feature: \"packTangents\", channel: \"tangent\" }\n );\n\n if (!hasVertexChannel(mesh, \"normal\") && (shouldApplyMeshRule(\n format,\n values.rebuildMissingNormals,\n { ...common, feature: \"rebuildMissingNormals\", channel: \"normal\" }) || shouldPackTangents))\n {\n mesh.vertex.normal = generateNormals(\n requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingNormals\"),\n triangleFaces(mesh, meshIndex, \"rebuildMissingNormals\")\n );\n }\n\n if (!hasVertexChannel(mesh, \"tangent\") && (shouldApplyMeshRule(\n format,\n values.rebuildMissingTangents,\n { ...common, feature: \"rebuildMissingTangents\", channel: \"tangent\" }) || shouldPackTangents))\n {\n mesh.vertex.tangent = generateTangents(\n requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingTangents\"),\n requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingTangents\"),\n requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"rebuildMissingTangents\"),\n triangleFaces(mesh, meshIndex, \"rebuildMissingTangents\")\n );\n }\n\n if (!hasVertexChannel(mesh, \"binormal\") && (shouldApplyMeshRule(\n format,\n values.rebuildMissingBiNormals,\n { ...common, feature: \"rebuildMissingBiNormals\", channel: \"binormal\" }) || shouldPackTangents))\n {\n mesh.vertex.binormal = generatedBiNormalsForMesh(mesh, values);\n }\n\n if (shouldPackTangents)\n {\n mesh.vertex.tangent = packTangentFrames(\n requireVertexChannel(mesh, meshIndex, \"normal\", \"packTangents\"),\n tangentXyz(mesh),\n requireVertexChannel(mesh, meshIndex, \"binormal\", \"packTangents\")\n );\n mesh.vertex.normal = [];\n mesh.vertex.binormal = [];\n }\n }\n}\n\n/** Reads input using normalized format options for the glTF format reader. */\nexport function readWithValues(format, input, values)\n{\n const parsed = parseInput(input);\n const json = parseGltfToJson(parsed.gltf, {\n binaryChunk: parsed.binaryChunk,\n source: values.source,\n buffers: values.buffers\n });\n rebuildMissingMeshData(format, json, values);\n if (values.emit === OUTPUT_CMF) return hydrateCmf(buildCmfFromShared(json), values.classes, { source: values.source });\n return hydrateJson(json, { classes: values.classes, source: values.source });\n}\n\n/** Inspects input using normalized format options for the glTF format reader. */\nexport function inspectWithValues(input, values)\n{\n const parsed = parseInput(input);\n return inspectGltf(parsed.gltf, { format: parsed.format, source: values.source });\n}\n\n/** Converts a parsed payload into a JSON-safe value for the glTF format reader. */\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined) return value;\n if (typeof value !== \"object\") return value;\n\n if (typeof value.toJSON === \"function\")\n {\n const next = value.toJSON();\n if (next !== value) return toJsonValue(next);\n }\n\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (ArrayBuffer.isView(value) && !(value instanceof DataView)) return Array.from(value);\n\n const out = {};\n for (const key of Object.keys(value))\n {\n out[key] = toJsonValue(value[key]);\n }\n return out;\n}\n\n/**\n * Imports a Node built-in module without exposing the specifier to any\n * bundler's static import graph.\n *\n * `await import(\"node:fs/promises\")` written as a literal is resolved\n * eagerly by webpack/Rollup/esbuild alike when they walk the module\n * graph, breaking browser builds even though this path only ever runs\n * under Node (readFile is a Node-only convenience). Building the\n * specifier inside a `Function` body hides it from every bundler's\n * static analysis - it only exists at runtime, in the Node process that\n * actually calls readFile.\n *\n * @param {string} specifier Node built-in module specifier, e.g. \"node:fs/promises\".\n * @returns {Promise<any>} The imported module namespace.\n */\nexport function importNodeModule(specifier)\n{\n // eslint-disable-next-line no-new-func\n return new Function(\"s\", \"return import(s)\")(specifier);\n}\n"],"names":["CLASS_KEYS","Object","freeze","Array","from","Set","GR2_CLASS_KEYS","CMF_CLASS_KEYS","OUTPUT_JSON","OUTPUT_GLTF_JSON","OUTPUT_SHARED","OUTPUT_GR2","OUTPUT_CMF","DEFAULT_VALUES","emit","source","buffers","packTangents","uvHandedness","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","OPTION_KEYS","validateClassKey","key","readerName","includes","Error","JSON","stringify","join","validateClass","Class","TypeError","mergeClasses","base","next","entries","undefined","validateRule","name","value","normalizeUvHandedness","normalizeValues","options","keys","has","values","normalizeEmit","prototype","hasOwnProperty","call","hasClasses","some","hasVertexChannel","mesh","channel","vertex","length","requireVertexChannel","meshIndex","feature","triangleFaces","faces","group","indices","push","shouldApplyMeshRule","format","rule","context","result","reader","vertexCount","position","tangentXyz","tangent","count","width","slice","out","i","o","generatedBiNormalsForMesh","normals","generateBiNormals","b","normalize","cross","sign","rebuildMissingMeshData","json","meshes","common","raw","shouldPackTangents","normal","generateNormals","generateTangents","binormal","packTangentFrames","readWithValues","input","parsed","parseInput","parseGltfToJson","gltf","binaryChunk","hydrateCmf","buildCmfFromShared","hydrateJson","inspectWithValues","inspectGltf","toJsonValue","toJSON","isArray","map","ArrayBuffer","isView","DataView","importNodeModule","specifier","Function"],"mappings":"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"}
@@ -42,6 +42,8 @@ function createVertexChannels() {
42
42
  }
43
43
  return channels;
44
44
  }
45
+
46
+ /** Returns a byte view over the supplied binary input for the glTF format reader. */
45
47
  function toBytes(input) {
46
48
  if (input instanceof Uint8Array) return input;
47
49
  if (typeof ArrayBuffer !== "undefined" && input instanceof ArrayBuffer) return new Uint8Array(input);
@@ -56,6 +58,8 @@ function toUtf8(bytes) {
56
58
  function isGlbBytes(bytes) {
57
59
  return bytes.length >= 12 && new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(0, true) === GLB_MAGIC;
58
60
  }
61
+
62
+ /** Reports whether the current glTF format reader satisfies glb. */
59
63
  function isGlb(input) {
60
64
  try {
61
65
  return isGlbBytes(toBytes(input));
@@ -70,6 +74,8 @@ function parseJsonText(text) {
70
74
  }
71
75
  return json;
72
76
  }
77
+
78
+ /** Parses input from the current glTF format reader. */
73
79
  function parseInput(input) {
74
80
  if (input && typeof input === "object" && !(input instanceof ArrayBuffer) && !ArrayBuffer.isView(input)) {
75
81
  if (!input.asset) throw new Error("CjsGltfFormat: object input is not a glTF asset");
@@ -589,6 +595,11 @@ function registerModelTargets(modelTargets, model) {
589
595
  modelTargets.set(nodeIndex, targets);
590
596
  }
591
597
  }
598
+
599
+ /**
600
+ * Parses glTF or GLB input into its normalized JSON document for the glTF format
601
+ * reader.
602
+ */
592
603
  function parseGltfToJson(gltf, {
593
604
  binaryChunk = null,
594
605
  source = "memory",
@@ -636,6 +647,8 @@ function parseGltfToJson(gltf, {
636
647
  root.animations = buildAnimations(gltf, buffers, modelTargets);
637
648
  return root;
638
649
  }
650
+
651
+ /** Inspects glTF without materializing the full glTF format reader payload. */
639
652
  function inspectGltf(gltf, {
640
653
  format = "gltf",
641
654
  source = "memory"