@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,354 @@
1
+ const OUTPUT_RAW = "raw";
2
+ const OUTPUT_JSON = "json";
3
+ const OUTPUT_BNK_JSON = "bnkJson";
4
+ const OUTPUT_MEDIA = "media";
5
+ const DEFAULT_VALUES = Object.freeze({
6
+ emit: OUTPUT_RAW,
7
+ inputType: "bnk",
8
+ source: ""
9
+ });
10
+
11
+ /**
12
+ * Advisory names for classic HIRC object type ids.
13
+ *
14
+ * Type ids shifted in later Wwise releases, so these names are hints for
15
+ * debugging and inventory work, not a version-exact schema. Unknown ids are
16
+ * reported as `hirc-type-<n>`.
17
+ */
18
+ const HIRC_TYPE_NAMES = Object.freeze({
19
+ 1: "settings",
20
+ 2: "sound",
21
+ 3: "event-action",
22
+ 4: "event",
23
+ 5: "random-sequence-container",
24
+ 6: "switch-container",
25
+ 7: "actor-mixer",
26
+ 8: "audio-bus",
27
+ 9: "blend-container",
28
+ 10: "music-segment",
29
+ 11: "music-track",
30
+ 12: "music-switch-container",
31
+ 13: "music-playlist-container",
32
+ 14: "attenuation",
33
+ 15: "dialogue-event",
34
+ 16: "motion-bus",
35
+ 17: "motion-fx",
36
+ 18: "effect",
37
+ 19: "auxiliary-bus",
38
+ 20: "lfo",
39
+ 21: "envelope",
40
+ 22: "audio-device"
41
+ });
42
+ function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsBnkFormat") {
43
+ const values = {
44
+ ...DEFAULT_VALUES,
45
+ ...(base || {}),
46
+ ...(options || {})
47
+ };
48
+ values.inputType = values.inputType ? String(values.inputType).replace(/^\./u, "").toLowerCase() : "bnk";
49
+ values.emit = normalizeEmit(values.emit, readerName);
50
+ return values;
51
+ }
52
+ function normalizeEmit(emit, readerName) {
53
+ if (emit === undefined || emit === null) return OUTPUT_RAW;
54
+ if (emit === OUTPUT_JSON) return OUTPUT_BNK_JSON;
55
+ if ([OUTPUT_RAW, OUTPUT_BNK_JSON, OUTPUT_MEDIA].includes(emit)) return emit;
56
+ throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);
57
+ }
58
+ function toBytes(input) {
59
+ if (input instanceof Uint8Array) return input;
60
+ if (input instanceof ArrayBuffer) return new Uint8Array(input);
61
+ if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
62
+ throw new TypeError("Bnk input must be Uint8Array, ArrayBuffer, or DataView");
63
+ }
64
+
65
+ /**
66
+ * Test for a Wwise soundbank BKHD signature.
67
+ *
68
+ * @param {Uint8Array} bytes Candidate bytes.
69
+ * @returns {boolean} True when the bank header chunk is present.
70
+ */
71
+ function isBNK(bytes) {
72
+ return bytes.byteLength >= 8 && fourCc(bytes, 0) === "BKHD";
73
+ }
74
+
75
+ /**
76
+ * Inspect Wwise soundbank bytes without copying media payloads.
77
+ *
78
+ * Walks the chunk sequence and decodes the bank header (BKHD), embedded media
79
+ * index (DIDX/DATA), object hierarchy listing (HIRC), and referenced bank
80
+ * names (STID). Unknown chunks are recorded, never rejected; a truncated
81
+ * trailing chunk stops the walk and is flagged.
82
+ *
83
+ * Wwise soundbanks are written little-endian on all platforms EVE ships on;
84
+ * this reader assumes little-endian data.
85
+ *
86
+ * @param {Uint8Array} bytes Soundbank bytes.
87
+ * @returns {object} Soundbank metadata.
88
+ */
89
+ function inspectBNK(bytes) {
90
+ const info = {
91
+ sourceFormat: "bnk",
92
+ bankVersion: 0,
93
+ bankId: 0,
94
+ languageId: 0,
95
+ media: [],
96
+ hirc: [],
97
+ names: [],
98
+ chunks: []
99
+ };
100
+ let dataChunkOffset = 0;
101
+ let dataChunkSize = 0;
102
+ let mediaIndex = [];
103
+ let offset = 0;
104
+ while (offset + 8 <= bytes.byteLength) {
105
+ const id = fourCc(bytes, offset);
106
+ const size = readU32(bytes, offset + 4);
107
+ const dataOffset = offset + 8;
108
+ if (dataOffset + size > bytes.byteLength) {
109
+ info.chunks.push({
110
+ id,
111
+ offset,
112
+ dataOffset,
113
+ size,
114
+ truncated: true
115
+ });
116
+ break;
117
+ }
118
+ info.chunks.push({
119
+ id,
120
+ offset,
121
+ dataOffset,
122
+ size
123
+ });
124
+ if (id === "BKHD" && size >= 12) {
125
+ info.bankVersion = readU32(bytes, dataOffset);
126
+ info.bankId = readU32(bytes, dataOffset + 4);
127
+ info.languageId = readU32(bytes, dataOffset + 8);
128
+ }
129
+ if (id === "DIDX") {
130
+ mediaIndex = readMediaIndex(bytes, dataOffset, size);
131
+ }
132
+ if (id === "DATA") {
133
+ dataChunkOffset = dataOffset;
134
+ dataChunkSize = size;
135
+ }
136
+ if (id === "HIRC") {
137
+ info.hirc = readHircListing(bytes, dataOffset, size);
138
+ }
139
+ if (id === "STID") {
140
+ info.names = readNameTable(bytes, dataOffset, size);
141
+ }
142
+ offset = dataOffset + size;
143
+ }
144
+ info.media = mediaIndex.map(entry => {
145
+ const absoluteOffset = dataChunkOffset + entry.offset;
146
+ const available = dataChunkOffset > 0 && entry.offset + entry.length <= dataChunkSize && absoluteOffset + entry.length <= bytes.byteLength;
147
+ return {
148
+ id: entry.id,
149
+ offset: entry.offset,
150
+ absoluteOffset: dataChunkOffset > 0 ? absoluteOffset : 0,
151
+ length: entry.length,
152
+ available
153
+ };
154
+ });
155
+ info.mediaCount = info.media.length;
156
+ info.hircCount = info.hirc.length;
157
+ return info;
158
+ }
159
+ function readMediaIndex(bytes, dataOffset, size) {
160
+ const entries = [];
161
+ const count = Math.floor(size / 12);
162
+ for (let i = 0; i < count; i++) {
163
+ const entryOffset = dataOffset + i * 12;
164
+ entries.push({
165
+ id: readU32(bytes, entryOffset),
166
+ offset: readU32(bytes, entryOffset + 4),
167
+ length: readU32(bytes, entryOffset + 8)
168
+ });
169
+ }
170
+ return entries;
171
+ }
172
+ function readHircListing(bytes, dataOffset, size) {
173
+ const entries = [];
174
+ if (size < 4) return entries;
175
+ const count = readU32(bytes, dataOffset);
176
+ const end = dataOffset + size;
177
+ let offset = dataOffset + 4;
178
+ for (let i = 0; i < count; i++) {
179
+ if (offset + 9 > end) break;
180
+ const type = bytes[offset];
181
+ const entrySize = readU32(bytes, offset + 1);
182
+ const payloadOffset = offset + 5;
183
+ if (entrySize < 4 || payloadOffset + entrySize > end) break;
184
+ entries.push({
185
+ type,
186
+ typeName: HIRC_TYPE_NAMES[type] || `hirc-type-${type}`,
187
+ id: readU32(bytes, payloadOffset),
188
+ offset: payloadOffset,
189
+ size: entrySize
190
+ });
191
+ offset = payloadOffset + entrySize;
192
+ }
193
+ return entries;
194
+ }
195
+ function readNameTable(bytes, dataOffset, size) {
196
+ const names = [];
197
+ if (size < 8) return names;
198
+ const count = readU32(bytes, dataOffset + 4);
199
+ const end = dataOffset + size;
200
+ let offset = dataOffset + 8;
201
+ for (let i = 0; i < count; i++) {
202
+ if (offset + 5 > end) break;
203
+ const bankId = readU32(bytes, offset);
204
+ const length = bytes[offset + 4];
205
+ if (offset + 5 + length > end) break;
206
+ names.push({
207
+ bankId,
208
+ name: asciiString(bytes, offset + 5, length)
209
+ });
210
+ offset += 5 + length;
211
+ }
212
+ return names;
213
+ }
214
+ function inspectWithValues(input, values = DEFAULT_VALUES) {
215
+ const bytes = toBytes(input);
216
+ if (!isBNK(bytes)) {
217
+ throw new TypeError("CjsBnkFormat: expected a Wwise soundbank starting with a BKHD chunk");
218
+ }
219
+ return {
220
+ payloadType: "audio",
221
+ mediaTypes: ["audio"],
222
+ byteLength: bytes.byteLength,
223
+ source: values.source || "buffer",
224
+ ...inspectBNK(bytes)
225
+ };
226
+ }
227
+
228
+ /**
229
+ * Extract embedded media payloads as views over the soundbank bytes.
230
+ *
231
+ * Returned `bytes` are subarray views, not copies; callers that outlive the
232
+ * source buffer should copy them.
233
+ *
234
+ * @param {Uint8Array} bytes Soundbank bytes.
235
+ * @param {object} metadata Inspection result for those bytes.
236
+ * @param {number} [mediaId] Optional single media id filter.
237
+ * @returns {Array<object>} Extracted media items.
238
+ */
239
+ function extractMedia(bytes, metadata, mediaId) {
240
+ const items = [];
241
+ for (const entry of metadata.media) {
242
+ if (mediaId !== undefined && entry.id !== mediaId) continue;
243
+ if (!entry.available) continue;
244
+ const payload = bytes.subarray(entry.absoluteOffset, entry.absoluteOffset + entry.length);
245
+ items.push({
246
+ id: entry.id,
247
+ length: entry.length,
248
+ isWem: payload.length >= 12 && (fourCc(payload, 0) === "RIFF" || fourCc(payload, 0) === "RIFX") && fourCc(payload, 8) === "WAVE",
249
+ bytes: payload
250
+ });
251
+ }
252
+ return items;
253
+ }
254
+ function isSupportedWithValues(input, values = DEFAULT_VALUES) {
255
+ try {
256
+ const metadata = inspectWithValues(input, values);
257
+ const extractable = metadata.media.some(entry => entry.available);
258
+ return {
259
+ format: "bnk",
260
+ source: values.source || "buffer",
261
+ supported: "partial",
262
+ confidence: 1,
263
+ preferred: extractable ? OUTPUT_MEDIA : "raw",
264
+ reason: extractable ? "Soundbank recognized; embedded media can be extracted undecoded." : "Soundbank recognized; it carries no extractable embedded media.",
265
+ metadata,
266
+ variants: [{
267
+ kind: "raw",
268
+ payloadType: "raw",
269
+ codec: "wwise-soundbank",
270
+ mimeType: "application/octet-stream",
271
+ supported: true,
272
+ containerOnly: true,
273
+ isDecoded: false,
274
+ pcmDecodeSupported: false
275
+ }, {
276
+ kind: OUTPUT_MEDIA,
277
+ payloadType: OUTPUT_MEDIA,
278
+ codec: "wem",
279
+ supported: extractable,
280
+ containerOnly: true,
281
+ isDecoded: false,
282
+ reason: extractable ? "" : "No DIDX/DATA media entries are present."
283
+ }],
284
+ warnings: [],
285
+ errors: []
286
+ };
287
+ } catch (error) {
288
+ return {
289
+ format: "bnk",
290
+ source: values.source || "buffer",
291
+ supported: "none",
292
+ confidence: 0,
293
+ preferred: "",
294
+ reason: error.message,
295
+ metadata: null,
296
+ variants: [],
297
+ warnings: [],
298
+ errors: [error.message]
299
+ };
300
+ }
301
+ }
302
+ function readWithValues(input, values = DEFAULT_VALUES) {
303
+ const bytes = toBytes(input);
304
+ const metadata = inspectWithValues(bytes, values);
305
+ if (values.emit === OUTPUT_BNK_JSON) return metadata;
306
+ if (values.emit === OUTPUT_MEDIA) {
307
+ return {
308
+ payloadType: OUTPUT_MEDIA,
309
+ sourceFormat: "bnk",
310
+ containerOnly: true,
311
+ isDecoded: false,
312
+ metadata,
313
+ items: extractMedia(bytes, metadata)
314
+ };
315
+ }
316
+ return {
317
+ payloadType: "raw",
318
+ sourceFormat: "bnk",
319
+ mimeType: "application/octet-stream",
320
+ containerOnly: true,
321
+ isDecoded: false,
322
+ pcmDecodeSupported: false,
323
+ metadata,
324
+ bytes
325
+ };
326
+ }
327
+ function toJsonValue(value) {
328
+ if (value instanceof Uint8Array) return {
329
+ byteLength: value.byteLength
330
+ };
331
+ if (Array.isArray(value)) return value.map(toJsonValue);
332
+ if (value && typeof value === "object") {
333
+ const output = {};
334
+ for (const [key, entry] of Object.entries(value)) output[key] = toJsonValue(entry);
335
+ return output;
336
+ }
337
+ return value;
338
+ }
339
+ function asciiString(bytes, offset, length) {
340
+ let value = "";
341
+ for (let i = 0; i < length; i++) value += String.fromCharCode(bytes[offset + i]);
342
+ return value;
343
+ }
344
+ function fourCc(bytes, offset, length = 4) {
345
+ let value = "";
346
+ for (let i = 0; i < length; i++) value += String.fromCharCode(bytes[offset + i] || 0);
347
+ return value;
348
+ }
349
+ function readU32(bytes, offset) {
350
+ return (bytes[offset] | bytes[offset + 1] << 8 | bytes[offset + 2] << 16 | bytes[offset + 3] * 0x1000000) >>> 0;
351
+ }
352
+
353
+ export { DEFAULT_VALUES, HIRC_TYPE_NAMES, OUTPUT_BNK_JSON, OUTPUT_JSON, OUTPUT_MEDIA, OUTPUT_RAW, extractMedia, inspectBNK, inspectWithValues, isBNK, isSupportedWithValues, normalizeEmit, normalizeValues, readWithValues, toBytes, toJsonValue };
354
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/bnk/core/helpers.js"],"sourcesContent":["export const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_BNK_JSON = \"bnkJson\";\nexport const OUTPUT_MEDIA = \"media\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"bnk\",\n source: \"\"\n});\n\n/**\n * Advisory names for classic HIRC object type ids.\n *\n * Type ids shifted in later Wwise releases, so these names are hints for\n * debugging and inventory work, not a version-exact schema. Unknown ids are\n * reported as `hirc-type-<n>`.\n */\nexport const HIRC_TYPE_NAMES = Object.freeze({\n 1: \"settings\",\n 2: \"sound\",\n 3: \"event-action\",\n 4: \"event\",\n 5: \"random-sequence-container\",\n 6: \"switch-container\",\n 7: \"actor-mixer\",\n 8: \"audio-bus\",\n 9: \"blend-container\",\n 10: \"music-segment\",\n 11: \"music-track\",\n 12: \"music-switch-container\",\n 13: \"music-playlist-container\",\n 14: \"attenuation\",\n 15: \"dialogue-event\",\n 16: \"motion-bus\",\n 17: \"motion-fx\",\n 18: \"effect\",\n 19: \"auxiliary-bus\",\n 20: \"lfo\",\n 21: \"envelope\",\n 22: \"audio-device\"\n});\n\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsBnkFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = values.inputType ? String(values.inputType).replace(/^\\./u, \"\").toLowerCase() : \"bnk\";\n values.emit = normalizeEmit(values.emit, readerName);\n return values;\n}\n\nexport function normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === null) return OUTPUT_RAW;\n if (emit === OUTPUT_JSON) return OUTPUT_BNK_JSON;\n if ([ OUTPUT_RAW, OUTPUT_BNK_JSON, OUTPUT_MEDIA ].includes(emit)) return emit;\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);\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(\"Bnk input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\n/**\n * Test for a Wwise soundbank BKHD signature.\n *\n * @param {Uint8Array} bytes Candidate bytes.\n * @returns {boolean} True when the bank header chunk is present.\n */\nexport function isBNK(bytes)\n{\n return bytes.byteLength >= 8 && fourCc(bytes, 0) === \"BKHD\";\n}\n\n/**\n * Inspect Wwise soundbank bytes without copying media payloads.\n *\n * Walks the chunk sequence and decodes the bank header (BKHD), embedded media\n * index (DIDX/DATA), object hierarchy listing (HIRC), and referenced bank\n * names (STID). Unknown chunks are recorded, never rejected; a truncated\n * trailing chunk stops the walk and is flagged.\n *\n * Wwise soundbanks are written little-endian on all platforms EVE ships on;\n * this reader assumes little-endian data.\n *\n * @param {Uint8Array} bytes Soundbank bytes.\n * @returns {object} Soundbank metadata.\n */\nexport function inspectBNK(bytes)\n{\n const info = {\n sourceFormat: \"bnk\",\n bankVersion: 0,\n bankId: 0,\n languageId: 0,\n media: [],\n hirc: [],\n names: [],\n chunks: []\n };\n\n let dataChunkOffset = 0;\n let dataChunkSize = 0;\n let mediaIndex = [];\n let offset = 0;\n\n while (offset + 8 <= bytes.byteLength)\n {\n const id = fourCc(bytes, offset);\n const size = readU32(bytes, offset + 4);\n const dataOffset = offset + 8;\n if (dataOffset + size > bytes.byteLength)\n {\n info.chunks.push({ id, offset, dataOffset, size, truncated: true });\n break;\n }\n info.chunks.push({ id, offset, dataOffset, size });\n\n if (id === \"BKHD\" && size >= 12)\n {\n info.bankVersion = readU32(bytes, dataOffset);\n info.bankId = readU32(bytes, dataOffset + 4);\n info.languageId = readU32(bytes, dataOffset + 8);\n }\n if (id === \"DIDX\")\n {\n mediaIndex = readMediaIndex(bytes, dataOffset, size);\n }\n if (id === \"DATA\")\n {\n dataChunkOffset = dataOffset;\n dataChunkSize = size;\n }\n if (id === \"HIRC\")\n {\n info.hirc = readHircListing(bytes, dataOffset, size);\n }\n if (id === \"STID\")\n {\n info.names = readNameTable(bytes, dataOffset, size);\n }\n\n offset = dataOffset + size;\n }\n\n info.media = mediaIndex.map((entry) =>\n {\n const absoluteOffset = dataChunkOffset + entry.offset;\n const available = dataChunkOffset > 0 &&\n entry.offset + entry.length <= dataChunkSize &&\n absoluteOffset + entry.length <= bytes.byteLength;\n return {\n id: entry.id,\n offset: entry.offset,\n absoluteOffset: dataChunkOffset > 0 ? absoluteOffset : 0,\n length: entry.length,\n available\n };\n });\n\n info.mediaCount = info.media.length;\n info.hircCount = info.hirc.length;\n return info;\n}\n\nfunction readMediaIndex(bytes, dataOffset, size)\n{\n const entries = [];\n const count = Math.floor(size / 12);\n for (let i = 0; i < count; i++)\n {\n const entryOffset = dataOffset + i * 12;\n entries.push({\n id: readU32(bytes, entryOffset),\n offset: readU32(bytes, entryOffset + 4),\n length: readU32(bytes, entryOffset + 8)\n });\n }\n return entries;\n}\n\nfunction readHircListing(bytes, dataOffset, size)\n{\n const entries = [];\n if (size < 4) return entries;\n const count = readU32(bytes, dataOffset);\n const end = dataOffset + size;\n let offset = dataOffset + 4;\n\n for (let i = 0; i < count; i++)\n {\n if (offset + 9 > end) break;\n const type = bytes[offset];\n const entrySize = readU32(bytes, offset + 1);\n const payloadOffset = offset + 5;\n if (entrySize < 4 || payloadOffset + entrySize > end) break;\n entries.push({\n type,\n typeName: HIRC_TYPE_NAMES[type] || `hirc-type-${type}`,\n id: readU32(bytes, payloadOffset),\n offset: payloadOffset,\n size: entrySize\n });\n offset = payloadOffset + entrySize;\n }\n\n return entries;\n}\n\nfunction readNameTable(bytes, dataOffset, size)\n{\n const names = [];\n if (size < 8) return names;\n const count = readU32(bytes, dataOffset + 4);\n const end = dataOffset + size;\n let offset = dataOffset + 8;\n\n for (let i = 0; i < count; i++)\n {\n if (offset + 5 > end) break;\n const bankId = readU32(bytes, offset);\n const length = bytes[offset + 4];\n if (offset + 5 + length > end) break;\n names.push({\n bankId,\n name: asciiString(bytes, offset + 5, length)\n });\n offset += 5 + length;\n }\n\n return names;\n}\n\nexport function inspectWithValues(input, values = DEFAULT_VALUES)\n{\n const bytes = toBytes(input);\n if (!isBNK(bytes))\n {\n throw new TypeError(\"CjsBnkFormat: expected a Wwise soundbank starting with a BKHD chunk\");\n }\n return {\n payloadType: \"audio\",\n mediaTypes: [ \"audio\" ],\n byteLength: bytes.byteLength,\n source: values.source || \"buffer\",\n ...inspectBNK(bytes)\n };\n}\n\n/**\n * Extract embedded media payloads as views over the soundbank bytes.\n *\n * Returned `bytes` are subarray views, not copies; callers that outlive the\n * source buffer should copy them.\n *\n * @param {Uint8Array} bytes Soundbank bytes.\n * @param {object} metadata Inspection result for those bytes.\n * @param {number} [mediaId] Optional single media id filter.\n * @returns {Array<object>} Extracted media items.\n */\nexport function extractMedia(bytes, metadata, mediaId)\n{\n const items = [];\n for (const entry of metadata.media)\n {\n if (mediaId !== undefined && entry.id !== mediaId) continue;\n if (!entry.available) continue;\n const payload = bytes.subarray(entry.absoluteOffset, entry.absoluteOffset + entry.length);\n items.push({\n id: entry.id,\n length: entry.length,\n isWem: payload.length >= 12 &&\n (fourCc(payload, 0) === \"RIFF\" || fourCc(payload, 0) === \"RIFX\") &&\n fourCc(payload, 8) === \"WAVE\",\n bytes: payload\n });\n }\n return items;\n}\n\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES)\n{\n try\n {\n const metadata = inspectWithValues(input, values);\n const extractable = metadata.media.some((entry) => entry.available);\n return {\n format: \"bnk\",\n source: values.source || \"buffer\",\n supported: \"partial\",\n confidence: 1,\n preferred: extractable ? OUTPUT_MEDIA : \"raw\",\n reason: extractable\n ? \"Soundbank recognized; embedded media can be extracted undecoded.\"\n : \"Soundbank recognized; it carries no extractable embedded media.\",\n metadata,\n variants: [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: \"wwise-soundbank\",\n mimeType: \"application/octet-stream\",\n supported: true,\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false\n },\n {\n kind: OUTPUT_MEDIA,\n payloadType: OUTPUT_MEDIA,\n codec: \"wem\",\n supported: extractable,\n containerOnly: true,\n isDecoded: false,\n reason: extractable ? \"\" : \"No DIDX/DATA media entries are present.\"\n }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: \"bnk\",\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_BNK_JSON) return metadata;\n if (values.emit === OUTPUT_MEDIA)\n {\n return {\n payloadType: OUTPUT_MEDIA,\n sourceFormat: \"bnk\",\n containerOnly: true,\n isDecoded: false,\n metadata,\n items: extractMedia(bytes, metadata)\n };\n }\n return {\n payloadType: \"raw\",\n sourceFormat: \"bnk\",\n mimeType: \"application/octet-stream\",\n containerOnly: true,\n isDecoded: false,\n pcmDecodeSupported: false,\n metadata,\n bytes\n };\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 asciiString(bytes, offset, length)\n{\n let value = \"\";\n for (let i = 0; i < length; i++) value += String.fromCharCode(bytes[offset + i]);\n return value;\n}\n\nfunction fourCc(bytes, offset, length = 4)\n{\n let value = \"\";\n for (let i = 0; i < length; i++) value += String.fromCharCode(bytes[offset + i] || 0);\n return value;\n}\n\nfunction readU32(bytes, offset)\n{\n return (bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] * 0x1000000)) >>> 0;\n}\n"],"names":["OUTPUT_RAW","OUTPUT_JSON","OUTPUT_BNK_JSON","OUTPUT_MEDIA","DEFAULT_VALUES","Object","freeze","emit","inputType","source","HIRC_TYPE_NAMES","normalizeValues","base","options","readerName","values","String","replace","toLowerCase","normalizeEmit","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","isBNK","bytes","fourCc","inspectBNK","info","sourceFormat","bankVersion","bankId","languageId","media","hirc","names","chunks","dataChunkOffset","dataChunkSize","mediaIndex","offset","id","size","readU32","dataOffset","push","truncated","readMediaIndex","readHircListing","readNameTable","map","entry","absoluteOffset","available","length","mediaCount","hircCount","entries","count","Math","floor","i","entryOffset","end","type","entrySize","payloadOffset","typeName","name","asciiString","inspectWithValues","payloadType","mediaTypes","extractMedia","metadata","mediaId","items","payload","subarray","isWem","isSupportedWithValues","extractable","some","format","supported","confidence","preferred","reason","variants","kind","codec","mimeType","containerOnly","isDecoded","pcmDecodeSupported","warnings","errors","error","message","readWithValues","toJsonValue","value","Array","isArray","output","key","fromCharCode"],"mappings":"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"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Readers for Wwise SoundbanksInfo metadata (the `soundbanksinfo.json` file
3
+ * generated next to soundbanks).
4
+ *
5
+ * SoundbanksInfo is the authoring-name authority for soundbank content: it
6
+ * maps media ids to original source paths and lists per-bank events, switch
7
+ * groups, state groups, and game parameters. These helpers normalize that
8
+ * document and join it against `CjsBnkFormat` inspection output; they never
9
+ * touch audio bytes.
10
+ */
11
+
12
+ /**
13
+ * Compute the Wwise 32-bit id for a name.
14
+ *
15
+ * Wwise derives bank, event, and language ids as the FNV-1 32-bit hash of the
16
+ * lowercased name (verified against EVE build 3421648 bank and language ids).
17
+ *
18
+ * @param {string} name Bank, event, switch, or language name.
19
+ * @returns {number} Unsigned 32-bit Wwise id.
20
+ */
21
+ function wwiseIdFromName(name) {
22
+ let hash = 2166136261 >>> 0;
23
+ const text = String(name).toLowerCase();
24
+ for (let i = 0; i < text.length; i++) {
25
+ hash = Math.imul(hash, 16777619) >>> 0;
26
+ hash = (hash ^ text.charCodeAt(i)) >>> 0;
27
+ }
28
+ return hash;
29
+ }
30
+ function toSoundbanksInfoDocument(input) {
31
+ let value = input;
32
+ if (value instanceof ArrayBuffer) value = new Uint8Array(value);
33
+ if (ArrayBuffer.isView(value)) value = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
34
+ if (value instanceof Uint8Array) value = utf8String(value);
35
+ if (typeof value === "string") {
36
+ try {
37
+ value = JSON.parse(value);
38
+ } catch (error) {
39
+ throw new TypeError(`CjsBnkFormat: SoundbanksInfo input is not valid JSON (${error.message})`);
40
+ }
41
+ }
42
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
43
+ throw new TypeError("CjsBnkFormat: SoundbanksInfo input must be JSON bytes, text, or an object");
44
+ }
45
+ const document = value.SoundBanksInfo || value;
46
+ if (!document || typeof document !== "object" || !Array.isArray(document.SoundBanks)) {
47
+ throw new TypeError("CjsBnkFormat: input has no SoundBanksInfo.SoundBanks document");
48
+ }
49
+ return document;
50
+ }
51
+
52
+ /**
53
+ * Test whether input looks like a Wwise SoundbanksInfo document.
54
+ *
55
+ * @param {Uint8Array|ArrayBuffer|DataView|string|object} input Candidate document.
56
+ * @returns {boolean} True when a SoundBanksInfo bank list is present.
57
+ */
58
+ function isSoundbanksInfo(input) {
59
+ try {
60
+ toSoundbanksInfoDocument(input);
61
+ return true;
62
+ } catch {
63
+ return false;
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Parse SoundbanksInfo into a normalized camelCase summary.
69
+ *
70
+ * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.
71
+ * @returns {object} Normalized document summary with per-bank details.
72
+ */
73
+ function parseSoundbanksInfo(input) {
74
+ const document = toSoundbanksInfoDocument(input);
75
+ const banks = document.SoundBanks.map(normalizeBank);
76
+ const summary = {
77
+ platform: document.Platform || "",
78
+ basePlatform: document.BasePlatform || "",
79
+ schemaVersion: document.SchemaVersion || "",
80
+ soundBankVersion: document.SoundBankVersion || "",
81
+ bankCount: banks.length,
82
+ mediaCount: 0,
83
+ streamingMediaCount: 0,
84
+ eventCount: 0,
85
+ languages: [],
86
+ banks
87
+ };
88
+ const languages = new Set();
89
+ for (const bank of banks) {
90
+ summary.mediaCount += bank.media.length;
91
+ summary.streamingMediaCount += bank.media.filter(entry => entry.streaming).length;
92
+ summary.eventCount += bank.events.length;
93
+ if (bank.language) languages.add(bank.language);
94
+ }
95
+ summary.languages = [...languages].sort();
96
+ return summary;
97
+ }
98
+ function normalizeBank(bank) {
99
+ return {
100
+ id: String(bank.Id ?? ""),
101
+ type: bank.Type || "",
102
+ language: bank.Language || "",
103
+ shortName: bank.ShortName || "",
104
+ path: bank.Path || "",
105
+ media: (bank.Media || []).map(entry => ({
106
+ id: String(entry.Id ?? ""),
107
+ shortName: entry.ShortName || "",
108
+ cachePath: entry.CachePath || "",
109
+ language: entry.Language || "",
110
+ streaming: entry.Streaming === "true",
111
+ location: entry.Location || ""
112
+ })),
113
+ events: (bank.Events || []).map(entry => ({
114
+ id: String(entry.Id ?? ""),
115
+ name: entry.Name || ""
116
+ })),
117
+ switchGroups: (bank.SwitchGroups || []).map(group => ({
118
+ id: String(group.Id ?? ""),
119
+ name: group.Name || "",
120
+ switches: (group.Switches || []).map(entry => ({
121
+ id: String(entry.Id ?? ""),
122
+ name: entry.Name || ""
123
+ }))
124
+ })),
125
+ stateGroups: (bank.StateGroups || []).map(group => ({
126
+ id: String(group.Id ?? ""),
127
+ name: group.Name || "",
128
+ states: (group.States || []).map(entry => ({
129
+ id: String(entry.Id ?? ""),
130
+ name: entry.Name || ""
131
+ }))
132
+ })),
133
+ gameParameters: (bank.GameParameters || []).map(entry => ({
134
+ id: String(entry.Id ?? ""),
135
+ name: entry.Name || ""
136
+ }))
137
+ };
138
+ }
139
+
140
+ /**
141
+ * Build id-keyed lookup tables from SoundbanksInfo.
142
+ *
143
+ * Media ids repeat across language variants of the same bank, so
144
+ * `mediaById[id]` is an array of entries; event ids are unique.
145
+ *
146
+ * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.
147
+ * @returns {object} Catalog with banksById, mediaById, eventsById, and eventsByName.
148
+ */
149
+ function buildSoundbanksCatalog(input) {
150
+ const parsed = parseSoundbanksInfo(input);
151
+ const catalog = {
152
+ platform: parsed.platform,
153
+ soundBankVersion: parsed.soundBankVersion,
154
+ bankCount: parsed.bankCount,
155
+ mediaCount: parsed.mediaCount,
156
+ eventCount: parsed.eventCount,
157
+ languages: parsed.languages,
158
+ banksById: {},
159
+ bankVariantsById: {},
160
+ mediaById: {},
161
+ eventsById: {},
162
+ eventsByName: {}
163
+ };
164
+ for (const bank of parsed.banks) {
165
+ if (!catalog.banksById[bank.id]) catalog.banksById[bank.id] = bank;
166
+ if (!catalog.bankVariantsById[bank.id]) catalog.bankVariantsById[bank.id] = [];
167
+ catalog.bankVariantsById[bank.id].push(bank);
168
+ for (const entry of bank.media) {
169
+ const reference = {
170
+ ...entry,
171
+ bankId: bank.id,
172
+ bankName: bank.shortName
173
+ };
174
+ if (!catalog.mediaById[entry.id]) catalog.mediaById[entry.id] = [];
175
+ catalog.mediaById[entry.id].push(reference);
176
+ }
177
+ for (const entry of bank.events) {
178
+ const reference = {
179
+ ...entry,
180
+ bankId: bank.id,
181
+ bankName: bank.shortName
182
+ };
183
+ catalog.eventsById[entry.id] = reference;
184
+ catalog.eventsByName[entry.name] = reference;
185
+ }
186
+ }
187
+ return catalog;
188
+ }
189
+
190
+ /**
191
+ * Join a `CjsBnkFormat` inspection result with a SoundbanksInfo catalog.
192
+ *
193
+ * Annotates the bank's embedded media and HIRC event listing with authoring
194
+ * names. Entries with no catalog match keep `null` name fields rather than
195
+ * being dropped, so counts stay aligned with the inspected bank. Language
196
+ * variants of a bank share one bank id; the inspected BKHD `languageId`
197
+ * (an FNV-1 hash of the language name) selects the exact variant.
198
+ *
199
+ * @param {object} bankInfo `CjsBnkFormat` inspect output.
200
+ * @param {object} catalog `buildSoundbanksCatalog` output.
201
+ * @returns {object} Bank/media/event annotations for the inspected bank.
202
+ */
203
+ function joinSoundbanksInfo(bankInfo, catalog) {
204
+ const bankId = String(bankInfo.bankId ?? "");
205
+ const variants = catalog.bankVariantsById[bankId] || [];
206
+ const bank = variants.find(variant => wwiseIdFromName(variant.language) === bankInfo.languageId) || catalog.banksById[bankId] || null;
207
+ const bankLanguage = bank ? bank.language : "";
208
+ const media = (bankInfo.media || []).map(entry => {
209
+ const references = catalog.mediaById[String(entry.id)] || [];
210
+ const match = references.find(reference => reference.bankId === bankId && reference.language === bankLanguage) || references.find(reference => reference.bankId === bankId) || references[0] || null;
211
+ return {
212
+ id: entry.id,
213
+ length: entry.length,
214
+ available: entry.available,
215
+ shortName: match ? match.shortName : null,
216
+ cachePath: match ? match.cachePath : null,
217
+ language: match ? match.language : null,
218
+ streaming: match ? match.streaming : null
219
+ };
220
+ });
221
+ const events = (bankInfo.hirc || []).filter(entry => entry.typeName === "event").map(entry => {
222
+ const match = catalog.eventsById[String(entry.id)] || null;
223
+ return {
224
+ id: entry.id,
225
+ name: match ? match.name : null,
226
+ bankName: match ? match.bankName : null
227
+ };
228
+ });
229
+ return {
230
+ bankId,
231
+ bank,
232
+ media,
233
+ namedMediaCount: media.filter(entry => entry.shortName !== null).length,
234
+ events,
235
+ namedEventCount: events.filter(entry => entry.name !== null).length
236
+ };
237
+ }
238
+ function utf8String(bytes) {
239
+ if (typeof TextDecoder !== "undefined") return new TextDecoder("utf-8").decode(bytes);
240
+ let value = "";
241
+ for (let i = 0; i < bytes.length; i++) value += String.fromCharCode(bytes[i]);
242
+ return value;
243
+ }
244
+
245
+ export { buildSoundbanksCatalog, isSoundbanksInfo, joinSoundbanksInfo, parseSoundbanksInfo, toSoundbanksInfoDocument, wwiseIdFromName };
246
+ //# sourceMappingURL=soundbanksInfo.js.map