@svta/cml-cmaf-ham 0.19.0 → 0.20.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 (419) hide show
  1. package/README.md +6 -0
  2. package/dist/index.d.ts +1273 -51
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1822 -19
  5. package/dist/index.js.map +1 -1
  6. package/package.json +6 -26
  7. package/dist/mapper/Mapper.d.ts +0 -8
  8. package/dist/mapper/Mapper.d.ts.map +0 -1
  9. package/dist/mapper/Mapper.js +0 -2
  10. package/dist/mapper/Mapper.js.map +0 -1
  11. package/dist/mapper/MapperContext.d.ts +0 -14
  12. package/dist/mapper/MapperContext.d.ts.map +0 -1
  13. package/dist/mapper/MapperContext.js +0 -22
  14. package/dist/mapper/MapperContext.js.map +0 -1
  15. package/dist/mapper/dash/DashMapper.d.ts +0 -10
  16. package/dist/mapper/dash/DashMapper.d.ts.map +0 -1
  17. package/dist/mapper/dash/DashMapper.js +0 -23
  18. package/dist/mapper/dash/DashMapper.js.map +0 -1
  19. package/dist/mapper/dash/mapDashToHam/mapDashToHam.d.ts +0 -12
  20. package/dist/mapper/dash/mapDashToHam/mapDashToHam.d.ts.map +0 -1
  21. package/dist/mapper/dash/mapDashToHam/mapDashToHam.js +0 -42
  22. package/dist/mapper/dash/mapDashToHam/mapDashToHam.js.map +0 -1
  23. package/dist/mapper/dash/mapDashToHam/mapSegmentBase.d.ts +0 -13
  24. package/dist/mapper/dash/mapDashToHam/mapSegmentBase.d.ts.map +0 -1
  25. package/dist/mapper/dash/mapDashToHam/mapSegmentBase.js +0 -20
  26. package/dist/mapper/dash/mapDashToHam/mapSegmentBase.js.map +0 -1
  27. package/dist/mapper/dash/mapDashToHam/mapSegmentList.d.ts +0 -12
  28. package/dist/mapper/dash/mapDashToHam/mapSegmentList.d.ts.map +0 -1
  29. package/dist/mapper/dash/mapDashToHam/mapSegmentList.js +0 -25
  30. package/dist/mapper/dash/mapDashToHam/mapSegmentList.js.map +0 -1
  31. package/dist/mapper/dash/mapDashToHam/mapSegmentTemplate.d.ts +0 -15
  32. package/dist/mapper/dash/mapDashToHam/mapSegmentTemplate.d.ts.map +0 -1
  33. package/dist/mapper/dash/mapDashToHam/mapSegmentTemplate.js +0 -27
  34. package/dist/mapper/dash/mapDashToHam/mapSegmentTemplate.js.map +0 -1
  35. package/dist/mapper/dash/mapDashToHam/mapSegments.d.ts +0 -20
  36. package/dist/mapper/dash/mapDashToHam/mapSegments.d.ts.map +0 -1
  37. package/dist/mapper/dash/mapDashToHam/mapSegments.js +0 -37
  38. package/dist/mapper/dash/mapDashToHam/mapSegments.js.map +0 -1
  39. package/dist/mapper/dash/mapDashToHam/mapTracks.d.ts +0 -19
  40. package/dist/mapper/dash/mapDashToHam/mapTracks.d.ts.map +0 -1
  41. package/dist/mapper/dash/mapDashToHam/mapTracks.js +0 -72
  42. package/dist/mapper/dash/mapDashToHam/mapTracks.js.map +0 -1
  43. package/dist/mapper/dash/mapDashToHam/utils/calculateDuration.d.ts +0 -13
  44. package/dist/mapper/dash/mapDashToHam/utils/calculateDuration.d.ts.map +0 -1
  45. package/dist/mapper/dash/mapDashToHam/utils/calculateDuration.js +0 -18
  46. package/dist/mapper/dash/mapDashToHam/utils/calculateDuration.js.map +0 -1
  47. package/dist/mapper/dash/mapDashToHam/utils/getChannels.d.ts +0 -13
  48. package/dist/mapper/dash/mapDashToHam/utils/getChannels.d.ts.map +0 -1
  49. package/dist/mapper/dash/mapDashToHam/utils/getChannels.js +0 -18
  50. package/dist/mapper/dash/mapDashToHam/utils/getChannels.js.map +0 -1
  51. package/dist/mapper/dash/mapDashToHam/utils/getCodec.d.ts +0 -13
  52. package/dist/mapper/dash/mapDashToHam/utils/getCodec.d.ts.map +0 -1
  53. package/dist/mapper/dash/mapDashToHam/utils/getCodec.js +0 -18
  54. package/dist/mapper/dash/mapDashToHam/utils/getCodec.js.map +0 -1
  55. package/dist/mapper/dash/mapDashToHam/utils/getContentType.d.ts +0 -14
  56. package/dist/mapper/dash/mapDashToHam/utils/getContentType.d.ts.map +0 -1
  57. package/dist/mapper/dash/mapDashToHam/utils/getContentType.js +0 -37
  58. package/dist/mapper/dash/mapDashToHam/utils/getContentType.js.map +0 -1
  59. package/dist/mapper/dash/mapDashToHam/utils/getFrameRate.d.ts +0 -16
  60. package/dist/mapper/dash/mapDashToHam/utils/getFrameRate.d.ts.map +0 -1
  61. package/dist/mapper/dash/mapDashToHam/utils/getFrameRate.js +0 -31
  62. package/dist/mapper/dash/mapDashToHam/utils/getFrameRate.js.map +0 -1
  63. package/dist/mapper/dash/mapDashToHam/utils/getGroup.d.ts +0 -3
  64. package/dist/mapper/dash/mapDashToHam/utils/getGroup.d.ts.map +0 -1
  65. package/dist/mapper/dash/mapDashToHam/utils/getGroup.js +0 -6
  66. package/dist/mapper/dash/mapDashToHam/utils/getGroup.js.map +0 -1
  67. package/dist/mapper/dash/mapDashToHam/utils/getInitializationUrl.d.ts +0 -14
  68. package/dist/mapper/dash/mapDashToHam/utils/getInitializationUrl.d.ts.map +0 -1
  69. package/dist/mapper/dash/mapDashToHam/utils/getInitializationUrl.js +0 -32
  70. package/dist/mapper/dash/mapDashToHam/utils/getInitializationUrl.js.map +0 -1
  71. package/dist/mapper/dash/mapDashToHam/utils/getLanguage.d.ts +0 -11
  72. package/dist/mapper/dash/mapDashToHam/utils/getLanguage.d.ts.map +0 -1
  73. package/dist/mapper/dash/mapDashToHam/utils/getLanguage.js +0 -17
  74. package/dist/mapper/dash/mapDashToHam/utils/getLanguage.js.map +0 -1
  75. package/dist/mapper/dash/mapDashToHam/utils/getNumberOfSegments.d.ts +0 -17
  76. package/dist/mapper/dash/mapDashToHam/utils/getNumberOfSegments.d.ts.map +0 -1
  77. package/dist/mapper/dash/mapDashToHam/utils/getNumberOfSegments.js +0 -21
  78. package/dist/mapper/dash/mapDashToHam/utils/getNumberOfSegments.js.map +0 -1
  79. package/dist/mapper/dash/mapDashToHam/utils/getPresentationId.d.ts +0 -13
  80. package/dist/mapper/dash/mapDashToHam/utils/getPresentationId.d.ts.map +0 -1
  81. package/dist/mapper/dash/mapDashToHam/utils/getPresentationId.js +0 -15
  82. package/dist/mapper/dash/mapDashToHam/utils/getPresentationId.js.map +0 -1
  83. package/dist/mapper/dash/mapDashToHam/utils/getSampleRate.d.ts +0 -13
  84. package/dist/mapper/dash/mapDashToHam/utils/getSampleRate.d.ts.map +0 -1
  85. package/dist/mapper/dash/mapDashToHam/utils/getSampleRate.js +0 -18
  86. package/dist/mapper/dash/mapDashToHam/utils/getSampleRate.js.map +0 -1
  87. package/dist/mapper/dash/mapDashToHam/utils/getSar.d.ts +0 -13
  88. package/dist/mapper/dash/mapDashToHam/utils/getSar.d.ts.map +0 -1
  89. package/dist/mapper/dash/mapDashToHam/utils/getSar.js +0 -18
  90. package/dist/mapper/dash/mapDashToHam/utils/getSar.js.map +0 -1
  91. package/dist/mapper/dash/mapDashToHam/utils/getTrackDuration.d.ts +0 -16
  92. package/dist/mapper/dash/mapDashToHam/utils/getTrackDuration.d.ts.map +0 -1
  93. package/dist/mapper/dash/mapDashToHam/utils/getTrackDuration.js +0 -19
  94. package/dist/mapper/dash/mapDashToHam/utils/getTrackDuration.js.map +0 -1
  95. package/dist/mapper/dash/mapDashToHam/utils/getUrlFromTemplate.d.ts +0 -18
  96. package/dist/mapper/dash/mapDashToHam/utils/getUrlFromTemplate.d.ts.map +0 -1
  97. package/dist/mapper/dash/mapDashToHam/utils/getUrlFromTemplate.js +0 -34
  98. package/dist/mapper/dash/mapDashToHam/utils/getUrlFromTemplate.js.map +0 -1
  99. package/dist/mapper/dash/mapHamToDash/mapHamToDash.d.ts +0 -3
  100. package/dist/mapper/dash/mapHamToDash/mapHamToDash.d.ts.map +0 -1
  101. package/dist/mapper/dash/mapHamToDash/mapHamToDash.js +0 -17
  102. package/dist/mapper/dash/mapHamToDash/mapHamToDash.js.map +0 -1
  103. package/dist/mapper/dash/mapHamToDash/presentationsToPeriods.d.ts +0 -4
  104. package/dist/mapper/dash/mapHamToDash/presentationsToPeriods.d.ts.map +0 -1
  105. package/dist/mapper/dash/mapHamToDash/presentationsToPeriods.js +0 -16
  106. package/dist/mapper/dash/mapHamToDash/presentationsToPeriods.js.map +0 -1
  107. package/dist/mapper/dash/mapHamToDash/selectionSetsToAdaptationSet.d.ts +0 -4
  108. package/dist/mapper/dash/mapHamToDash/selectionSetsToAdaptationSet.d.ts.map +0 -1
  109. package/dist/mapper/dash/mapHamToDash/selectionSetsToAdaptationSet.js +0 -22
  110. package/dist/mapper/dash/mapHamToDash/selectionSetsToAdaptationSet.js.map +0 -1
  111. package/dist/mapper/dash/mapHamToDash/trackToSegmentBase.d.ts +0 -4
  112. package/dist/mapper/dash/mapHamToDash/trackToSegmentBase.d.ts.map +0 -1
  113. package/dist/mapper/dash/mapHamToDash/trackToSegmentBase.js +0 -61
  114. package/dist/mapper/dash/mapHamToDash/trackToSegmentBase.js.map +0 -1
  115. package/dist/mapper/dash/mapHamToDash/trackToSegmentList.d.ts +0 -4
  116. package/dist/mapper/dash/mapHamToDash/trackToSegmentList.d.ts.map +0 -1
  117. package/dist/mapper/dash/mapHamToDash/trackToSegmentList.js +0 -27
  118. package/dist/mapper/dash/mapHamToDash/trackToSegmentList.js.map +0 -1
  119. package/dist/mapper/dash/mapHamToDash/tracksToRepresentation.d.ts +0 -4
  120. package/dist/mapper/dash/mapHamToDash/tracksToRepresentation.d.ts.map +0 -1
  121. package/dist/mapper/dash/mapHamToDash/tracksToRepresentation.js +0 -52
  122. package/dist/mapper/dash/mapHamToDash/tracksToRepresentation.js.map +0 -1
  123. package/dist/mapper/dash/mapHamToDash/utils/getFrameRate.d.ts +0 -13
  124. package/dist/mapper/dash/mapHamToDash/utils/getFrameRate.d.ts.map +0 -1
  125. package/dist/mapper/dash/mapHamToDash/utils/getFrameRate.js +0 -25
  126. package/dist/mapper/dash/mapHamToDash/utils/getFrameRate.js.map +0 -1
  127. package/dist/mapper/dash/mapHamToDash/utils/getTimescale.d.ts +0 -16
  128. package/dist/mapper/dash/mapHamToDash/utils/getTimescale.d.ts.map +0 -1
  129. package/dist/mapper/dash/mapHamToDash/utils/getTimescale.js +0 -30
  130. package/dist/mapper/dash/mapHamToDash/utils/getTimescale.js.map +0 -1
  131. package/dist/mapper/hls/HlsMapper.d.ts +0 -10
  132. package/dist/mapper/hls/HlsMapper.d.ts.map +0 -1
  133. package/dist/mapper/hls/HlsMapper.js +0 -17
  134. package/dist/mapper/hls/HlsMapper.js.map +0 -1
  135. package/dist/mapper/hls/mapHamToHls/generateManifestPlaylistPiece.d.ts +0 -8
  136. package/dist/mapper/hls/mapHamToHls/generateManifestPlaylistPiece.d.ts.map +0 -1
  137. package/dist/mapper/hls/mapHamToHls/generateManifestPlaylistPiece.js +0 -26
  138. package/dist/mapper/hls/mapHamToHls/generateManifestPlaylistPiece.js.map +0 -1
  139. package/dist/mapper/hls/mapHamToHls/mapHamToHls.d.ts +0 -4
  140. package/dist/mapper/hls/mapHamToHls/mapHamToHls.d.ts.map +0 -1
  141. package/dist/mapper/hls/mapHamToHls/mapHamToHls.js +0 -29
  142. package/dist/mapper/hls/mapHamToHls/mapHamToHls.js.map +0 -1
  143. package/dist/mapper/hls/mapHamToHls/utils/getByterange.d.ts +0 -14
  144. package/dist/mapper/hls/mapHamToHls/utils/getByterange.d.ts.map +0 -1
  145. package/dist/mapper/hls/mapHamToHls/utils/getByterange.js +0 -22
  146. package/dist/mapper/hls/mapHamToHls/utils/getByterange.js.map +0 -1
  147. package/dist/mapper/hls/mapHamToHls/utils/getPlaylistData.d.ts +0 -14
  148. package/dist/mapper/hls/mapHamToHls/utils/getPlaylistData.d.ts.map +0 -1
  149. package/dist/mapper/hls/mapHamToHls/utils/getPlaylistData.js +0 -16
  150. package/dist/mapper/hls/mapHamToHls/utils/getPlaylistData.js.map +0 -1
  151. package/dist/mapper/hls/mapHamToHls/utils/getSegments.d.ts +0 -13
  152. package/dist/mapper/hls/mapHamToHls/utils/getSegments.d.ts.map +0 -1
  153. package/dist/mapper/hls/mapHamToHls/utils/getSegments.js +0 -23
  154. package/dist/mapper/hls/mapHamToHls/utils/getSegments.js.map +0 -1
  155. package/dist/mapper/hls/mapHamToHls/utils/getUrlInitialization.d.ts +0 -14
  156. package/dist/mapper/hls/mapHamToHls/utils/getUrlInitialization.d.ts.map +0 -1
  157. package/dist/mapper/hls/mapHamToHls/utils/getUrlInitialization.js +0 -16
  158. package/dist/mapper/hls/mapHamToHls/utils/getUrlInitialization.js.map +0 -1
  159. package/dist/mapper/hls/mapHlsToHam/audioGroupsToSwitchingSets.d.ts +0 -16
  160. package/dist/mapper/hls/mapHlsToHam/audioGroupsToSwitchingSets.d.ts.map +0 -1
  161. package/dist/mapper/hls/mapHlsToHam/audioGroupsToSwitchingSets.js +0 -55
  162. package/dist/mapper/hls/mapHlsToHam/audioGroupsToSwitchingSets.js.map +0 -1
  163. package/dist/mapper/hls/mapHlsToHam/mapHlsToHam.d.ts +0 -4
  164. package/dist/mapper/hls/mapHlsToHam/mapHlsToHam.d.ts.map +0 -1
  165. package/dist/mapper/hls/mapHlsToHam/mapHlsToHam.js +0 -41
  166. package/dist/mapper/hls/mapHlsToHam/mapHlsToHam.js.map +0 -1
  167. package/dist/mapper/hls/mapHlsToHam/subtitleGroupsToSwitchingSets.d.ts +0 -4
  168. package/dist/mapper/hls/mapHlsToHam/subtitleGroupsToSwitchingSets.d.ts.map +0 -1
  169. package/dist/mapper/hls/mapHlsToHam/subtitleGroupsToSwitchingSets.js +0 -35
  170. package/dist/mapper/hls/mapHlsToHam/subtitleGroupsToSwitchingSets.js.map +0 -1
  171. package/dist/mapper/hls/mapHlsToHam/utils/formatSegments.d.ts +0 -14
  172. package/dist/mapper/hls/mapHlsToHam/utils/formatSegments.d.ts.map +0 -1
  173. package/dist/mapper/hls/mapHlsToHam/utils/formatSegments.js +0 -23
  174. package/dist/mapper/hls/mapHlsToHam/utils/formatSegments.js.map +0 -1
  175. package/dist/mapper/hls/mapHlsToHam/utils/getByterange.d.ts +0 -13
  176. package/dist/mapper/hls/mapHlsToHam/utils/getByterange.d.ts.map +0 -1
  177. package/dist/mapper/hls/mapHlsToHam/utils/getByterange.js +0 -17
  178. package/dist/mapper/hls/mapHlsToHam/utils/getByterange.js.map +0 -1
  179. package/dist/mapper/hls/mapHlsToHam/utils/getCodec.d.ts +0 -13
  180. package/dist/mapper/hls/mapHlsToHam/utils/getCodec.d.ts.map +0 -1
  181. package/dist/mapper/hls/mapHlsToHam/utils/getCodec.js +0 -31
  182. package/dist/mapper/hls/mapHlsToHam/utils/getCodec.js.map +0 -1
  183. package/dist/mapper/hls/mapHlsToHam/utils/getDuration.d.ts +0 -17
  184. package/dist/mapper/hls/mapHlsToHam/utils/getDuration.d.ts.map +0 -1
  185. package/dist/mapper/hls/mapHlsToHam/utils/getDuration.js +0 -21
  186. package/dist/mapper/hls/mapHlsToHam/utils/getDuration.js.map +0 -1
  187. package/dist/mapper/hls/mapHlsToHam/videoPlaylistsToSwitchingSets.d.ts +0 -5
  188. package/dist/mapper/hls/mapHlsToHam/videoPlaylistsToSwitchingSets.d.ts.map +0 -1
  189. package/dist/mapper/hls/mapHlsToHam/videoPlaylistsToSwitchingSets.js +0 -46
  190. package/dist/mapper/hls/mapHlsToHam/videoPlaylistsToSwitchingSets.js.map +0 -1
  191. package/dist/services/converters/dashToHam.d.ts +0 -20
  192. package/dist/services/converters/dashToHam.d.ts.map +0 -1
  193. package/dist/services/converters/dashToHam.js +0 -25
  194. package/dist/services/converters/dashToHam.js.map +0 -1
  195. package/dist/services/converters/hamToDash.d.ts +0 -21
  196. package/dist/services/converters/hamToDash.d.ts.map +0 -1
  197. package/dist/services/converters/hamToDash.js +0 -25
  198. package/dist/services/converters/hamToDash.js.map +0 -1
  199. package/dist/services/converters/hamToHls.d.ts +0 -21
  200. package/dist/services/converters/hamToHls.d.ts.map +0 -1
  201. package/dist/services/converters/hamToHls.js +0 -25
  202. package/dist/services/converters/hamToHls.js.map +0 -1
  203. package/dist/services/converters/hlsToHam.d.ts +0 -21
  204. package/dist/services/converters/hlsToHam.d.ts.map +0 -1
  205. package/dist/services/converters/hlsToHam.js +0 -33
  206. package/dist/services/converters/hlsToHam.js.map +0 -1
  207. package/dist/services/getters/getTracksFromPresentation.d.ts +0 -13
  208. package/dist/services/getters/getTracksFromPresentation.d.ts.map +0 -1
  209. package/dist/services/getters/getTracksFromPresentation.js +0 -15
  210. package/dist/services/getters/getTracksFromPresentation.js.map +0 -1
  211. package/dist/services/getters/getTracksFromSelectionSet.d.ts +0 -13
  212. package/dist/services/getters/getTracksFromSelectionSet.d.ts.map +0 -1
  213. package/dist/services/getters/getTracksFromSelectionSet.js +0 -15
  214. package/dist/services/getters/getTracksFromSelectionSet.js.map +0 -1
  215. package/dist/services/getters/getTracksFromSwitchingSet.d.ts +0 -13
  216. package/dist/services/getters/getTracksFromSwitchingSet.d.ts.map +0 -1
  217. package/dist/services/getters/getTracksFromSwitchingSet.js +0 -14
  218. package/dist/services/getters/getTracksFromSwitchingSet.js.map +0 -1
  219. package/dist/services/validators/validatePresentation.d.ts +0 -29
  220. package/dist/services/validators/validatePresentation.d.ts.map +0 -1
  221. package/dist/services/validators/validatePresentation.js +0 -36
  222. package/dist/services/validators/validatePresentation.js.map +0 -1
  223. package/dist/services/validators/validateSegment.d.ts +0 -18
  224. package/dist/services/validators/validateSegment.d.ts.map +0 -1
  225. package/dist/services/validators/validateSegment.js +0 -33
  226. package/dist/services/validators/validateSegment.js.map +0 -1
  227. package/dist/services/validators/validateSegments.d.ts +0 -27
  228. package/dist/services/validators/validateSegments.d.ts.map +0 -1
  229. package/dist/services/validators/validateSegments.js +0 -35
  230. package/dist/services/validators/validateSegments.js.map +0 -1
  231. package/dist/services/validators/validateSelectionSet.d.ts +0 -31
  232. package/dist/services/validators/validateSelectionSet.d.ts.map +0 -1
  233. package/dist/services/validators/validateSelectionSet.js +0 -44
  234. package/dist/services/validators/validateSelectionSet.js.map +0 -1
  235. package/dist/services/validators/validateSelectionSets.d.ts +0 -28
  236. package/dist/services/validators/validateSelectionSets.d.ts.map +0 -1
  237. package/dist/services/validators/validateSelectionSets.js +0 -36
  238. package/dist/services/validators/validateSelectionSets.js.map +0 -1
  239. package/dist/services/validators/validateSwitchingSet.d.ts +0 -31
  240. package/dist/services/validators/validateSwitchingSet.d.ts.map +0 -1
  241. package/dist/services/validators/validateSwitchingSet.js +0 -44
  242. package/dist/services/validators/validateSwitchingSet.js.map +0 -1
  243. package/dist/services/validators/validateSwitchingSets.d.ts +0 -28
  244. package/dist/services/validators/validateSwitchingSets.d.ts.map +0 -1
  245. package/dist/services/validators/validateSwitchingSets.js +0 -36
  246. package/dist/services/validators/validateSwitchingSets.js.map +0 -1
  247. package/dist/services/validators/validateTrack.d.ts +0 -32
  248. package/dist/services/validators/validateTrack.d.ts.map +0 -1
  249. package/dist/services/validators/validateTrack.js +0 -140
  250. package/dist/services/validators/validateTrack.js.map +0 -1
  251. package/dist/services/validators/validateTracks.d.ts +0 -28
  252. package/dist/services/validators/validateTracks.d.ts.map +0 -1
  253. package/dist/services/validators/validateTracks.js +0 -47
  254. package/dist/services/validators/validateTracks.js.map +0 -1
  255. package/dist/tsconfig.tsbuildinfo +0 -1
  256. package/dist/types/Validation.d.ts +0 -10
  257. package/dist/types/Validation.d.ts.map +0 -1
  258. package/dist/types/Validation.js +0 -2
  259. package/dist/types/Validation.js.map +0 -1
  260. package/dist/types/manifest/Manifest.d.ts +0 -14
  261. package/dist/types/manifest/Manifest.d.ts.map +0 -1
  262. package/dist/types/manifest/Manifest.js +0 -2
  263. package/dist/types/manifest/Manifest.js.map +0 -1
  264. package/dist/types/manifest/ManifestFormat.d.ts +0 -7
  265. package/dist/types/manifest/ManifestFormat.d.ts.map +0 -1
  266. package/dist/types/manifest/ManifestFormat.js +0 -2
  267. package/dist/types/manifest/ManifestFormat.js.map +0 -1
  268. package/dist/types/mapper/dash/AdaptationSet.d.ts +0 -41
  269. package/dist/types/mapper/dash/AdaptationSet.d.ts.map +0 -1
  270. package/dist/types/mapper/dash/AdaptationSet.js +0 -2
  271. package/dist/types/mapper/dash/AdaptationSet.js.map +0 -1
  272. package/dist/types/mapper/dash/AudioChannelConfiguration.d.ts +0 -12
  273. package/dist/types/mapper/dash/AudioChannelConfiguration.d.ts.map +0 -1
  274. package/dist/types/mapper/dash/AudioChannelConfiguration.js +0 -2
  275. package/dist/types/mapper/dash/AudioChannelConfiguration.js.map +0 -1
  276. package/dist/types/mapper/dash/ContentComponent.d.ts +0 -11
  277. package/dist/types/mapper/dash/ContentComponent.d.ts.map +0 -1
  278. package/dist/types/mapper/dash/ContentComponent.js +0 -2
  279. package/dist/types/mapper/dash/ContentComponent.js.map +0 -1
  280. package/dist/types/mapper/dash/DashManifest.d.ts +0 -20
  281. package/dist/types/mapper/dash/DashManifest.d.ts.map +0 -1
  282. package/dist/types/mapper/dash/DashManifest.js +0 -2
  283. package/dist/types/mapper/dash/DashManifest.js.map +0 -1
  284. package/dist/types/mapper/dash/Initialization.d.ts +0 -12
  285. package/dist/types/mapper/dash/Initialization.d.ts.map +0 -1
  286. package/dist/types/mapper/dash/Initialization.js +0 -2
  287. package/dist/types/mapper/dash/Initialization.js.map +0 -1
  288. package/dist/types/mapper/dash/Period.d.ts +0 -15
  289. package/dist/types/mapper/dash/Period.d.ts.map +0 -1
  290. package/dist/types/mapper/dash/Period.js +0 -2
  291. package/dist/types/mapper/dash/Period.js.map +0 -1
  292. package/dist/types/mapper/dash/Representation.d.ts +0 -30
  293. package/dist/types/mapper/dash/Representation.d.ts.map +0 -1
  294. package/dist/types/mapper/dash/Representation.js +0 -2
  295. package/dist/types/mapper/dash/Representation.js.map +0 -1
  296. package/dist/types/mapper/dash/Role.d.ts +0 -12
  297. package/dist/types/mapper/dash/Role.d.ts.map +0 -1
  298. package/dist/types/mapper/dash/Role.js +0 -2
  299. package/dist/types/mapper/dash/Role.js.map +0 -1
  300. package/dist/types/mapper/dash/SegmentBase.d.ts +0 -15
  301. package/dist/types/mapper/dash/SegmentBase.d.ts.map +0 -1
  302. package/dist/types/mapper/dash/SegmentBase.js +0 -2
  303. package/dist/types/mapper/dash/SegmentBase.js.map +0 -1
  304. package/dist/types/mapper/dash/SegmentList.d.ts +0 -16
  305. package/dist/types/mapper/dash/SegmentList.d.ts.map +0 -1
  306. package/dist/types/mapper/dash/SegmentList.js +0 -2
  307. package/dist/types/mapper/dash/SegmentList.js.map +0 -1
  308. package/dist/types/mapper/dash/SegmentTemplate.d.ts +0 -17
  309. package/dist/types/mapper/dash/SegmentTemplate.d.ts.map +0 -1
  310. package/dist/types/mapper/dash/SegmentTemplate.js +0 -2
  311. package/dist/types/mapper/dash/SegmentTemplate.js.map +0 -1
  312. package/dist/types/mapper/dash/SegmentUrl.d.ts +0 -11
  313. package/dist/types/mapper/dash/SegmentUrl.d.ts.map +0 -1
  314. package/dist/types/mapper/dash/SegmentUrl.js +0 -2
  315. package/dist/types/mapper/dash/SegmentUrl.js.map +0 -1
  316. package/dist/types/mapper/hls/Byterange.d.ts +0 -11
  317. package/dist/types/mapper/hls/Byterange.d.ts.map +0 -1
  318. package/dist/types/mapper/hls/Byterange.js +0 -2
  319. package/dist/types/mapper/hls/Byterange.js.map +0 -1
  320. package/dist/types/mapper/hls/HlsManifest.d.ts +0 -15
  321. package/dist/types/mapper/hls/HlsManifest.d.ts.map +0 -1
  322. package/dist/types/mapper/hls/HlsManifest.js +0 -2
  323. package/dist/types/mapper/hls/HlsManifest.js.map +0 -1
  324. package/dist/types/mapper/hls/MediaGroups.d.ts +0 -22
  325. package/dist/types/mapper/hls/MediaGroups.d.ts.map +0 -1
  326. package/dist/types/mapper/hls/MediaGroups.js +0 -2
  327. package/dist/types/mapper/hls/MediaGroups.js.map +0 -1
  328. package/dist/types/mapper/hls/Playlist.d.ts +0 -18
  329. package/dist/types/mapper/hls/Playlist.d.ts.map +0 -1
  330. package/dist/types/mapper/hls/Playlist.js +0 -2
  331. package/dist/types/mapper/hls/Playlist.js.map +0 -1
  332. package/dist/types/mapper/hls/SegmentHls.d.ts +0 -18
  333. package/dist/types/mapper/hls/SegmentHls.d.ts.map +0 -1
  334. package/dist/types/mapper/hls/SegmentHls.js +0 -2
  335. package/dist/types/mapper/hls/SegmentHls.js.map +0 -1
  336. package/dist/types/model/AlignedSwitchingSet.d.ts +0 -10
  337. package/dist/types/model/AlignedSwitchingSet.d.ts.map +0 -1
  338. package/dist/types/model/AlignedSwitchingSet.js +0 -2
  339. package/dist/types/model/AlignedSwitchingSet.js.map +0 -1
  340. package/dist/types/model/AudioTrack.d.ts +0 -17
  341. package/dist/types/model/AudioTrack.d.ts.map +0 -1
  342. package/dist/types/model/AudioTrack.js +0 -2
  343. package/dist/types/model/AudioTrack.js.map +0 -1
  344. package/dist/types/model/FrameRate.d.ts +0 -14
  345. package/dist/types/model/FrameRate.d.ts.map +0 -1
  346. package/dist/types/model/FrameRate.js +0 -11
  347. package/dist/types/model/FrameRate.js.map +0 -1
  348. package/dist/types/model/Ham.d.ts +0 -11
  349. package/dist/types/model/Ham.d.ts.map +0 -1
  350. package/dist/types/model/Ham.js +0 -2
  351. package/dist/types/model/Ham.js.map +0 -1
  352. package/dist/types/model/Presentation.d.ts +0 -13
  353. package/dist/types/model/Presentation.d.ts.map +0 -1
  354. package/dist/types/model/Presentation.js +0 -2
  355. package/dist/types/model/Presentation.js.map +0 -1
  356. package/dist/types/model/Segment.d.ts +0 -11
  357. package/dist/types/model/Segment.d.ts.map +0 -1
  358. package/dist/types/model/Segment.js +0 -2
  359. package/dist/types/model/Segment.js.map +0 -1
  360. package/dist/types/model/SelectionSet.d.ts +0 -13
  361. package/dist/types/model/SelectionSet.d.ts.map +0 -1
  362. package/dist/types/model/SelectionSet.js +0 -2
  363. package/dist/types/model/SelectionSet.js.map +0 -1
  364. package/dist/types/model/SwitchingSet.d.ts +0 -11
  365. package/dist/types/model/SwitchingSet.d.ts.map +0 -1
  366. package/dist/types/model/SwitchingSet.js +0 -2
  367. package/dist/types/model/SwitchingSet.js.map +0 -1
  368. package/dist/types/model/TextTrack.d.ts +0 -8
  369. package/dist/types/model/TextTrack.d.ts.map +0 -1
  370. package/dist/types/model/TextTrack.js +0 -2
  371. package/dist/types/model/TextTrack.js.map +0 -1
  372. package/dist/types/model/Track.d.ts +0 -32
  373. package/dist/types/model/Track.d.ts.map +0 -1
  374. package/dist/types/model/Track.js +0 -2
  375. package/dist/types/model/Track.js.map +0 -1
  376. package/dist/types/model/TrackType.d.ts +0 -8
  377. package/dist/types/model/TrackType.d.ts.map +0 -1
  378. package/dist/types/model/TrackType.js +0 -2
  379. package/dist/types/model/TrackType.js.map +0 -1
  380. package/dist/types/model/VideoTrack.d.ts +0 -23
  381. package/dist/types/model/VideoTrack.d.ts.map +0 -1
  382. package/dist/types/model/VideoTrack.js +0 -2
  383. package/dist/types/model/VideoTrack.js.map +0 -1
  384. package/dist/utils/constants.d.ts +0 -16
  385. package/dist/utils/constants.d.ts.map +0 -1
  386. package/dist/utils/constants.js +0 -21
  387. package/dist/utils/constants.js.map +0 -1
  388. package/dist/utils/dash/iso8601DurationToNumber.d.ts +0 -2
  389. package/dist/utils/dash/iso8601DurationToNumber.d.ts.map +0 -1
  390. package/dist/utils/dash/iso8601DurationToNumber.js +0 -17
  391. package/dist/utils/dash/iso8601DurationToNumber.js.map +0 -1
  392. package/dist/utils/dash/numberToIso8601Duration.d.ts +0 -2
  393. package/dist/utils/dash/numberToIso8601Duration.d.ts.map +0 -1
  394. package/dist/utils/dash/numberToIso8601Duration.js +0 -13
  395. package/dist/utils/dash/numberToIso8601Duration.js.map +0 -1
  396. package/dist/utils/dash/parseDashManifest.d.ts +0 -22
  397. package/dist/utils/dash/parseDashManifest.d.ts.map +0 -1
  398. package/dist/utils/dash/parseDashManifest.js +0 -24
  399. package/dist/utils/dash/parseDashManifest.js.map +0 -1
  400. package/dist/utils/dash/serializeDashManifest.d.ts +0 -18
  401. package/dist/utils/dash/serializeDashManifest.d.ts.map +0 -1
  402. package/dist/utils/dash/serializeDashManifest.js +0 -20
  403. package/dist/utils/dash/serializeDashManifest.js.map +0 -1
  404. package/dist/utils/hls/parseHlsManifest.d.ts +0 -18
  405. package/dist/utils/hls/parseHlsManifest.d.ts.map +0 -1
  406. package/dist/utils/hls/parseHlsManifest.js +0 -24
  407. package/dist/utils/hls/parseHlsManifest.js.map +0 -1
  408. package/dist/utils/manifest/addMetadataToDash.d.ts +0 -4
  409. package/dist/utils/manifest/addMetadataToDash.d.ts.map +0 -1
  410. package/dist/utils/manifest/addMetadataToDash.js +0 -15
  411. package/dist/utils/manifest/addMetadataToDash.js.map +0 -1
  412. package/dist/utils/manifest/addMetadataToHls.d.ts +0 -3
  413. package/dist/utils/manifest/addMetadataToHls.d.ts.map +0 -1
  414. package/dist/utils/manifest/addMetadataToHls.js +0 -15
  415. package/dist/utils/manifest/addMetadataToHls.js.map +0 -1
  416. package/dist/utils/manifest/getMetadata.d.ts +0 -3
  417. package/dist/utils/manifest/getMetadata.d.ts.map +0 -1
  418. package/dist/utils/manifest/getMetadata.js +0 -5
  419. package/dist/utils/manifest/getMetadata.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkCA,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAElD,cAAc,iDAAiD,CAAC;AAChE,cAAc,iDAAiD,CAAC;AAChE,cAAc,iDAAiD,CAAC;AAEhE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,0CAA0C,CAAC;AACzD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AAExD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC","sourcesContent":["export type * from './types/model/AlignedSwitchingSet.js';\nexport type * from './types/model/AudioTrack.js';\nexport type * from './types/model/FrameRate.js';\nexport type * from './types/model/Ham.js';\nexport type * from './types/model/Presentation.js';\nexport type * from './types/model/Segment.js';\nexport type * from './types/model/SelectionSet.js';\nexport type * from './types/model/SwitchingSet.js';\nexport type * from './types/model/TextTrack.js';\nexport type * from './types/model/Track.js';\nexport type * from './types/model/TrackType.js';\nexport type * from './types/model/VideoTrack.js';\n\nexport type * from './types/manifest/Manifest.js';\nexport type * from './types/manifest/ManifestFormat.js';\nexport type * from './types/mapper/dash/AdaptationSet.js';\nexport type * from './types/mapper/dash/AudioChannelConfiguration.js';\nexport type * from './types/mapper/dash/ContentComponent.js';\nexport type * from './types/mapper/dash/DashManifest.js';\nexport type * from './types/mapper/dash/Initialization.js';\nexport type * from './types/mapper/dash/Period.js';\nexport type * from './types/mapper/dash/Representation.js';\nexport type * from './types/mapper/dash/Role.js';\nexport type * from './types/mapper/dash/SegmentBase.js';\nexport type * from './types/mapper/dash/SegmentList.js';\nexport type * from './types/mapper/dash/SegmentTemplate.js';\nexport type * from './types/mapper/dash/SegmentUrl.js';\nexport type * from './types/mapper/hls/Byterange.js';\nexport type * from './types/mapper/hls/HlsManifest.js';\nexport type * from './types/mapper/hls/MediaGroups.js';\nexport type * from './types/mapper/hls/Playlist.js';\nexport type * from './types/mapper/hls/SegmentHls.js';\nexport type * from './types/Validation.js';\n\nexport * from './services/converters/dashToHam.js';\nexport * from './services/converters/hamToDash.js';\nexport * from './services/converters/hamToHls.js';\nexport * from './services/converters/hlsToHam.js';\n\nexport * from './services/getters/getTracksFromPresentation.js';\nexport * from './services/getters/getTracksFromSelectionSet.js';\nexport * from './services/getters/getTracksFromSwitchingSet.js';\n\nexport * from './services/validators/validatePresentation.js';\nexport * from './services/validators/validateSegment.js';\nexport * from './services/validators/validateSegments.js';\nexport * from './services/validators/validateSelectionSet.js';\nexport * from './services/validators/validateSelectionSets.js';\nexport * from './services/validators/validateSwitchingSet.js';\nexport * from './services/validators/validateSwitchingSets.js';\nexport * from './services/validators/validateTrack.js';\nexport * from './services/validators/validateTracks.js';\n\nexport * from './utils/dash/parseDashManifest.js';\nexport * from './utils/dash/serializeDashManifest.js';\nexport * from './utils/hls/parseHlsManifest.js';\n\n"]}
