@carbonenginejs/runtime-resource 0.1.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 (372) hide show
  1. package/FORMAT-PROVENANCE.md +135 -0
  2. package/LICENSE +21 -0
  3. package/NOTICE +29 -0
  4. package/README.md +241 -0
  5. package/dist/CjsMotherLode.js +56 -0
  6. package/dist/CjsMotherLode.js.map +1 -0
  7. package/dist/CjsResMan.js +740 -0
  8. package/dist/CjsResMan.js.map +1 -0
  9. package/dist/CjsResManQueue.js +214 -0
  10. package/dist/CjsResManQueue.js.map +1 -0
  11. package/dist/CjsResource.js +366 -0
  12. package/dist/CjsResource.js.map +1 -0
  13. package/dist/CjsResourceSource.js +59 -0
  14. package/dist/CjsResourceSource.js.map +1 -0
  15. package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -0
  16. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  17. package/dist/format/CjsFormat.js +178 -0
  18. package/dist/format/CjsFormat.js.map +1 -0
  19. package/dist/format/CjsResourceProbe.js +269 -0
  20. package/dist/format/CjsResourceProbe.js.map +1 -0
  21. package/dist/format/payloadContract.js +173 -0
  22. package/dist/format/payloadContract.js.map +1 -0
  23. package/dist/formats/black/CjsBlackFormat.js +272 -0
  24. package/dist/formats/black/CjsBlackFormat.js.map +1 -0
  25. package/dist/formats/black/core/CjsBlackBinaryReader.js +153 -0
  26. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -0
  27. package/dist/formats/black/core/CjsBlackPropertyReaders.js +382 -0
  28. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -0
  29. package/dist/formats/black/core/CjsBlackReader.js +760 -0
  30. package/dist/formats/black/core/CjsBlackReader.js.map +1 -0
  31. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +433 -0
  32. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -0
  33. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +4 -0
  34. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js.map +1 -0
  35. package/dist/formats/black/core/blackConstants.js +7 -0
  36. package/dist/formats/black/core/blackConstants.js.map +1 -0
  37. package/dist/formats/black/core/blackDefinitions.js +10 -0
  38. package/dist/formats/black/core/blackDefinitions.js.map +1 -0
  39. package/dist/formats/black/core/blackEnums.js +6 -0
  40. package/dist/formats/black/core/blackEnums.js.map +1 -0
  41. package/dist/formats/black/core/blackSchema.js +3 -0
  42. package/dist/formats/black/core/blackSchema.js.map +1 -0
  43. package/dist/formats/black/core/blackVersion.js +22 -0
  44. package/dist/formats/black/core/blackVersion.js.map +1 -0
  45. package/dist/formats/black/core/helpers.js +182 -0
  46. package/dist/formats/black/core/helpers.js.map +1 -0
  47. package/dist/formats/black/core/schema.js +4 -0
  48. package/dist/formats/black/core/schema.js.map +1 -0
  49. package/dist/formats/black/index.js +2 -0
  50. package/dist/formats/black/index.js.map +1 -0
  51. package/dist/formats/bnk/CjsBnkFormat.js +245 -0
  52. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -0
  53. package/dist/formats/bnk/core/helpers.js +354 -0
  54. package/dist/formats/bnk/core/helpers.js.map +1 -0
  55. package/dist/formats/bnk/core/soundbanksInfo.js +246 -0
  56. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -0
  57. package/dist/formats/bnk/index.js +3 -0
  58. package/dist/formats/bnk/index.js.map +1 -0
  59. package/dist/formats/cmf/CjsCmfFormat.js +491 -0
  60. package/dist/formats/cmf/CjsCmfFormat.js.map +1 -0
  61. package/dist/formats/cmf/core/binary.js +118 -0
  62. package/dist/formats/cmf/core/binary.js.map +1 -0
  63. package/dist/formats/cmf/core/buffers.js +233 -0
  64. package/dist/formats/cmf/core/buffers.js.map +1 -0
  65. package/dist/formats/cmf/core/constants.js +47 -0
  66. package/dist/formats/cmf/core/constants.js.map +1 -0
  67. package/dist/formats/cmf/core/gr2Anim.js +453 -0
  68. package/dist/formats/cmf/core/gr2Anim.js.map +1 -0
  69. package/dist/formats/cmf/core/helpers.js +287 -0
  70. package/dist/formats/cmf/core/helpers.js.map +1 -0
  71. package/dist/formats/cmf/core/pack.js +276 -0
  72. package/dist/formats/cmf/core/pack.js.map +1 -0
  73. package/dist/formats/cmf/core/schema.js +364 -0
  74. package/dist/formats/cmf/core/schema.js.map +1 -0
  75. package/dist/formats/cmf/core/shared.js +268 -0
  76. package/dist/formats/cmf/core/shared.js.map +1 -0
  77. package/dist/formats/cmf/core/writer.js +517 -0
  78. package/dist/formats/cmf/core/writer.js.map +1 -0
  79. package/dist/formats/cmf/index.js +2 -0
  80. package/dist/formats/cmf/index.js.map +1 -0
  81. package/dist/formats/dds/CjsDdsFormat.js +187 -0
  82. package/dist/formats/dds/CjsDdsFormat.js.map +1 -0
  83. package/dist/formats/dds/core/helpers.js +812 -0
  84. package/dist/formats/dds/core/helpers.js.map +1 -0
  85. package/dist/formats/dds/index.js +2 -0
  86. package/dist/formats/dds/index.js.map +1 -0
  87. package/dist/formats/fbx/CjsFbxFormat.js +260 -0
  88. package/dist/formats/fbx/CjsFbxFormat.js.map +1 -0
  89. package/dist/formats/fbx/core/helpers.js +3901 -0
  90. package/dist/formats/fbx/core/helpers.js.map +1 -0
  91. package/dist/formats/fbx/index.js +2 -0
  92. package/dist/formats/fbx/index.js.map +1 -0
  93. package/dist/formats/flac/CjsFlacFormat.js +81 -0
  94. package/dist/formats/flac/CjsFlacFormat.js.map +1 -0
  95. package/dist/formats/flac/core/helpers.js +295 -0
  96. package/dist/formats/flac/core/helpers.js.map +1 -0
  97. package/dist/formats/flac/index.js +2 -0
  98. package/dist/formats/flac/index.js.map +1 -0
  99. package/dist/formats/gif/CjsGifFormat.js +81 -0
  100. package/dist/formats/gif/CjsGifFormat.js.map +1 -0
  101. package/dist/formats/gif/core/helpers.js +360 -0
  102. package/dist/formats/gif/core/helpers.js.map +1 -0
  103. package/dist/formats/gif/index.js +2 -0
  104. package/dist/formats/gif/index.js.map +1 -0
  105. package/dist/formats/gltf/CjsGltfFormat.js +284 -0
  106. package/dist/formats/gltf/CjsGltfFormat.js.map +1 -0
  107. package/dist/formats/gltf/core/helpers.js +292 -0
  108. package/dist/formats/gltf/core/helpers.js.map +1 -0
  109. package/dist/formats/gltf/core/json.js +79 -0
  110. package/dist/formats/gltf/core/json.js.map +1 -0
  111. package/dist/formats/gltf/core/parser.js +666 -0
  112. package/dist/formats/gltf/core/parser.js.map +1 -0
  113. package/dist/formats/gltf/core/targets.js +163 -0
  114. package/dist/formats/gltf/core/targets.js.map +1 -0
  115. package/dist/formats/gltf/index.js +2 -0
  116. package/dist/formats/gltf/index.js.map +1 -0
  117. package/dist/formats/index.js +23 -0
  118. package/dist/formats/index.js.map +1 -0
  119. package/dist/formats/jpeg/CjsJpegFormat.js +200 -0
  120. package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -0
  121. package/dist/formats/jpeg/core/helpers.js +350 -0
  122. package/dist/formats/jpeg/core/helpers.js.map +1 -0
  123. package/dist/formats/jpeg/core/jpeg.js +377 -0
  124. package/dist/formats/jpeg/core/jpeg.js.map +1 -0
  125. package/dist/formats/jpeg/index.js +2 -0
  126. package/dist/formats/jpeg/index.js.map +1 -0
  127. package/dist/formats/mp3/CjsMp3Format.js +186 -0
  128. package/dist/formats/mp3/CjsMp3Format.js.map +1 -0
  129. package/dist/formats/mp3/core/helpers.js +338 -0
  130. package/dist/formats/mp3/core/helpers.js.map +1 -0
  131. package/dist/formats/mp3/index.js +2 -0
  132. package/dist/formats/mp3/index.js.map +1 -0
  133. package/dist/formats/mp4/CjsMp4Format.js +185 -0
  134. package/dist/formats/mp4/CjsMp4Format.js.map +1 -0
  135. package/dist/formats/mp4/core/helpers.js +449 -0
  136. package/dist/formats/mp4/core/helpers.js.map +1 -0
  137. package/dist/formats/mp4/index.js +2 -0
  138. package/dist/formats/mp4/index.js.map +1 -0
  139. package/dist/formats/obj/CjsObjFormat.js +247 -0
  140. package/dist/formats/obj/CjsObjFormat.js.map +1 -0
  141. package/dist/formats/obj/core/helpers.js +573 -0
  142. package/dist/formats/obj/core/helpers.js.map +1 -0
  143. package/dist/formats/obj/core/json.js +64 -0
  144. package/dist/formats/obj/core/json.js.map +1 -0
  145. package/dist/formats/obj/core/parser.js +321 -0
  146. package/dist/formats/obj/core/parser.js.map +1 -0
  147. package/dist/formats/obj/index.js +2 -0
  148. package/dist/formats/obj/index.js.map +1 -0
  149. package/dist/formats/ogg/CjsOggFormat.js +82 -0
  150. package/dist/formats/ogg/CjsOggFormat.js.map +1 -0
  151. package/dist/formats/ogg/core/helpers.js +387 -0
  152. package/dist/formats/ogg/core/helpers.js.map +1 -0
  153. package/dist/formats/ogg/core/imdct.js +178 -0
  154. package/dist/formats/ogg/core/imdct.js.map +1 -0
  155. package/dist/formats/ogg/core/vorbis.js +999 -0
  156. package/dist/formats/ogg/core/vorbis.js.map +1 -0
  157. package/dist/formats/ogg/index.js +2 -0
  158. package/dist/formats/ogg/index.js.map +1 -0
  159. package/dist/formats/png/CjsPngFormat.js +189 -0
  160. package/dist/formats/png/CjsPngFormat.js.map +1 -0
  161. package/dist/formats/png/core/helpers.js +583 -0
  162. package/dist/formats/png/core/helpers.js.map +1 -0
  163. package/dist/formats/png/index.js +2 -0
  164. package/dist/formats/png/index.js.map +1 -0
  165. package/dist/formats/red/CjsRedFormat.js +247 -0
  166. package/dist/formats/red/CjsRedFormat.js.map +1 -0
  167. package/dist/formats/red/core/CjsRedReader.js +201 -0
  168. package/dist/formats/red/core/CjsRedReader.js.map +1 -0
  169. package/dist/formats/red/core/blackDefinitions.js +3 -0
  170. package/dist/formats/red/core/blackDefinitions.js.map +1 -0
  171. package/dist/formats/red/core/helpers.js +136 -0
  172. package/dist/formats/red/core/helpers.js.map +1 -0
  173. package/dist/formats/red/core/redGraph.js +68 -0
  174. package/dist/formats/red/core/redGraph.js.map +1 -0
  175. package/dist/formats/red/core/schema.js +4 -0
  176. package/dist/formats/red/core/schema.js.map +1 -0
  177. package/dist/formats/red/index.js +2 -0
  178. package/dist/formats/red/index.js.map +1 -0
  179. package/dist/formats/stl/CjsStlFormat.js +304 -0
  180. package/dist/formats/stl/CjsStlFormat.js.map +1 -0
  181. package/dist/formats/stl/core/helpers.js +257 -0
  182. package/dist/formats/stl/core/helpers.js.map +1 -0
  183. package/dist/formats/stl/core/json.js +51 -0
  184. package/dist/formats/stl/core/json.js.map +1 -0
  185. package/dist/formats/stl/core/stl.js +544 -0
  186. package/dist/formats/stl/core/stl.js.map +1 -0
  187. package/dist/formats/stl/core/targets.js +163 -0
  188. package/dist/formats/stl/core/targets.js.map +1 -0
  189. package/dist/formats/stl/index.js +2 -0
  190. package/dist/formats/stl/index.js.map +1 -0
  191. package/dist/formats/tga/CjsTgaFormat.js +186 -0
  192. package/dist/formats/tga/CjsTgaFormat.js.map +1 -0
  193. package/dist/formats/tga/core/helpers.js +446 -0
  194. package/dist/formats/tga/core/helpers.js.map +1 -0
  195. package/dist/formats/tga/index.js +2 -0
  196. package/dist/formats/tga/index.js.map +1 -0
  197. package/dist/formats/wav/CjsWavFormat.js +186 -0
  198. package/dist/formats/wav/CjsWavFormat.js.map +1 -0
  199. package/dist/formats/wav/core/helpers.js +328 -0
  200. package/dist/formats/wav/core/helpers.js.map +1 -0
  201. package/dist/formats/wav/index.js +2 -0
  202. package/dist/formats/wav/index.js.map +1 -0
  203. package/dist/formats/webm/CjsWebmFormat.js +185 -0
  204. package/dist/formats/webm/CjsWebmFormat.js.map +1 -0
  205. package/dist/formats/webm/core/helpers.js +537 -0
  206. package/dist/formats/webm/core/helpers.js.map +1 -0
  207. package/dist/formats/webm/index.js +2 -0
  208. package/dist/formats/webm/index.js.map +1 -0
  209. package/dist/formats/webp/CjsWebpFormat.js +80 -0
  210. package/dist/formats/webp/CjsWebpFormat.js.map +1 -0
  211. package/dist/formats/webp/core/helpers.js +214 -0
  212. package/dist/formats/webp/core/helpers.js.map +1 -0
  213. package/dist/formats/webp/index.js +2 -0
  214. package/dist/formats/webp/index.js.map +1 -0
  215. package/dist/formats/wem/CjsWemFormat.js +197 -0
  216. package/dist/formats/wem/CjsWemFormat.js.map +1 -0
  217. package/dist/formats/wem/core/bitStream.js +259 -0
  218. package/dist/formats/wem/core/bitStream.js.map +1 -0
  219. package/dist/formats/wem/core/codebookLibrary.js +164 -0
  220. package/dist/formats/wem/core/codebookLibrary.js.map +1 -0
  221. package/dist/formats/wem/core/helpers.js +336 -0
  222. package/dist/formats/wem/core/helpers.js.map +1 -0
  223. package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -0
  224. package/dist/formats/wem/core/packedCodebooksAotuv603.js.map +1 -0
  225. package/dist/formats/wem/core/wemToOgg.js +485 -0
  226. package/dist/formats/wem/core/wemToOgg.js.map +1 -0
  227. package/dist/formats/wem/index.js +2 -0
  228. package/dist/formats/wem/index.js.map +1 -0
  229. package/dist/formats/yaml/CjsYamlFormat.js +77 -0
  230. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -0
  231. package/dist/formats/yaml/core/CjsYamlReader.js +304 -0
  232. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -0
  233. package/dist/formats/yaml/core/helpers.js +160 -0
  234. package/dist/formats/yaml/core/helpers.js.map +1 -0
  235. package/dist/formats/yaml/index.js +2 -0
  236. package/dist/formats/yaml/index.js.map +1 -0
  237. package/dist/generated/resources/AudioGeometryResData.js +47 -0
  238. package/dist/generated/resources/AudioGeometryResData.js.map +1 -0
  239. package/dist/generated/resources/CmfVertexReader.js +46 -0
  240. package/dist/generated/resources/CmfVertexReader.js.map +1 -0
  241. package/dist/generated/resources/GStateBindingCallbackData.js +31 -0
  242. package/dist/generated/resources/GStateBindingCallbackData.js.map +1 -0
  243. package/dist/generated/resources/MeshDecalData.js +37 -0
  244. package/dist/generated/resources/MeshDecalData.js.map +1 -0
  245. package/dist/generated/resources/MeshDecalLodData.js +34 -0
  246. package/dist/generated/resources/MeshDecalLodData.js.map +1 -0
  247. package/dist/generated/resources/Tr2AsyncSave.js +46 -0
  248. package/dist/generated/resources/Tr2AsyncSave.js.map +1 -0
  249. package/dist/generated/resources/Tr2CmfContents.js +37 -0
  250. package/dist/generated/resources/Tr2CmfContents.js.map +1 -0
  251. package/dist/generated/resources/Tr2GrannyIntersectionResult.js +58 -0
  252. package/dist/generated/resources/Tr2GrannyIntersectionResult.js.map +1 -0
  253. package/dist/generated/resources/Tr2LoadPrepareFence.js +37 -0
  254. package/dist/generated/resources/Tr2LoadPrepareFence.js.map +1 -0
  255. package/dist/generated/resources/Tr2MaterialArea.js +34 -0
  256. package/dist/generated/resources/Tr2MaterialArea.js.map +1 -0
  257. package/dist/generated/resources/Tr2MaterialMesh.js +31 -0
  258. package/dist/generated/resources/Tr2MaterialMesh.js.map +1 -0
  259. package/dist/generated/resources/Tr2MaterialRes.js +34 -0
  260. package/dist/generated/resources/Tr2MaterialRes.js.map +1 -0
  261. package/dist/generated/resources/Tr2ShaderPermutation.js +43 -0
  262. package/dist/generated/resources/Tr2ShaderPermutation.js.map +1 -0
  263. package/dist/generated/resources/Tr2TextureLodManager.js +60 -0
  264. package/dist/generated/resources/Tr2TextureLodManager.js.map +1 -0
  265. package/dist/generated/resources/Tr2TextureLodUpdateRequest.js +37 -0
  266. package/dist/generated/resources/Tr2TextureLodUpdateRequest.js.map +1 -0
  267. package/dist/generated/resources/Tr2TexturePackChannel.js +37 -0
  268. package/dist/generated/resources/Tr2TexturePackChannel.js.map +1 -0
  269. package/dist/generated/resources/Tr2TexturePipeline.js +44 -0
  270. package/dist/generated/resources/Tr2TexturePipeline.js.map +1 -0
  271. package/dist/generated/resources/Tr2TexturePipelineParams.js +34 -0
  272. package/dist/generated/resources/Tr2TexturePipelineParams.js.map +1 -0
  273. package/dist/generated/resources/Tr2TexturePipelineStepCompress.js +40 -0
  274. package/dist/generated/resources/Tr2TexturePipelineStepCompress.js.map +1 -0
  275. package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js +34 -0
  276. package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  277. package/dist/generated/resources/Tr2TexturePipelineStepLoad.js +31 -0
  278. package/dist/generated/resources/Tr2TexturePipelineStepLoad.js.map +1 -0
  279. package/dist/generated/resources/Tr2TexturePipelineStepPack.js +43 -0
  280. package/dist/generated/resources/Tr2TexturePipelineStepPack.js.map +1 -0
  281. package/dist/generated/resources/TriGeometryResAreaData.js +59 -0
  282. package/dist/generated/resources/TriGeometryResAreaData.js.map +1 -0
  283. package/dist/generated/resources/TriGeometryResJointData.js +38 -0
  284. package/dist/generated/resources/TriGeometryResJointData.js.map +1 -0
  285. package/dist/generated/resources/TriGeometryResLodData.js +88 -0
  286. package/dist/generated/resources/TriGeometryResLodData.js.map +1 -0
  287. package/dist/generated/resources/TriGeometryResMeshData.js +63 -0
  288. package/dist/generated/resources/TriGeometryResMeshData.js.map +1 -0
  289. package/dist/generated/resources/TriGeometryResSkeletonData.js +34 -0
  290. package/dist/generated/resources/TriGeometryResSkeletonData.js.map +1 -0
  291. package/dist/generated/resources/TriJointBinding.js +38 -0
  292. package/dist/generated/resources/TriJointBinding.js.map +1 -0
  293. package/dist/generated/resources/TriMorphTargetGeometryConstants.js +46 -0
  294. package/dist/generated/resources/TriMorphTargetGeometryConstants.js.map +1 -0
  295. package/dist/generated/resources/TriRtGeometryConstants.js +88 -0
  296. package/dist/generated/resources/TriRtGeometryConstants.js.map +1 -0
  297. package/dist/generated/resources/enums.js +18 -0
  298. package/dist/generated/resources/enums.js.map +1 -0
  299. package/dist/generated/resources/index.js +32 -0
  300. package/dist/generated/resources/index.js.map +1 -0
  301. package/dist/index.js +52 -0
  302. package/dist/index.js.map +1 -0
  303. package/dist/resourcePath.js +18 -0
  304. package/dist/resourcePath.js.map +1 -0
  305. package/dist/resourceStates.js +9 -0
  306. package/dist/resourceStates.js.map +1 -0
  307. package/dist/resources/Tr2EffectRes.js +71 -0
  308. package/dist/resources/Tr2EffectRes.js.map +1 -0
  309. package/dist/resources/Tr2GrannyStateRes.js +44 -0
  310. package/dist/resources/Tr2GrannyStateRes.js.map +1 -0
  311. package/dist/resources/Tr2ImageRes.js +114 -0
  312. package/dist/resources/Tr2ImageRes.js.map +1 -0
  313. package/dist/resources/Tr2LightProfileRes.js +40 -0
  314. package/dist/resources/Tr2LightProfileRes.js.map +1 -0
  315. package/dist/resources/TriGeometryRes.js +216 -0
  316. package/dist/resources/TriGeometryRes.js.map +1 -0
  317. package/dist/resources/TriGrannyRes.js +43 -0
  318. package/dist/resources/TriGrannyRes.js.map +1 -0
  319. package/dist/resources/TriTextureRes.js +304 -0
  320. package/dist/resources/TriTextureRes.js.map +1 -0
  321. package/dist/resources/resourceBoundary.js +47 -0
  322. package/dist/resources/resourceBoundary.js.map +1 -0
  323. package/dist/texture/CjsTextureArrayRes.js +406 -0
  324. package/dist/texture/CjsTextureArrayRes.js.map +1 -0
  325. package/dist/texture/CjsTextureParameterProxy.js +133 -0
  326. package/dist/texture/CjsTextureParameterProxy.js.map +1 -0
  327. package/format-notices/black/LICENSE +21 -0
  328. package/format-notices/black/NOTICE +47 -0
  329. package/format-notices/bnk/LICENSE +21 -0
  330. package/format-notices/bnk/NOTICE +17 -0
  331. package/format-notices/cmf/LICENSE +21 -0
  332. package/format-notices/cmf/NOTICE +36 -0
  333. package/format-notices/dds/LICENSE +21 -0
  334. package/format-notices/dds/NOTICE +14 -0
  335. package/format-notices/fbx/LICENSE +21 -0
  336. package/format-notices/fbx/NOTICE +14 -0
  337. package/format-notices/flac/LICENSE +21 -0
  338. package/format-notices/flac/NOTICE +14 -0
  339. package/format-notices/gif/LICENSE +21 -0
  340. package/format-notices/gif/NOTICE +14 -0
  341. package/format-notices/gltf/LICENSE +21 -0
  342. package/format-notices/gltf/NOTICE +27 -0
  343. package/format-notices/jpeg/LICENSE +21 -0
  344. package/format-notices/jpeg/NOTICE +14 -0
  345. package/format-notices/mp3/LICENSE +21 -0
  346. package/format-notices/mp3/NOTICE +14 -0
  347. package/format-notices/mp4/LICENSE +21 -0
  348. package/format-notices/mp4/NOTICE +14 -0
  349. package/format-notices/obj/LICENSE +21 -0
  350. package/format-notices/obj/NOTICE +26 -0
  351. package/format-notices/ogg/LICENSE +21 -0
  352. package/format-notices/ogg/NOTICE +28 -0
  353. package/format-notices/png/LICENSE +21 -0
  354. package/format-notices/png/NOTICE +14 -0
  355. package/format-notices/red/LICENSE +21 -0
  356. package/format-notices/red/NOTICE +31 -0
  357. package/format-notices/stl/LICENSE +21 -0
  358. package/format-notices/stl/NOTICE +21 -0
  359. package/format-notices/tga/LICENSE +21 -0
  360. package/format-notices/tga/NOTICE +14 -0
  361. package/format-notices/wav/LICENSE +21 -0
  362. package/format-notices/wav/NOTICE +14 -0
  363. package/format-notices/webm/LICENSE +21 -0
  364. package/format-notices/webm/NOTICE +14 -0
  365. package/format-notices/webp/LICENSE +21 -0
  366. package/format-notices/webp/NOTICE +14 -0
  367. package/format-notices/wem/LICENSE +57 -0
  368. package/format-notices/wem/NOTICE +33 -0
  369. package/format-notices/yaml/LICENSE +21 -0
  370. package/format-notices/yaml/NOTICE +44 -0
  371. package/package.json +51 -0
  372. package/resource-lifecycle.md +487 -0