1
+ {"version":3,"file":"index.js","names":["segments: Segment[]","numberOfSegments: number","init: number","segments: Segment[]","segmentTemplate: SegmentTemplate | undefined","segmentList: SegmentList[] | undefined","channels: number","frameRateDash: string","sampleRate: number","sar: string","byteRange: string","url: string","initializationUrl: string | undefined","duration: number","presentationId: string","selectionSetGroups: { [group: string]: SelectionSet }","tracks: Track[]","group: string","segments: SegmentBase[]","firstSegment: SegmentBase | undefined","initRange: number","newSegment: SegmentBase | undefined","segmentList: SegmentList[]","segmentURLs: SegmentURL[]","getFrameRate","frameRate: string | undefined","representation: Representation","getFrameRate","getFrameRate","xmlSerializer: DashSerializer","periods: Period[]","dashParser: DashParser","metadata: Map<string, string> | undefined","dashManifest: DashManifest | undefined","mapperContext: MapperContext","mapperContext: MapperContext","playlists: Manifest[]","hlsParser: HlsParser","audioSwitchingSets: SwitchingSet[]","audioTracks: AudioTrack[]","subtitleSwitchingSets: SwitchingSet[]","textTracks: TextTrack[]","switchingSetVideos: SwitchingSet[]","videoTracks: VideoTrack[]","segments: Segment[]","selectionSets: SelectionSet[]","presentations: Presentation[]","validation: Validation","validation: Validation","validation: Validation","validation: Validation","tracksDuration: number","validation: Validation","validation: Validation","validation: Validation","validation: Validation","validation: Validation"],"sources":["../src/mapper/dash/mapDashToHam/mapSegmentBase.ts","../src/mapper/dash/mapDashToHam/utils/calculateDuration.ts","../src/mapper/dash/mapDashToHam/mapSegmentList.ts","../src/mapper/dash/mapDashToHam/utils/getNumberOfSegments.ts","../src/mapper/dash/mapDashToHam/utils/getUrlFromTemplate.ts","../src/mapper/dash/mapDashToHam/mapSegmentTemplate.ts","../src/mapper/dash/mapDashToHam/mapSegments.ts","../src/mapper/dash/mapDashToHam/utils/getChannels.ts","../src/mapper/dash/mapDashToHam/utils/getCodec.ts","../src/mapper/dash/mapDashToHam/utils/getContentType.ts","../src/utils/constants.ts","../src/mapper/dash/mapDashToHam/utils/getFrameRate.ts","../src/mapper/dash/mapDashToHam/utils/getGroup.ts","../src/mapper/dash/mapDashToHam/utils/getLanguage.ts","../src/mapper/dash/mapDashToHam/utils/getPresentationId.ts","../src/mapper/dash/mapDashToHam/utils/getSampleRate.ts","../src/mapper/dash/mapDashToHam/utils/getSar.ts","../src/mapper/dash/mapDashToHam/utils/getTrackDuration.ts","../src/mapper/dash/mapHamToDash/utils/getTimescale.ts","../src/mapper/hls/mapHamToHls/utils/encodeByteRange.ts","../src/mapper/hls/mapHamToHls/utils/getUrlInitialization.ts","../src/mapper/hls/mapHamToHls/utils/getPlaylistData.ts","../src/mapper/hls/mapHamToHls/utils/getSegments.ts","../src/mapper/hls/mapHlsToHam/utils/decodeByteRange.ts","../src/mapper/hls/mapHlsToHam/utils/formatSegments.ts","../src/mapper/hls/mapHlsToHam/utils/getDuration.ts","../src/mapper/hls/mapHlsToHam/utils/getHlsCodec.ts","../src/utils/dash/iso8601DurationToNumber.ts","../src/mapper/dash/mapDashToHam/utils/getInitializationUrl.ts","../src/mapper/dash/mapDashToHam/mapTracks.ts","../src/mapper/dash/mapDashToHam/mapDashToHam.ts","../src/mapper/dash/mapHamToDash/trackToSegmentBase.ts","../src/mapper/dash/mapHamToDash/trackToSegmentList.ts","../src/mapper/dash/mapHamToDash/utils/getFrameRate.ts","../src/mapper/dash/mapHamToDash/tracksToRepresentation.ts","../src/mapper/dash/mapHamToDash/selectionSetsToAdaptationSet.ts","../src/utils/dash/numberToIso8601Duration.ts","../src/mapper/dash/mapHamToDash/presentationsToPeriods.ts","../src/utils/dash/serializeDashManifest.ts","../src/mapper/dash/mapHamToDash/mapHamToDash.ts","../src/utils/dash/parseDashManifest.ts","../src/utils/manifest/addMetadataToDash.ts","../src/utils/manifest/getMetadata.ts","../src/mapper/dash/DashMapper.ts","../src/mapper/MapperContext.ts","../src/services/converters/dashToHam.ts","../src/services/converters/hamToDash.ts","../src/mapper/hls/mapHamToHls/generateManifestPlaylistPiece.ts","../src/mapper/hls/mapHamToHls/mapHamToHls.ts","../src/utils/hls/parseHlsManifest.ts","../src/mapper/hls/mapHlsToHam/audioGroupsToSwitchingSets.ts","../src/mapper/hls/mapHlsToHam/subtitleGroupsToSwitchingSets.ts","../src/mapper/hls/mapHlsToHam/videoPlaylistsToSwitchingSets.ts","../src/utils/manifest/addMetadataToHls.ts","../src/mapper/hls/mapHlsToHam/mapHlsToHam.ts","../src/mapper/hls/HlsMapper.ts","../src/services/converters/hamToHls.ts","../src/services/converters/hlsToHam.ts","../src/services/getters/getTracksFromSwitchingSet.ts","../src/services/getters/getTracksFromSelectionSet.ts","../src/services/getters/getTracksFromPresentation.ts","../src/services/validators/validateSegment.ts","../src/services/validators/validateSegments.ts","../src/services/validators/validateTrack.ts","../src/services/validators/validateTracks.ts","../src/services/validators/validateSwitchingSet.ts","../src/services/validators/validateSwitchingSets.ts","../src/services/validators/validateSelectionSet.ts","../src/services/validators/validateSelectionSets.ts","../src/services/validators/validatePresentation.ts"],"sourcesContent":["import type { Representation } from '../../../types/mapper/dash/Representation.js';\nimport type { SegmentBase } from '../../../types/mapper/dash/SegmentBase.js';\n\nimport type { Segment } from '../../../types/model/Segment.js';\n\n/**\n * @internal\n *\n * Maps SegmentBase from dash to Segment list from ham.\n *\n * @param representation - Representation to get the SegmentBase from\n * @param duration - Duration of the segment\n * @returns list of ham segments\n */\nexport function mapSegmentBase(\n\trepresentation: Representation,\n\tduration: number,\n): Segment[] {\n\treturn representation.SegmentBase!.map((segment: SegmentBase) => {\n\t\treturn {\n\t\t\tduration,\n\t\t\turl: representation.BaseURL![0] ?? '',\n\t\t\tbyteRange: segment.$.indexRange,\n\t\t} as Segment;\n\t});\n}\n","/**\n * @internal\n *\n * Calculates the duration of a segment.\n *\n * segmentDuration = duration / timescale\n *\n * @param duration - Duration of the segment\n * @param timescale - Timescale of the segment\n * @returns Segment duration\n */\nexport function calculateDuration(\n\tduration: string | undefined,\n\ttimescale: string | undefined,\n): number {\n\tif (!duration || !timescale) {\n\t\treturn 1;\n\t}\n\treturn +(duration ?? 1) / +(timescale ?? 1);\n}\n","import type { SegmentList } from '../../../types/mapper/dash/SegmentList.js';\nimport type { SegmentURL } from '../../../types/mapper/dash/SegmentUrl.js';\n\nimport type { Segment } from '../../../types/model/Segment.js';\n\nimport { calculateDuration } from './utils/calculateDuration.js';\n\n/**\n * @internal\n *\n * Maps SegmentList from dash to Segment list from ham.\n *\n * @param segmentList - SegmentList list from dash\n * @returns list of ham segments\n */\nexport function mapSegmentList(segmentList: SegmentList[]): Segment[] {\n\tconst segments: Segment[] = [];\n\tsegmentList.map((segment: SegmentList) => {\n\t\tif (segment.SegmentURL) {\n\t\t\treturn segment.SegmentURL.forEach((segmentURL: SegmentURL) => {\n\t\t\t\tsegments.push({\n\t\t\t\t\tduration: calculateDuration(\n\t\t\t\t\t\tsegment.$.duration,\n\t\t\t\t\t\tsegment.$.timescale,\n\t\t\t\t\t),\n\t\t\t\t\turl: segmentURL.$.media ?? '',\n\t\t\t\t} as Segment);\n\t\t\t});\n\t\t}\n\t});\n\treturn segments;\n}\n","import type { SegmentTemplate } from '../../../../types/mapper/dash/SegmentTemplate.js';\nimport { calculateDuration } from './calculateDuration.js';\n/**\n * @internal\n *\n * Calculates the number of segments that a track has to use SegmentTemplate.\n *\n * Equation used:\n * segments = total duration / (segment duration / timescale)\n *\n * **This equation might be wrong, please double-check it**\n *\n * @param segmentTemplate - SegmentTemplate object\n * @param duration - Total duration of the content\n * @returns Number of segments\n */\nexport function getNumberOfSegments(\n\tsegmentTemplate: SegmentTemplate,\n\tduration: number,\n): number {\n\t// FIXME: This equation may be wrong\n\treturn Math.round(\n\t\tduration /\n\t\tcalculateDuration(\n\t\t\tsegmentTemplate.$.duration,\n\t\t\tsegmentTemplate.$.timescale,\n\t\t),\n\t);\n}\n","import type { Representation } from '../../../../types/mapper/dash/Representation.js';\nimport type { SegmentTemplate } from '../../../../types/mapper/dash/SegmentTemplate.js';\n\n/**\n * @internal\n *\n * Create the url from a segment template.\n *\n * Searches for substrings with the format `$value$` and replaces it with the correct value.\n * - RepresentationID: id of the representation\n * - Number: id of the segment. `%0Xd` defines the number `X` of digits it needs to have\n *\n * @param representation - Representation of the template\n * @param segmentTemplate - Segment template\n * @param segmentId - Segment id\n * @returns url from the segment template\n */\nexport function getUrlFromTemplate(\n\trepresentation: Representation,\n\tsegmentTemplate: SegmentTemplate,\n\tsegmentId: number,\n): string {\n\tconst regexTemplate = /\\$(.*?)\\$/g;\n\treturn segmentTemplate.$.media.replace(regexTemplate, (match: any) => {\n\t\tif (match.includes('RepresentationID')) {\n\t\t\treturn representation.$.id;\n\t\t}\n\t\t/**\n\t\t * Number with 4 digits e.g: 0001\n\t\t */\n\t\tif (match.includes('Number%04d')) {\n\t\t\treturn segmentId.toString().padStart(4, '0');\n\t\t}\n\t\tif (match.includes('Number')) {\n\t\t\treturn segmentId;\n\t\t}\n\t\tconsole.error(\n\t\t\t`Unknown property ${match} from the SegmentTemplate on representation ${representation.$.id}`,\n\t\t);\n\t\treturn match;\n\t});\n}\n","import type { Representation } from '../../../types/mapper/dash/Representation.js';\nimport type { SegmentTemplate } from '../../../types/mapper/dash/SegmentTemplate.js';\n\nimport type { Segment } from '../../../types/model/Segment.js';\n\nimport { calculateDuration } from './utils/calculateDuration.js';\nimport { getNumberOfSegments } from './utils/getNumberOfSegments.js';\nimport { getUrlFromTemplate } from './utils/getUrlFromTemplate.js';\n\n/**\n * @internal\n *\n * Maps SegmentTemplate from dash to Segment list from ham.\n *\n * @param representation - Representation to generate the urls\n * @param duration - Duration of the segments\n * @param segmentTemplate - SegmentTemplate to get the properties from\n * @returns list of ham segments\n */\nexport function mapSegmentTemplate(\n\trepresentation: Representation,\n\tduration: number,\n\tsegmentTemplate: SegmentTemplate,\n): Segment[] {\n\tconst numberOfSegments: number = getNumberOfSegments(\n\t\tsegmentTemplate,\n\t\tduration,\n\t);\n\tconst init: number = +(segmentTemplate.$.startNumber ?? 0);\n\tconst segments: Segment[] = [];\n\tfor (let id = init; id < numberOfSegments + init; id++) {\n\t\tsegments.push({\n\t\t\tduration: calculateDuration(\n\t\t\t\tsegmentTemplate.$.duration,\n\t\t\t\tsegmentTemplate.$.timescale,\n\t\t\t),\n\t\t\turl: getUrlFromTemplate(representation, segmentTemplate, id),\n\t\t} as Segment);\n\t}\n\treturn segments;\n}\n","import type { AdaptationSet } from '../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../types/mapper/dash/Representation.js';\nimport type { SegmentList } from '../../../types/mapper/dash/SegmentList.js';\nimport type { SegmentTemplate } from '../../../types/mapper/dash/SegmentTemplate.js';\n\nimport type { Segment } from '../../../types/model/Segment.js';\n\nimport { mapSegmentBase } from './mapSegmentBase.js';\nimport { mapSegmentList } from './mapSegmentList.js';\nimport { mapSegmentTemplate } from './mapSegmentTemplate.js';\n\n/**\n * @internal\n *\n * Maps dash segments to ham segment.\n *\n * Checks the type of dash segments used to map them accordingly.\n * @see mapSegmentBase\n * @see mapSegmentList\n * @see mapSegmentTemplate\n *\n * @param adaptationSet - AdaptationSet to get the segments from\n * @param representation - Representation to get the segments from\n * @param duration - Duration of the segments\n * @returns list of ham segments\n */\nexport function mapSegments(\n\tadaptationSet: AdaptationSet,\n\trepresentation: Representation,\n\tduration: number,\n): Segment[] {\n\tconst segmentTemplate: SegmentTemplate | undefined =\n\t\tadaptationSet.SegmentTemplate?.at(0) ??\n\t\trepresentation.SegmentTemplate?.at(0);\n\tconst segmentList: SegmentList[] | undefined =\n\t\tadaptationSet.SegmentList ?? representation.SegmentList;\n\tif (representation.SegmentBase) {\n\t\treturn mapSegmentBase(representation, duration);\n\t}\n\telse if (segmentList) {\n\t\treturn mapSegmentList(segmentList);\n\t}\n\telse if (segmentTemplate) {\n\t\treturn mapSegmentTemplate(representation, duration, segmentTemplate);\n\t}\n\telse {\n\t\tconsole.error(`Representation ${representation.$.id} has no segments`);\n\t\treturn [] as Segment[];\n\t}\n}\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../../types/mapper/dash/Representation.js';\n\n/**\n * @internal\n *\n * Get the channels value (audio). It can be present on adaptationSet or representation.\n *\n * @param adaptationSet - AdaptationSet to try to get the channels from\n * @param representation - Representation to try to get the channels from\n * @returns Channels value\n */\nexport function getChannels(\n\tadaptationSet: AdaptationSet,\n\trepresentation: Representation,\n): number {\n\tconst channels: number = +(\n\t\tadaptationSet.AudioChannelConfiguration?.at(0)?.$.value ??\n\t\trepresentation.AudioChannelConfiguration?.at(0)?.$.value ??\n\t\t0\n\t);\n\tif (!channels) {\n\t\tconsole.error(`Representation ${representation.$.id} has no channels`);\n\t}\n\treturn channels;\n}\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../../types/mapper/dash/Representation.js';\n\n/**\n * @internal\n *\n * Get the codec value (video and audio). It can be present on adaptationSet or representation.\n *\n * @param adaptationSet - AdaptationSet to try to get the codec from\n * @param representation - Representation to try to get the codec from\n * @returns Content codec\n */\nexport function getCodec(\n\tadaptationSet: AdaptationSet,\n\trepresentation: Representation,\n): string {\n\tconst codec = representation.$.codecs ?? adaptationSet.$.codecs ?? '';\n\tif (!codec) {\n\t\tconsole.error(`Representation ${representation.$.id} has no codecs`);\n\t}\n\treturn codec;\n}\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../../types/mapper/dash/Representation.js';\n\n/**\n * @internal\n *\n * Get the type of the content. It can be obtained directly from AdaptationSet or Representation\n * or can be inferred with the existing properties.\n *\n * @param adaptationSet - AdaptationSet to get the type from\n * @param representation - Representation to get the type from\n * @returns type of the content\n */\nexport function getContentType(\n\tadaptationSet: AdaptationSet,\n\trepresentation?: Representation,\n): string {\n\tif (adaptationSet.$.contentType) {\n\t\treturn adaptationSet.$.contentType;\n\t}\n\tif (adaptationSet.ContentComponent?.at(0)) {\n\t\treturn adaptationSet.ContentComponent.at(0)!.$.contentType;\n\t}\n\tif (adaptationSet.$.mimeType || representation?.$.mimeType) {\n\t\tconst type =\n\t\t\tadaptationSet.$.mimeType?.split('/')[0] ||\n\t\t\trepresentation?.$.mimeType?.split('/')[0];\n\t\tif (type === 'audio' || type === 'video' || type === 'text') {\n\t\t\treturn type;\n\t\t}\n\t\tif (type === 'application') {\n\t\t\treturn 'text';\n\t\t}\n\t}\n\tif (adaptationSet.$.maxHeight) {\n\t\treturn 'video';\n\t}\n\tconst adaptationRef =\n\t\tadaptationSet.$.id ??\n\t\t`group: ${adaptationSet.$.group}, lang: ${adaptationSet.$.lang}`;\n\tconsole.error(\n\t\t`Could not find contentType from adaptationSet ${adaptationRef}`,\n\t);\n\tconsole.info('Using \"text\" as default contentType');\n\treturn 'text';\n}\n","// Dash Timescale defaults\nexport const TIMESCALE_90000 = 90000;\nexport const TIMESCALE_48000 = 48000;\nexport const TIMESCALE_1000 = 1000;\n\n// Using 90000 as default for video since it is divisible by 24, 25 and 30\nexport const VIDEO_SAMPLE_RATE = 90000;\n\n// Using 1000 as default for text\nexport const TEXT_SAMPLE_RATE = 1000;\n\n// Frame rate numerator default\nexport const FRAME_RATE_NUMERATOR_30 = 30;\n\n// Manifest parser constants\nexport const WHITE_SPACE = ' ';\nexport const WHITE_SPACE_ENCODED = '%20'; //In some players , white space is not supported\nexport const NEW_LINE = '\\n';\nexport const HYPHEN_MINUS_SEPARATOR = '-'; //In Dash it is used to separate the start and end of a byte range\nexport const AT_SEPARATOR = '@'; //In Hls it is used to separate the start and end of a byte range\nexport const FRAME_RATE_SEPARATOR = '/';\nexport const NUMERATOR = 0;\nexport const DENOMINATOR = 1;\nexport const ZERO = 0;\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../../types/mapper/dash/Representation.js';\n\nimport type { FrameRate } from '../../../../types/model/FrameRate.js';\n\nimport {\n\tDENOMINATOR,\n\tFRAME_RATE_NUMERATOR_30,\n\tFRAME_RATE_SEPARATOR,\n\tNUMERATOR,\n\tZERO,\n} from '../../../../utils/constants.js';\n\n/**\n * @internal\n *\n * Get the frame rate from a dash manifest.\n *\n * This functions assumes the adaptationSet and representation set are type video\n *\n * @param adaptationSet - To try to get the frameRate from\n * @param representation - To try to get the frameRate from\n * @returns object containing numerator and denominator\n */\nexport function getFrameRate(\n\tadaptationSet: AdaptationSet,\n\trepresentation: Representation,\n): FrameRate {\n\tconst frameRateDash: string =\n\t\trepresentation.$.frameRate ?? adaptationSet.$.frameRate ?? '';\n\tif (!frameRateDash) {\n\t\tconsole.error(\n\t\t\t`Representation ${representation.$.id} has no frame rate`,\n\t\t);\n\t}\n\tconst frameRate = frameRateDash.split(FRAME_RATE_SEPARATOR);\n\tconst frameRateNumerator = parseInt(frameRate.at(NUMERATOR) ?? '');\n\tconst frameRateDenominator = parseInt(frameRate.at(DENOMINATOR) ?? '');\n\n\treturn {\n\t\tframeRateNumerator: isNaN(frameRateNumerator)\n\t\t\t? FRAME_RATE_NUMERATOR_30\n\t\t\t: frameRateNumerator,\n\t\tframeRateDenominator: isNaN(frameRateDenominator)\n\t\t\t? ZERO\n\t\t\t: frameRateDenominator,\n\t} as FrameRate;\n}\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\nimport { getContentType } from './getContentType.js';\n\n/**\n * @internal\n */\nexport function getGroup(adaptationSet: AdaptationSet): string {\n\treturn adaptationSet.$.group ?? getContentType(adaptationSet);\n}\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\n\n/**\n * @internal\n *\n * Get the language from an adaptation set.\n *\n * @param adaptationSet - AdaptationSet to get the language from\n * @returns language of the content\n */\nexport function getLanguage(adaptationSet: AdaptationSet): string {\n\tlet language = adaptationSet.$.lang;\n\tif (!language) {\n\t\tconsole.info(\n\t\t\t`AdaptationSet ${adaptationSet.$.id} has no lang, using \"und\" as default`,\n\t\t);\n\t\tlanguage = 'und';\n\t}\n\treturn language;\n}\n","import type { Period } from '../../../../types/mapper/dash/Period.js';\n\n/**\n * @internal\n *\n * Generates a presentation id. It uses the period id as default or creates one\n * if none is present.\n *\n * @param period - Period to try to get the id from\n * @param duration - Duration of the content\n * @returns Presentation id\n */\nexport function getPresentationId(period: Period, duration: number): string {\n\treturn period.$.id ?? `presentation-id-${duration}`;\n}\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../../types/mapper/dash/Representation.js';\n\n/**\n * @internal\n *\n * Get sample rate (audio).\n *\n * @param adaptationSet - AdaptationSet to try to get the sampleRate from\n * @param representation - Representation to try to get the sampleRate from\n * @returns Sample rate. In case it is not presents, it returns 0.\n */\nexport function getSampleRate(\n\tadaptationSet: AdaptationSet,\n\trepresentation: Representation,\n): number {\n\tconst sampleRate: number = +(\n\t\trepresentation.$.audioSamplingRate ??\n\t\tadaptationSet.$.audioSamplingRate ??\n\t\t0\n\t);\n\tif (!sampleRate) {\n\t\tconsole.error(\n\t\t\t`Representation ${representation.$.id} has no audioSamplingRate`,\n\t\t);\n\t}\n\treturn sampleRate;\n}\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../../types/mapper/dash/Representation.js';\n\n/**\n * @internal\n *\n * Get the sar value. It can be present on adaptationSet or representation.\n *\n * @param adaptationSet - AdaptationSet to try to get the sar from\n * @param representation - AdaptationSet to try to get the sar from\n * @returns sar value. In case it is not present, returns empty string.\n */\nexport function getSar(\n\tadaptationSet: AdaptationSet,\n\trepresentation: Representation,\n): string {\n\tconst sar: string = representation.$.sar ?? adaptationSet.$.sar ?? '';\n\tif (!sar) {\n\t\tconsole.error(`Representation ${representation.$.id} has no sar`);\n\t}\n\treturn sar;\n}\n","import type { Segment } from '../../../../types/model/Segment.js';\n\n/**\n * @internal\n *\n * Calculate the duration of a track.\n *\n * This is calculated using the sum of the duration of all the segments from the\n * track.\n *\n * An alternative to this could be number of segments * duration of a segment.\n *\n * @param segments - Segments to calculate the sum of the durations\n * @returns Duration of the track\n */\nexport function getTrackDuration(segments: Segment[]): number {\n\treturn segments.reduce((acc: number, segment: Segment) => {\n\t\treturn acc + segment.duration;\n\t}, 0);\n}\n","import type { AudioTrack } from '../../../../types/model/AudioTrack.js';\nimport type { Track } from '../../../../types/model/Track.js';\n\nimport {\n\tTEXT_SAMPLE_RATE,\n\tTIMESCALE_48000,\n\tVIDEO_SAMPLE_RATE,\n} from '../../../../utils/constants.js';\n\n/**\n * @internal\n *\n * This function tries to recreate the timescale value.\n *\n * This value is not stored on the ham object, so it is not possible (for now)\n * to get the original one.\n *\n * Just the audio tracks have this value stored on the `sampleRate` key.\n *\n * @param track - Track to get the timescale from\n * @returns Timescale in numbers\n */\n\nexport function getTimescale(track: Track): number {\n\tif (track?.type === 'audio') {\n\t\tconst audioTrack = track as AudioTrack;\n\t\treturn audioTrack.sampleRate !== 0\n\t\t\t? audioTrack.sampleRate\n\t\t\t: TIMESCALE_48000;\n\t}\n\tif (track?.type === 'video') {\n\t\treturn VIDEO_SAMPLE_RATE;\n\t}\n\tif (track?.type === 'text') {\n\t\treturn TEXT_SAMPLE_RATE;\n\t}\n\treturn VIDEO_SAMPLE_RATE;\n}\n","import type { AudioTrack } from '../../../../types/model/AudioTrack.ts';\nimport type { VideoTrack } from '../../../../types/model/VideoTrack.ts';\n\nimport {\n\tAT_SEPARATOR,\n\tHYPHEN_MINUS_SEPARATOR,\n} from '../../../../utils/constants.ts';\n\n/**\n * @internal\n *\n * Get the byterange in hls format from ham track.\n *\n * @param track - Track to get the byterange from\n * @returns string containing the byterange in the hls format\n *\n * @alpha\n */\nexport function encodeByteRange(track: VideoTrack | AudioTrack): string {\n\tif (track.byteRange) {\n\t\treturn `BYTERANGE:${track.byteRange.replace(HYPHEN_MINUS_SEPARATOR, AT_SEPARATOR)}\\n`;\n\t}\n\telse if (track.segments?.at(0)?.byteRange) {\n\t\treturn `BYTERANGE:0@${Number(track.segments.at(0)?.byteRange?.replace(HYPHEN_MINUS_SEPARATOR, AT_SEPARATOR).split(AT_SEPARATOR)[0]) - 1}\\n`;\n\t}\n\treturn '';\n}\n","import type { AudioTrack } from '../../../../types/model/AudioTrack.js';\nimport type { VideoTrack } from '../../../../types/model/VideoTrack.js';\n\nimport {\n\tWHITE_SPACE,\n\tWHITE_SPACE_ENCODED,\n} from '../../../../utils/constants.js';\n\n/**\n * @internal\n *\n * Get url initialization from ham track.\n *\n * @param track - Track to get the url initialization from\n * @returns string containing the url initialization in the hls format\n *\n * @alpha\n */\nexport function getUrlInitialization(track: VideoTrack | AudioTrack): string {\n\treturn (\n\t\ttrack.urlInitialization?.replaceAll(WHITE_SPACE, WHITE_SPACE_ENCODED) ??\n\t\t''\n\t);\n}\n","import type { AudioTrack } from '../../../../types/model/AudioTrack.js';\nimport type { VideoTrack } from '../../../../types/model/VideoTrack.js';\n\nimport { encodeByteRange } from './encodeByteRange.ts';\nimport { getUrlInitialization } from './getUrlInitialization.js';\n\n/**\n * @internal\n *\n * Get the playlist data in hls format from ham track.\n *\n * @param track - Track to get the playlist data from\n * @returns string containing the playlist data in the hls format\n *\n * @alpha\n */\nexport function getPlaylistData(track: AudioTrack | VideoTrack): string {\n\treturn `#EXT-X-MAP:URI=\"${getUrlInitialization(track)}\",${encodeByteRange(track)}\\n`;\n}\n","import type { Segment } from '../../../../types/model/Segment.js';\n\nimport {\n\tAT_SEPARATOR,\n\tHYPHEN_MINUS_SEPARATOR,\n\tWHITE_SPACE,\n\tWHITE_SPACE_ENCODED,\n} from '../../../../utils/constants.js';\n\n/**\n * @internal\n *\n * Format the ham segments to hls.\n *\n * @param segments - Segments to be formatted\n * @returns string containing the segments in the hls format\n *\n * @alpha\n */\nexport function getSegments(segments: Segment[]): string {\n\treturn segments\n\t\t.map((segment: Segment): string => {\n\t\t\tconst byteRange: string = segment.byteRange\n\t\t\t\t? `#EXT-X-BYTERANGE:${segment.byteRange.replace(HYPHEN_MINUS_SEPARATOR, AT_SEPARATOR)}\\n`\n\t\t\t\t: '';\n\t\t\tconst url: string = segment.url.replaceAll(\n\t\t\t\tWHITE_SPACE,\n\t\t\t\tWHITE_SPACE_ENCODED,\n\t\t\t);\n\t\t\treturn `#EXTINF:${segment.duration},\\n${byteRange}\\n${url}`;\n\t\t})\n\t\t.join('\\n');\n}\n","import type { Byterange } from '../../../../types/mapper/hls/Byterange.ts';\n\n/**\n * @internal\n *\n * Get byterange from HLS Manifest.\n *\n * @param byteRange - Byterange object containing length and offset\n * @returns string containing the byterange. If byterange is undefined, it returns undefined\n *\n * @alpha\n */\nexport function decodeByteRange(byteRange: Byterange | undefined): string {\n\tif (!byteRange) {\n\t\treturn '';\n\t}\n\treturn `${byteRange.length}@${byteRange.offset}`;\n}\n","import type { SegmentHls } from '../../../../types/mapper/hls/SegmentHls.js';\nimport type { Segment } from '../../../../types/model/Segment.js';\n\nimport { decodeByteRange } from './decodeByteRange.ts';\n\n/**\n * @internal\n *\n * Format the hls segments into the ham segments.\n *\n * @param segments - List of HLS segments\n * @returns ham formatted list of segments\n *\n * @alpha\n */\nexport function formatSegments(segments: SegmentHls[]): Segment[] {\n\treturn (\n\t\tsegments?.map((segment: SegmentHls) => {\n\t\t\tconst byteRange = decodeByteRange(segment?.byterange);\n\t\t\treturn {\n\t\t\t\tduration: segment.duration,\n\t\t\t\turl: segment.uri,\n\t\t\t\t...(byteRange && { byteRange }),\n\t\t\t} as Segment;\n\t\t}) ?? []\n\t);\n}\n","import type { HlsManifest } from '../../../../types/mapper/hls/HlsManifest.js';\nimport type { SegmentHls } from '../../../../types/mapper/hls/SegmentHls.js';\n\n/**\n * @internal\n *\n * Calculate the duration of a track.\n *\n * `target duration * number of segments`\n *\n * @param manifest - Manifest of the track\n * @param segments - Array of segments in a track\n * @returns duration of a track\n *\n * @alpha\n */\nexport function getDuration(\n\tmanifest: HlsManifest,\n\tsegments: SegmentHls[],\n): number | null {\n\tif (!manifest?.targetDuration) {\n\t\tconsole.error('Could not calculate duration, manifest is undefined.');\n\t\treturn null;\n\t}\n\treturn manifest?.targetDuration * segments.length;\n}\n","/**\n * @internal\n *\n * Get the codec for a type of content.\n *\n * @param type - Type of the content to get the codecs from\n * @param codecs - String containing multiple codecs separated with commas\n * @returns string containing codec\n *\n * @alpha\n */\nexport function getHlsCodec(type: string, codecs?: string): string {\n\tif (type === 'audio') {\n\t\t// Using codec mp4a.40.2 for now, we should retrieve it by finding\n\t\t// the video playlist that is related to this audio group.\n\t\treturn 'mp4a.40.2';\n\t}\n\telse if (type === 'video') {\n\t\t// CODECS could be a comma separated value\n\t\t// where it has video and audio codec. Using\n\t\t// position zero for now.\n\t\t// TODO: Get the correct video codec.\n\t\treturn codecs?.split(',').at(0) ?? '';\n\t}\n\telse {\n\t\t// if (type === 'text')\n\t\treturn '';\n\t}\n}\n","/**\n * @internal\n */\nexport function iso8601DurationToNumber(isoDuration: string): number {\n\tconst hours = /(?:([.,\\d]+)H)/.exec(isoDuration);\n\tconst minutes = /(?:([.,\\d]+)M)/.exec(isoDuration);\n\tconst seconds = /(?:([.,\\d]+)S)/.exec(isoDuration);\n\n\tlet duration = 0;\n\tif (hours) {\n\t\tduration += +hours[1] * 60 * 60;\n\t}\n\tif (minutes) {\n\t\tduration += +minutes[1] * 60;\n\t}\n\tif (seconds) {\n\t\tduration += +seconds[1];\n\t}\n\treturn duration;\n}\n","import type { AdaptationSet } from '../../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../../types/mapper/dash/Representation.js';\n\n/**\n * @internal\n *\n * Get the initialization url. It can be present on AdaptationSet or Representation.\n *\n * Url initialization is present on segments.\n *\n * @param adaptationSet - AdaptationSet to try to get the initialization url from\n * @param representation - Representation to try to get the initialization url from\n */\nexport function getInitializationUrl(\n\tadaptationSet: AdaptationSet,\n\trepresentation: Representation,\n): string | undefined {\n\tlet initializationUrl: string | undefined;\n\tif (representation.SegmentBase) {\n\t\tinitializationUrl = representation.BaseURL![0] ?? '';\n\t}\n\telse if (adaptationSet.SegmentList || representation.SegmentList) {\n\t\tinitializationUrl =\n\t\t\trepresentation.SegmentList?.at(0)?.Initialization[0].$.sourceURL ||\n\t\t\tadaptationSet.SegmentList?.at(0)?.Initialization[0].$.sourceURL;\n\t}\n\tif (adaptationSet.SegmentTemplate || representation.SegmentTemplate) {\n\t\tinitializationUrl =\n\t\t\tadaptationSet.SegmentTemplate?.at(0)?.$.initialization ||\n\t\t\trepresentation.SegmentTemplate?.at(0)?.$.initialization;\n\t\tif (initializationUrl?.includes('$RepresentationID$')) {\n\t\t\tinitializationUrl = initializationUrl.replace(\n\t\t\t\t'$RepresentationID$',\n\t\t\t\trepresentation.$.id ?? '',\n\t\t\t);\n\t\t}\n\t}\n\treturn initializationUrl;\n}\n","import type { AdaptationSet } from '../../../types/mapper/dash/AdaptationSet.js';\nimport type { Representation } from '../../../types/mapper/dash/Representation.js';\n\nimport type { AudioTrack } from '../../../types/model/AudioTrack.js';\nimport type { Segment } from '../../../types/model/Segment.js';\nimport type { TextTrack } from '../../../types/model/TextTrack.js';\nimport type { VideoTrack } from '../../../types/model/VideoTrack.js';\n\n\nimport { getChannels } from './utils/getChannels.js';\nimport { getCodec } from './utils/getCodec.js';\nimport { getContentType } from './utils/getContentType.js';\nimport { getFrameRate } from './utils/getFrameRate.js';\nimport { getLanguage } from './utils/getLanguage.js';\nimport { getSampleRate } from './utils/getSampleRate.js';\nimport { getSar } from './utils/getSar.js';\nimport { getTrackDuration } from './utils/getTrackDuration.js';\n\n/**\n * @internal\n *\n * Map dash components to ham tracks.\n *\n * @param adaptationSet - AdaptationSet of the dash manifest\n * @param representation - Representation of the dash manifest\n * @param segments - Segments from the representation of the dash manifest\n * @param initializationUrl - Initialization url from the track\n * @returns AudioTrack, VideoTrack or TextTrack depending on the type\n */\nexport function mapTracks(\n\tadaptationSet: AdaptationSet,\n\trepresentation: Representation,\n\tsegments: Segment[],\n\tinitializationUrl: string | undefined,\n): AudioTrack | VideoTrack | TextTrack {\n\tif (!adaptationSet) {\n\t\tthrow new Error('Error: AdaptationSet is undefined');\n\t}\n\tconst type = getContentType(adaptationSet, representation);\n\tif (type === 'video') {\n\t\treturn {\n\t\t\tbandwidth: +(representation.$.bandwidth ?? 0),\n\t\t\tcodec: getCodec(adaptationSet, representation),\n\t\t\tduration: getTrackDuration(segments),\n\t\t\tframeRate: getFrameRate(adaptationSet, representation),\n\t\t\theight: +(representation.$.height ?? 0),\n\t\t\tid: representation.$.id ?? '',\n\t\t\tlanguage: getLanguage(adaptationSet),\n\t\t\tpar: adaptationSet.$.par ?? '',\n\t\t\tsar: getSar(adaptationSet, representation),\n\t\t\tscanType: representation.$.scanType ?? '',\n\t\t\tsegments,\n\t\t\ttype,\n\t\t\twidth: +(representation.$.width ?? 0),\n\t\t\turlInitialization: initializationUrl,\n\t\t} as VideoTrack;\n\t}\n\telse if (type === 'audio') {\n\t\treturn {\n\t\t\tbandwidth: +(representation.$.bandwidth ?? 0),\n\t\t\tchannels: getChannels(adaptationSet, representation),\n\t\t\tcodec: getCodec(adaptationSet, representation),\n\t\t\tduration: getTrackDuration(segments),\n\t\t\tid: representation.$.id ?? '',\n\t\t\tlanguage: getLanguage(adaptationSet),\n\t\t\tsampleRate: getSampleRate(adaptationSet, representation),\n\t\t\tsegments,\n\t\t\ttype,\n\t\t\turlInitialization: initializationUrl,\n\t\t} as AudioTrack;\n\t}\n\telse {\n\t\t// if (type === 'text')\n\t\treturn {\n\t\t\tbandwidth: +(representation.$.bandwidth ?? 0),\n\t\t\tcodec: getCodec(adaptationSet, representation),\n\t\t\tduration: getTrackDuration(segments),\n\t\t\tid: representation.$.id ?? '',\n\t\t\tlanguage: getLanguage(adaptationSet),\n\t\t\tsegments,\n\t\t\ttype,\n\t\t\turlInitialization: initializationUrl,\n\t\t} as TextTrack;\n\t}\n}\n","import type { AdaptationSet } from '../../../types/mapper/dash/AdaptationSet.js';\nimport type { DashManifest } from '../../../types/mapper/dash/DashManifest.js';\nimport type { Period } from '../../../types/mapper/dash/Period.js';\nimport type { Representation } from '../../../types/mapper/dash/Representation.js';\n\nimport type { Presentation } from '../../../types/model/Presentation.js';\nimport type { Segment } from '../../../types/model/Segment.js';\nimport type { SelectionSet } from '../../../types/model/SelectionSet.js';\nimport type { SwitchingSet } from '../../../types/model/SwitchingSet.js';\nimport type { Track } from '../../../types/model/Track.js';\n\nimport { iso8601DurationToNumber } from '../../../utils/dash/iso8601DurationToNumber.js';\n\nimport { getGroup } from './utils/getGroup.js';\nimport { getInitializationUrl } from './utils/getInitializationUrl.js';\nimport { getPresentationId } from './utils/getPresentationId.js';\n\nimport { mapSegments } from './mapSegments.js';\nimport { mapTracks } from './mapTracks.js';\n\n/**\n * @internal\n *\n * Main function to map dash to ham.\n *\n * @param dash - Dash manifest to map\n * @returns List of presentations in ham\n */\nexport function mapDashToHam(dash: DashManifest): Presentation[] {\n\treturn dash.MPD.Period.map((period: Period) => {\n\t\tconst duration: number = iso8601DurationToNumber(period.$.duration);\n\t\tconst presentationId: string = getPresentationId(period, duration);\n\n\t\tconst selectionSetGroups: { [group: string]: SelectionSet } = {};\n\n\t\tperiod.AdaptationSet.map((adaptationSet: AdaptationSet) => {\n\t\t\tconst tracks: Track[] = adaptationSet.Representation.map(\n\t\t\t\t(representation: Representation) => {\n\t\t\t\t\tconst segments: Segment[] = mapSegments(\n\t\t\t\t\t\tadaptationSet,\n\t\t\t\t\t\trepresentation,\n\t\t\t\t\t\tduration,\n\t\t\t\t\t);\n\n\t\t\t\t\treturn mapTracks(\n\t\t\t\t\t\tadaptationSet,\n\t\t\t\t\t\trepresentation,\n\t\t\t\t\t\tsegments,\n\t\t\t\t\t\tgetInitializationUrl(adaptationSet, representation),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst group: string = getGroup(adaptationSet);\n\t\t\tif (!selectionSetGroups[group]) {\n\t\t\t\tselectionSetGroups[group] = {\n\t\t\t\t\tid: group,\n\t\t\t\t\tswitchingSets: [],\n\t\t\t\t} as SelectionSet;\n\t\t\t}\n\n\t\t\tselectionSetGroups[group].switchingSets.push({\n\t\t\t\tid:\n\t\t\t\t\tadaptationSet.$.id ??\n\t\t\t\t\tadaptationSet.ContentComponent?.at(0)?.$.id ??\n\t\t\t\t\tgroup,\n\t\t\t\ttracks,\n\t\t\t} as SwitchingSet);\n\t\t});\n\n\t\tconst selectionSets: SelectionSet[] = Object.values(selectionSetGroups);\n\n\t\treturn { id: presentationId, selectionSets } as Presentation;\n\t});\n}\n","\nimport type { AudioTrack } from '../../../types/model/AudioTrack.js';\nimport type { Segment } from '../../../types/model/Segment.js';\nimport type { Track } from '../../../types/model/Track.js';\n\nimport type { SegmentBase } from '../../../types/mapper/dash/SegmentBase.js';\n\nexport function trackToSegmentBase(track: Track): SegmentBase[] {\n\tconst segments: SegmentBase[] = [];\n\tif (\n\t\ttrack.segments.length > 0 &&\n\t\ttrack.byteRange &&\n\t\ttrack.segments[0].byteRange &&\n\t\ttrack.segments[0].byteRange.includes('@')\n\t) {\n\t\tlet firstSegment: SegmentBase | undefined = undefined;\n\t\tconst initByteRange = track.byteRange.includes('-')\n\t\t\t? track.byteRange.split('-')[1]\n\t\t\t: track.byteRange.includes('@')\n\t\t\t\t? track.byteRange.split('@')[0]\n\t\t\t\t: '';\n\t\tconst initRange: number = +initByteRange - 1;\n\t\tconst byteFirstSegment = track.segments[0].byteRange.includes('-')\n\t\t\t? track.segments[0].byteRange.split('-')[1]\n\t\t\t: track.segments[0].byteRange.includes('@')\n\t\t\t\t? track.segments[0].byteRange.split('@')[1]\n\t\t\t\t: '';\n\t\tconst numberFirstByteRange: number = +byteFirstSegment - 1;\n\t\tfirstSegment = {\n\t\t\t$: {\n\t\t\t\tindexRange: `${initByteRange}-${numberFirstByteRange}`,\n\t\t\t},\n\t\t\tInitialization: [{ $: { range: `0-${initRange}` } }],\n\t\t} as SegmentBase;\n\t\tif (firstSegment && track.type === 'audio') {\n\t\t\t// All segments should have timescale, but for now, just the audio ones store this value\n\t\t\tconst audioTrack = track as AudioTrack;\n\t\t\tfirstSegment.$.timescale = audioTrack.sampleRate.toString() ?? '';\n\t\t}\n\t\tif (firstSegment) {\n\t\t\tsegments.push(firstSegment);\n\t\t}\n\t}\n\telse {\n\t\ttrack.segments.forEach((segment: Segment) => {\n\t\t\tlet newSegment: SegmentBase | undefined;\n\t\t\tif (segment.byteRange) {\n\t\t\t\tconst initRange: number = +segment.byteRange.split('-')[0] - 1;\n\t\t\t\tnewSegment = {\n\t\t\t\t\t$: {\n\t\t\t\t\t\tindexRange: segment.byteRange,\n\t\t\t\t\t},\n\t\t\t\t\tInitialization: [{ $: { range: `0-${initRange}` } }],\n\t\t\t\t} as SegmentBase;\n\t\t\t}\n\t\t\tif (newSegment && track.type === 'audio') {\n\t\t\t\t// All segments should have timescale, but for now, just the audio ones store this value\n\t\t\t\tconst audioTrack = track as AudioTrack;\n\t\t\t\tnewSegment.$.timescale = audioTrack.sampleRate.toString() ?? '';\n\t\t\t}\n\t\t\tif (newSegment) {\n\t\t\t\tsegments.push(newSegment);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn segments;\n}\n","import type { Track } from '../../../types/model/Track.js';\n\nimport type { SegmentList } from '../../../types/mapper/dash/SegmentList.js';\nimport type { SegmentURL } from '../../../types/mapper/dash/SegmentUrl.js';\n\nimport { getTimescale } from './utils/getTimescale.js';\n\nexport function trackToSegmentList(track: Track): SegmentList[] {\n\tconst segmentList: SegmentList[] = [];\n\tconst segmentURLs: SegmentURL[] = [];\n\ttrack.segments.forEach((segment) => {\n\t\tsegmentURLs.push({\n\t\t\t$: {\n\t\t\t\tmedia: segment.url,\n\t\t\t},\n\t\t});\n\t});\n\n\tif (!track.segments.at(0)?.byteRange) {\n\t\tconst timescale = getTimescale(track);\n\t\tsegmentList.push({\n\t\t\t$: {\n\t\t\t\tduration: (\n\t\t\t\t\t(track.duration * timescale) /\n\t\t\t\t\tsegmentURLs.length\n\t\t\t\t).toString(),\n\t\t\t\ttimescale: timescale.toString(),\n\t\t\t},\n\t\t\tInitialization: [{ $: { sourceURL: track.urlInitialization } }],\n\t\t\tSegmentURL: segmentURLs,\n\t\t} as SegmentList);\n\t}\n\treturn segmentList;\n}\n","import type { Track } from '../../../../types/model/Track.js';\nimport type { VideoTrack } from '../../../../types/model/VideoTrack.js';\n\nimport {\n\tFRAME_RATE_NUMERATOR_30,\n\tZERO,\n} from '../../../../utils/constants.js';\n\n\n/**\n * @internal\n *\n * Get the framerate from a track.\n *\n * If frameRate numerator is not present, it uses 30 as default.\n *\n * @param track - to get the framerate from\n * @returns frame rate as a string formatted as `numerator/denominator`\n */\nexport function getFrameRate(track: Track): string | undefined {\n\tlet frameRate: string | undefined = undefined;\n\tif (track?.type === 'video') {\n\t\tconst videoTrack = track as VideoTrack;\n\t\tframeRate = `${videoTrack.frameRate.frameRateNumerator ?? FRAME_RATE_NUMERATOR_30}`;\n\t\tframeRate =\n\t\t\tvideoTrack.frameRate.frameRateDenominator !== ZERO\n\t\t\t\t? `${frameRate}/${videoTrack.frameRate.frameRateDenominator}`\n\t\t\t\t: frameRate;\n\t}\n\n\treturn frameRate;\n}\n","\nimport type { AudioChannelConfiguration } from '../../../types/mapper/dash/AudioChannelConfiguration.js';\nimport type { Representation } from '../../../types/mapper/dash/Representation.js';\n\nimport type { AudioTrack } from '../../../types/model/AudioTrack.js';\nimport type { Track } from '../../../types/model/Track.js';\nimport type { VideoTrack } from '../../../types/model/VideoTrack.js';\n\nimport { trackToSegmentBase } from './trackToSegmentBase.js';\nimport { trackToSegmentList } from './trackToSegmentList.js';\n\nimport { getFrameRate } from './utils/getFrameRate.js';\n\nexport function tracksToRepresentation(tracks: Track[]): Representation[] {\n\treturn tracks.map((track) => {\n\t\tconst representation: Representation = {\n\t\t\t$: {\n\t\t\t\tid: track.id,\n\t\t\t\tbandwidth: track.bandwidth.toString(),\n\t\t\t},\n\t\t\tSegmentBase: trackToSegmentBase(track),\n\t\t\tSegmentList: trackToSegmentList(track),\n\t\t} as Representation;\n\t\trepresentation.$.mimeType = `${track.type}/mp4`; //Harcoded value\n\t\tif (track.type === 'video') {\n\t\t\tconst videoTrack = track as VideoTrack;\n\t\t\trepresentation.$ = {\n\t\t\t\t...representation.$,\n\t\t\t\tframeRate: getFrameRate(track),\n\t\t\t\twidth: videoTrack.width.toString(),\n\t\t\t\theight: videoTrack.height.toString(),\n\t\t\t\tcodecs: videoTrack.codec,\n\t\t\t};\n\t\t\tif (videoTrack.scanType) {\n\t\t\t\trepresentation.$.scanType = videoTrack.scanType;\n\t\t\t}\n\t\t}\n\t\tif (track.type === 'audio') {\n\t\t\tconst audioTrack = track as AudioTrack;\n\t\t\trepresentation.$ = {\n\t\t\t\t...representation.$,\n\t\t\t\taudioSamplingRate: audioTrack.sampleRate.toString(),\n\t\t\t\tcodecs: audioTrack.codec,\n\t\t\t};\n\t\t\trepresentation.AudioChannelConfiguration = [\n\t\t\t\t{\n\t\t\t\t\t$: {\n\t\t\t\t\t\tschemeIdUri:\n\t\t\t\t\t\t\t'urn:mpeg:dash:23003:3:audio_channel_configuration:2011', // hardcoded value\n\t\t\t\t\t\tvalue: audioTrack.channels.toString() ?? '',\n\t\t\t\t\t},\n\t\t\t\t} as AudioChannelConfiguration,\n\t\t\t];\n\t\t}\n\t\tif (track.segments[0]?.byteRange) {\n\t\t\t// Only BaseSegments have byteRange on segments, and BaseURL on the representation\n\t\t\trepresentation.BaseURL = [track.segments[0].url];\n\t\t}\n\t\treturn representation;\n\t});\n}\n","\nimport type { SelectionSet } from '../../../types/model/SelectionSet.js';\n\nimport type { AdaptationSet } from '../../../types/mapper/dash/AdaptationSet.js';\n\nimport { tracksToRepresentation } from './tracksToRepresentation.js';\n\nimport { getFrameRate } from './utils/getFrameRate.js';\n\nexport function selectionSetsToAdaptationSet(\n\tselectionsSets: SelectionSet[],\n): AdaptationSet[] {\n\treturn selectionsSets.flatMap((selectionSet) => {\n\t\treturn selectionSet.switchingSets.map((switchingSet) => {\n\t\t\tconst track = switchingSet.tracks[0];\n\t\t\treturn {\n\t\t\t\t$: {\n\t\t\t\t\tid: switchingSet.id,\n\t\t\t\t\tgroup: selectionSet.id,\n\t\t\t\t\tcontentType: track?.type,\n\t\t\t\t\tmimeType: `${track?.type}/mp4`,\n\t\t\t\t\tframeRate: getFrameRate(track),\n\t\t\t\t\tlang: track?.language,\n\t\t\t\t\tcodecs: track?.codec,\n\t\t\t\t},\n\t\t\t\tRepresentation: tracksToRepresentation(switchingSet.tracks),\n\t\t\t} as AdaptationSet;\n\t\t});\n\t});\n}\n","/**\n * @internal\n */\nexport function numberToIso8601Duration(duration: number): string {\n\tconst hours = Math.floor(duration / 3600);\n\tconst minutes = Math.floor((duration % 3600) / 60);\n\tconst seconds = duration % 60;\n\tif (hours > 0) {\n\t\treturn `PT${hours}H${minutes}M${seconds}S`;\n\t}\n\telse if (minutes > 0) {\n\t\treturn `PT${minutes}M${seconds}S`;\n\t}\n\treturn `PT${seconds}S`;\n}\n","\nimport type { Period } from '../../../types/mapper/dash/Period.js';\nimport type { Presentation } from '../../../types/model/Presentation.js';\n\nimport { selectionSetsToAdaptationSet } from './selectionSetsToAdaptationSet.js';\n\nimport { numberToIso8601Duration } from '../../../utils/dash/numberToIso8601Duration.js';\n\nexport function presentationsToPeriods(presentations: Presentation[]): Period[] {\n\treturn presentations.map((presentation: Presentation) => {\n\t\treturn {\n\t\t\t$: {\n\t\t\t\tduration: numberToIso8601Duration(\n\t\t\t\t\tpresentation.selectionSets[0].switchingSets[0].tracks[0]\n\t\t\t\t\t\t.duration,\n\t\t\t\t),\n\t\t\t\tid: presentation.id,\n\t\t\t\tstart: 'PT0S',\n\t\t\t},\n\t\t\tAdaptationSet: selectionSetsToAdaptationSet(\n\t\t\t\tpresentation.selectionSets,\n\t\t\t),\n\t\t} as Period;\n\t});\n}\n","import type { DashManifest } from '../../types/mapper/dash/DashManifest.js';\n\n/**\n * @internal\n */\nexport type DashSerializer = (json: DashManifest) => string;\n\nlet xmlSerializer: DashSerializer;\n\n/**\n * @internal\n */\nexport function setDashSerializer(serializer: DashSerializer): void {\n\txmlSerializer = serializer;\n}\n\n/**\n * @internal\n */\nexport function getDashSerializer(): DashSerializer {\n\treturn xmlSerializer;\n}\n\n/**\n * @internal\n */\nexport function serializeDashManifest(json: DashManifest): string {\n\treturn xmlSerializer(json);\n}\n","import type { Presentation } from '../../../types/model/Presentation.js';\n\nimport type { DashManifest } from '../../../types/mapper/dash/DashManifest.js';\nimport type { Period } from '../../../types/mapper/dash/Period.js';\n\nimport { presentationsToPeriods } from './presentationsToPeriods.js';\n\nimport { serializeDashManifest } from '../../../utils/dash/serializeDashManifest.js';\n\nexport function mapHamToDash(hamManifests: Presentation[]): string {\n\tconst periods: Period[] = presentationsToPeriods(hamManifests);\n\tconst duration: string = periods[0].$.duration;\n\tconst manifest: DashManifest = {\n\t\tMPD: {\n\t\t\t$: {\n\t\t\t\tmediaPresentationDuration: duration,\n\t\t\t\ttype: 'static',\n\t\t\t},\n\t\t\tPeriod: periods,\n\t\t},\n\t};\n\n\treturn serializeDashManifest(manifest);\n}\n","import type { DashManifest } from '../../types/mapper/dash/DashManifest.js';\n\n/**\n * @internal\n */\nexport type DashParser = (raw: string) => DashManifest;\n\nlet dashParser: DashParser;\n\n/**\n * @internal\n */\nexport function setDashParser(parser: DashParser): void {\n\tdashParser = parser;\n}\n\n/**\n * @internal\n */\nexport function getDashParser(): DashParser {\n\treturn dashParser;\n}\n\n/**\n * @internal\n * Parse XML to Json\n *\n * @param raw - Raw string containing the xml from the Dash Manifest\n * @returns json with the Dash Manifest structure\n */\nexport function parseDashManifest(raw: string): DashManifest {\n\treturn dashParser(raw);\n}\n","import type { Manifest } from '../../types/manifest/Manifest.js';\nimport type { DashManifest } from '../../types/mapper/dash/DashManifest.js';\n\n//Add metadata to manifest.\n//In the future, if any other fields are wanted to be added, they can be added here.\nexport function addMetadataToDash(\n\tdashManifest: DashManifest,\n\tmanifest: Manifest,\n): Manifest {\n\tif (!manifest.metadata) {\n\t\tmanifest.metadata = new Map<string, string>();\n\t}\n\tif (dashManifest.MPD.$ && dashManifest.MPD.$.profiles) {\n\t\tmanifest.metadata.set('profiles', dashManifest.MPD.$.profiles);\n\t}\n\tif (dashManifest.MPD.$ && dashManifest.MPD.$.type) {\n\t\tmanifest.metadata.set('type', dashManifest.MPD.$.type);\n\t}\n\treturn manifest;\n}\n","import type { Manifest } from '../../types/manifest/Manifest.js';\n\nexport function getMetadata(manifest: Manifest | undefined): any | undefined {\n\tconst metadata: Map<string, string> | undefined = manifest?.metadata;\n\treturn JSON.parse(JSON.stringify(metadata));\n}\n","import type { Manifest } from '../../types/manifest/Manifest.js';\nimport type { DashManifest } from '../../types/mapper/dash/DashManifest.js';\nimport type { Presentation } from '../../types/model/Presentation.js';\n\nimport { mapDashToHam } from './mapDashToHam/mapDashToHam.js';\nimport { mapHamToDash } from './mapHamToDash/mapHamToDash.js';\n\nimport { parseDashManifest } from '../../utils/dash/parseDashManifest.js';\nimport { addMetadataToDash } from '../../utils/manifest/addMetadataToDash.js';\nimport { getMetadata } from '../../utils/manifest/getMetadata.js';\n\nimport type { Mapper } from '../Mapper.js';\n\nexport class DashMapper implements Mapper {\n\tprivate manifest: Manifest | undefined;\n\n\tgetManifestMetadata(): JSON | undefined {\n\t\treturn getMetadata(this.manifest);\n\t}\n\n\ttoHam(manifest: Manifest): Presentation[] {\n\t\tconst dashManifest: DashManifest | undefined = parseDashManifest(\n\t\t\tmanifest.manifest,\n\t\t);\n\n\t\tif (!dashManifest) {\n\t\t\treturn [];\n\t\t}\n\t\taddMetadataToDash(dashManifest, manifest);\n\n\t\treturn mapDashToHam(dashManifest);\n\t}\n\n\ttoManifest(presentation: Presentation[]): Manifest {\n\t\tconst manifest = mapHamToDash(presentation);\n\t\treturn { manifest, ancillaryManifests: [], type: 'dash' };\n\t}\n}\n","import type { Manifest } from '../types/manifest/Manifest.js';\nimport type { Presentation } from '../types/model/Presentation.js';\n\nimport type { Mapper } from './Mapper.js';\n\nexport class MapperContext {\n\tprivate strategy!: Mapper;\n\tprivate static instance: MapperContext;\n\n\tprivate constructor() { }\n\n\tpublic static getInstance(): MapperContext {\n\t\tif (!MapperContext.instance) {\n\t\t\tMapperContext.instance = new MapperContext();\n\t\t}\n\n\t\treturn MapperContext.instance;\n\t}\n\n\tpublic setStrategy(strategy: Mapper): void {\n\t\tthis.strategy = strategy;\n\t}\n\n\tpublic getHamFormat(manifest: Manifest): Presentation[] {\n\t\treturn this.strategy.toHam(manifest);\n\t}\n\n\tpublic getManifestFormat(presentation: Presentation[]): Manifest {\n\t\treturn this.strategy.toManifest(presentation);\n\t}\n\n\tpublic getManifestMetadata(): JSON | undefined {\n\t\treturn this.strategy.getManifestMetadata();\n\t}\n}\n","import type { Presentation } from '../../types/model/Presentation.js';\n\nimport { DashMapper } from '../../mapper/dash/DashMapper.js';\nimport { MapperContext } from '../../mapper/MapperContext.js';\n\n\n/**\n * Convert dash manifest into a ham object.\n *\n * @example\n * Example on how to import the cmaf module and convert the dash `manifest`\n * into the ham manifest.\n * ```ts\n * import cmaf from '@svta/common-media-library/cmaf-ham';\n *\n * const manifest = cmaf.dashToHam(dashManifest);\n * ```\n *\n * @param manifest - String of the XML Dash manifest\n * @returns List of presentations from ham\n *\n * @alpha\n */\n\nexport function dashToHam(manifest: string): Presentation[] {\n\tconst mapperContext: MapperContext = MapperContext.getInstance();\n\tmapperContext.setStrategy(new DashMapper());\n\treturn mapperContext.getHamFormat({ manifest, type: 'dash' });\n}\n","import type { Manifest } from '../../types/manifest/Manifest.js';\nimport type { Presentation } from '../../types/model/Presentation.js';\n\nimport { DashMapper } from '../../mapper/dash/DashMapper.js';\nimport { MapperContext } from '../../mapper/MapperContext.js';\n\n/**\n * Convert HAM object into Dash Manifest.\n *\n * @example\n * Example on how to import the cmaf module and convert the ham `presentations`\n * array into the dash manifest.\n * ```ts\n * import cmaf from '@svta/common-media-library/cmaf-ham';\n *\n * const manifest = cmaf.hamToDash(presentations);\n * ```\n *\n * @param presentation - List of presentations from ham\n * @returns Manifest object containing the Dash manifest as string\n *\n * @alpha\n */\nexport function hamToDash(presentation: Presentation[]): Manifest {\n\tconst mapperContext: MapperContext = MapperContext.getInstance();\n\tmapperContext.setStrategy(new DashMapper());\n\treturn mapperContext.getManifestFormat(presentation);\n}\n\n","import type { AudioTrack } from '../../../types/model/AudioTrack.js';\nimport type { TextTrack } from '../../../types/model/TextTrack.js';\nimport type { Track } from '../../../types/model/Track.js';\nimport type { VideoTrack } from '../../../types/model/VideoTrack.js';\n\nimport { getPlaylistData } from './utils/getPlaylistData.js';\nimport { getSegments } from './utils/getSegments.js';\n\ntype ManifestPlaylistPiece = {\n\tmainRef: string;\n\tplaylist: string;\n};\n\nexport function generateManifestPlaylistPiece(track: Track): ManifestPlaylistPiece {\n\tconst mediaSequence = 0; //TODO : save mediaSequence in the model.\n\tconst trackFileName = track.fileName ?? `${track.id}.m3u8`;\n\n\tlet mainRef = '';\n\tlet playlist = `#EXTM3U\\n#EXT-X-TARGETDURATION:${track.duration / track.segments.length}\\n#EXT-X-PLAYLIST-TYPE:VOD\\n#EXT-X-MEDIA-SEQUENCE:${mediaSequence}\\n`;\n\n\tif (track.type.toLowerCase() === 'video') {\n\t\tconst videoTrack = track as VideoTrack;\n\t\tmainRef += `#EXT-X-STREAM-INF:BANDWIDTH=${videoTrack.bandwidth},CODECS=\"${videoTrack.codec}\",RESOLUTION=${videoTrack.width}x${videoTrack.height}\\n${trackFileName}\\n`;\n\t\tplaylist += getPlaylistData(videoTrack);\n\t}\n\telse if (track.type.toLowerCase() === 'audio') {\n\t\tconst audioTrack = track as AudioTrack;\n\t\tmainRef += `#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"${audioTrack.id}\",LANGUAGE=\"${audioTrack.language}\",NAME=\"${audioTrack.id}\",URI=\"${trackFileName}\"\\n`;\n\t\tplaylist += getPlaylistData(audioTrack);\n\t}\n\telse if (track.type.toLowerCase() === 'text') {\n\t\tconst textTrack = track as TextTrack;\n\t\tmainRef += `#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"${textTrack.id}\",NAME=\"${textTrack.id}\",LANGUAGE=\"${textTrack.language}\",URI=\"${trackFileName}\"\\n`;\n\t}\n\n\tplaylist += `${getSegments(track.segments)}#EXT-X-ENDLIST`;\n\n\treturn { mainRef, playlist };\n}\n","import type { Manifest } from '../../../types/manifest/Manifest.js';\nimport type { Presentation } from '../../../types/model/Presentation.js';\nimport type { SelectionSet } from '../../../types/model/SelectionSet.js';\nimport type { SwitchingSet } from '../../../types/model/SwitchingSet.js';\nimport type { Track } from '../../../types/model/Track.js';\n\nimport { generateManifestPlaylistPiece } from './generateManifestPlaylistPiece.js';\n\nexport function mapHamToHls(presentations: Presentation[]): Manifest {\n\tconst version = 7; //TODO Add a way to change the version. For now version 7 is hardcoded as it is the first version of HLS with CMAF support\n\tlet mainManifest = `#EXTM3U\\n#EXT-X-VERSION:${version}\\n\\n`;\n\tconst playlists: Manifest[] = [];\n\tpresentations.map((presentation: Presentation) => {\n\t\tpresentation.selectionSets.map((selectionSet: SelectionSet) => {\n\t\t\tselectionSet.switchingSets.map((switchingSet: SwitchingSet) => {\n\t\t\t\tswitchingSet.tracks.map((track: Track) => {\n\t\t\t\t\tconst { mainRef, playlist } =\n\t\t\t\t\t\tgenerateManifestPlaylistPiece(track);\n\t\t\t\t\tmainManifest += mainRef;\n\t\t\t\t\tconst manifestFileName =\n\t\t\t\t\t\ttrack.fileName ?? `${track.id}.m3u8`;\n\t\t\t\t\tplaylists.push({\n\t\t\t\t\t\tmanifest: playlist,\n\t\t\t\t\t\ttype: 'hls',\n\t\t\t\t\t\tfileName: manifestFileName,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\treturn {\n\t\tmanifest: mainManifest,\n\t\tancillaryManifests: playlists,\n\t\ttype: 'hls',\n\t};\n}\n","import type { HlsManifest } from '../../types/mapper/hls/HlsManifest.js';\n\n/**\n * @internal\n */\nexport type HlsParser = (text: string) => HlsManifest;\n\nlet hlsParser: HlsParser;\n\n/**\n * @internal\n */\nexport function setHlsParser(parser: HlsParser): void {\n\thlsParser = parser;\n}\n\n/**\n * @internal\n */\nexport function getHlsParser(): HlsParser {\n\treturn hlsParser;\n}\n\n/**\n * @internal\n */\nexport function parseHlsManifest(text?: string): HlsManifest {\n\tif (!text) {\n\t\tconsole.error(\"Can't parse empty HLS Manifest\");\n\t\treturn {} as HlsManifest;\n\t}\n\n\treturn hlsParser(text);\n}\n","import type { AudioTrack } from '../../../types/model/AudioTrack.js';\nimport type { SwitchingSet } from '../../../types/model/SwitchingSet.js';\n\nimport type { Manifest } from '../../../types/manifest/Manifest.js';\n\nimport { parseHlsManifest } from '../../../utils/hls/parseHlsManifest.js';\n\nimport { decodeByteRange } from './utils/decodeByteRange.ts';\nimport { formatSegments } from './utils/formatSegments.js';\nimport { getDuration } from './utils/getDuration.js';\nimport { getHlsCodec } from './utils/getHlsCodec.ts';\n\n/**\n * @internal\n *\n * This function is used to convert audio groups to switching sets.\n *\n *\n * @param mediaGroupsAudio - Any\n * @param manifestPlaylists - Array of Manifest\n * @returns Array of switchingSet\n *\n * @alpha\n */\nexport function audioGroupsToSwitchingSets(\n\tmediaGroupsAudio: any,\n\tmanifestPlaylists: Manifest[],\n): SwitchingSet[] {\n\tconst audioSwitchingSets: SwitchingSet[] = [];\n\tconst audioTracks: AudioTrack[] = [];\n\n\tfor (const audioEncodings in mediaGroupsAudio) {\n\t\tconst encodings = mediaGroupsAudio[audioEncodings];\n\t\tfor (const audio in encodings) {\n\t\t\tconst attributes: any = encodings[audio];\n\t\t\tconst { language, uri } = attributes;\n\t\t\tconst audioParsed = parseHlsManifest(\n\t\t\t\tmanifestPlaylists.shift()?.manifest,\n\t\t\t);\n\t\t\tconst map = audioParsed?.segments[0]?.map;\n\t\t\tconst segments = formatSegments(audioParsed?.segments);\n\n\t\t\t// TODO: channels, sampleRate, bandwith and codec need to be\n\t\t\t// updated with real values. Right now we are using simple hardcoded values.\n\t\t\tconst byteRange = decodeByteRange(map?.byterange);\n\t\t\taudioTracks.push({\n\t\t\t\tid: audio,\n\t\t\t\ttype: 'audio',\n\t\t\t\tfileName: uri,\n\t\t\t\tcodec: getHlsCodec('audio'),\n\t\t\t\tduration: getDuration(audioParsed, segments),\n\t\t\t\tlanguage: language,\n\t\t\t\tbandwidth: 0,\n\t\t\t\tsegments: segments,\n\t\t\t\tsampleRate: 0,\n\t\t\t\tchannels: 2,\n\t\t\t\t...(byteRange && { byteRange }),\n\t\t\t\t...(map?.uri && { urlInitialization: map?.uri }),\n\t\t\t} as AudioTrack);\n\t\t}\n\t}\n\n\taudioSwitchingSets.push({\n\t\tid: 'audio',\n\t\ttracks: audioTracks,\n\t} as SwitchingSet);\n\n\treturn audioSwitchingSets;\n}\n","import type { SwitchingSet } from '../../../types/model/SwitchingSet.js';\nimport type { TextTrack } from '../../../types/model/TextTrack.js';\n\nimport type { Manifest } from '../../../types/manifest/Manifest.js';\n\nimport { parseHlsManifest } from '../../../utils/hls/parseHlsManifest.js';\n\nimport { formatSegments } from './utils/formatSegments.js';\nimport { getDuration } from './utils/getDuration.js';\nimport { getHlsCodec } from './utils/getHlsCodec.ts';\n\nexport function subtitleGroupsToSwitchingSets(\n\tmediaGroupsSubtitles: any,\n\tmanifestPlaylists: Manifest[],\n): SwitchingSet[] {\n\tconst subtitleSwitchingSets: SwitchingSet[] = [];\n\tconst textTracks: TextTrack[] = [];\n\n\t// Add selection set of type subtitles\n\tfor (const subtitleEncodings in mediaGroupsSubtitles) {\n\t\tconst encodings = mediaGroupsSubtitles[subtitleEncodings];\n\t\tfor (const subtitle in encodings) {\n\t\t\tconst attributes = encodings[subtitle];\n\t\t\tconst { language, uri } = attributes;\n\t\t\tconst subtitleParsed = parseHlsManifest(\n\t\t\t\tmanifestPlaylists.shift()?.manifest,\n\t\t\t);\n\t\t\tconst segments = formatSegments(subtitleParsed?.segments);\n\n\t\t\ttextTracks.push({\n\t\t\t\tid: subtitle,\n\t\t\t\ttype: 'text',\n\t\t\t\tfileName: uri,\n\t\t\t\tcodec: getHlsCodec('text'),\n\t\t\t\tduration: getDuration(subtitleParsed, segments),\n\t\t\t\tlanguage: language,\n\t\t\t\tbandwidth: 0,\n\t\t\t\tsegments: segments,\n\t\t\t} as TextTrack);\n\t\t}\n\t}\n\n\tsubtitleSwitchingSets.push({\n\t\tid: 'text',\n\t\ttracks: textTracks,\n\t} as SwitchingSet);\n\n\treturn subtitleSwitchingSets;\n}\n","import type { Segment } from '../../../types/model/Segment.js';\nimport type { SwitchingSet } from '../../../types/model/SwitchingSet.js';\nimport type { VideoTrack } from '../../../types/model/VideoTrack.js';\n\nimport type { Manifest } from '../../../types/manifest/Manifest.js';\nimport type { PlayList } from '../../../types/mapper/hls/Playlist.js';\n\nimport { FRAME_RATE_NUMERATOR_30, ZERO } from '../../../utils/constants.js';\nimport { parseHlsManifest } from '../../../utils/hls/parseHlsManifest.js';\n\nimport { decodeByteRange } from './utils/decodeByteRange.ts';\nimport { formatSegments } from './utils/formatSegments.js';\nimport { getDuration } from './utils/getDuration.js';\nimport { getHlsCodec } from './utils/getHlsCodec.ts';\n\nexport function videoPlaylistsToSwitchingSets(\n\tplaylists: PlayList[],\n\tmanifestPlaylists: Manifest[],\n): SwitchingSet[] {\n\tconst switchingSetVideos: SwitchingSet[] = [];\n\tconst videoTracks: VideoTrack[] = [];\n\tlet videoTrackId = 0;\n\n\tplaylists.map((playlist: any) => {\n\t\tconst parsedHlsManifest = parseHlsManifest(\n\t\t\tmanifestPlaylists.shift()?.manifest,\n\t\t);\n\t\tconst segments: Segment[] = formatSegments(parsedHlsManifest?.segments);\n\t\tconst { LANGUAGE, CODECS, BANDWIDTH } = playlist.attributes;\n\t\tconst map = parsedHlsManifest?.segments?.at(0)?.map;\n\t\tconst byteRange = decodeByteRange(map?.byterange);\n\t\tvideoTracks.push({\n\t\t\tid: `video-${videoTrackId++}`,\n\t\t\ttype: 'video',\n\t\t\tfileName: playlist.uri,\n\t\t\tcodec: getHlsCodec('video', CODECS),\n\t\t\tduration: getDuration(parsedHlsManifest, segments),\n\t\t\tlanguage: LANGUAGE ?? 'und',\n\t\t\tbandwidth: BANDWIDTH,\n\t\t\tsegments: segments,\n\t\t\twidth: playlist.attributes.RESOLUTION.width,\n\t\t\theight: playlist.attributes.RESOLUTION.height,\n\t\t\tframeRate: {\n\t\t\t\tframeRateNumerator:\n\t\t\t\t\tplaylist.attributes['FRAME-RATE'] ??\n\t\t\t\t\tFRAME_RATE_NUMERATOR_30,\n\t\t\t\tframeRateDenominator: ZERO,\n\t\t\t},\n\t\t\tpar: '',\n\t\t\tsar: '',\n\t\t\tscanType: '',\n\t\t\t...(byteRange && { byteRange }),\n\t\t\t...(map?.uri && { urlInitialization: map?.uri }),\n\t\t} as VideoTrack);\n\t});\n\n\tswitchingSetVideos.push({\n\t\tid: `video`,\n\t\ttracks: videoTracks,\n\t} as SwitchingSet);\n\n\treturn switchingSetVideos;\n}\n","import type { Manifest } from '../../types/manifest/Manifest.js';\n\n//Add metadata to manifest.\n//In the future, if any other fields are wanted to be added, they can be added here.\nexport function addMetadataToHls(\n\tmanifest: Manifest,\n\tmanifestParsed: any,\n): Manifest {\n\tif (!manifest.metadata) {\n\t\tmanifest.metadata = new Map<string, string>();\n\t}\n\tif (!manifestParsed.version) {\n\t\tmanifest.metadata.set('version', manifestParsed.version);\n\t}\n\tif (!manifestParsed.mediaSequence) {\n\t\tmanifest.metadata.set('mediaSequence', manifestParsed.mediaSequence);\n\t}\n\treturn manifest;\n}\n","import type { Presentation } from '../../../types/model/Presentation.js';\nimport type { SelectionSet } from '../../../types/model/SelectionSet.js';\n\nimport type { Manifest } from '../../../types/manifest/Manifest.js';\n\nimport { audioGroupsToSwitchingSets } from './audioGroupsToSwitchingSets.js';\nimport { subtitleGroupsToSwitchingSets } from './subtitleGroupsToSwitchingSets.js';\nimport { videoPlaylistsToSwitchingSets } from './videoPlaylistsToSwitchingSets.js';\n\nimport { parseHlsManifest } from '../../../utils/hls/parseHlsManifest.js';\nimport { addMetadataToHls } from '../../../utils/manifest/addMetadataToHls.js';\n\nexport function mapHlsToHam(manifest: Manifest): Presentation[] {\n\tconst mainManifestParsed = parseHlsManifest(manifest.manifest);\n\tconst manifestHls = addMetadataToHls(manifest, mainManifestParsed);\n\tconst selectionSets: SelectionSet[] = [];\n\tconst manifestPlaylists = manifestHls.ancillaryManifests\n\t\t? [...manifestHls.ancillaryManifests]\n\t\t: [];\n\n\tconst audioSwitchingSets = audioGroupsToSwitchingSets(\n\t\tmainManifestParsed.mediaGroups?.AUDIO,\n\t\tmanifestPlaylists,\n\t);\n\tconst subtitleSwitchingSets = subtitleGroupsToSwitchingSets(\n\t\tmainManifestParsed.mediaGroups?.SUBTITLES,\n\t\tmanifestPlaylists,\n\t);\n\tconst videoSwitchingSets = videoPlaylistsToSwitchingSets(\n\t\tmainManifestParsed.playlists,\n\t\tmanifestPlaylists,\n\t);\n\n\tlet selectionSetId = 0;\n\n\tif (audioSwitchingSets.length > 0) {\n\t\tselectionSets.push({\n\t\t\tid: (selectionSetId++).toString(),\n\t\t\tswitchingSets: audioSwitchingSets,\n\t\t} as SelectionSet);\n\t}\n\n\tif (subtitleSwitchingSets.length > 0) {\n\t\tselectionSets.push({\n\t\t\tid: (selectionSetId++).toString(),\n\t\t\tswitchingSets: subtitleSwitchingSets,\n\t\t} as SelectionSet);\n\t}\n\n\tif (videoSwitchingSets.length > 0) {\n\t\tselectionSets.push({\n\t\t\tid: (selectionSetId++).toString(),\n\t\t\tswitchingSets: videoSwitchingSets,\n\t\t} as SelectionSet);\n\t}\n\n\tlet presentationId = 0;\n\n\treturn [\n\t\t{ id: (presentationId++).toString(), selectionSets: selectionSets },\n\t];\n}\n","import type { Manifest } from '../../types/manifest/Manifest.js';\nimport type { Presentation } from '../../types/model/Presentation.js';\n\nimport { mapHamToHls } from './mapHamToHls/mapHamToHls.js';\nimport { mapHlsToHam } from './mapHlsToHam/mapHlsToHam.js';\n\nimport { getMetadata } from '../../utils/manifest/getMetadata.js';\n\nimport type { Mapper } from '../Mapper.js';\n\nexport class HlsMapper implements Mapper {\n\tprivate manifest: Manifest | undefined;\n\n\tgetManifestMetadata(): any | undefined {\n\t\treturn getMetadata(this.manifest);\n\t}\n\n\ttoHam(manifest: Manifest): Presentation[] {\n\t\tconst presentations: Presentation[] = mapHlsToHam(manifest);\n\t\tthis.manifest = manifest;\n\t\treturn presentations;\n\t}\n\n\ttoManifest(presentation: Presentation[]): Manifest {\n\t\treturn mapHamToHls(presentation);\n\t}\n}\n","import type { Manifest } from '../../types/manifest/Manifest.js';\nimport type { Presentation } from '../../types/model/Presentation.js';\n\nimport { HlsMapper } from '../../mapper/hls/HlsMapper.js';\nimport { MapperContext } from '../../mapper/MapperContext.js';\n\n/**\n * Convert ham object into a hls manifest.\n *\n * @example\n * Example on how to import the cmaf module and convert the ham `presentations`\n * array into the hls manifest.\n * ```ts\n * import cmaf from '@svta/common-media-library/cmaf-ham';\n *\n * const manifest = cmaf.hamToHls(presentations);\n * ```\n *\n * @param presentation - List of presentations from ham\n * @returns Manifest object containing the Hls manifest as string and its playlists\n *\n * @alpha\n */\nexport function hamToHls(presentation: Presentation[]): Manifest {\n\tconst mapperContext = MapperContext.getInstance();\n\tmapperContext.setStrategy(new HlsMapper());\n\treturn mapperContext.getManifestFormat(presentation);\n}\n","import type { Presentation } from '../../types/model/Presentation.js';\n\nimport { HlsMapper } from '../../mapper/hls/HlsMapper.js';\nimport { MapperContext } from '../../mapper/MapperContext.js';\n\n/**\n * Convert hls manifest into a ham object.\n *\n * @example\n * Example on how to import the cmaf module and convert the hls `manifest` and\n * `ancillaryManifests` array into the ham manifest.\n * ```ts\n * import cmaf from '@svta/common-media-library/cmaf-ham';\n *\n * const manifest = cmaf.hlsToHam(hlsManifest);\n * ```\n *\n * @param manifest - String of the Main manifest\n * @param ancillaryManifests - Ancillary Manifests . Must be in order, first audio, subtitle and video\n * @returns List of presentations from ham\n *\n * @alpha\n */\nexport function hlsToHam(\n\tmanifest: string,\n\tancillaryManifests: string[],\n): Presentation[] {\n\tconst mapperContext = MapperContext.getInstance();\n\tmapperContext.setStrategy(new HlsMapper());\n\treturn mapperContext.getHamFormat({\n\t\tmanifest,\n\t\tancillaryManifests: ancillaryManifests.map((ancillaryManifest) => ({\n\t\t\tmanifest: ancillaryManifest,\n\t\t\ttype: 'hls',\n\t\t})),\n\t\ttype: 'hls',\n\t});\n}\n","import type { SwitchingSet } from '../../types/model/SwitchingSet.js';\nimport type { Track } from '../../types/model/Track.js';\n\n/**\n * Get a list of Tracks contained on a SwitchingSet\n *\n * @param switchingSet - SwitchingSet object from HAM\n * @param predicate - Filtering function\n * @returns Track[]\n *\n * @alpha\n */\nexport function getTracksFromSwitchingSet(\n\tswitchingSet: SwitchingSet,\n\tpredicate?: (track: Track) => boolean,\n): Track[] {\n\tconst tracks = switchingSet.tracks;\n\treturn predicate ? tracks.filter(predicate) : tracks;\n}\n","import type { SelectionSet } from '../../types/model/SelectionSet.js';\nimport type { Track } from '../../types/model/Track.js';\n\nimport { getTracksFromSwitchingSet } from './getTracksFromSwitchingSet.js';\n\n/**\n * Get a list of Tracks contained on a SelectionSet\n *\n * @param selectionSet - SelectionSet object from HAM\n * @param predicate - Filtering function\n * @returns Track[]\n *\n * @alpha\n */\nexport function getTracksFromSelectionSet(\n\tselectionSet: SelectionSet,\n\tpredicate?: (track: Track) => boolean,\n): Track[] {\n\tconst tracks = selectionSet.switchingSets.flatMap((switchingSet) =>\n\t\tgetTracksFromSwitchingSet(switchingSet),\n\t);\n\treturn predicate ? tracks.filter(predicate) : tracks;\n}\n","import type { Presentation } from '../../types/model/Presentation.js';\nimport type { Track } from '../../types/model/Track.js';\n\nimport { getTracksFromSelectionSet } from './getTracksFromSelectionSet.js';\n\n/**\n * Get a list of Tracks contained on a Presentation\n *\n * @param presentation - Presentation object from HAM\n * @param predicate - Filtering function\n * @returns Track[]\n *\n * @alpha\n */\nexport function getTracksFromPresentation(\n\tpresentation: Presentation,\n\tpredicate?: (track: Track) => boolean,\n): Track[] {\n\tconst tracks = presentation.selectionSets.flatMap((selectionSet) =>\n\t\tgetTracksFromSelectionSet(selectionSet),\n\t);\n\treturn predicate ? tracks.filter(predicate) : tracks;\n}\n","import type { Segment } from '../../types/model/Segment.js';\nimport type { Validation } from '../../types/Validation.js';\n\n/**\n * Validate a segment.\n *\n * Validations:\n * - segment has duration\n * - segment has url\n *\n * @param segment - Segment from cmaf ham model\n * @param trackId - Optional: parent track id\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation\n *\n * @alpha\n */\nexport function validateSegment(\n\tsegment: Segment,\n\ttrackId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\tconst moreInformation = trackId\n\t\t? ` in the track with id = ${trackId}`\n\t\t: '.';\n\n\tif (!segment.duration) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push(\n\t\t\t`Segment duration is undefined${moreInformation}`,\n\t\t);\n\t}\n\n\tif (!segment.url) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push(\n\t\t\t`Segment url is undefined${moreInformation}`,\n\t\t);\n\t}\n\n\treturn validation;\n}\n","import type { Segment } from '../../types/model/Segment.js';\nimport type { Validation } from '../../types/Validation.js';\n\nimport { validateSegment } from './validateSegment.js';\n\n/**\n * Validate a list of segments.\n *\n * @example\n * ```ts\n * import cmaf, { Segment } from '@svta/common-media-library/cmaf-ham';\n * ...\n *\n * // const segments: Segment[] = ...;\n *\n * const validation = cmaf.validateSegments(segments);\n * ```\n *\n * Example output: `{ status: true|false, errorMessages: [...] }`\n *\n * @param segments - List of Segment from cmaf ham model\n * @param trackId - Optional: parent track id\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation\n *\n * @alpha\n *\n */\nexport function validateSegments(\n\tsegments: Segment[],\n\ttrackId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\n\tsegments.forEach((segment: Segment) => {\n\t\tvalidateSegment(segment, trackId, validation);\n\t});\n\n\treturn validation;\n}\n","import type { AudioTrack } from '../../types/model/AudioTrack.js';\nimport type { TextTrack } from '../../types/model/TextTrack.js';\nimport type { Track } from '../../types/model/Track.js';\nimport type { VideoTrack } from '../../types/model/VideoTrack.js';\n\nimport type { Validation } from '../../types/Validation.js';\n\nimport { validateSegments } from './validateSegments.js';\n\n/**\n * Validate a track.\n * It validates in cascade, calling each child validation method.\n *\n * Validations:\n * - track has id\n * - Invokes specific audio, video and text validations\n *\n * @example\n * ```ts\n * import cmaf, { Track } from '@svta/common-media-library/cmaf-ham';\n * ...\n *\n * // const track: Track = ...;\n *\n * const validation = cmaf.validateTrack(track);\n * ```\n *\n * Example output: `{ status: true|false, errorMessages: [...] }`\n *\n * @param track - Track from cmaf ham model\n * @param switchingSetId - Optional: parent switching set id\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation\n *\n * @alpha\n *\n */\nexport function validateTrack(\n\ttrack: Track,\n\tswitchingSetId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\tconst moreInformation = switchingSetId\n\t\t? ` in the switching set with id = ${switchingSetId}`\n\t\t: '.';\n\n\tif (!track.id) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push(\n\t\t\t`Track id is undefined${moreInformation}`,\n\t\t);\n\t}\n\n\tswitch (track.type) {\n\t\tcase 'video':\n\t\t\t_validateVideoTrack(\n\t\t\t\ttrack as VideoTrack,\n\t\t\t\tswitchingSetId,\n\t\t\t\tvalidation,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase 'audio':\n\t\t\t_validateAudioTrack(\n\t\t\t\ttrack as AudioTrack,\n\t\t\t\tswitchingSetId,\n\t\t\t\tvalidation,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase 'text':\n\t\t\t_validateTextTrack(track as TextTrack, switchingSetId, validation);\n\t\t\tbreak;\n\t}\n\n\tvalidateSegments(track.segments, track.id, validation);\n\n\treturn validation;\n}\n\n/**\n * @internal\n *\n * Validate video Track\n *\n * Validations:\n * - track has codec\n *\n * @param videoTrack - Video track to validate\n * @param switchingSetId - Optional: id from the switching set containing the track (Only used for logs)\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation object\n * @see Validation\n */\nfunction _validateVideoTrack(\n\tvideoTrack: VideoTrack,\n\tswitchingSetId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\tconst moreInformation = switchingSetId\n\t\t? ` in the switching set with id = ${switchingSetId}`\n\t\t: '.';\n\n\tif (!videoTrack.codec) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push(\n\t\t\t`VideoTrack with id: ${videoTrack.id} does not have codec${moreInformation}`,\n\t\t);\n\t}\n\n\treturn validation;\n}\n\n/**\n * @internal\n *\n * Validate Audio Track\n *\n * Validations:\n * - track has codec\n *\n * @param audioTrack - Audio track to validate\n * @param switchingSetId - Optional: id from the switching set containing the track (Only used for logs)\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation object\n * @see Validation\n */\nfunction _validateAudioTrack(\n\taudioTrack: AudioTrack,\n\tswitchingSetId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\tconst moreInformation = switchingSetId\n\t\t? ` in the switching set with id = ${switchingSetId}`\n\t\t: '.';\n\n\tif (!audioTrack.codec) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push(\n\t\t\t`AudioTrack with id: ${audioTrack.id} does not have codec${moreInformation}`,\n\t\t);\n\t}\n\n\treturn validation;\n}\n\n/**\n * @internal\n *\n * Validate Text Track\n *\n * Validations:\n * - track has language\n *\n * @param textTrack - Text track to validate\n * @param switchingSetId - Optional: id from the switching set containing the track (Only used for logs)\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation object\n * @see Validation\n */\nfunction _validateTextTrack(\n\ttextTrack: TextTrack,\n\tswitchingSetId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\tconst moreInformation = switchingSetId\n\t\t? ` in the switching set with id = ${switchingSetId}`\n\t\t: '.';\n\n\tif (!textTrack.language) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push(\n\t\t\t`TextTrack with id: ${textTrack.id} does not have codec${moreInformation}`,\n\t\t);\n\t}\n\n\treturn validation;\n}\n","import type { Track } from '../../types/model/Track.js';\nimport type { Validation } from '../../types/Validation.js';\n\nimport { validateTrack } from './validateTrack.js';\n\n/**\n * Validate a list of tracks.\n * It validates in cascade, calling each child validation method.\n *\n * @example\n * ```ts\n * import cmaf, { Track } from '@svta/common-media-library/cmaf-ham';\n * ...\n *\n * // const tracks: Track[] = ...;\n *\n * const validation = cmaf.validateTracks(tracks);\n * ```\n *\n * Example output: `{ status: true|false, errorMessages: [...] }`\n *\n * @param tracks - List of Track from cmaf ham model\n * @param switchingSetId - Optional: parent switching set id\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation\n *\n * @alpha\n *\n */\nexport function validateTracks(\n\ttracks: Track[],\n\tswitchingSetId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\tconst moreInformation = switchingSetId\n\t\t? ` in the switching set with id = ${switchingSetId}`\n\t\t: '.';\n\tlet tracksDuration: number;\n\n\ttracks.forEach((track: Track) => {\n\t\tif (!tracksDuration) {\n\t\t\ttracksDuration = track.duration;\n\t\t}\n\t\tif (tracksDuration !== track.duration) {\n\t\t\tvalidation.status = false;\n\t\t\tvalidation.errorMessages.push(\n\t\t\t\t`All the tracks must have the same duration${moreInformation}`,\n\t\t\t);\n\t\t}\n\t\tvalidateTrack(track, switchingSetId, validation);\n\t});\n\n\treturn validation;\n}\n","import type { SwitchingSet } from '../../types/model/SwitchingSet.js';\nimport type { Validation } from '../../types/Validation.js';\n\nimport { validateTracks } from './validateTracks.js';\n\n/**\n * Validate a switching set.\n * It validates in cascade, calling each child validation method.\n *\n * Validations:\n * - SwitchingSet has id\n *\n * @example\n * ```ts\n * import cmaf, { SwitchingSet } from '@svta/common-media-library/cmaf-ham';\n * ...\n *\n * // const switchingSet: SwitchingSet = ...;\n *\n * const validation = cmaf.validateSwitchingSet(switchingSet);\n * ```\n *\n * Example output: `{ status: true|false, errorMessages: [...] }`\n *\n * @param switchingSet - SwitchingSet from cmaf ham model\n * @param selectionSetId - Optional: parent selection set id\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation\n *\n * @alpha\n *\n */\nexport function validateSwitchingSet(\n\tswitchingSet: SwitchingSet,\n\tselectionSetId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\tconst moreInformation = selectionSetId\n\t\t? ` in the selection set with id = ${selectionSetId}`\n\t\t: '.';\n\n\tif (!switchingSet.id) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push(\n\t\t\t`SwitchingSet id is undefined${moreInformation}`,\n\t\t);\n\t}\n\n\tvalidateTracks(switchingSet.tracks, switchingSet.id, validation);\n\n\treturn validation;\n}\n","import type { SwitchingSet } from '../../types/model/SwitchingSet.js';\nimport type { Validation } from '../../types/Validation.js';\n\nimport { validateSwitchingSet } from './validateSwitchingSet.js';\n\n/**\n * Validate a list of switching set.\n * It validates in cascade, calling each child validation method.\n *\n * @example\n * ```ts\n * import cmaf, { SwitchingSet } from '@svta/common-media-library/cmaf-ham';\n * ...\n *\n * // const switchingSets: SwitchingSet[] = ...;\n *\n * const validation = cmaf.validateSwitchingSets(switchingSets);\n * ```\n *\n * Example output: `{ status: true|false, errorMessages: [...] }`\n *\n * @param switchingSets - List of SwitchingSets from cmaf ham model\n * @param selectionSetId - Optional: parent selection set id\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation\n *\n * @alpha\n *\n */\nexport function validateSwitchingSets(\n\tswitchingSets: SwitchingSet[],\n\tselectionSetId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\n\tswitchingSets.forEach((switchingSet: SwitchingSet) => {\n\t\tvalidateSwitchingSet(switchingSet, selectionSetId, validation);\n\t});\n\n\treturn validation;\n}\n","import type { SelectionSet } from '../../types/model/SelectionSet.js';\nimport type { Validation } from '../../types/Validation.js';\n\nimport { validateSwitchingSets } from './validateSwitchingSets.js';\n\n\n/**\n * Validate a selection set.\n * It validates in cascade, calling each child validation method.\n *\n * Validations:\n * - SelectionSet has id\n *\n * @example\n * ```ts\n * import cmaf, { SelectionSet } from '@svta/common-media-library/cmaf-ham';\n * ...\n *\n * // const selectionSet: SelectionSet = ...;\n *\n * const validation = cmaf.validateSelectionSet(selectionSet);\n * ```\n *\n * Example output: `{ status: true|false, errorMessages: [...] }`\n *\n * @param selectionSet - SelectionSet from cmaf ham model\n * @param presentationId - Optional: parent presentation id\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation\n *\n * @alpha\n *\n */\nexport function validateSelectionSet(\n\tselectionSet: SelectionSet,\n\tpresentationId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\tconst moreInformation = presentationId\n\t\t? ` in the presentation with id = ${presentationId}`\n\t\t: '.';\n\n\tif (!selectionSet.id) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push(\n\t\t\t`SelectionSet id is undefined${moreInformation}`,\n\t\t);\n\t}\n\n\tvalidateSwitchingSets(\n\t\tselectionSet.switchingSets,\n\t\tselectionSet.id,\n\t\tvalidation,\n\t);\n\n\treturn validation;\n}\n","import type { SelectionSet } from '../../types/model/SelectionSet.js';\nimport type { Validation } from '../../types/Validation.js';\n\nimport { validateSelectionSet } from './validateSelectionSet.js';\n\n/**\n * Validate a list of selection set.\n * It validates in cascade, calling each child validation method.\n *\n * @example\n * ```ts\n * import cmaf, { SelectionSet } from '@svta/common-media-library/cmaf-ham';\n * ...\n *\n * // const selectionSets: SelectionSet[] = ...;\n *\n * const validation = cmaf.validateSelectionSets(selectionSets);\n * ```\n *\n * Example output: `{ status: true|false, errorMessages: [...] }`\n *\n * @param selectionSets - List of SelectionSet from cmaf ham model\n * @param presentationId - Optional: parent presentation id\n * @param prevValidation - Optional: validation object from parent previous validate method call\n * @returns Validation\n *\n * @alpha\n *\n */\nexport function validateSelectionSets(\n\tselectionSets: SelectionSet[],\n\tpresentationId?: string,\n\tprevValidation?: Validation,\n): Validation {\n\tconst validation: Validation = prevValidation ?? {\n\t\tstatus: true,\n\t\terrorMessages: [],\n\t};\n\n\tselectionSets.forEach((selectionSet: SelectionSet) => {\n\t\tvalidateSelectionSet(selectionSet, presentationId, validation);\n\t});\n\n\treturn validation;\n}\n","import type { Validation } from '../../types/Validation.js';\nimport type { Presentation } from '../../types/model/Presentation.js';\n\nimport { validateSelectionSets } from './validateSelectionSets.js';\n\n/**\n * Validate a presentation.\n * It validates in cascade, calling each child validation method.\n *\n * Validations:\n * - Presentation has id\n *\n * @example\n * ```ts\n * import cmaf, { Presentation } from '@svta/common-media-library/cmaf-ham';\n * ...\n *\n * // const presentation: Presentation = ...;\n *\n * const validation = cmaf.validatePresentation(presentation);\n * ```\n *\n * Example output: `{ status: true|false, errorMessages: [...] }`\n *\n * @param presentation - Presentation from cmaf ham model\n * @returns Validation\n *\n * @alpha\n *\n */\nexport function validatePresentation(presentation: Presentation): Validation {\n\tconst validation: Validation = { status: true, errorMessages: [] };\n\n\tif (!presentation.id) {\n\t\tvalidation.status = false;\n\t\tvalidation.errorMessages.push('Presentation id is undefined');\n\t}\n\n\tvalidateSelectionSets(\n\t\tpresentation.selectionSets,\n\t\tpresentation.id,\n\t\tvalidation,\n\t);\n\n\treturn validation;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@svta/cml-cmaf-ham",
3
- "version": "0.19.0",
3
+ "version": "0.20.0",
4
4
  "description": "CMAF Hypothetical Application Model (HAM) functionality",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
- "homepage": "https://github.com/streaming-video-technology-alliance/common-media-library",
7
+ "homepage": "https://github.com/streaming-video-technology-alliance/common-media-library/tree/main/libs/cmaf-ham",
8
8
  "authors": "Casey Occhialini <1508707+littlespex@users.noreply.github.com>",
9
9
  "repository": {
10
10
  "type": "git",
@@ -28,23 +28,6 @@
28
28
  "types": "./dist/index.d.ts",
29
29
  "import": "./dist/index.js",
30
30
  "default": "./dist/index.js"
31
- },
32
- "./*.js": {
33
- "import": "./dist/*.js",
34
- "default": "./dist/*.js"
35
- },
36
- "./*": {
37
- "types": "./dist/*.d.ts",
38
- "import": "./dist/*.js",
39
- "default": "./dist/*.js"
40
- }
41
- },
42
- "typesVersions": {
43
- "*": {
44
- "*": [
45
- "dist/*",
46
- "dist/cjs/*"
47
- ]
48
31
  }
49
32
  },
50
33
  "keywords": [
@@ -57,10 +40,8 @@
57
40
  "DASH"
58
41
  ],
59
42
  "scripts": {
60
- "build": "tsc",
61
- "postbuild": "api-extractor run --local",
62
- "test": "node --no-warnings --test **/*.test.ts",
63
- "prepublishOnly": "npm run build",
43
+ "build": "node ../../scripts/build.ts",
44
+ "test": "node ../../scripts/test.ts",
64
45
  "dev": "node samples/cmaf-ham-conversion/src/index.ts"
65
46
  },
66
47
  "engines": {
@@ -73,9 +54,8 @@
73
54
  "onFail": "error"
74
55
  }
75
56
  },
76
- "dependencies": {
77
- "@svta/cml-cta": "*",
78
- "@svta/cml-utils": "*"
57
+ "peerDependencies": {
58
+ "@svta/cml-utils": "0.20.0"
79
59
  },
80
60
  "devDependencies": {
81
61
  "@types/m3u8-parser": "7.2.5",
@@ -1,8 +0,0 @@
1
- import type { Manifest } from '../types/manifest/Manifest.js';
2
- import type { Presentation } from '../types/model/Presentation.js';
3
- export type Mapper = {
4
- toHam(manifest: Manifest): Presentation[];
5
- toManifest(presentation: Presentation[]): Manifest;
6
- getManifestMetadata(): any | undefined;
7
- };
8
- //# sourceMappingURL=Mapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Mapper.d.ts","sourceRoot":"","sources":["../../src/mapper/Mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,EAAE,CAAC;IAE1C,UAAU,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IAEnD,mBAAmB,IAAI,GAAG,GAAG,SAAS,CAAC;CACvC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Mapper.js","sourceRoot":"","sources":["../../src/mapper/Mapper.ts"],"names":[],"mappings":"","sourcesContent":["import type { Manifest } from '../types/manifest/Manifest.js';\nimport type { Presentation } from '../types/model/Presentation.js';\n\nexport type Mapper = {\n\ttoHam(manifest: Manifest): Presentation[];\n\n\ttoManifest(presentation: Presentation[]): Manifest;\n\n\tgetManifestMetadata(): any | undefined;\n};\n"]}
@@ -1,14 +0,0 @@
1
- import type { Manifest } from '../types/manifest/Manifest.js';
2
- import type { Presentation } from '../types/model/Presentation.js';
3
- import type { Mapper } from './Mapper.js';
4
- export declare class MapperContext {
5
- private strategy;
6
- private static instance;
7
- private constructor();
8
- static getInstance(): MapperContext;
9
- setStrategy(strategy: Mapper): void;
10
- getHamFormat(manifest: Manifest): Presentation[];
11
- getManifestFormat(presentation: Presentation[]): Manifest;
12
- getManifestMetadata(): JSON | undefined;
13
- }
14
- //# sourceMappingURL=MapperContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MapperContext.d.ts","sourceRoot":"","sources":["../../src/mapper/MapperContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IAEvC,OAAO;WAEO,WAAW,IAAI,aAAa;IAQnC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,EAAE;IAIhD,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,QAAQ;IAIzD,mBAAmB,IAAI,IAAI,GAAG,SAAS;CAG9C"}
@@ -1,22 +0,0 @@
1
- export class MapperContext {
2
- constructor() { }
3
- static getInstance() {
4
- if (!MapperContext.instance) {
5
- MapperContext.instance = new MapperContext();
6
- }
7
- return MapperContext.instance;
8
- }
9
- setStrategy(strategy) {
10
- this.strategy = strategy;
11
- }
12
- getHamFormat(manifest) {
13
- return this.strategy.toHam(manifest);
14
- }
15
- getManifestFormat(presentation) {
16
- return this.strategy.toManifest(presentation);
17
- }
18
- getManifestMetadata() {
19
- return this.strategy.getManifestMetadata();
20
- }
21
- }
22
- //# sourceMappingURL=MapperContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MapperContext.js","sourceRoot":"","sources":["../../src/mapper/MapperContext.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,aAAa;IAIzB,gBAAwB,CAAC;IAElB,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC7B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9C,CAAC;QAED,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAEM,WAAW,CAAC,QAAgB;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAEM,YAAY,CAAC,QAAkB;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEM,iBAAiB,CAAC,YAA4B;QACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAEM,mBAAmB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IAC5C,CAAC;CACD","sourcesContent":["import type { Manifest } from '../types/manifest/Manifest.js';\nimport type { Presentation } from '../types/model/Presentation.js';\n\nimport type { Mapper } from './Mapper.js';\n\nexport class MapperContext {\n\tprivate strategy!: Mapper;\n\tprivate static instance: MapperContext;\n\n\tprivate constructor() { }\n\n\tpublic static getInstance(): MapperContext {\n\t\tif (!MapperContext.instance) {\n\t\t\tMapperContext.instance = new MapperContext();\n\t\t}\n\n\t\treturn MapperContext.instance;\n\t}\n\n\tpublic setStrategy(strategy: Mapper): void {\n\t\tthis.strategy = strategy;\n\t}\n\n\tpublic getHamFormat(manifest: Manifest): Presentation[] {\n\t\treturn this.strategy.toHam(manifest);\n\t}\n\n\tpublic getManifestFormat(presentation: Presentation[]): Manifest {\n\t\treturn this.strategy.toManifest(presentation);\n\t}\n\n\tpublic getManifestMetadata(): JSON | undefined {\n\t\treturn this.strategy.getManifestMetadata();\n\t}\n}\n"]}
@@ -1,10 +0,0 @@
1
- import type { Manifest } from '../../types/manifest/Manifest.js';
2
- import type { Presentation } from '../../types/model/Presentation.js';
3
- import type { Mapper } from '../Mapper.js';
4
- export declare class DashMapper implements Mapper {
5
- private manifest;
6
- getManifestMetadata(): JSON | undefined;
7
- toHam(manifest: Manifest): Presentation[];
8
- toManifest(presentation: Presentation[]): Manifest;
9
- }
10
- //# sourceMappingURL=DashMapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DashMapper.d.ts","sourceRoot":"","sources":["../../../src/mapper/dash/DashMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAStE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,qBAAa,UAAW,YAAW,MAAM;IACxC,OAAO,CAAC,QAAQ,CAAuB;IAEvC,mBAAmB,IAAI,IAAI,GAAG,SAAS;IAIvC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,EAAE;IAazC,UAAU,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,QAAQ;CAIlD"}
@@ -1,23 +0,0 @@
1
- import { mapDashToHam } from './mapDashToHam/mapDashToHam.js';
2
- import { mapHamToDash } from './mapHamToDash/mapHamToDash.js';
3
- import { parseDashManifest } from '../../utils/dash/parseDashManifest.js';
4
- import { addMetadataToDash } from '../../utils/manifest/addMetadataToDash.js';
5
- import { getMetadata } from '../../utils/manifest/getMetadata.js';
6
- export class DashMapper {
7
- getManifestMetadata() {
8
- return getMetadata(this.manifest);
9
- }
10
- toHam(manifest) {
11
- const dashManifest = parseDashManifest(manifest.manifest);
12
- if (!dashManifest) {
13
- return [];
14
- }
15
- addMetadataToDash(dashManifest, manifest);
16
- return mapDashToHam(dashManifest);
17
- }
18
- toManifest(presentation) {
19
- const manifest = mapHamToDash(presentation);
20
- return { manifest, ancillaryManifests: [], type: 'dash' };
21
- }
22
- }
23
- //# sourceMappingURL=DashMapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DashMapper.js","sourceRoot":"","sources":["../../../src/mapper/dash/DashMapper.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAIlE,MAAM,OAAO,UAAU;IAGtB,mBAAmB;QAClB,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,QAAkB;QACvB,MAAM,YAAY,GAA6B,iBAAiB,CAC/D,QAAQ,CAAC,QAAQ,CACjB,CAAC;QAEF,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,iBAAiB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAE1C,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,YAA4B;QACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3D,CAAC;CACD","sourcesContent":["import type { Manifest } from '../../types/manifest/Manifest.js';\nimport type { DashManifest } from '../../types/mapper/dash/DashManifest.js';\nimport type { Presentation } from '../../types/model/Presentation.js';\n\nimport { mapDashToHam } from './mapDashToHam/mapDashToHam.js';\nimport { mapHamToDash } from './mapHamToDash/mapHamToDash.js';\n\nimport { parseDashManifest } from '../../utils/dash/parseDashManifest.js';\nimport { addMetadataToDash } from '../../utils/manifest/addMetadataToDash.js';\nimport { getMetadata } from '../../utils/manifest/getMetadata.js';\n\nimport type { Mapper } from '../Mapper.js';\n\nexport class DashMapper implements Mapper {\n\tprivate manifest: Manifest | undefined;\n\n\tgetManifestMetadata(): JSON | undefined {\n\t\treturn getMetadata(this.manifest);\n\t}\n\n\ttoHam(manifest: Manifest): Presentation[] {\n\t\tconst dashManifest: DashManifest | undefined = parseDashManifest(\n\t\t\tmanifest.manifest,\n\t\t);\n\n\t\tif (!dashManifest) {\n\t\t\treturn [];\n\t\t}\n\t\taddMetadataToDash(dashManifest, manifest);\n\n\t\treturn mapDashToHam(dashManifest);\n\t}\n\n\ttoManifest(presentation: Presentation[]): Manifest {\n\t\tconst manifest = mapHamToDash(presentation);\n\t\treturn { manifest, ancillaryManifests: [], type: 'dash' };\n\t}\n}\n"]}
@@ -1,12 +0,0 @@
1
- import type { DashManifest } from '../../../types/mapper/dash/DashManifest.js';
2
- import type { Presentation } from '../../../types/model/Presentation.js';
3
- /**
4
- * @internal
5
- *
6
- * Main function to map dash to ham.
7
- *
8
- * @param dash - Dash manifest to map
9
- * @returns List of presentations in ham
10
- */
11
- export declare function mapDashToHam(dash: DashManifest): Presentation[];
12
- //# sourceMappingURL=mapDashToHam.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapDashToHam.d.ts","sourceRoot":"","sources":["../../../../src/mapper/dash/mapDashToHam/mapDashToHam.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAI/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAezE;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,CA8C/D"}
@@ -1,42 +0,0 @@
1
- import { iso8601DurationToNumber } from '../../../utils/dash/iso8601DurationToNumber.js';
2
- import { getGroup } from './utils/getGroup.js';
3
- import { getInitializationUrl } from './utils/getInitializationUrl.js';
4
- import { getPresentationId } from './utils/getPresentationId.js';
5
- import { mapSegments } from './mapSegments.js';
6
- import { mapTracks } from './mapTracks.js';
7
- /**
8
- * @internal
9
- *
10
- * Main function to map dash to ham.
11
- *
12
- * @param dash - Dash manifest to map
13
- * @returns List of presentations in ham
14
- */
15
- export function mapDashToHam(dash) {
16
- return dash.MPD.Period.map((period) => {
17
- const duration = iso8601DurationToNumber(period.$.duration);
18
- const presentationId = getPresentationId(period, duration);
19
- const selectionSetGroups = {};
20
- period.AdaptationSet.map((adaptationSet) => {
21
- var _a, _b, _c, _d;
22
- const tracks = adaptationSet.Representation.map((representation) => {
23
- const segments = mapSegments(adaptationSet, representation, duration);
24
- return mapTracks(adaptationSet, representation, segments, getInitializationUrl(adaptationSet, representation));
25
- });
26
- const group = getGroup(adaptationSet);
27
- if (!selectionSetGroups[group]) {
28
- selectionSetGroups[group] = {
29
- id: group,
30
- switchingSets: [],
31
- };
32
- }
33
- selectionSetGroups[group].switchingSets.push({
34
- id: (_d = (_a = adaptationSet.$.id) !== null && _a !== void 0 ? _a : (_c = (_b = adaptationSet.ContentComponent) === null || _b === void 0 ? void 0 : _b.at(0)) === null || _c === void 0 ? void 0 : _c.$.id) !== null && _d !== void 0 ? _d : group,
35
- tracks,
36
- });
37
- });
38
- const selectionSets = Object.values(selectionSetGroups);
39
- return { id: presentationId, selectionSets };
40
- });
41
- }
42
- //# sourceMappingURL=mapDashToHam.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapDashToHam.js","sourceRoot":"","sources":["../../../../src/mapper/dash/mapDashToHam/mapDashToHam.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAEzF,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAkB;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAW,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,cAAc,GAAW,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEnE,MAAM,kBAAkB,GAAsC,EAAE,CAAC;QAEjE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,aAA4B,EAAE,EAAE;;YACzD,MAAM,MAAM,GAAY,aAAa,CAAC,cAAc,CAAC,GAAG,CACvD,CAAC,cAA8B,EAAE,EAAE;gBAClC,MAAM,QAAQ,GAAc,WAAW,CACtC,aAAa,EACb,cAAc,EACd,QAAQ,CACR,CAAC;gBAEF,OAAO,SAAS,CACf,aAAa,EACb,cAAc,EACd,QAAQ,EACR,oBAAoB,CAAC,aAAa,EAAE,cAAc,CAAC,CACnD,CAAC;YACH,CAAC,CACD,CAAC;YAEF,MAAM,KAAK,GAAW,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,kBAAkB,CAAC,KAAK,CAAC,GAAG;oBAC3B,EAAE,EAAE,KAAK;oBACT,aAAa,EAAE,EAAE;iBACD,CAAC;YACnB,CAAC;YAED,kBAAkB,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC5C,EAAE,EACD,MAAA,MAAA,aAAa,CAAC,CAAC,CAAC,EAAE,mCAClB,MAAA,MAAA,aAAa,CAAC,gBAAgB,0CAAE,EAAE,CAAC,CAAC,CAAC,0CAAE,CAAC,CAAC,EAAE,mCAC3C,KAAK;gBACN,MAAM;aACU,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAmB,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAExE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,aAAa,EAAkB,CAAC;IAC9D,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { AdaptationSet } from '../../../types/mapper/dash/AdaptationSet.js';\nimport type { DashManifest } from '../../../types/mapper/dash/DashManifest.js';\nimport type { Period } from '../../../types/mapper/dash/Period.js';\nimport type { Representation } from '../../../types/mapper/dash/Representation.js';\n\nimport type { Presentation } from '../../../types/model/Presentation.js';\nimport type { Segment } from '../../../types/model/Segment.js';\nimport type { SelectionSet } from '../../../types/model/SelectionSet.js';\nimport type { SwitchingSet } from '../../../types/model/SwitchingSet.js';\nimport type { Track } from '../../../types/model/Track.js';\n\nimport { iso8601DurationToNumber } from '../../../utils/dash/iso8601DurationToNumber.js';\n\nimport { getGroup } from './utils/getGroup.js';\nimport { getInitializationUrl } from './utils/getInitializationUrl.js';\nimport { getPresentationId } from './utils/getPresentationId.js';\n\nimport { mapSegments } from './mapSegments.js';\nimport { mapTracks } from './mapTracks.js';\n\n/**\n * @internal\n *\n * Main function to map dash to ham.\n *\n * @param dash - Dash manifest to map\n * @returns List of presentations in ham\n */\nexport function mapDashToHam(dash: DashManifest): Presentation[] {\n\treturn dash.MPD.Period.map((period: Period) => {\n\t\tconst duration: number = iso8601DurationToNumber(period.$.duration);\n\t\tconst presentationId: string = getPresentationId(period, duration);\n\n\t\tconst selectionSetGroups: { [group: string]: SelectionSet } = {};\n\n\t\tperiod.AdaptationSet.map((adaptationSet: AdaptationSet) => {\n\t\t\tconst tracks: Track[] = adaptationSet.Representation.map(\n\t\t\t\t(representation: Representation) => {\n\t\t\t\t\tconst segments: Segment[] = mapSegments(\n\t\t\t\t\t\tadaptationSet,\n\t\t\t\t\t\trepresentation,\n\t\t\t\t\t\tduration,\n\t\t\t\t\t);\n\n\t\t\t\t\treturn mapTracks(\n\t\t\t\t\t\tadaptationSet,\n\t\t\t\t\t\trepresentation,\n\t\t\t\t\t\tsegments,\n\t\t\t\t\t\tgetInitializationUrl(adaptationSet, representation),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst group: string = getGroup(adaptationSet);\n\t\t\tif (!selectionSetGroups[group]) {\n\t\t\t\tselectionSetGroups[group] = {\n\t\t\t\t\tid: group,\n\t\t\t\t\tswitchingSets: [],\n\t\t\t\t} as SelectionSet;\n\t\t\t}\n\n\t\t\tselectionSetGroups[group].switchingSets.push({\n\t\t\t\tid:\n\t\t\t\t\tadaptationSet.$.id ??\n\t\t\t\t\tadaptationSet.ContentComponent?.at(0)?.$.id ??\n\t\t\t\t\tgroup,\n\t\t\t\ttracks,\n\t\t\t} as SwitchingSet);\n\t\t});\n\n\t\tconst selectionSets: SelectionSet[] = Object.values(selectionSetGroups);\n\n\t\treturn { id: presentationId, selectionSets } as Presentation;\n\t});\n}\n"]}
@@ -1,13 +0,0 @@
1
- import type { Representation } from '../../../types/mapper/dash/Representation.js';
2
- import type { Segment } from '../../../types/model/Segment.js';
3
- /**
4
- * @internal
5
- *
6
- * Maps SegmentBase from dash to Segment list from ham.
7
- *
8
- * @param representation - Representation to get the SegmentBase from
9
- * @param duration - Duration of the segment
10
- * @returns list of ham segments
11
- */
12
- export declare function mapSegmentBase(representation: Representation, duration: number): Segment[];
13
- //# sourceMappingURL=mapSegmentBase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapSegmentBase.d.ts","sourceRoot":"","sources":["../../../../src/mapper/dash/mapDashToHam/mapSegmentBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAGnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE/D;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC7B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,MAAM,GACd,OAAO,EAAE,CAQX"}
@@ -1,20 +0,0 @@
1
- /**
2
- * @internal
3
- *
4
- * Maps SegmentBase from dash to Segment list from ham.
5
- *
6
- * @param representation - Representation to get the SegmentBase from
7
- * @param duration - Duration of the segment
8
- * @returns list of ham segments
9
- */
10
- export function mapSegmentBase(representation, duration) {
11
- return representation.SegmentBase.map((segment) => {
12
- var _a;
13
- return {
14
- duration,
15
- url: (_a = representation.BaseURL[0]) !== null && _a !== void 0 ? _a : '',
16
- byteRange: segment.$.indexRange,
17
- };
18
- });
19
- }
20
- //# sourceMappingURL=mapSegmentBase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapSegmentBase.js","sourceRoot":"","sources":["../../../../src/mapper/dash/mapDashToHam/mapSegmentBase.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC7B,cAA8B,EAC9B,QAAgB;IAEhB,OAAO,cAAc,CAAC,WAAY,CAAC,GAAG,CAAC,CAAC,OAAoB,EAAE,EAAE;;QAC/D,OAAO;YACN,QAAQ;YACR,GAAG,EAAE,MAAA,cAAc,CAAC,OAAQ,CAAC,CAAC,CAAC,mCAAI,EAAE;YACrC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU;SACpB,CAAC;IACd,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { Representation } from '../../../types/mapper/dash/Representation.js';\nimport type { SegmentBase } from '../../../types/mapper/dash/SegmentBase.js';\n\nimport type { Segment } from '../../../types/model/Segment.js';\n\n/**\n * @internal\n *\n * Maps SegmentBase from dash to Segment list from ham.\n *\n * @param representation - Representation to get the SegmentBase from\n * @param duration - Duration of the segment\n * @returns list of ham segments\n */\nexport function mapSegmentBase(\n\trepresentation: Representation,\n\tduration: number,\n): Segment[] {\n\treturn representation.SegmentBase!.map((segment: SegmentBase) => {\n\t\treturn {\n\t\t\tduration,\n\t\t\turl: representation.BaseURL![0] ?? '',\n\t\t\tbyteRange: segment.$.indexRange,\n\t\t} as Segment;\n\t});\n}\n"]}
@@ -1,12 +0,0 @@
1
- import type { SegmentList } from '../../../types/mapper/dash/SegmentList.js';
2
- import type { Segment } from '../../../types/model/Segment.js';
3
- /**
4
- * @internal
5
- *
6
- * Maps SegmentList from dash to Segment list from ham.
7
- *
8
- * @param segmentList - SegmentList list from dash
9
- * @returns list of ham segments
10
- */
11
- export declare function mapSegmentList(segmentList: SegmentList[]): Segment[];
12
- //# sourceMappingURL=mapSegmentList.d.ts.map