@@ -0,0 +1,287 @@
1
+ import { OUTPUT_NATIVE, OUTPUT_GR2, CLASS_KEYS, OUTPUT_RAW, OUTPUT_SHARED, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_JSON } from './constants.js';
2
+ import { readCmf, inspectCmf } from './schema.js';
3
+ import { buildSharedFromCmf, buildCmfFromShared } from './shared.js';
4
+
5
+ const DEFAULT_VALUES = Object.freeze({
6
+ emit: OUTPUT_NATIVE,
7
+ validateCrc: true,
8
+ decodeBuffers: true,
9
+ classes: {}
10
+ });
11
+ function normalizeValues(base = {}, options = {}) {
12
+ const values = {
13
+ ...DEFAULT_VALUES,
14
+ ...base,
15
+ ...options,
16
+ classes: {
17
+ ...(base.classes ?? {}),
18
+ ...(options.classes ?? {})
19
+ }
20
+ };
21
+ values.emit = normalizeEmit(values.emit);
22
+ if (values.emit === OUTPUT_GR2 && !hasClasses(values.classes)) {
23
+ throw new TypeError("CMF emit \"gr2\" requires explicit classes");
24
+ }
25
+ validateClasses(values.classes);
26
+ values.decodeBuffers = !!values.decodeBuffers;
27
+ return values;
28
+ }
29
+ function normalizeEmit(emit) {
30
+ if (emit === undefined || emit === OUTPUT_NATIVE || emit === OUTPUT_CMF || emit === OUTPUT_CMF_JSON || emit === OUTPUT_JSON) {
31
+ return OUTPUT_CMF;
32
+ }
33
+ if (emit === OUTPUT_GR2 || emit === OUTPUT_RAW || emit === OUTPUT_SHARED) return emit;
34
+ throw new TypeError(`CMF emit must be "${OUTPUT_CMF}", "${OUTPUT_CMF_JSON}", "${OUTPUT_GR2}", "${OUTPUT_SHARED}", or "${OUTPUT_RAW}"`);
35
+ }
36
+ function hasClasses(classes) {
37
+ return !!classes && Object.values(classes).some(Class => typeof Class === "function");
38
+ }
39
+ function readRawInput(input, options = {}) {
40
+ if (input && typeof input === "object" && Array.isArray(input.sections) && Array.isArray(input.meshes)) {
41
+ return input;
42
+ }
43
+ return readCmf(input, options);
44
+ }
45
+ async function readRawInputAsync(input, options = {}) {
46
+ if (input && typeof input === "object" && Array.isArray(input.sections) && Array.isArray(input.meshes)) {
47
+ return input;
48
+ }
49
+ const {
50
+ readCmfAsync
51
+ } = await import('./schema.js');
52
+ return readCmfAsync(input, options);
53
+ }
54
+ function readWithValues(owner, input, values) {
55
+ const raw = readRawInput(input, values);
56
+ if (values.emit === OUTPUT_RAW) {
57
+ return raw;
58
+ }
59
+ return values.emit === OUTPUT_SHARED ? buildSharedFromCmf(raw, values.classes, {
60
+ source: values.source
61
+ }) : values.emit === OUTPUT_GR2 ? buildGr2FromCmf(raw, values.classes, {
62
+ source: values.source
63
+ }) : hydrateNativeRoot(raw, values.classes, {
64
+ source: values.source
65
+ });
66
+ }
67
+ async function readWithValuesAsync(owner, input, values) {
68
+ const raw = await readRawInputAsync(input, values);
69
+ if (values.emit === OUTPUT_RAW) {
70
+ return raw;
71
+ }
72
+ return values.emit === OUTPUT_SHARED ? buildSharedFromCmf(raw, values.classes, {
73
+ source: values.source
74
+ }) : values.emit === OUTPUT_GR2 ? buildGr2FromCmf(raw, values.classes, {
75
+ source: values.source
76
+ }) : hydrateNativeRoot(raw, values.classes, {
77
+ source: values.source
78
+ });
79
+ }
80
+ function loadSharedWithValues(input, values) {
81
+ const native = buildCmfFromShared(input);
82
+ return values.emit === OUTPUT_SHARED ? buildSharedFromCmf(native, values.classes, {
83
+ source: values.source
84
+ }) : values.emit === OUTPUT_GR2 ? buildGr2FromCmf(native, values.classes, {
85
+ source: values.source
86
+ }) : hydrateNativeRoot(native, values.classes, {
87
+ source: values.source
88
+ });
89
+ }
90
+ function loadNativeWithValues(input, values) {
91
+ if (values.emit === OUTPUT_RAW) {
92
+ return input;
93
+ }
94
+ return values.emit === OUTPUT_SHARED ? buildSharedFromCmf(input, values.classes, {
95
+ source: values.source
96
+ }) : values.emit === OUTPUT_GR2 ? buildGr2FromCmf(input, values.classes, {
97
+ source: values.source
98
+ }) : hydrateNativeRoot(input, values.classes, {
99
+ source: values.source
100
+ });
101
+ }
102
+ function inspectRawCmfResult(input, options = {}) {
103
+ return inspectCmf(readRawInput(input, {
104
+ ...options,
105
+ decodeBuffers: false
106
+ }));
107
+ }
108
+ function buildGr2FromCmf(raw, classes, hydrationOptions = {}) {
109
+ const hydrationClasses = createHydrationClasses(classes, hydrationOptions);
110
+ return hydrate("Root", {
111
+ grannyFileFormatRevision: raw.version,
112
+ grannyFileSource: "cmf",
113
+ meshes: raw.meshes.map(mesh => hydrateGr2Mesh(mesh, hydrationClasses)),
114
+ models: [],
115
+ animations: raw.animations.map(animation => hydrate("Animation", {
116
+ name: animation.name ?? "",
117
+ duration: animation.duration ?? 0,
118
+ timeStep: 0,
119
+ oversampling: 0,
120
+ defaultLoopCount: 0,
121
+ flags: 0,
122
+ trackGroups: []
123
+ }, hydrationClasses))
124
+ }, hydrationClasses, hydrationOptions);
125
+ }
126
+ function hydrateGr2Mesh(mesh, classes) {
127
+ return hydrate("Mesh", {
128
+ name: mesh.name,
129
+ morphTargets: (mesh.morphTargets?.targets ?? []).map(target => hydrate("MorphTarget", {
130
+ ...target,
131
+ dataIsDeltas: true,
132
+ vertex: target.vertex ?? null
133
+ }, classes)),
134
+ minBounds: mesh.bounds?.min ?? [0, 0, 0],
135
+ maxBounds: mesh.bounds?.max ?? [0, 0, 0],
136
+ boneBindings: (mesh.boneBindings ?? []).map(binding => hydrate("BoneBinding", {
137
+ name: binding.name,
138
+ minBounds: binding.bounds?.min ?? [0, 0, 0],
139
+ maxBounds: binding.bounds?.max ?? [0, 0, 0]
140
+ }, classes)),
141
+ vertex: mesh.vertex ?? emptyGr2Vertex(),
142
+ indices: (mesh.indices ?? []).map(group => hydrate("IndexGroup", {
143
+ name: group.name ?? "",
144
+ bytesPerIndex: group.bytesPerIndex ?? 2,
145
+ faces: group.faces ?? []
146
+ }, classes))
147
+ }, classes);
148
+ }
149
+ function emptyGr2Vertex() {
150
+ return {
151
+ position: [],
152
+ normal: [],
153
+ tangent: [],
154
+ binormal: [],
155
+ texcoord0: [],
156
+ texcoord1: [],
157
+ blendIndice: [],
158
+ blendWeight: []
159
+ };
160
+ }
161
+ function toJsonValue(value) {
162
+ if (value === null || value === undefined) {
163
+ return value;
164
+ }
165
+ if (Array.isArray(value)) {
166
+ return value.map(item => toJsonValue(item));
167
+ }
168
+ if (ArrayBuffer.isView(value)) {
169
+ return Array.from(value);
170
+ }
171
+ if (typeof value.toJSON === "function") {
172
+ return toJsonValue(value.toJSON());
173
+ }
174
+ if (typeof value === "object") {
175
+ const result = {};
176
+ for (const [key, child] of Object.entries(value)) {
177
+ result[key] = toJsonValue(child);
178
+ }
179
+ return result;
180
+ }
181
+ return value;
182
+ }
183
+ function validateClassKey(type) {
184
+ if (!CLASS_KEYS.includes(type)) {
185
+ throw new TypeError(`Unknown CMF class key "${type}"`);
186
+ }
187
+ }
188
+ function validateClass(type, Class) {
189
+ validateClassKey(type);
190
+ if (typeof Class !== "function") {
191
+ throw new TypeError(`CMF class "${type}" must be a constructor`);
192
+ }
193
+ }
194
+ function validateClasses(classes) {
195
+ for (const [type, Class] of Object.entries(classes ?? {})) {
196
+ validateClass(type, Class);
197
+ }
198
+ }
199
+ function hydrateNativeRoot(raw, classes, hydrationOptions = {}) {
200
+ const hydrationClasses = createHydrationClasses(classes, hydrationOptions);
201
+ return hydrate("Root", {
202
+ signature: raw.signature,
203
+ version: raw.version,
204
+ headerSize: raw.headerSize,
205
+ crc32: raw.crc32,
206
+ sections: (raw.sections ?? []).map(section => hydrate("Section", section, hydrationClasses)),
207
+ metadata: raw.metadata ? hydrateMetadata(raw.metadata, hydrationClasses) : null,
208
+ meshes: raw.meshes.map(mesh => hydrateMesh(mesh, hydrationClasses)),
209
+ skeletons: raw.skeletons.map(skeleton => hydrateSkeleton(skeleton, hydrationClasses)),
210
+ animations: raw.animations.map(animation => hydrateAnimation(animation, hydrationClasses))
211
+ }, hydrationClasses, hydrationOptions);
212
+ }
213
+ function hydrateMetadata(metadata, classes) {
214
+ return hydrate("Metadata", {
215
+ entries: metadata.entries.map(entry => hydrate("MetadataEntry", entry, classes))
216
+ }, classes);
217
+ }
218
+ function hydrateMesh(mesh, classes) {
219
+ return hydrate("Mesh", {
220
+ ...mesh,
221
+ decl: mesh.decl.map(element => hydrate("VertexElement", element, classes)),
222
+ lods: mesh.lods.map(lod => hydrateMeshLod(lod, classes)),
223
+ areas: mesh.areas.map(area => hydrate("MeshArea", area, classes)),
224
+ boneBindings: mesh.boneBindings.map(binding => hydrate("BoneBinding", binding, classes)),
225
+ morphTargets: hydrateMorphTargets(mesh.morphTargets, classes),
226
+ audioOcclusionMesh: hydrate("AudioOcclusionMesh", mesh.audioOcclusionMesh, classes)
227
+ }, classes);
228
+ }
229
+ function hydrateMeshLod(lod, classes) {
230
+ return hydrate("MeshLod", {
231
+ ...lod,
232
+ areas: lod.areas.map(area => hydrate("LodMeshArea", area, classes)),
233
+ morphTargets: lod.morphTargets.map(target => hydrate("LodMorphTarget", target, classes))
234
+ }, classes);
235
+ }
236
+ function hydrateMorphTargets(morphTargets, classes) {
237
+ return hydrate("MorphTargets", {
238
+ decl: morphTargets.decl.map(element => hydrate("VertexElement", element, classes)),
239
+ targets: morphTargets.targets.map(target => hydrate("MorphTarget", target, classes))
240
+ }, classes);
241
+ }
242
+ function hydrateSkeleton(skeleton, classes) {
243
+ return hydrate("Skeleton", {
244
+ ...skeleton,
245
+ boneMasks: skeleton.boneMasks.map(mask => hydrate("BoneMask", {
246
+ ...mask,
247
+ weights: mask.weights.map(weight => hydrate("BoneWeight", weight, classes))
248
+ }, classes))
249
+ }, classes);
250
+ }
251
+ function hydrateAnimation(animation, classes) {
252
+ return hydrate("Animation", {
253
+ ...animation,
254
+ channels: animation.channels.map(channel => hydrate("AnimationChannel", channel, classes)),
255
+ curves: animation.curves.map(curve => hydrate("AnimationCurve", curve, classes))
256
+ }, classes);
257
+ }
258
+ function hydrate(type, fields, classes, hydrationOptions = {}) {
259
+ const Class = classes?.[type];
260
+ if (!Class) {
261
+ return fields;
262
+ }
263
+ const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};
264
+ return populate(new Class(), fields, options);
265
+ }
266
+ function populate(instance, fields, hydrationOptions = {}) {
267
+ if (!instance || typeof instance.SetValues !== "function") {
268
+ throw new TypeError("CjsCmfFormat class population requires classes to implement SetValues(values)");
269
+ }
270
+ instance.SetValues(fields, {
271
+ ...hydrationOptions,
272
+ skipUpdate: true,
273
+ skipEvents: true
274
+ });
275
+ return instance;
276
+ }
277
+ function createHydrationClasses(classes, hydrationOptions) {
278
+ const map = Object.create(classes || null);
279
+ Object.defineProperty(map, "__hydrationOptions", {
280
+ value: hydrationOptions,
281
+ enumerable: false
282
+ });
283
+ return map;
284
+ }
285
+
286
+ export { CLASS_KEYS, DEFAULT_VALUES, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED, inspectRawCmfResult, loadNativeWithValues, loadSharedWithValues, normalizeValues, readRawInput, readRawInputAsync, readWithValues, readWithValuesAsync, toJsonValue, validateClass, validateClassKey };
287
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/cmf/core/helpers.js"],"sourcesContent":["import { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED } from \"./constants.js\";\nimport { inspectCmf, readCmf } from \"./schema.js\";\nimport { buildCmfFromShared, buildSharedFromCmf } from \"./shared.js\";\n\nexport { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED };\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_NATIVE,\n validateCrc: true,\n decodeBuffers: true,\n classes: {}\n});\n\nexport function normalizeValues(base = {}, options = {})\n{\n const values = {\n ...DEFAULT_VALUES,\n ...base,\n ...options,\n classes: {\n ...(base.classes ?? {}),\n ...(options.classes ?? {})\n }\n };\n\n values.emit = normalizeEmit(values.emit);\n if (values.emit === OUTPUT_GR2 && !hasClasses(values.classes))\n {\n throw new TypeError(\"CMF emit \\\"gr2\\\" requires explicit classes\");\n }\n\n validateClasses(values.classes);\n values.decodeBuffers = !!values.decodeBuffers;\n return values;\n}\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_NATIVE || emit === OUTPUT_CMF || emit === OUTPUT_CMF_JSON || emit === OUTPUT_JSON)\n {\n return OUTPUT_CMF;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_RAW || emit === OUTPUT_SHARED) return emit;\n throw new TypeError(`CMF emit must be \"${OUTPUT_CMF}\", \"${OUTPUT_CMF_JSON}\", \"${OUTPUT_GR2}\", \"${OUTPUT_SHARED}\", or \"${OUTPUT_RAW}\"`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nexport function readRawInput(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n return readCmf(input, options);\n}\n\nexport async function readRawInputAsync(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n const { readCmfAsync } = await import(\"./schema.js\");\n return readCmfAsync(input, options);\n}\n\nexport function readWithValues(owner, input, values)\n{\n const raw = readRawInput(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\nexport async function readWithValuesAsync(owner, input, values)\n{\n const raw = await readRawInputAsync(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\nexport function loadSharedWithValues(input, values)\n{\n const native = buildCmfFromShared(input);\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(native, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(native, values.classes, { source: values.source })\n : hydrateNativeRoot(native, values.classes, { source: values.source });\n}\n\nexport function loadNativeWithValues(input, values)\n{\n if (values.emit === OUTPUT_RAW)\n {\n return input;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(input, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(input, values.classes, { source: values.source })\n : hydrateNativeRoot(input, values.classes, { source: values.source });\n}\n\nexport function inspectRawCmfResult(input, options = {})\n{\n return inspectCmf(readRawInput(input, { ...options, decodeBuffers: false }));\n}\n\nfunction buildGr2FromCmf(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n grannyFileFormatRevision: raw.version,\n grannyFileSource: \"cmf\",\n meshes: raw.meshes.map((mesh) => hydrateGr2Mesh(mesh, hydrationClasses)),\n models: [],\n animations: raw.animations.map((animation) => hydrate(\"Animation\", {\n name: animation.name ?? \"\",\n duration: animation.duration ?? 0,\n timeStep: 0,\n oversampling: 0,\n defaultLoopCount: 0,\n flags: 0,\n trackGroups: []\n }, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateGr2Mesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n name: mesh.name,\n morphTargets: (mesh.morphTargets?.targets ?? []).map((target) => hydrate(\"MorphTarget\", {\n ...target,\n dataIsDeltas: true,\n vertex: target.vertex ?? null\n }, classes)),\n minBounds: mesh.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: mesh.bounds?.max ?? [ 0, 0, 0 ],\n boneBindings: (mesh.boneBindings ?? []).map((binding) => hydrate(\"BoneBinding\", {\n name: binding.name,\n minBounds: binding.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: binding.bounds?.max ?? [ 0, 0, 0 ]\n }, classes)),\n vertex: mesh.vertex ?? emptyGr2Vertex(),\n indices: (mesh.indices ?? []).map((group) => hydrate(\"IndexGroup\", {\n name: group.name ?? \"\",\n bytesPerIndex: group.bytesPerIndex ?? 2,\n faces: group.faces ?? []\n }, classes))\n }, classes);\n}\n\nfunction emptyGr2Vertex()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n blendIndice: [],\n blendWeight: []\n };\n}\n\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined)\n {\n return value;\n }\n\n if (Array.isArray(value))\n {\n return value.map((item) => toJsonValue(item));\n }\n\n if (ArrayBuffer.isView(value))\n {\n return Array.from(value);\n }\n\n if (typeof value.toJSON === \"function\")\n {\n return toJsonValue(value.toJSON());\n }\n\n if (typeof value === \"object\")\n {\n const result = {};\n for (const [ key, child ] of Object.entries(value))\n {\n result[key] = toJsonValue(child);\n }\n return result;\n }\n\n return value;\n}\n\nexport function validateClassKey(type)\n{\n if (!CLASS_KEYS.includes(type))\n {\n throw new TypeError(`Unknown CMF class key \"${type}\"`);\n }\n}\n\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CMF class \"${type}\" must be a constructor`);\n }\n}\n\nfunction validateClasses(classes)\n{\n for (const [ type, Class ] of Object.entries(classes ?? {}))\n {\n validateClass(type, Class);\n }\n}\n\nfunction hydrateNativeRoot(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n signature: raw.signature,\n version: raw.version,\n headerSize: raw.headerSize,\n crc32: raw.crc32,\n sections: (raw.sections ?? []).map((section) => hydrate(\"Section\", section, hydrationClasses)),\n metadata: raw.metadata ? hydrateMetadata(raw.metadata, hydrationClasses) : null,\n meshes: raw.meshes.map((mesh) => hydrateMesh(mesh, hydrationClasses)),\n skeletons: raw.skeletons.map((skeleton) => hydrateSkeleton(skeleton, hydrationClasses)),\n animations: raw.animations.map((animation) => hydrateAnimation(animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateMetadata(metadata, classes)\n{\n return hydrate(\"Metadata\", {\n entries: metadata.entries.map((entry) => hydrate(\"MetadataEntry\", entry, classes))\n }, classes);\n}\n\nfunction hydrateMesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n ...mesh,\n decl: mesh.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n lods: mesh.lods.map((lod) => hydrateMeshLod(lod, classes)),\n areas: mesh.areas.map((area) => hydrate(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrate(\"BoneBinding\", binding, classes)),\n morphTargets: hydrateMorphTargets(mesh.morphTargets, classes),\n audioOcclusionMesh: hydrate(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrateMeshLod(lod, classes)\n{\n return hydrate(\"MeshLod\", {\n ...lod,\n areas: lod.areas.map((area) => hydrate(\"LodMeshArea\", area, classes)),\n morphTargets: lod.morphTargets.map((target) => hydrate(\"LodMorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateMorphTargets(morphTargets, classes)\n{\n return hydrate(\"MorphTargets\", {\n decl: morphTargets.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n targets: morphTargets.targets.map((target) => hydrate(\"MorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateSkeleton(skeleton, classes)\n{\n return hydrate(\"Skeleton\", {\n ...skeleton,\n boneMasks: skeleton.boneMasks.map((mask) => hydrate(\"BoneMask\", {\n ...mask,\n weights: mask.weights.map((weight) => hydrate(\"BoneWeight\", weight, classes))\n }, classes))\n }, classes);\n}\n\nfunction hydrateAnimation(animation, classes)\n{\n return hydrate(\"Animation\", {\n ...animation,\n channels: animation.channels.map((channel) => hydrate(\"AnimationChannel\", channel, classes)),\n curves: animation.curves.map((curve) => hydrate(\"AnimationCurve\", curve, classes))\n }, classes);\n}\n\nfunction hydrate(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n if (!Class)\n {\n return fields;\n }\n\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return populate(new Class(), fields, options);\n}\n\nfunction populate(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsCmfFormat class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(fields, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\nfunction createHydrationClasses(classes, hydrationOptions)\n{\n const map = Object.create(classes || null);\n Object.defineProperty(map, \"__hydrationOptions\", { value: hydrationOptions, enumerable: false });\n return map;\n}\n"],"names":["DEFAULT_VALUES","Object","freeze","emit","OUTPUT_NATIVE","validateCrc","decodeBuffers","classes","normalizeValues","base","options","values","normalizeEmit","OUTPUT_GR2","hasClasses","TypeError","validateClasses","undefined","OUTPUT_CMF","OUTPUT_CMF_JSON","OUTPUT_JSON","OUTPUT_RAW","OUTPUT_SHARED","some","Class","readRawInput","input","Array","isArray","sections","meshes","readCmf","readRawInputAsync","readCmfAsync","readWithValues","owner","raw","buildSharedFromCmf","source","buildGr2FromCmf","hydrateNativeRoot","readWithValuesAsync","loadSharedWithValues","native","buildCmfFromShared","loadNativeWithValues","inspectRawCmfResult","inspectCmf","hydrationOptions","hydrationClasses","createHydrationClasses","hydrate","grannyFileFormatRevision","version","grannyFileSource","map","mesh","hydrateGr2Mesh","models","animations","animation","name","duration","timeStep","oversampling","defaultLoopCount","flags","trackGroups","morphTargets","targets","target","dataIsDeltas","vertex","minBounds","bounds","min","maxBounds","max","boneBindings","binding","emptyGr2Vertex","indices","group","bytesPerIndex","faces","position","normal","tangent","binormal","texcoord0","texcoord1","blendIndice","blendWeight","toJsonValue","value","item","ArrayBuffer","isView","from","toJSON","result","key","child","entries","validateClassKey","type","CLASS_KEYS","includes","validateClass","signature","headerSize","crc32","section","metadata","hydrateMetadata","hydrateMesh","skeletons","skeleton","hydrateSkeleton","hydrateAnimation","entry","decl","element","lods","lod","hydrateMeshLod","areas","area","hydrateMorphTargets","audioOcclusionMesh","boneMasks","mask","weights","weight","channels","channel","curves","curve","fields","keys","length","__hydrationOptions","populate","instance","SetValues","skipUpdate","skipEvents","create","defineProperty","enumerable"],"mappings":";;;;MAMaA,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;AACxCC,EAAAA,IAAI,EAAEC,aAAa;AACnBC,EAAAA,WAAW,EAAE,IAAI;AACjBC,EAAAA,aAAa,EAAE,IAAI;AACnBC,EAAAA,OAAO,EAAE;AACb,CAAC;AAEM,SAASC,eAAeA,CAACC,IAAI,GAAG,EAAE,EAAEC,OAAO,GAAG,EAAE,EACvD;AACI,EAAA,MAAMC,MAAM,GAAG;AACX,IAAA,GAAGX,cAAc;AACjB,IAAA,GAAGS,IAAI;AACP,IAAA,GAAGC,OAAO;AACVH,IAAAA,OAAO,EAAE;AACL,MAAA,IAAIE,IAAI,CAACF,OAAO,IAAI,EAAE,CAAC;AACvB,MAAA,IAAIG,OAAO,CAACH,OAAO,IAAI,EAAE;AAC7B;GACH;EAEDI,MAAM,CAACR,IAAI,GAAGS,aAAa,CAACD,MAAM,CAACR,IAAI,CAAC;AACxC,EAAA,IAAIQ,MAAM,CAACR,IAAI,KAAKU,UAAU,IAAI,CAACC,UAAU,CAACH,MAAM,CAACJ,OAAO,CAAC,EAC7D;AACI,IAAA,MAAM,IAAIQ,SAAS,CAAC,4CAA4C,CAAC;AACrE,EAAA;AAEAC,EAAAA,eAAe,CAACL,MAAM,CAACJ,OAAO,CAAC;AAC/BI,EAAAA,MAAM,CAACL,aAAa,GAAG,CAAC,CAACK,MAAM,CAACL,aAAa;AAC7C,EAAA,OAAOK,MAAM;AACjB;AAEA,SAASC,aAAaA,CAACT,IAAI,EAC3B;AACI,EAAA,IAAIA,IAAI,KAAKc,SAAS,IAAId,IAAI,KAAKC,aAAa,IAAID,IAAI,KAAKe,UAAU,IAAIf,IAAI,KAAKgB,eAAe,IAAIhB,IAAI,KAAKiB,WAAW,EAC3H;AACI,IAAA,OAAOF,UAAU;AACrB,EAAA;AACA,EAAA,IAAIf,IAAI,KAAKU,UAAU,IAAIV,IAAI,KAAKkB,UAAU,IAAIlB,IAAI,KAAKmB,aAAa,EAAE,OAAOnB,IAAI;AACrF,EAAA,MAAM,IAAIY,SAAS,CAAC,CAAA,kBAAA,EAAqBG,UAAU,CAAA,IAAA,EAAOC,eAAe,CAAA,IAAA,EAAON,UAAU,CAAA,IAAA,EAAOS,aAAa,CAAA,OAAA,EAAUD,UAAU,GAAG,CAAC;AAC1I;AAEA,SAASP,UAAUA,CAACP,OAAO,EAC3B;AACI,EAAA,OAAO,CAAC,CAACA,OAAO,IAAIN,MAAM,CAACU,MAAM,CAACJ,OAAO,CAAC,CAACgB,IAAI,CAAEC,KAAK,IAAK,OAAOA,KAAK,KAAK,UAAU,CAAC;AAC3F;AAEO,SAASC,YAAYA,CAACC,KAAK,EAAEhB,OAAO,GAAG,EAAE,EAChD;EACI,IAAIgB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIC,KAAK,CAACC,OAAO,CAACF,KAAK,CAACG,QAAQ,CAAC,IAAIF,KAAK,CAACC,OAAO,CAACF,KAAK,CAACI,MAAM,CAAC,EACtG;AACI,IAAA,OAAOJ,KAAK;AAChB,EAAA;AAEA,EAAA,OAAOK,OAAO,CAACL,KAAK,EAAEhB,OAAO,CAAC;AAClC;AAEO,eAAesB,iBAAiBA,CAACN,KAAK,EAAEhB,OAAO,GAAG,EAAE,EAC3D;EACI,IAAIgB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIC,KAAK,CAACC,OAAO,CAACF,KAAK,CAACG,QAAQ,CAAC,IAAIF,KAAK,CAACC,OAAO,CAACF,KAAK,CAACI,MAAM,CAAC,EACtG;AACI,IAAA,OAAOJ,KAAK;AAChB,EAAA;EAEA,MAAM;AAAEO,IAAAA;AAAa,GAAC,GAAG,MAAM,OAAO,aAAa,CAAC;AACpD,EAAA,OAAOA,YAAY,CAACP,KAAK,EAAEhB,OAAO,CAAC;AACvC;AAEO,SAASwB,cAAcA,CAACC,KAAK,EAAET,KAAK,EAAEf,MAAM,EACnD;AACI,EAAA,MAAMyB,GAAG,GAAGX,YAAY,CAACC,KAAK,EAAEf,MAAM,CAAC;AACvC,EAAA,IAAIA,MAAM,CAACR,IAAI,KAAKkB,UAAU,EAC9B;AACI,IAAA,OAAOe,GAAG;AACd,EAAA;AAEA,EAAA,OAAOzB,MAAM,CAACR,IAAI,KAAKmB,aAAa,GAC9Be,kBAAkB,CAACD,GAAG,EAAEzB,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;AAAO,GAAC,CAAC,GAClE3B,MAAM,CAACR,IAAI,KAAKU,UAAU,GACtB0B,eAAe,CAACH,GAAG,EAAEzB,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;GAAQ,CAAC,GAC/DE,iBAAiB,CAACJ,GAAG,EAAEzB,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;AAAO,GAAC,CAAC;AAC/E;AAEO,eAAeG,mBAAmBA,CAACN,KAAK,EAAET,KAAK,EAAEf,MAAM,EAC9D;EACI,MAAMyB,GAAG,GAAG,MAAMJ,iBAAiB,CAACN,KAAK,EAAEf,MAAM,CAAC;AAClD,EAAA,IAAIA,MAAM,CAACR,IAAI,KAAKkB,UAAU,EAC9B;AACI,IAAA,OAAOe,GAAG;AACd,EAAA;AAEA,EAAA,OAAOzB,MAAM,CAACR,IAAI,KAAKmB,aAAa,GAC9Be,kBAAkB,CAACD,GAAG,EAAEzB,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;AAAO,GAAC,CAAC,GAClE3B,MAAM,CAACR,IAAI,KAAKU,UAAU,GACtB0B,eAAe,CAACH,GAAG,EAAEzB,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;GAAQ,CAAC,GAC/DE,iBAAiB,CAACJ,GAAG,EAAEzB,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;AAAO,GAAC,CAAC;AAC/E;AAEO,SAASI,oBAAoBA,CAAChB,KAAK,EAAEf,MAAM,EAClD;AACI,EAAA,MAAMgC,MAAM,GAAGC,kBAAkB,CAAClB,KAAK,CAAC;AACxC,EAAA,OAAOf,MAAM,CAACR,IAAI,KAAKmB,aAAa,GAC9Be,kBAAkB,CAACM,MAAM,EAAEhC,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;AAAO,GAAC,CAAC,GACrE3B,MAAM,CAACR,IAAI,KAAKU,UAAU,GACtB0B,eAAe,CAACI,MAAM,EAAEhC,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;GAAQ,CAAC,GAClEE,iBAAiB,CAACG,MAAM,EAAEhC,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;AAAO,GAAC,CAAC;AAClF;AAEO,SAASO,oBAAoBA,CAACnB,KAAK,EAAEf,MAAM,EAClD;AACI,EAAA,IAAIA,MAAM,CAACR,IAAI,KAAKkB,UAAU,EAC9B;AACI,IAAA,OAAOK,KAAK;AAChB,EAAA;AAEA,EAAA,OAAOf,MAAM,CAACR,IAAI,KAAKmB,aAAa,GAC9Be,kBAAkB,CAACX,KAAK,EAAEf,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;AAAO,GAAC,CAAC,GACpE3B,MAAM,CAACR,IAAI,KAAKU,UAAU,GACtB0B,eAAe,CAACb,KAAK,EAAEf,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;GAAQ,CAAC,GACjEE,iBAAiB,CAACd,KAAK,EAAEf,MAAM,CAACJ,OAAO,EAAE;IAAE+B,MAAM,EAAE3B,MAAM,CAAC2B;AAAO,GAAC,CAAC;AACjF;AAEO,SAASQ,mBAAmBA,CAACpB,KAAK,EAAEhB,OAAO,GAAG,EAAE,EACvD;AACI,EAAA,OAAOqC,UAAU,CAACtB,YAAY,CAACC,KAAK,EAAE;AAAE,IAAA,GAAGhB,OAAO;AAAEJ,IAAAA,aAAa,EAAE;AAAM,GAAC,CAAC,CAAC;AAChF;AAEA,SAASiC,eAAeA,CAACH,GAAG,EAAE7B,OAAO,EAAEyC,gBAAgB,GAAG,EAAE,EAC5D;AACI,EAAA,MAAMC,gBAAgB,GAAGC,sBAAsB,CAAC3C,OAAO,EAAEyC,gBAAgB,CAAC;EAC1E,OAAOG,OAAO,CAAC,MAAM,EAAE;IACnBC,wBAAwB,EAAEhB,GAAG,CAACiB,OAAO;AACrCC,IAAAA,gBAAgB,EAAE,KAAK;AACvBxB,IAAAA,MAAM,EAAEM,GAAG,CAACN,MAAM,CAACyB,GAAG,CAAEC,IAAI,IAAKC,cAAc,CAACD,IAAI,EAAEP,gBAAgB,CAAC,CAAC;AACxES,IAAAA,MAAM,EAAE,EAAE;AACVC,IAAAA,UAAU,EAAEvB,GAAG,CAACuB,UAAU,CAACJ,GAAG,CAAEK,SAAS,IAAKT,OAAO,CAAC,WAAW,EAAE;AAC/DU,MAAAA,IAAI,EAAED,SAAS,CAACC,IAAI,IAAI,EAAE;AAC1BC,MAAAA,QAAQ,EAAEF,SAAS,CAACE,QAAQ,IAAI,CAAC;AACjCC,MAAAA,QAAQ,EAAE,CAAC;AACXC,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,gBAAgB,EAAE,CAAC;AACnBC,MAAAA,KAAK,EAAE,CAAC;AACRC,MAAAA,WAAW,EAAE;KAChB,EAAElB,gBAAgB,CAAC;AACxB,GAAC,EAAEA,gBAAgB,EAAED,gBAAgB,CAAC;AAC1C;AAEA,SAASS,cAAcA,CAACD,IAAI,EAAEjD,OAAO,EACrC;EACI,OAAO4C,OAAO,CAAC,MAAM,EAAE;IACnBU,IAAI,EAAEL,IAAI,CAACK,IAAI;AACfO,IAAAA,YAAY,EAAE,CAACZ,IAAI,CAACY,YAAY,EAAEC,OAAO,IAAI,EAAE,EAAEd,GAAG,CAAEe,MAAM,IAAKnB,OAAO,CAAC,aAAa,EAAE;AACpF,MAAA,GAAGmB,MAAM;AACTC,MAAAA,YAAY,EAAE,IAAI;AAClBC,MAAAA,MAAM,EAAEF,MAAM,CAACE,MAAM,IAAI;KAC5B,EAAEjE,OAAO,CAAC,CAAC;AACZkE,IAAAA,SAAS,EAAEjB,IAAI,CAACkB,MAAM,EAAEC,GAAG,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;AAC1CC,IAAAA,SAAS,EAAEpB,IAAI,CAACkB,MAAM,EAAEG,GAAG,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;AAC1CC,IAAAA,YAAY,EAAE,CAACtB,IAAI,CAACsB,YAAY,IAAI,EAAE,EAAEvB,GAAG,CAAEwB,OAAO,IAAK5B,OAAO,CAAC,aAAa,EAAE;MAC5EU,IAAI,EAAEkB,OAAO,CAAClB,IAAI;AAClBY,MAAAA,SAAS,EAAEM,OAAO,CAACL,MAAM,EAAEC,GAAG,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;AAC7CC,MAAAA,SAAS,EAAEG,OAAO,CAACL,MAAM,EAAEG,GAAG,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAC9C,EAAEtE,OAAO,CAAC,CAAC;AACZiE,IAAAA,MAAM,EAAEhB,IAAI,CAACgB,MAAM,IAAIQ,cAAc,EAAE;AACvCC,IAAAA,OAAO,EAAE,CAACzB,IAAI,CAACyB,OAAO,IAAI,EAAE,EAAE1B,GAAG,CAAE2B,KAAK,IAAK/B,OAAO,CAAC,YAAY,EAAE;AAC/DU,MAAAA,IAAI,EAAEqB,KAAK,CAACrB,IAAI,IAAI,EAAE;AACtBsB,MAAAA,aAAa,EAAED,KAAK,CAACC,aAAa,IAAI,CAAC;AACvCC,MAAAA,KAAK,EAAEF,KAAK,CAACE,KAAK,IAAI;KACzB,EAAE7E,OAAO,CAAC;GACd,EAAEA,OAAO,CAAC;AACf;AAEA,SAASyE,cAAcA,GACvB;EACI,OAAO;AACHK,IAAAA,QAAQ,EAAE,EAAE;AACZC,IAAAA,MAAM,EAAE,EAAE;AACVC,IAAAA,OAAO,EAAE,EAAE;AACXC,IAAAA,QAAQ,EAAE,EAAE;AACZC,IAAAA,SAAS,EAAE,EAAE;AACbC,IAAAA,SAAS,EAAE,EAAE;AACbC,IAAAA,WAAW,EAAE,EAAE;AACfC,IAAAA,WAAW,EAAE;GAChB;AACL;AAEO,SAASC,WAAWA,CAACC,KAAK,EACjC;AACI,EAAA,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK7E,SAAS,EACzC;AACI,IAAA,OAAO6E,KAAK;AAChB,EAAA;AAEA,EAAA,IAAInE,KAAK,CAACC,OAAO,CAACkE,KAAK,CAAC,EACxB;IACI,OAAOA,KAAK,CAACvC,GAAG,CAAEwC,IAAI,IAAKF,WAAW,CAACE,IAAI,CAAC,CAAC;AACjD,EAAA;AAEA,EAAA,IAAIC,WAAW,CAACC,MAAM,CAACH,KAAK,CAAC,EAC7B;AACI,IAAA,OAAOnE,KAAK,CAACuE,IAAI,CAACJ,KAAK,CAAC;AAC5B,EAAA;AAEA,EAAA,IAAI,OAAOA,KAAK,CAACK,MAAM,KAAK,UAAU,EACtC;AACI,IAAA,OAAON,WAAW,CAACC,KAAK,CAACK,MAAM,EAAE,CAAC;AACtC,EAAA;AAEA,EAAA,IAAI,OAAOL,KAAK,KAAK,QAAQ,EAC7B;IACI,MAAMM,MAAM,GAAG,EAAE;AACjB,IAAA,KAAK,MAAM,CAAEC,GAAG,EAAEC,KAAK,CAAE,IAAIrG,MAAM,CAACsG,OAAO,CAACT,KAAK,CAAC,EAClD;AACIM,MAAAA,MAAM,CAACC,GAAG,CAAC,GAAGR,WAAW,CAACS,KAAK,CAAC;AACpC,IAAA;AACA,IAAA,OAAOF,MAAM;AACjB,EAAA;AAEA,EAAA,OAAON,KAAK;AAChB;AAEO,SAASU,gBAAgBA,CAACC,IAAI,EACrC;AACI,EAAA,IAAI,CAACC,UAAU,CAACC,QAAQ,CAACF,IAAI,CAAC,EAC9B;AACI,IAAA,MAAM,IAAI1F,SAAS,CAAC,CAAA,uBAAA,EAA0B0F,IAAI,GAAG,CAAC;AAC1D,EAAA;AACJ;AAEO,SAASG,aAAaA,CAACH,IAAI,EAAEjF,KAAK,EACzC;EACIgF,gBAAgB,CAACC,IAAI,CAAC;AACtB,EAAA,IAAI,OAAOjF,KAAK,KAAK,UAAU,EAC/B;AACI,IAAA,MAAM,IAAIT,SAAS,CAAC,CAAA,WAAA,EAAc0F,IAAI,yBAAyB,CAAC;AACpE,EAAA;AACJ;AAEA,SAASzF,eAAeA,CAACT,OAAO,EAChC;AACI,EAAA,KAAK,MAAM,CAAEkG,IAAI,EAAEjF,KAAK,CAAE,IAAIvB,MAAM,CAACsG,OAAO,CAAChG,OAAO,IAAI,EAAE,CAAC,EAC3D;AACIqG,IAAAA,aAAa,CAACH,IAAI,EAAEjF,KAAK,CAAC;AAC9B,EAAA;AACJ;AAEA,SAASgB,iBAAiBA,CAACJ,GAAG,EAAE7B,OAAO,EAAEyC,gBAAgB,GAAG,EAAE,EAC9D;AACI,EAAA,MAAMC,gBAAgB,GAAGC,sBAAsB,CAAC3C,OAAO,EAAEyC,gBAAgB,CAAC;EAC1E,OAAOG,OAAO,CAAC,MAAM,EAAE;IACnB0D,SAAS,EAAEzE,GAAG,CAACyE,SAAS;IACxBxD,OAAO,EAAEjB,GAAG,CAACiB,OAAO;IACpByD,UAAU,EAAE1E,GAAG,CAAC0E,UAAU;IAC1BC,KAAK,EAAE3E,GAAG,CAAC2E,KAAK;IAChBlF,QAAQ,EAAE,CAACO,GAAG,CAACP,QAAQ,IAAI,EAAE,EAAE0B,GAAG,CAAEyD,OAAO,IAAK7D,OAAO,CAAC,SAAS,EAAE6D,OAAO,EAAE/D,gBAAgB,CAAC,CAAC;AAC9FgE,IAAAA,QAAQ,EAAE7E,GAAG,CAAC6E,QAAQ,GAAGC,eAAe,CAAC9E,GAAG,CAAC6E,QAAQ,EAAEhE,gBAAgB,CAAC,GAAG,IAAI;AAC/EnB,IAAAA,MAAM,EAAEM,GAAG,CAACN,MAAM,CAACyB,GAAG,CAAEC,IAAI,IAAK2D,WAAW,CAAC3D,IAAI,EAAEP,gBAAgB,CAAC,CAAC;AACrEmE,IAAAA,SAAS,EAAEhF,GAAG,CAACgF,SAAS,CAAC7D,GAAG,CAAE8D,QAAQ,IAAKC,eAAe,CAACD,QAAQ,EAAEpE,gBAAgB,CAAC,CAAC;AACvFU,IAAAA,UAAU,EAAEvB,GAAG,CAACuB,UAAU,CAACJ,GAAG,CAAEK,SAAS,IAAK2D,gBAAgB,CAAC3D,SAAS,EAAEX,gBAAgB,CAAC;AAC/F,GAAC,EAAEA,gBAAgB,EAAED,gBAAgB,CAAC;AAC1C;AAEA,SAASkE,eAAeA,CAACD,QAAQ,EAAE1G,OAAO,EAC1C;EACI,OAAO4C,OAAO,CAAC,UAAU,EAAE;AACvBoD,IAAAA,OAAO,EAAEU,QAAQ,CAACV,OAAO,CAAChD,GAAG,CAAEiE,KAAK,IAAKrE,OAAO,CAAC,eAAe,EAAEqE,KAAK,EAAEjH,OAAO,CAAC;GACpF,EAAEA,OAAO,CAAC;AACf;AAEA,SAAS4G,WAAWA,CAAC3D,IAAI,EAAEjD,OAAO,EAClC;EACI,OAAO4C,OAAO,CAAC,MAAM,EAAE;AACnB,IAAA,GAAGK,IAAI;AACPiE,IAAAA,IAAI,EAAEjE,IAAI,CAACiE,IAAI,CAAClE,GAAG,CAAEmE,OAAO,IAAKvE,OAAO,CAAC,eAAe,EAAEuE,OAAO,EAAEnH,OAAO,CAAC,CAAC;AAC5EoH,IAAAA,IAAI,EAAEnE,IAAI,CAACmE,IAAI,CAACpE,GAAG,CAAEqE,GAAG,IAAKC,cAAc,CAACD,GAAG,EAAErH,OAAO,CAAC,CAAC;AAC1DuH,IAAAA,KAAK,EAAEtE,IAAI,CAACsE,KAAK,CAACvE,GAAG,CAAEwE,IAAI,IAAK5E,OAAO,CAAC,UAAU,EAAE4E,IAAI,EAAExH,OAAO,CAAC,CAAC;AACnEuE,IAAAA,YAAY,EAAEtB,IAAI,CAACsB,YAAY,CAACvB,GAAG,CAAEwB,OAAO,IAAK5B,OAAO,CAAC,aAAa,EAAE4B,OAAO,EAAExE,OAAO,CAAC,CAAC;IAC1F6D,YAAY,EAAE4D,mBAAmB,CAACxE,IAAI,CAACY,YAAY,EAAE7D,OAAO,CAAC;IAC7D0H,kBAAkB,EAAE9E,OAAO,CAAC,oBAAoB,EAAEK,IAAI,CAACyE,kBAAkB,EAAE1H,OAAO;GACrF,EAAEA,OAAO,CAAC;AACf;AAEA,SAASsH,cAAcA,CAACD,GAAG,EAAErH,OAAO,EACpC;EACI,OAAO4C,OAAO,CAAC,SAAS,EAAE;AACtB,IAAA,GAAGyE,GAAG;AACNE,IAAAA,KAAK,EAAEF,GAAG,CAACE,KAAK,CAACvE,GAAG,CAAEwE,IAAI,IAAK5E,OAAO,CAAC,aAAa,EAAE4E,IAAI,EAAExH,OAAO,CAAC,CAAC;AACrE6D,IAAAA,YAAY,EAAEwD,GAAG,CAACxD,YAAY,CAACb,GAAG,CAAEe,MAAM,IAAKnB,OAAO,CAAC,gBAAgB,EAAEmB,MAAM,EAAE/D,OAAO,CAAC;GAC5F,EAAEA,OAAO,CAAC;AACf;AAEA,SAASyH,mBAAmBA,CAAC5D,YAAY,EAAE7D,OAAO,EAClD;EACI,OAAO4C,OAAO,CAAC,cAAc,EAAE;AAC3BsE,IAAAA,IAAI,EAAErD,YAAY,CAACqD,IAAI,CAAClE,GAAG,CAAEmE,OAAO,IAAKvE,OAAO,CAAC,eAAe,EAAEuE,OAAO,EAAEnH,OAAO,CAAC,CAAC;AACpF8D,IAAAA,OAAO,EAAED,YAAY,CAACC,OAAO,CAACd,GAAG,CAAEe,MAAM,IAAKnB,OAAO,CAAC,aAAa,EAAEmB,MAAM,EAAE/D,OAAO,CAAC;GACxF,EAAEA,OAAO,CAAC;AACf;AAEA,SAAS+G,eAAeA,CAACD,QAAQ,EAAE9G,OAAO,EAC1C;EACI,OAAO4C,OAAO,CAAC,UAAU,EAAE;AACvB,IAAA,GAAGkE,QAAQ;AACXa,IAAAA,SAAS,EAAEb,QAAQ,CAACa,SAAS,CAAC3E,GAAG,CAAE4E,IAAI,IAAKhF,OAAO,CAAC,UAAU,EAAE;AAC5D,MAAA,GAAGgF,IAAI;AACPC,MAAAA,OAAO,EAAED,IAAI,CAACC,OAAO,CAAC7E,GAAG,CAAE8E,MAAM,IAAKlF,OAAO,CAAC,YAAY,EAAEkF,MAAM,EAAE9H,OAAO,CAAC;KAC/E,EAAEA,OAAO,CAAC;GACd,EAAEA,OAAO,CAAC;AACf;AAEA,SAASgH,gBAAgBA,CAAC3D,SAAS,EAAErD,OAAO,EAC5C;EACI,OAAO4C,OAAO,CAAC,WAAW,EAAE;AACxB,IAAA,GAAGS,SAAS;AACZ0E,IAAAA,QAAQ,EAAE1E,SAAS,CAAC0E,QAAQ,CAAC/E,GAAG,CAAEgF,OAAO,IAAKpF,OAAO,CAAC,kBAAkB,EAAEoF,OAAO,EAAEhI,OAAO,CAAC,CAAC;AAC5FiI,IAAAA,MAAM,EAAE5E,SAAS,CAAC4E,MAAM,CAACjF,GAAG,CAAEkF,KAAK,IAAKtF,OAAO,CAAC,gBAAgB,EAAEsF,KAAK,EAAElI,OAAO,CAAC;GACpF,EAAEA,OAAO,CAAC;AACf;AAEA,SAAS4C,OAAOA,CAACsD,IAAI,EAAEiC,MAAM,EAAEnI,OAAO,EAAEyC,gBAAgB,GAAG,EAAE,EAC7D;AACI,EAAA,MAAMxB,KAAK,GAAGjB,OAAO,GAAGkG,IAAI,CAAC;EAC7B,IAAI,CAACjF,KAAK,EACV;AACI,IAAA,OAAOkH,MAAM;AACjB,EAAA;EAEA,MAAMhI,OAAO,GAAGT,MAAM,CAAC0I,IAAI,CAAC3F,gBAAgB,CAAC,CAAC4F,MAAM,GAAG,CAAC,GAAG5F,gBAAgB,GAAGzC,OAAO,EAAEsI,kBAAkB,IAAI,EAAE;EAC/G,OAAOC,QAAQ,CAAC,IAAItH,KAAK,EAAE,EAAEkH,MAAM,EAAEhI,OAAO,CAAC;AACjD;AAEA,SAASoI,QAAQA,CAACC,QAAQ,EAAEL,MAAM,EAAE1F,gBAAgB,GAAG,EAAE,EACzD;EACI,IAAI,CAAC+F,QAAQ,IAAI,OAAOA,QAAQ,CAACC,SAAS,KAAK,UAAU,EACzD;AACI,IAAA,MAAM,IAAIjI,SAAS,CAAC,+EAA+E,CAAC;AACxG,EAAA;AACAgI,EAAAA,QAAQ,CAACC,SAAS,CAACN,MAAM,EAAE;AAAE,IAAA,GAAG1F,gBAAgB;AAAEiG,IAAAA,UAAU,EAAE,IAAI;AAAEC,IAAAA,UAAU,EAAE;AAAK,GAAC,CAAC;AACvF,EAAA,OAAOH,QAAQ;AACnB;AAEA,SAAS7F,sBAAsBA,CAAC3C,OAAO,EAAEyC,gBAAgB,EACzD;EACI,MAAMO,GAAG,GAAGtD,MAAM,CAACkJ,MAAM,CAAC5I,OAAO,IAAI,IAAI,CAAC;AAC1CN,EAAAA,MAAM,CAACmJ,cAAc,CAAC7F,GAAG,EAAE,oBAAoB,EAAE;AAAEuC,IAAAA,KAAK,EAAE9C,gBAAgB;AAAEqG,IAAAA,UAAU,EAAE;AAAM,GAAC,CAAC;AAChG,EAAA,OAAO9F,GAAG;AACd;;;;"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * GPU-buffer packing for CMF writing.
3
+ *
4
+ * `buildCmfFromShared` (and hand-built graphs) carry deinterleaved vertex
5
+ * channels and index groups but no GPU bytes. This packer interleaves each
6
+ * LOD's channels per the mesh declaration, packs index groups, assigns
7
+ * unique buffer indices across the whole graph, and returns a graph + buffer
8
+ * list ready for `writeCmf`. Skeletons and animations must already be
9
+ * CMF-native shaped; GR2-shaped skeletons are rejected with a clear error
10
+ * (GR2 bone/track conversion is a separate adapter).
11
+ */
12
+
13
+ const CHANNEL_NAMES = Object.freeze({
14
+ Position: "position",
15
+ Normal: "normal",
16
+ Tangent: "tangent",
17
+ Binormal: "binormal",
18
+ TexCoord: "texcoord",
19
+ Color: "color",
20
+ BoneIndices: "blendIndice",
21
+ BoneWeights: "blendWeight",
22
+ PackedTangent: "packedTangent",
23
+ PackedTangentLegacy: "packedTangentLegacy"
24
+ });
25
+ function packError(message) {
26
+ const error = new Error(`CMF pack: ${message}`);
27
+ error.code = "CJS_FORMAT_WRITE_ERROR";
28
+ return error;
29
+ }
30
+ function channelName(element) {
31
+ const base = CHANNEL_NAMES[element.usage];
32
+ if (!base) throw packError(`unknown vertex usage ${JSON.stringify(element.usage)}`);
33
+ if (element.usage === "TexCoord" || element.usage === "Color") return `${base}${element.usageIndex}`;
34
+ if (element.usageIndex > 0) return `${base}${element.usageIndex}`;
35
+ return base;
36
+ }
37
+ function elementTypeSize(type) {
38
+ switch (type) {
39
+ case "Float32":
40
+ return 4;
41
+ case "Float16":
42
+ case "UInt16Norm":
43
+ case "UInt16":
44
+ case "Int16Norm":
45
+ case "Int16":
46
+ return 2;
47
+ case "UInt8Norm":
48
+ case "UInt8":
49
+ case "Int8Norm":
50
+ case "Int8":
51
+ return 1;
52
+ default:
53
+ throw packError(`unsupported vertex element type ${JSON.stringify(type)}`);
54
+ }
55
+ }
56
+ function floatToHalf(value) {
57
+ if (Number.isNaN(value)) return 0x7e00;
58
+ if (value === Infinity) return 0x7c00;
59
+ if (value === -Infinity) return 0xfc00;
60
+ const sign = value < 0 || Object.is(value, -0) ? 0x8000 : 0;
61
+ let v = Math.abs(value);
62
+ if (v >= 65520) return sign | 0x7c00;
63
+ if (v < Math.pow(2, -24)) return sign;
64
+ if (v < Math.pow(2, -14)) {
65
+ return sign | Math.round(v / Math.pow(2, -24));
66
+ }
67
+ const exponent = Math.floor(Math.log2(v));
68
+ const mantissa = Math.round((v / Math.pow(2, exponent) - 1) * 1024);
69
+ if (mantissa === 1024) return sign | exponent + 16 << 10;
70
+ return sign | exponent + 15 << 10 | mantissa;
71
+ }
72
+ function writeComponent(view, offset, type, value) {
73
+ switch (type) {
74
+ case "Float32":
75
+ view.setFloat32(offset, value || 0, true);
76
+ break;
77
+ case "Float16":
78
+ view.setUint16(offset, floatToHalf(value || 0), true);
79
+ break;
80
+ case "UInt16Norm":
81
+ view.setUint16(offset, clampRound(value * 65535, 0, 65535), true);
82
+ break;
83
+ case "UInt16":
84
+ view.setUint16(offset, clampRound(value, 0, 65535), true);
85
+ break;
86
+ case "Int16Norm":
87
+ view.setInt16(offset, clampRound(value * 32767, -32767, 32767), true);
88
+ break;
89
+ case "Int16":
90
+ view.setInt16(offset, clampRound(value, -32768, 32767), true);
91
+ break;
92
+ case "UInt8Norm":
93
+ view.setUint8(offset, clampRound(value * 255, 0, 255));
94
+ break;
95
+ case "UInt8":
96
+ view.setUint8(offset, clampRound(value, 0, 255));
97
+ break;
98
+ case "Int8Norm":
99
+ view.setInt8(offset, clampRound(value * 127, -127, 127));
100
+ break;
101
+ case "Int8":
102
+ view.setInt8(offset, clampRound(value, -128, 127));
103
+ break;
104
+ default:
105
+ throw packError(`unsupported vertex element type ${JSON.stringify(type)}`);
106
+ }
107
+ }
108
+ function clampRound(value, min, max) {
109
+ const rounded = Math.round(value || 0);
110
+ return rounded < min ? min : rounded > max ? max : rounded;
111
+ }
112
+ function vertexCountFor(decl, vertex) {
113
+ let count = 0;
114
+ for (const element of decl) {
115
+ const channel = vertex[channelName(element)];
116
+ if (!Array.isArray(channel) || channel.length === 0) continue;
117
+ const channelCount = Math.floor(channel.length / element.elementCount);
118
+ count = count === 0 ? channelCount : Math.min(count, channelCount);
119
+ }
120
+ return count;
121
+ }
122
+ function strideFor(decl) {
123
+ return decl.reduce((stride, element) => Math.max(stride, (element.offset || 0) + element.elementCount * elementTypeSize(element.type)), 0);
124
+ }
125
+
126
+ /**
127
+ * Interleave deinterleaved channels into vertex-buffer bytes per `decl`.
128
+ *
129
+ * @param {Array<object>} decl Vertex declaration.
130
+ * @param {object} vertex Channel-name-keyed flat arrays.
131
+ * @returns {object} `{ bytes, stride, count }`.
132
+ */
133
+ function packVertexBuffer(decl, vertex) {
134
+ const stride = strideFor(decl);
135
+ const count = vertexCountFor(decl, vertex || {});
136
+ const bytes = new Uint8Array(count * stride);
137
+ const view = new DataView(bytes.buffer);
138
+ for (const element of decl) {
139
+ const channel = (vertex || {})[channelName(element)];
140
+ if (!Array.isArray(channel) || channel.length === 0) continue;
141
+ const size = elementTypeSize(element.type);
142
+ for (let i = 0; i < count; i++) {
143
+ const base = i * stride + (element.offset || 0);
144
+ for (let component = 0; component < element.elementCount; component++) {
145
+ writeComponent(view, base + component * size, element.type, channel[i * element.elementCount + component]);
146
+ }
147
+ }
148
+ }
149
+ return {
150
+ bytes,
151
+ stride,
152
+ count
153
+ };
154
+ }
155
+
156
+ /**
157
+ * Concatenate index groups into index-buffer bytes.
158
+ *
159
+ * @param {Array<object>} groups Index groups with `faces` arrays.
160
+ * @returns {object} `{ bytes, stride, count }` (u16 unless any index needs u32).
161
+ */
162
+ function packIndexBuffer(groups) {
163
+ const faces = [];
164
+ for (const group of groups || []) {
165
+ for (const index of group.faces || []) faces.push(index);
166
+ }
167
+ const wide = groups?.some(group => group.bytesPerIndex === 4) || faces.some(index => index > 0xffff);
168
+ const stride = wide ? 4 : 2;
169
+ const bytes = new Uint8Array(faces.length * stride);
170
+ const view = new DataView(bytes.buffer);
171
+ for (let i = 0; i < faces.length; i++) {
172
+ if (wide) view.setUint32(i * stride, faces[i], true);else view.setUint16(i * stride, faces[i], true);
173
+ }
174
+ return {
175
+ bytes,
176
+ stride,
177
+ count: faces.length
178
+ };
179
+ }
180
+ function assertCmfNativeSkeleton(skeleton) {
181
+ const bonesAreNames = Array.isArray(skeleton?.bones) && skeleton.bones.every(bone => typeof bone === "string");
182
+ if (!bonesAreNames) {
183
+ throw packError("skeletons must be CMF-native shaped (bones as name strings with parents/restTransforms); " + "GR2-shaped skeletons need conversion before writing");
184
+ }
185
+ }
186
+
187
+ /**
188
+ * Pack a channel-carrying CMF-native graph into a writable graph + buffers.
189
+ *
190
+ * Buffer indices are reassigned uniquely across all meshes/LODs/morph
191
+ * targets; BufferViews are rebuilt from the packed bytes.
192
+ *
193
+ * @param {object} graph CMF-native graph carrying `vertex`/`indices` channel data.
194
+ * @returns {object} `{ graph, buffers }` ready for `writeCmf`.
195
+ */
196
+ function packGraphBuffers(graph) {
197
+ const buffers = [null];
198
+ const allocate = bytes => {
199
+ const index = buffers.length;
200
+ buffers.push({
201
+ index,
202
+ data: bytes
203
+ });
204
+ return index;
205
+ };
206
+ for (const skeleton of graph.skeletons || []) assertCmfNativeSkeleton(skeleton);
207
+ const meshes = (graph.meshes || []).map(mesh => {
208
+ const decl = mesh.decl || [];
209
+ const morphDecl = mesh.morphTargets?.decl || [];
210
+ const lods = (mesh.lods || []).map(lod => {
211
+ const vertexSource = lod.vertex ?? mesh.vertex ?? {};
212
+ const indexSource = lod.indices ?? mesh.indices ?? [];
213
+ const packedVb = packVertexBuffer(decl, vertexSource);
214
+ const packedIb = packIndexBuffer(indexSource);
215
+ const vb = packedVb.count ? {
216
+ index: allocate(packedVb.bytes),
217
+ offset: 0,
218
+ size: packedVb.bytes.byteLength,
219
+ stride: packedVb.stride
220
+ } : {
221
+ index: 0,
222
+ offset: 0,
223
+ size: 0,
224
+ stride: 0
225
+ };
226
+ const ib = packedIb.count ? {
227
+ index: allocate(packedIb.bytes),
228
+ offset: 0,
229
+ size: packedIb.bytes.byteLength,
230
+ stride: packedIb.stride
231
+ } : {
232
+ index: 0,
233
+ offset: 0,
234
+ size: 0,
235
+ stride: 0
236
+ };
237
+ const morphTargets = (lod.morphTargets || []).map(target => {
238
+ const packed = packVertexBuffer(morphDecl, target.vertex || {});
239
+ return {
240
+ vb: packed.count ? {
241
+ index: allocate(packed.bytes),
242
+ offset: 0,
243
+ size: packed.bytes.byteLength,
244
+ stride: packed.stride
245
+ } : {
246
+ index: 0,
247
+ offset: 0,
248
+ size: 0,
249
+ stride: 0
250
+ }
251
+ };
252
+ });
253
+ return {
254
+ vb,
255
+ ib,
256
+ areas: lod.areas || [],
257
+ morphTargets,
258
+ threshold: lod.threshold ?? 0xffffffff
259
+ };
260
+ });
261
+ return {
262
+ ...mesh,
263
+ lods
264
+ };
265
+ });
266
+ return {
267
+ graph: {
268
+ ...graph,
269
+ meshes
270
+ },
271
+ buffers
272
+ };
273
+ }
274
+
275
+ export { packGraphBuffers, packIndexBuffer, packVertexBuffer };
276
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sources":["../../../../../src/formats/cmf/core/pack.js"],"sourcesContent":["/**\n * GPU-buffer packing for CMF writing.\n *\n * `buildCmfFromShared` (and hand-built graphs) carry deinterleaved vertex\n * channels and index groups but no GPU bytes. This packer interleaves each\n * LOD's channels per the mesh declaration, packs index groups, assigns\n * unique buffer indices across the whole graph, and returns a graph + buffer\n * list ready for `writeCmf`. Skeletons and animations must already be\n * CMF-native shaped; GR2-shaped skeletons are rejected with a clear error\n * (GR2 bone/track conversion is a separate adapter).\n */\n\nconst CHANNEL_NAMES = Object.freeze({\n Position: \"position\",\n Normal: \"normal\",\n Tangent: \"tangent\",\n Binormal: \"binormal\",\n TexCoord: \"texcoord\",\n Color: \"color\",\n BoneIndices: \"blendIndice\",\n BoneWeights: \"blendWeight\",\n PackedTangent: \"packedTangent\",\n PackedTangentLegacy: \"packedTangentLegacy\"\n});\n\nfunction packError(message)\n{\n const error = new Error(`CMF pack: ${message}`);\n error.code = \"CJS_FORMAT_WRITE_ERROR\";\n return error;\n}\n\nfunction channelName(element)\n{\n const base = CHANNEL_NAMES[element.usage];\n if (!base) throw packError(`unknown vertex usage ${JSON.stringify(element.usage)}`);\n if (element.usage === \"TexCoord\" || element.usage === \"Color\") return `${base}${element.usageIndex}`;\n if (element.usageIndex > 0) return `${base}${element.usageIndex}`;\n return base;\n}\n\nfunction elementTypeSize(type)\n{\n switch (type)\n {\n case \"Float32\": return 4;\n case \"Float16\":\n case \"UInt16Norm\":\n case \"UInt16\":\n case \"Int16Norm\":\n case \"Int16\": return 2;\n case \"UInt8Norm\":\n case \"UInt8\":\n case \"Int8Norm\":\n case \"Int8\": return 1;\n default: throw packError(`unsupported vertex element type ${JSON.stringify(type)}`);\n }\n}\n\nfunction floatToHalf(value)\n{\n if (Number.isNaN(value)) return 0x7e00;\n if (value === Infinity) return 0x7c00;\n if (value === -Infinity) return 0xfc00;\n const sign = value < 0 || Object.is(value, -0) ? 0x8000 : 0;\n let v = Math.abs(value);\n if (v >= 65520) return sign | 0x7c00;\n if (v < Math.pow(2, -24)) return sign;\n if (v < Math.pow(2, -14))\n {\n return sign | Math.round(v / Math.pow(2, -24));\n }\n const exponent = Math.floor(Math.log2(v));\n const mantissa = Math.round((v / Math.pow(2, exponent) - 1) * 1024);\n if (mantissa === 1024) return sign | ((exponent + 16) << 10);\n return sign | ((exponent + 15) << 10) | mantissa;\n}\n\nfunction writeComponent(view, offset, type, value)\n{\n switch (type)\n {\n case \"Float32\": view.setFloat32(offset, value || 0, true); break;\n case \"Float16\": view.setUint16(offset, floatToHalf(value || 0), true); break;\n case \"UInt16Norm\": view.setUint16(offset, clampRound(value * 65535, 0, 65535), true); break;\n case \"UInt16\": view.setUint16(offset, clampRound(value, 0, 65535), true); break;\n case \"Int16Norm\": view.setInt16(offset, clampRound(value * 32767, -32767, 32767), true); break;\n case \"Int16\": view.setInt16(offset, clampRound(value, -32768, 32767), true); break;\n case \"UInt8Norm\": view.setUint8(offset, clampRound(value * 255, 0, 255)); break;\n case \"UInt8\": view.setUint8(offset, clampRound(value, 0, 255)); break;\n case \"Int8Norm\": view.setInt8(offset, clampRound(value * 127, -127, 127)); break;\n case \"Int8\": view.setInt8(offset, clampRound(value, -128, 127)); break;\n default: throw packError(`unsupported vertex element type ${JSON.stringify(type)}`);\n }\n}\n\nfunction clampRound(value, min, max)\n{\n const rounded = Math.round(value || 0);\n return rounded < min ? min : rounded > max ? max : rounded;\n}\n\nfunction vertexCountFor(decl, vertex)\n{\n let count = 0;\n for (const element of decl)\n {\n const channel = vertex[channelName(element)];\n if (!Array.isArray(channel) || channel.length === 0) continue;\n const channelCount = Math.floor(channel.length / element.elementCount);\n count = count === 0 ? channelCount : Math.min(count, channelCount);\n }\n return count;\n}\n\nfunction strideFor(decl)\n{\n return decl.reduce((stride, element) => Math.max(stride, (element.offset || 0) + element.elementCount * elementTypeSize(element.type)), 0);\n}\n\n/**\n * Interleave deinterleaved channels into vertex-buffer bytes per `decl`.\n *\n * @param {Array<object>} decl Vertex declaration.\n * @param {object} vertex Channel-name-keyed flat arrays.\n * @returns {object} `{ bytes, stride, count }`.\n */\nexport function packVertexBuffer(decl, vertex)\n{\n const stride = strideFor(decl);\n const count = vertexCountFor(decl, vertex || {});\n const bytes = new Uint8Array(count * stride);\n const view = new DataView(bytes.buffer);\n\n for (const element of decl)\n {\n const channel = (vertex || {})[channelName(element)];\n if (!Array.isArray(channel) || channel.length === 0) continue;\n const size = elementTypeSize(element.type);\n for (let i = 0; i < count; i++)\n {\n const base = i * stride + (element.offset || 0);\n for (let component = 0; component < element.elementCount; component++)\n {\n writeComponent(view, base + component * size, element.type, channel[i * element.elementCount + component]);\n }\n }\n }\n return { bytes, stride, count };\n}\n\n/**\n * Concatenate index groups into index-buffer bytes.\n *\n * @param {Array<object>} groups Index groups with `faces` arrays.\n * @returns {object} `{ bytes, stride, count }` (u16 unless any index needs u32).\n */\nexport function packIndexBuffer(groups)\n{\n const faces = [];\n for (const group of groups || [])\n {\n for (const index of group.faces || []) faces.push(index);\n }\n const wide = groups?.some((group) => group.bytesPerIndex === 4) || faces.some((index) => index > 0xffff);\n const stride = wide ? 4 : 2;\n const bytes = new Uint8Array(faces.length * stride);\n const view = new DataView(bytes.buffer);\n for (let i = 0; i < faces.length; i++)\n {\n if (wide) view.setUint32(i * stride, faces[i], true);\n else view.setUint16(i * stride, faces[i], true);\n }\n return { bytes, stride, count: faces.length };\n}\n\nfunction assertCmfNativeSkeleton(skeleton)\n{\n const bonesAreNames = Array.isArray(skeleton?.bones) &&\n skeleton.bones.every((bone) => typeof bone === \"string\");\n if (!bonesAreNames)\n {\n throw packError(\n \"skeletons must be CMF-native shaped (bones as name strings with parents/restTransforms); \" +\n \"GR2-shaped skeletons need conversion before writing\"\n );\n }\n}\n\n/**\n * Pack a channel-carrying CMF-native graph into a writable graph + buffers.\n *\n * Buffer indices are reassigned uniquely across all meshes/LODs/morph\n * targets; BufferViews are rebuilt from the packed bytes.\n *\n * @param {object} graph CMF-native graph carrying `vertex`/`indices` channel data.\n * @returns {object} `{ graph, buffers }` ready for `writeCmf`.\n */\nexport function packGraphBuffers(graph)\n{\n const buffers = [ null ];\n const allocate = (bytes) =>\n {\n const index = buffers.length;\n buffers.push({ index, data: bytes });\n return index;\n };\n\n for (const skeleton of graph.skeletons || []) assertCmfNativeSkeleton(skeleton);\n\n const meshes = (graph.meshes || []).map((mesh) =>\n {\n const decl = mesh.decl || [];\n const morphDecl = mesh.morphTargets?.decl || [];\n const lods = (mesh.lods || []).map((lod) =>\n {\n const vertexSource = lod.vertex ?? mesh.vertex ?? {};\n const indexSource = lod.indices ?? mesh.indices ?? [];\n const packedVb = packVertexBuffer(decl, vertexSource);\n const packedIb = packIndexBuffer(indexSource);\n\n const vb = packedVb.count\n ? { index: allocate(packedVb.bytes), offset: 0, size: packedVb.bytes.byteLength, stride: packedVb.stride }\n : { index: 0, offset: 0, size: 0, stride: 0 };\n const ib = packedIb.count\n ? { index: allocate(packedIb.bytes), offset: 0, size: packedIb.bytes.byteLength, stride: packedIb.stride }\n : { index: 0, offset: 0, size: 0, stride: 0 };\n\n const morphTargets = (lod.morphTargets || []).map((target) =>\n {\n const packed = packVertexBuffer(morphDecl, target.vertex || {});\n return {\n vb: packed.count\n ? { index: allocate(packed.bytes), offset: 0, size: packed.bytes.byteLength, stride: packed.stride }\n : { index: 0, offset: 0, size: 0, stride: 0 }\n };\n });\n\n return {\n vb,\n ib,\n areas: lod.areas || [],\n morphTargets,\n threshold: lod.threshold ?? 0xffffffff\n };\n });\n return { ...mesh, lods };\n });\n\n return {\n graph: { ...graph, meshes },\n buffers\n };\n}\n"],"names":["CHANNEL_NAMES","Object","freeze","Position","Normal","Tangent","Binormal","TexCoord","Color","BoneIndices","BoneWeights","PackedTangent","PackedTangentLegacy","packError","message","error","Error","code","channelName","element","base","usage","JSON","stringify","usageIndex","elementTypeSize","type","floatToHalf","value","Number","isNaN","Infinity","sign","is","v","Math","abs","pow","round","exponent","floor","log2","mantissa","writeComponent","view","offset","setFloat32","setUint16","clampRound","setInt16","setUint8","setInt8","min","max","rounded","vertexCountFor","decl","vertex","count","channel","Array","isArray","length","channelCount","elementCount","strideFor","reduce","stride","packVertexBuffer","bytes","Uint8Array","DataView","buffer","size","i","component","packIndexBuffer","groups","faces","group","index","push","wide","some","bytesPerIndex","setUint32","assertCmfNativeSkeleton","skeleton","bonesAreNames","bones","every","bone","packGraphBuffers","graph","buffers","allocate","data","skeletons","meshes","map","mesh","morphDecl","morphTargets","lods","lod","vertexSource","indexSource","indices","packedVb","packedIb","vb","byteLength","ib","target","packed","areas","threshold"],"mappings":"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"}