@videojs/spf 10.0.0-beta.3 → 10.0.0-beta.30

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 (580) hide show
  1. package/README.md +19 -38
  2. package/dist/default/core/actors/create-machine-actor.js +91 -0
  3. package/dist/default/core/actors/create-machine-actor.js.map +1 -0
  4. package/dist/default/core/actors/create-transition-actor.js +46 -0
  5. package/dist/default/core/actors/create-transition-actor.js.map +1 -0
  6. package/dist/default/core/composition/create-composition.js +85 -0
  7. package/dist/default/core/composition/create-composition.js.map +1 -0
  8. package/dist/default/core/composition/share-signals.js +39 -0
  9. package/dist/default/core/composition/share-signals.js.map +1 -0
  10. package/dist/default/core/machine.js +26 -0
  11. package/dist/default/core/machine.js.map +1 -0
  12. package/dist/default/core/reactors/create-machine-reactor.js +83 -0
  13. package/dist/default/core/reactors/create-machine-reactor.js.map +1 -0
  14. package/dist/default/core/signals/effect.js +41 -0
  15. package/dist/default/core/signals/effect.js.map +1 -0
  16. package/dist/default/core/signals/primitives.js +54 -0
  17. package/dist/default/core/signals/primitives.js.map +1 -0
  18. package/dist/default/core/signals/when.js +38 -0
  19. package/dist/default/core/signals/when.js.map +1 -0
  20. package/dist/default/core/tasks/delayed-reschedule.js +31 -0
  21. package/dist/default/core/tasks/delayed-reschedule.js.map +1 -0
  22. package/dist/default/core/tasks/task.js +321 -0
  23. package/dist/default/core/tasks/task.js.map +1 -0
  24. package/dist/default/dom.js +9 -0
  25. package/dist/default/hls-audio.js +3 -0
  26. package/dist/default/hls-background-video.js +3 -0
  27. package/dist/default/hls-video.js +4 -0
  28. package/dist/default/hls.js +8 -0
  29. package/dist/default/index.js +23 -0
  30. package/dist/default/index.js.map +1 -0
  31. package/dist/default/media/abr/quality-selection.js +21 -0
  32. package/dist/default/media/abr/quality-selection.js.map +1 -0
  33. package/dist/default/media/buffer/back-buffer.js +46 -0
  34. package/dist/default/media/buffer/back-buffer.js.map +1 -0
  35. package/dist/default/media/buffer/forward-buffer.js +119 -0
  36. package/dist/default/media/buffer/forward-buffer.js.map +1 -0
  37. package/dist/default/media/dom/capabilities.js +72 -0
  38. package/dist/default/media/dom/capabilities.js.map +1 -0
  39. package/dist/default/media/dom/mse/append-segment.js +60 -0
  40. package/dist/default/media/dom/mse/append-segment.js.map +1 -0
  41. package/dist/default/media/dom/mse/buffer-flusher.js +55 -0
  42. package/dist/default/media/dom/mse/buffer-flusher.js.map +1 -0
  43. package/dist/default/media/dom/mse/duration.js +95 -0
  44. package/dist/default/media/dom/mse/duration.js.map +1 -0
  45. package/dist/default/media/dom/mse/end-of-stream.js +20 -0
  46. package/dist/default/media/dom/mse/end-of-stream.js.map +1 -0
  47. package/dist/default/media/dom/mse/mediasource-setup.js +242 -0
  48. package/dist/default/media/dom/mse/mediasource-setup.js.map +1 -0
  49. package/dist/default/media/dom/screen.js +112 -0
  50. package/dist/default/media/dom/screen.js.map +1 -0
  51. package/dist/default/media/dom/text/resolve-vtt-segment.js +50 -0
  52. package/dist/default/media/dom/text/resolve-vtt-segment.js.map +1 -0
  53. package/dist/default/media/dom/text/text-track-slots.js +69 -0
  54. package/dist/default/media/dom/text/text-track-slots.js.map +1 -0
  55. package/dist/default/media/errors.js +69 -0
  56. package/dist/default/media/errors.js.map +1 -0
  57. package/dist/default/media/hls/parse-attributes.js +148 -0
  58. package/dist/default/media/hls/parse-attributes.js.map +1 -0
  59. package/dist/default/media/hls/parse-media-playlist.js +261 -0
  60. package/dist/default/media/hls/parse-media-playlist.js.map +1 -0
  61. package/dist/default/media/hls/parse-multivariant.js +234 -0
  62. package/dist/default/media/hls/parse-multivariant.js.map +1 -0
  63. package/dist/default/media/hls/reload-policy.js +71 -0
  64. package/dist/default/media/hls/reload-policy.js.map +1 -0
  65. package/dist/default/media/hls/resolve-url.js +11 -0
  66. package/dist/default/media/hls/resolve-url.js.map +1 -0
  67. package/dist/default/media/live-window.js +36 -0
  68. package/dist/default/media/live-window.js.map +1 -0
  69. package/dist/default/media/media-tracks/media-tracks.js +101 -0
  70. package/dist/default/media/media-tracks/media-tracks.js.map +1 -0
  71. package/dist/default/media/mp4/box.js +58 -0
  72. package/dist/default/media/mp4/box.js.map +1 -0
  73. package/dist/default/media/mp4/timestamp-origin.js +107 -0
  74. package/dist/default/media/mp4/timestamp-origin.js.map +1 -0
  75. package/dist/default/media/primitives/resolution.js +29 -0
  76. package/dist/default/media/primitives/resolution.js.map +1 -0
  77. package/dist/default/media/primitives/select-tracks.js +107 -0
  78. package/dist/default/media/primitives/select-tracks.js.map +1 -0
  79. package/dist/default/media/text/parse-vtt-timestamp-map.js +42 -0
  80. package/dist/default/media/text/parse-vtt-timestamp-map.js.map +1 -0
  81. package/dist/default/media/text/resolve-vtt-metadata.js +23 -0
  82. package/dist/default/media/text/resolve-vtt-metadata.js.map +1 -0
  83. package/dist/default/media/types/index.js +50 -0
  84. package/dist/default/media/types/index.js.map +1 -0
  85. package/dist/default/media/utils/cdn.js +56 -0
  86. package/dist/default/media/utils/cdn.js.map +1 -0
  87. package/dist/default/media/utils/preload.js +22 -0
  88. package/dist/default/media/utils/preload.js.map +1 -0
  89. package/dist/default/media/utils/track-selection.js +47 -0
  90. package/dist/default/media/utils/track-selection.js.map +1 -0
  91. package/dist/default/media/utils/tracks.js +144 -0
  92. package/dist/default/media/utils/tracks.js.map +1 -0
  93. package/dist/default/media-tracks.js +2 -0
  94. package/dist/default/mux-audio.js +3 -0
  95. package/dist/default/mux-background-video.js +3 -0
  96. package/dist/default/mux-video.js +3 -0
  97. package/dist/default/network/bandwidth-estimator.js +96 -0
  98. package/dist/default/network/bandwidth-estimator.js.map +1 -0
  99. package/dist/default/network/chunked-stream-iterable.js +49 -0
  100. package/dist/default/network/chunked-stream-iterable.js.map +1 -0
  101. package/dist/default/network/ewma.js +71 -0
  102. package/dist/default/network/ewma.js.map +1 -0
  103. package/dist/default/network/fetch.js +115 -0
  104. package/dist/default/network/fetch.js.map +1 -0
  105. package/dist/default/playback/actors/dom/segment-loader.js +249 -0
  106. package/dist/default/playback/actors/dom/segment-loader.js.map +1 -0
  107. package/dist/default/playback/actors/dom/source-buffer.js +139 -0
  108. package/dist/default/playback/actors/dom/source-buffer.js.map +1 -0
  109. package/dist/default/playback/actors/dom/text-tracks.js +46 -0
  110. package/dist/default/playback/actors/dom/text-tracks.js.map +1 -0
  111. package/dist/default/playback/actors/text-track-segment-loader.js +149 -0
  112. package/dist/default/playback/actors/text-track-segment-loader.js.map +1 -0
  113. package/dist/default/playback/adapters/hls-audio/adapter.js +186 -0
  114. package/dist/default/playback/adapters/hls-audio/adapter.js.map +1 -0
  115. package/dist/default/playback/adapters/hls-audio/media.js +9 -0
  116. package/dist/default/playback/adapters/hls-audio/media.js.map +1 -0
  117. package/dist/default/playback/adapters/hls-background-video/adapter.js +211 -0
  118. package/dist/default/playback/adapters/hls-background-video/adapter.js.map +1 -0
  119. package/dist/default/playback/adapters/hls-background-video/host.js +60 -0
  120. package/dist/default/playback/adapters/hls-background-video/host.js.map +1 -0
  121. package/dist/default/playback/adapters/hls-background-video/media.js +21 -0
  122. package/dist/default/playback/adapters/hls-background-video/media.js.map +1 -0
  123. package/dist/default/playback/adapters/hls-video/adapter.js +316 -0
  124. package/dist/default/playback/adapters/hls-video/adapter.js.map +1 -0
  125. package/dist/default/playback/adapters/hls-video/error-surface.js +51 -0
  126. package/dist/default/playback/adapters/hls-video/error-surface.js.map +1 -0
  127. package/dist/default/playback/adapters/hls-video/media-tracks.js +126 -0
  128. package/dist/default/playback/adapters/hls-video/media-tracks.js.map +1 -0
  129. package/dist/default/playback/adapters/hls-video/media.js +11 -0
  130. package/dist/default/playback/adapters/hls-video/media.js.map +1 -0
  131. package/dist/default/playback/adapters/mux-audio/media.js +26 -0
  132. package/dist/default/playback/adapters/mux-audio/media.js.map +1 -0
  133. package/dist/default/playback/adapters/mux-video/adapter.js +105 -0
  134. package/dist/default/playback/adapters/mux-video/adapter.js.map +1 -0
  135. package/dist/default/playback/adapters/mux-video/media.js +23 -0
  136. package/dist/default/playback/adapters/mux-video/media.js.map +1 -0
  137. package/dist/default/playback/behaviors/calculate-presentation-duration.js +36 -0
  138. package/dist/default/playback/behaviors/calculate-presentation-duration.js.map +1 -0
  139. package/dist/default/playback/behaviors/collect-errors.js +111 -0
  140. package/dist/default/playback/behaviors/collect-errors.js.map +1 -0
  141. package/dist/default/playback/behaviors/derive-cdn-priority.js +68 -0
  142. package/dist/default/playback/behaviors/derive-cdn-priority.js.map +1 -0
  143. package/dist/default/playback/behaviors/dom/airplay.js +211 -0
  144. package/dist/default/playback/behaviors/dom/airplay.js.map +1 -0
  145. package/dist/default/playback/behaviors/dom/apply-start-position.js +93 -0
  146. package/dist/default/playback/behaviors/dom/apply-start-position.js.map +1 -0
  147. package/dist/default/playback/behaviors/dom/end-of-stream.js +102 -0
  148. package/dist/default/playback/behaviors/dom/end-of-stream.js.map +1 -0
  149. package/dist/default/playback/behaviors/dom/load-segments.js +181 -0
  150. package/dist/default/playback/behaviors/dom/load-segments.js.map +1 -0
  151. package/dist/default/playback/behaviors/dom/recover-end-stall.js +77 -0
  152. package/dist/default/playback/behaviors/dom/recover-end-stall.js.map +1 -0
  153. package/dist/default/playback/behaviors/dom/seek-to-live-edge.js +132 -0
  154. package/dist/default/playback/behaviors/dom/seek-to-live-edge.js.map +1 -0
  155. package/dist/default/playback/behaviors/dom/setup-buffer-actors.js +205 -0
  156. package/dist/default/playback/behaviors/dom/setup-buffer-actors.js.map +1 -0
  157. package/dist/default/playback/behaviors/dom/setup-mediasource.js +114 -0
  158. package/dist/default/playback/behaviors/dom/setup-mediasource.js.map +1 -0
  159. package/dist/default/playback/behaviors/dom/setup-text-track-actors.js +40 -0
  160. package/dist/default/playback/behaviors/dom/setup-text-track-actors.js.map +1 -0
  161. package/dist/default/playback/behaviors/dom/sync-live-seekable-range.js +26 -0
  162. package/dist/default/playback/behaviors/dom/sync-live-seekable-range.js.map +1 -0
  163. package/dist/default/playback/behaviors/dom/sync-text-tracks.js +124 -0
  164. package/dist/default/playback/behaviors/dom/sync-text-tracks.js.map +1 -0
  165. package/dist/default/playback/behaviors/dom/track-current-time.js +52 -0
  166. package/dist/default/playback/behaviors/dom/track-current-time.js.map +1 -0
  167. package/dist/default/playback/behaviors/dom/track-load-triggers.js +94 -0
  168. package/dist/default/playback/behaviors/dom/track-load-triggers.js.map +1 -0
  169. package/dist/default/playback/behaviors/dom/track-playback-rate.js +37 -0
  170. package/dist/default/playback/behaviors/dom/track-playback-rate.js.map +1 -0
  171. package/dist/default/playback/behaviors/dom/track-player-resolution.js +57 -0
  172. package/dist/default/playback/behaviors/dom/track-player-resolution.js.map +1 -0
  173. package/dist/default/playback/behaviors/dom/track-screen-resolution.js +29 -0
  174. package/dist/default/playback/behaviors/dom/track-screen-resolution.js.map +1 -0
  175. package/dist/default/playback/behaviors/dom/update-mediasource-duration.js +113 -0
  176. package/dist/default/playback/behaviors/dom/update-mediasource-duration.js.map +1 -0
  177. package/dist/default/playback/behaviors/establish-start-media-time.js +197 -0
  178. package/dist/default/playback/behaviors/establish-start-media-time.js.map +1 -0
  179. package/dist/default/playback/behaviors/resolve-presentation.js +85 -0
  180. package/dist/default/playback/behaviors/resolve-presentation.js.map +1 -0
  181. package/dist/default/playback/behaviors/resolve-track.js +141 -0
  182. package/dist/default/playback/behaviors/resolve-track.js.map +1 -0
  183. package/dist/default/playback/behaviors/select-tracks.js +216 -0
  184. package/dist/default/playback/behaviors/select-tracks.js.map +1 -0
  185. package/dist/default/playback/behaviors/setup-failover-monitor.js +66 -0
  186. package/dist/default/playback/behaviors/setup-failover-monitor.js.map +1 -0
  187. package/dist/default/playback/behaviors/sync-preload.js +59 -0
  188. package/dist/default/playback/behaviors/sync-preload.js.map +1 -0
  189. package/dist/default/playback/behaviors/track-switching.js +391 -0
  190. package/dist/default/playback/behaviors/track-switching.js.map +1 -0
  191. package/dist/default/playback/engines/hls/engine-audio-only.js +98 -0
  192. package/dist/default/playback/engines/hls/engine-audio-only.js.map +1 -0
  193. package/dist/default/playback/engines/hls/engine-background-video.js +92 -0
  194. package/dist/default/playback/engines/hls/engine-background-video.js.map +1 -0
  195. package/dist/default/playback/engines/hls/engine.js +147 -0
  196. package/dist/default/playback/engines/hls/engine.js.map +1 -0
  197. package/dist/default/playback/primitives/error-messages.js +51 -0
  198. package/dist/default/playback/primitives/error-messages.js.map +1 -0
  199. package/dist/default/playback/primitives/failover-fetch.js +42 -0
  200. package/dist/default/playback/primitives/failover-fetch.js.map +1 -0
  201. package/dist/default/playback/primitives/head-peek.js +44 -0
  202. package/dist/default/playback/primitives/head-peek.js.map +1 -0
  203. package/dist/default/playback/primitives/live-window.js +66 -0
  204. package/dist/default/playback/primitives/live-window.js.map +1 -0
  205. package/dist/default/playback/primitives/relocation-pipelines.js +203 -0
  206. package/dist/default/playback/primitives/relocation-pipelines.js.map +1 -0
  207. package/dist/default/playback/primitives/report-track-conditions.js +86 -0
  208. package/dist/default/playback/primitives/report-track-conditions.js.map +1 -0
  209. package/dist/default/playback/primitives/segment-load-pipeline.js +96 -0
  210. package/dist/default/playback/primitives/segment-load-pipeline.js.map +1 -0
  211. package/dist/default/playback/primitives/selection-rules.js +86 -0
  212. package/dist/default/playback/primitives/selection-rules.js.map +1 -0
  213. package/dist/default/playback/primitives/text-segment-load-pipeline.js +37 -0
  214. package/dist/default/playback/primitives/text-segment-load-pipeline.js.map +1 -0
  215. package/dist/default/playback/primitives/track-types.js +61 -0
  216. package/dist/default/playback/primitives/track-types.js.map +1 -0
  217. package/dist/dev/core/actors/actor.d.ts +26 -0
  218. package/dist/dev/core/actors/actor.d.ts.map +1 -0
  219. package/dist/dev/core/actors/create-machine-actor.d.ts +128 -0
  220. package/dist/dev/core/actors/create-machine-actor.d.ts.map +1 -0
  221. package/dist/dev/core/actors/create-machine-actor.js +91 -0
  222. package/dist/dev/core/actors/create-machine-actor.js.map +1 -0
  223. package/dist/dev/core/actors/create-transition-actor.d.ts +41 -0
  224. package/dist/dev/core/actors/create-transition-actor.d.ts.map +1 -0
  225. package/dist/dev/core/actors/create-transition-actor.js +46 -0
  226. package/dist/dev/core/actors/create-transition-actor.js.map +1 -0
  227. package/dist/dev/core/composition/create-composition.d.ts +273 -0
  228. package/dist/dev/core/composition/create-composition.d.ts.map +1 -0
  229. package/dist/dev/core/composition/create-composition.js +85 -0
  230. package/dist/dev/core/composition/create-composition.js.map +1 -0
  231. package/dist/dev/core/composition/share-signals.d.ts +46 -0
  232. package/dist/dev/core/composition/share-signals.d.ts.map +1 -0
  233. package/dist/dev/core/composition/share-signals.js +39 -0
  234. package/dist/dev/core/composition/share-signals.js.map +1 -0
  235. package/dist/dev/core/machine.d.ts +21 -0
  236. package/dist/dev/core/machine.d.ts.map +1 -0
  237. package/dist/dev/core/machine.js +26 -0
  238. package/dist/dev/core/machine.js.map +1 -0
  239. package/dist/dev/core/reactors/create-machine-reactor.d.ts +93 -0
  240. package/dist/dev/core/reactors/create-machine-reactor.d.ts.map +1 -0
  241. package/dist/dev/core/reactors/create-machine-reactor.js +83 -0
  242. package/dist/dev/core/reactors/create-machine-reactor.js.map +1 -0
  243. package/dist/dev/core/signals/effect.d.ts +15 -0
  244. package/dist/dev/core/signals/effect.d.ts.map +1 -0
  245. package/dist/dev/core/signals/effect.js +41 -0
  246. package/dist/dev/core/signals/effect.js.map +1 -0
  247. package/dist/dev/core/signals/primitives.d.ts +46 -0
  248. package/dist/dev/core/signals/primitives.d.ts.map +1 -0
  249. package/dist/dev/core/signals/primitives.js +54 -0
  250. package/dist/dev/core/signals/primitives.js.map +1 -0
  251. package/dist/dev/core/signals/when.js +38 -0
  252. package/dist/dev/core/signals/when.js.map +1 -0
  253. package/dist/dev/core/tasks/delayed-reschedule.js +31 -0
  254. package/dist/dev/core/tasks/delayed-reschedule.js.map +1 -0
  255. package/dist/dev/core/tasks/task.d.ts +166 -0
  256. package/dist/dev/core/tasks/task.d.ts.map +1 -0
  257. package/dist/dev/core/tasks/task.js +321 -0
  258. package/dist/dev/core/tasks/task.js.map +1 -0
  259. package/dist/dev/dom.d.ts +9 -0
  260. package/dist/dev/dom.js +9 -0
  261. package/dist/dev/hls-audio.d.ts +3 -0
  262. package/dist/dev/hls-audio.js +3 -0
  263. package/dist/dev/hls-background-video.d.ts +4 -0
  264. package/dist/dev/hls-background-video.js +3 -0
  265. package/dist/dev/hls-video.d.ts +5 -0
  266. package/dist/dev/hls-video.js +4 -0
  267. package/dist/dev/hls.d.ts +9 -0
  268. package/dist/dev/hls.js +8 -0
  269. package/dist/dev/index.d.ts +24 -0
  270. package/dist/dev/index.d.ts.map +1 -0
  271. package/dist/dev/index.js +23 -0
  272. package/dist/dev/index.js.map +1 -0
  273. package/dist/dev/media/abr/quality-selection.d.ts +22 -0
  274. package/dist/dev/media/abr/quality-selection.d.ts.map +1 -0
  275. package/dist/dev/media/abr/quality-selection.js +21 -0
  276. package/dist/dev/media/abr/quality-selection.js.map +1 -0
  277. package/dist/dev/media/buffer/back-buffer.d.ts +14 -0
  278. package/dist/dev/media/buffer/back-buffer.d.ts.map +1 -0
  279. package/dist/dev/media/buffer/back-buffer.js +46 -0
  280. package/dist/dev/media/buffer/back-buffer.js.map +1 -0
  281. package/dist/dev/media/buffer/forward-buffer.d.ts +14 -0
  282. package/dist/dev/media/buffer/forward-buffer.d.ts.map +1 -0
  283. package/dist/dev/media/buffer/forward-buffer.js +119 -0
  284. package/dist/dev/media/buffer/forward-buffer.js.map +1 -0
  285. package/dist/dev/media/dom/capabilities.js +72 -0
  286. package/dist/dev/media/dom/capabilities.js.map +1 -0
  287. package/dist/dev/media/dom/mse/append-segment.d.ts +18 -0
  288. package/dist/dev/media/dom/mse/append-segment.d.ts.map +1 -0
  289. package/dist/dev/media/dom/mse/append-segment.js +60 -0
  290. package/dist/dev/media/dom/mse/append-segment.js.map +1 -0
  291. package/dist/dev/media/dom/mse/buffer-flusher.d.ts +24 -0
  292. package/dist/dev/media/dom/mse/buffer-flusher.d.ts.map +1 -0
  293. package/dist/dev/media/dom/mse/buffer-flusher.js +55 -0
  294. package/dist/dev/media/dom/mse/buffer-flusher.js.map +1 -0
  295. package/dist/dev/media/dom/mse/duration.js +95 -0
  296. package/dist/dev/media/dom/mse/duration.js.map +1 -0
  297. package/dist/dev/media/dom/mse/end-of-stream.js +20 -0
  298. package/dist/dev/media/dom/mse/end-of-stream.js.map +1 -0
  299. package/dist/dev/media/dom/mse/mediasource-setup.js +242 -0
  300. package/dist/dev/media/dom/mse/mediasource-setup.js.map +1 -0
  301. package/dist/dev/media/dom/screen.d.ts +7 -0
  302. package/dist/dev/media/dom/screen.d.ts.map +1 -0
  303. package/dist/dev/media/dom/screen.js +112 -0
  304. package/dist/dev/media/dom/screen.js.map +1 -0
  305. package/dist/dev/media/dom/text/resolve-vtt-segment.d.ts +6 -0
  306. package/dist/dev/media/dom/text/resolve-vtt-segment.d.ts.map +1 -0
  307. package/dist/dev/media/dom/text/resolve-vtt-segment.js +50 -0
  308. package/dist/dev/media/dom/text/resolve-vtt-segment.js.map +1 -0
  309. package/dist/dev/media/dom/text/text-track-slots.d.ts +30 -0
  310. package/dist/dev/media/dom/text/text-track-slots.d.ts.map +1 -0
  311. package/dist/dev/media/dom/text/text-track-slots.js +69 -0
  312. package/dist/dev/media/dom/text/text-track-slots.js.map +1 -0
  313. package/dist/dev/media/errors.d.ts +82 -0
  314. package/dist/dev/media/errors.d.ts.map +1 -0
  315. package/dist/dev/media/errors.js +69 -0
  316. package/dist/dev/media/errors.js.map +1 -0
  317. package/dist/dev/media/hls/parse-attributes.js +148 -0
  318. package/dist/dev/media/hls/parse-attributes.js.map +1 -0
  319. package/dist/dev/media/hls/parse-media-playlist.js +261 -0
  320. package/dist/dev/media/hls/parse-media-playlist.js.map +1 -0
  321. package/dist/dev/media/hls/parse-multivariant.js +234 -0
  322. package/dist/dev/media/hls/parse-multivariant.js.map +1 -0
  323. package/dist/dev/media/hls/reload-policy.js +71 -0
  324. package/dist/dev/media/hls/reload-policy.js.map +1 -0
  325. package/dist/dev/media/hls/resolve-url.js +11 -0
  326. package/dist/dev/media/hls/resolve-url.js.map +1 -0
  327. package/dist/dev/media/live-window.js +36 -0
  328. package/dist/dev/media/live-window.js.map +1 -0
  329. package/dist/dev/media/media-tracks/media-tracks.d.ts +51 -0
  330. package/dist/dev/media/media-tracks/media-tracks.d.ts.map +1 -0
  331. package/dist/dev/media/media-tracks/media-tracks.js +101 -0
  332. package/dist/dev/media/media-tracks/media-tracks.js.map +1 -0
  333. package/dist/dev/media/mp4/box.js +58 -0
  334. package/dist/dev/media/mp4/box.js.map +1 -0
  335. package/dist/dev/media/mp4/timestamp-origin.js +107 -0
  336. package/dist/dev/media/mp4/timestamp-origin.js.map +1 -0
  337. package/dist/dev/media/primitives/resolution.d.ts +24 -0
  338. package/dist/dev/media/primitives/resolution.d.ts.map +1 -0
  339. package/dist/dev/media/primitives/resolution.js +29 -0
  340. package/dist/dev/media/primitives/resolution.js.map +1 -0
  341. package/dist/dev/media/primitives/select-tracks.js +107 -0
  342. package/dist/dev/media/primitives/select-tracks.js.map +1 -0
  343. package/dist/dev/media/text/parse-vtt-timestamp-map.js +42 -0
  344. package/dist/dev/media/text/parse-vtt-timestamp-map.js.map +1 -0
  345. package/dist/dev/media/text/resolve-vtt-metadata.js +23 -0
  346. package/dist/dev/media/text/resolve-vtt-metadata.js.map +1 -0
  347. package/dist/dev/media/types/index.d.ts +377 -0
  348. package/dist/dev/media/types/index.d.ts.map +1 -0
  349. package/dist/dev/media/types/index.js +50 -0
  350. package/dist/dev/media/types/index.js.map +1 -0
  351. package/dist/dev/media/utils/cdn.d.ts +13 -0
  352. package/dist/dev/media/utils/cdn.d.ts.map +1 -0
  353. package/dist/dev/media/utils/cdn.js +56 -0
  354. package/dist/dev/media/utils/cdn.js.map +1 -0
  355. package/dist/dev/media/utils/preload.js +22 -0
  356. package/dist/dev/media/utils/preload.js.map +1 -0
  357. package/dist/dev/media/utils/track-selection.js +47 -0
  358. package/dist/dev/media/utils/track-selection.js.map +1 -0
  359. package/dist/dev/media/utils/tracks.js +144 -0
  360. package/dist/dev/media/utils/tracks.js.map +1 -0
  361. package/dist/dev/media-tracks.d.ts +3 -0
  362. package/dist/dev/media-tracks.js +2 -0
  363. package/dist/dev/mux-audio.d.ts +4 -0
  364. package/dist/dev/mux-audio.js +3 -0
  365. package/dist/dev/mux-background-video.d.ts +4 -0
  366. package/dist/dev/mux-background-video.js +3 -0
  367. package/dist/dev/mux-video.d.ts +4 -0
  368. package/dist/dev/mux-video.js +3 -0
  369. package/dist/dev/network/bandwidth-estimator.d.ts +50 -0
  370. package/dist/dev/network/bandwidth-estimator.d.ts.map +1 -0
  371. package/dist/dev/network/bandwidth-estimator.js +96 -0
  372. package/dist/dev/network/bandwidth-estimator.js.map +1 -0
  373. package/dist/dev/network/chunked-stream-iterable.js +49 -0
  374. package/dist/dev/network/chunked-stream-iterable.js.map +1 -0
  375. package/dist/dev/network/ewma.js +71 -0
  376. package/dist/dev/network/ewma.js.map +1 -0
  377. package/dist/dev/network/fetch.js +115 -0
  378. package/dist/dev/network/fetch.js.map +1 -0
  379. package/dist/dev/playback/actors/dom/segment-loader.d.ts +48 -0
  380. package/dist/dev/playback/actors/dom/segment-loader.d.ts.map +1 -0
  381. package/dist/dev/playback/actors/dom/segment-loader.js +249 -0
  382. package/dist/dev/playback/actors/dom/segment-loader.js.map +1 -0
  383. package/dist/dev/playback/actors/dom/source-buffer.d.ts +47 -0
  384. package/dist/dev/playback/actors/dom/source-buffer.d.ts.map +1 -0
  385. package/dist/dev/playback/actors/dom/source-buffer.js +139 -0
  386. package/dist/dev/playback/actors/dom/source-buffer.js.map +1 -0
  387. package/dist/dev/playback/actors/dom/text-tracks.d.ts +3 -0
  388. package/dist/dev/playback/actors/dom/text-tracks.js +46 -0
  389. package/dist/dev/playback/actors/dom/text-tracks.js.map +1 -0
  390. package/dist/dev/playback/actors/text-track-segment-loader.d.ts +54 -0
  391. package/dist/dev/playback/actors/text-track-segment-loader.d.ts.map +1 -0
  392. package/dist/dev/playback/actors/text-track-segment-loader.js +149 -0
  393. package/dist/dev/playback/actors/text-track-segment-loader.js.map +1 -0
  394. package/dist/dev/playback/actors/text-tracks.d.ts +33 -0
  395. package/dist/dev/playback/actors/text-tracks.d.ts.map +1 -0
  396. package/dist/dev/playback/adapters/hls-audio/adapter.d.ts +54 -0
  397. package/dist/dev/playback/adapters/hls-audio/adapter.d.ts.map +1 -0
  398. package/dist/dev/playback/adapters/hls-audio/adapter.js +186 -0
  399. package/dist/dev/playback/adapters/hls-audio/adapter.js.map +1 -0
  400. package/dist/dev/playback/adapters/hls-audio/media.d.ts +10 -0
  401. package/dist/dev/playback/adapters/hls-audio/media.d.ts.map +1 -0
  402. package/dist/dev/playback/adapters/hls-audio/media.js +9 -0
  403. package/dist/dev/playback/adapters/hls-audio/media.js.map +1 -0
  404. package/dist/dev/playback/adapters/hls-background-video/adapter.d.ts +77 -0
  405. package/dist/dev/playback/adapters/hls-background-video/adapter.d.ts.map +1 -0
  406. package/dist/dev/playback/adapters/hls-background-video/adapter.js +211 -0
  407. package/dist/dev/playback/adapters/hls-background-video/adapter.js.map +1 -0
  408. package/dist/dev/playback/adapters/hls-background-video/host.d.ts +38 -0
  409. package/dist/dev/playback/adapters/hls-background-video/host.d.ts.map +1 -0
  410. package/dist/dev/playback/adapters/hls-background-video/host.js +60 -0
  411. package/dist/dev/playback/adapters/hls-background-video/host.js.map +1 -0
  412. package/dist/dev/playback/adapters/hls-background-video/media.d.ts +20 -0
  413. package/dist/dev/playback/adapters/hls-background-video/media.d.ts.map +1 -0
  414. package/dist/dev/playback/adapters/hls-background-video/media.js +21 -0
  415. package/dist/dev/playback/adapters/hls-background-video/media.js.map +1 -0
  416. package/dist/dev/playback/adapters/hls-video/adapter.d.ts +63 -0
  417. package/dist/dev/playback/adapters/hls-video/adapter.d.ts.map +1 -0
  418. package/dist/dev/playback/adapters/hls-video/adapter.js +316 -0
  419. package/dist/dev/playback/adapters/hls-video/adapter.js.map +1 -0
  420. package/dist/dev/playback/adapters/hls-video/error-surface.d.ts +18 -0
  421. package/dist/dev/playback/adapters/hls-video/error-surface.d.ts.map +1 -0
  422. package/dist/dev/playback/adapters/hls-video/error-surface.js +51 -0
  423. package/dist/dev/playback/adapters/hls-video/error-surface.js.map +1 -0
  424. package/dist/dev/playback/adapters/hls-video/media-tracks.d.ts +22 -0
  425. package/dist/dev/playback/adapters/hls-video/media-tracks.d.ts.map +1 -0
  426. package/dist/dev/playback/adapters/hls-video/media-tracks.js +126 -0
  427. package/dist/dev/playback/adapters/hls-video/media-tracks.js.map +1 -0
  428. package/dist/dev/playback/adapters/hls-video/media.d.ts +10 -0
  429. package/dist/dev/playback/adapters/hls-video/media.d.ts.map +1 -0
  430. package/dist/dev/playback/adapters/hls-video/media.js +11 -0
  431. package/dist/dev/playback/adapters/hls-video/media.js.map +1 -0
  432. package/dist/dev/playback/adapters/mux-audio/media.d.ts +28 -0
  433. package/dist/dev/playback/adapters/mux-audio/media.d.ts.map +1 -0
  434. package/dist/dev/playback/adapters/mux-audio/media.js +26 -0
  435. package/dist/dev/playback/adapters/mux-audio/media.js.map +1 -0
  436. package/dist/dev/playback/adapters/mux-video/adapter.d.ts +34 -0
  437. package/dist/dev/playback/adapters/mux-video/adapter.d.ts.map +1 -0
  438. package/dist/dev/playback/adapters/mux-video/adapter.js +105 -0
  439. package/dist/dev/playback/adapters/mux-video/adapter.js.map +1 -0
  440. package/dist/dev/playback/adapters/mux-video/media.d.ts +24 -0
  441. package/dist/dev/playback/adapters/mux-video/media.d.ts.map +1 -0
  442. package/dist/dev/playback/adapters/mux-video/media.js +23 -0
  443. package/dist/dev/playback/adapters/mux-video/media.js.map +1 -0
  444. package/dist/dev/playback/behaviors/calculate-presentation-duration.d.ts +26 -0
  445. package/dist/dev/playback/behaviors/calculate-presentation-duration.d.ts.map +1 -0
  446. package/dist/dev/playback/behaviors/calculate-presentation-duration.js +36 -0
  447. package/dist/dev/playback/behaviors/calculate-presentation-duration.js.map +1 -0
  448. package/dist/dev/playback/behaviors/collect-errors.js +111 -0
  449. package/dist/dev/playback/behaviors/collect-errors.js.map +1 -0
  450. package/dist/dev/playback/behaviors/derive-cdn-priority.js +68 -0
  451. package/dist/dev/playback/behaviors/derive-cdn-priority.js.map +1 -0
  452. package/dist/dev/playback/behaviors/dom/airplay.js +211 -0
  453. package/dist/dev/playback/behaviors/dom/airplay.js.map +1 -0
  454. package/dist/dev/playback/behaviors/dom/apply-start-position.js +93 -0
  455. package/dist/dev/playback/behaviors/dom/apply-start-position.js.map +1 -0
  456. package/dist/dev/playback/behaviors/dom/end-of-stream.js +102 -0
  457. package/dist/dev/playback/behaviors/dom/end-of-stream.js.map +1 -0
  458. package/dist/dev/playback/behaviors/dom/load-segments.d.ts +72 -0
  459. package/dist/dev/playback/behaviors/dom/load-segments.d.ts.map +1 -0
  460. package/dist/dev/playback/behaviors/dom/load-segments.js +181 -0
  461. package/dist/dev/playback/behaviors/dom/load-segments.js.map +1 -0
  462. package/dist/dev/playback/behaviors/dom/recover-end-stall.js +77 -0
  463. package/dist/dev/playback/behaviors/dom/recover-end-stall.js.map +1 -0
  464. package/dist/dev/playback/behaviors/dom/seek-to-live-edge.js +132 -0
  465. package/dist/dev/playback/behaviors/dom/seek-to-live-edge.js.map +1 -0
  466. package/dist/dev/playback/behaviors/dom/setup-buffer-actors.js +205 -0
  467. package/dist/dev/playback/behaviors/dom/setup-buffer-actors.js.map +1 -0
  468. package/dist/dev/playback/behaviors/dom/setup-mediasource.js +114 -0
  469. package/dist/dev/playback/behaviors/dom/setup-mediasource.js.map +1 -0
  470. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.d.ts +28 -0
  471. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.d.ts.map +1 -0
  472. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.js +40 -0
  473. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.js.map +1 -0
  474. package/dist/dev/playback/behaviors/dom/sync-live-seekable-range.js +26 -0
  475. package/dist/dev/playback/behaviors/dom/sync-live-seekable-range.js.map +1 -0
  476. package/dist/dev/playback/behaviors/dom/sync-text-tracks.js +124 -0
  477. package/dist/dev/playback/behaviors/dom/sync-text-tracks.js.map +1 -0
  478. package/dist/dev/playback/behaviors/dom/track-current-time.d.ts +33 -0
  479. package/dist/dev/playback/behaviors/dom/track-current-time.d.ts.map +1 -0
  480. package/dist/dev/playback/behaviors/dom/track-current-time.js +52 -0
  481. package/dist/dev/playback/behaviors/dom/track-current-time.js.map +1 -0
  482. package/dist/dev/playback/behaviors/dom/track-load-triggers.d.ts +47 -0
  483. package/dist/dev/playback/behaviors/dom/track-load-triggers.d.ts.map +1 -0
  484. package/dist/dev/playback/behaviors/dom/track-load-triggers.js +94 -0
  485. package/dist/dev/playback/behaviors/dom/track-load-triggers.js.map +1 -0
  486. package/dist/dev/playback/behaviors/dom/track-playback-rate.d.ts +33 -0
  487. package/dist/dev/playback/behaviors/dom/track-playback-rate.d.ts.map +1 -0
  488. package/dist/dev/playback/behaviors/dom/track-playback-rate.js +37 -0
  489. package/dist/dev/playback/behaviors/dom/track-playback-rate.js.map +1 -0
  490. package/dist/dev/playback/behaviors/dom/track-player-resolution.d.ts +8 -0
  491. package/dist/dev/playback/behaviors/dom/track-player-resolution.d.ts.map +1 -0
  492. package/dist/dev/playback/behaviors/dom/track-player-resolution.js +57 -0
  493. package/dist/dev/playback/behaviors/dom/track-player-resolution.js.map +1 -0
  494. package/dist/dev/playback/behaviors/dom/track-screen-resolution.js +29 -0
  495. package/dist/dev/playback/behaviors/dom/track-screen-resolution.js.map +1 -0
  496. package/dist/dev/playback/behaviors/dom/update-mediasource-duration.js +113 -0
  497. package/dist/dev/playback/behaviors/dom/update-mediasource-duration.js.map +1 -0
  498. package/dist/dev/playback/behaviors/establish-start-media-time.d.ts +36 -0
  499. package/dist/dev/playback/behaviors/establish-start-media-time.d.ts.map +1 -0
  500. package/dist/dev/playback/behaviors/establish-start-media-time.js +197 -0
  501. package/dist/dev/playback/behaviors/establish-start-media-time.js.map +1 -0
  502. package/dist/dev/playback/behaviors/resolve-presentation.d.ts +8 -0
  503. package/dist/dev/playback/behaviors/resolve-presentation.d.ts.map +1 -0
  504. package/dist/dev/playback/behaviors/resolve-presentation.js +85 -0
  505. package/dist/dev/playback/behaviors/resolve-presentation.js.map +1 -0
  506. package/dist/dev/playback/behaviors/resolve-track.js +141 -0
  507. package/dist/dev/playback/behaviors/resolve-track.js.map +1 -0
  508. package/dist/dev/playback/behaviors/select-tracks.d.ts +72 -0
  509. package/dist/dev/playback/behaviors/select-tracks.d.ts.map +1 -0
  510. package/dist/dev/playback/behaviors/select-tracks.js +216 -0
  511. package/dist/dev/playback/behaviors/select-tracks.js.map +1 -0
  512. package/dist/dev/playback/behaviors/setup-failover-monitor.d.ts +14 -0
  513. package/dist/dev/playback/behaviors/setup-failover-monitor.d.ts.map +1 -0
  514. package/dist/dev/playback/behaviors/setup-failover-monitor.js +66 -0
  515. package/dist/dev/playback/behaviors/setup-failover-monitor.js.map +1 -0
  516. package/dist/dev/playback/behaviors/sync-preload.js +59 -0
  517. package/dist/dev/playback/behaviors/sync-preload.js.map +1 -0
  518. package/dist/dev/playback/behaviors/track-switching.js +391 -0
  519. package/dist/dev/playback/behaviors/track-switching.js.map +1 -0
  520. package/dist/dev/playback/engines/hls/engine-audio-only.d.ts +173 -0
  521. package/dist/dev/playback/engines/hls/engine-audio-only.d.ts.map +1 -0
  522. package/dist/dev/playback/engines/hls/engine-audio-only.js +98 -0
  523. package/dist/dev/playback/engines/hls/engine-audio-only.js.map +1 -0
  524. package/dist/dev/playback/engines/hls/engine-background-video.d.ts +158 -0
  525. package/dist/dev/playback/engines/hls/engine-background-video.d.ts.map +1 -0
  526. package/dist/dev/playback/engines/hls/engine-background-video.js +92 -0
  527. package/dist/dev/playback/engines/hls/engine-background-video.js.map +1 -0
  528. package/dist/dev/playback/engines/hls/engine.d.ts +329 -0
  529. package/dist/dev/playback/engines/hls/engine.d.ts.map +1 -0
  530. package/dist/dev/playback/engines/hls/engine.js +147 -0
  531. package/dist/dev/playback/engines/hls/engine.js.map +1 -0
  532. package/dist/dev/playback/primitives/derive-start-media-time.d.ts +16 -0
  533. package/dist/dev/playback/primitives/derive-start-media-time.d.ts.map +1 -0
  534. package/dist/dev/playback/primitives/error-messages.js +51 -0
  535. package/dist/dev/playback/primitives/error-messages.js.map +1 -0
  536. package/dist/dev/playback/primitives/failover-fetch.js +42 -0
  537. package/dist/dev/playback/primitives/failover-fetch.js.map +1 -0
  538. package/dist/dev/playback/primitives/head-peek.js +44 -0
  539. package/dist/dev/playback/primitives/head-peek.js.map +1 -0
  540. package/dist/dev/playback/primitives/live-window.js +66 -0
  541. package/dist/dev/playback/primitives/live-window.js.map +1 -0
  542. package/dist/dev/playback/primitives/relocation-pipelines.js +203 -0
  543. package/dist/dev/playback/primitives/relocation-pipelines.js.map +1 -0
  544. package/dist/dev/playback/primitives/report-track-conditions.d.ts +11 -0
  545. package/dist/dev/playback/primitives/report-track-conditions.d.ts.map +1 -0
  546. package/dist/dev/playback/primitives/report-track-conditions.js +86 -0
  547. package/dist/dev/playback/primitives/report-track-conditions.js.map +1 -0
  548. package/dist/dev/playback/primitives/segment-load-pipeline.d.ts +2 -0
  549. package/dist/dev/playback/primitives/segment-load-pipeline.js +96 -0
  550. package/dist/dev/playback/primitives/segment-load-pipeline.js.map +1 -0
  551. package/dist/dev/playback/primitives/selection-rules.d.ts +38 -0
  552. package/dist/dev/playback/primitives/selection-rules.d.ts.map +1 -0
  553. package/dist/dev/playback/primitives/selection-rules.js +86 -0
  554. package/dist/dev/playback/primitives/selection-rules.js.map +1 -0
  555. package/dist/dev/playback/primitives/source-buffer-messages.d.ts +43 -0
  556. package/dist/dev/playback/primitives/source-buffer-messages.d.ts.map +1 -0
  557. package/dist/dev/playback/primitives/text-segment-load-pipeline.d.ts +65 -0
  558. package/dist/dev/playback/primitives/text-segment-load-pipeline.d.ts.map +1 -0
  559. package/dist/dev/playback/primitives/text-segment-load-pipeline.js +37 -0
  560. package/dist/dev/playback/primitives/text-segment-load-pipeline.js.map +1 -0
  561. package/dist/dev/playback/primitives/text-track-messages.d.ts +14 -0
  562. package/dist/dev/playback/primitives/text-track-messages.d.ts.map +1 -0
  563. package/dist/dev/playback/primitives/track-types.js +61 -0
  564. package/dist/dev/playback/primitives/track-types.js.map +1 -0
  565. package/package.json +63 -26
  566. package/dist/adapter-CMw-rvbk.js +0 -3512
  567. package/dist/adapter-CMw-rvbk.js.map +0 -1
  568. package/dist/adapter-l8iJN_GI.d.ts +0 -689
  569. package/dist/adapter-l8iJN_GI.d.ts.map +0 -1
  570. package/dist/dom/index.d.ts +0 -243
  571. package/dist/dom/index.d.ts.map +0 -1
  572. package/dist/dom/index.js +0 -38
  573. package/dist/dom/index.js.map +0 -1
  574. package/dist/dom/playback-engine/index.d.ts +0 -2
  575. package/dist/dom/playback-engine/index.js +0 -4
  576. package/dist/index.d.ts +0 -13
  577. package/dist/index.d.ts.map +0 -1
  578. package/dist/index.js +0 -3
  579. package/dist/src-DRsS_H80.js +0 -14
  580. package/dist/src-DRsS_H80.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segment-load-pipeline.js","names":[],"sources":["../../../../src/playback/primitives/segment-load-pipeline.ts"],"sourcesContent":["/**\n * The v/a segment **load pipeline** — the step vocabulary and base steps a segment\n * loader runs, extracted from the loader actor so the \"what\" (the composable steps)\n * is separable from the \"how\" (the actor's scheduling). A pipeline is a per-op list\n * of {@link LoadStep}s the loader drains in order; the default is `fetch → dispatch`,\n * and a composition can insert its own steps between them (e.g. non-zero-PTS\n * relocation) without the loader knowing.\n *\n * The base steps reach their SourceBuffer sink through the structural {@link AppendSink}\n * seam rather than the concrete actor type — the loader folds the real actor into\n * `config` at construction, and it satisfies the seam by structure — so this module\n * carries no dependency on the actor implementation, and no dependency on the DOM.\n */\nimport type { AnySlotMap } from '../../core/composition/create-composition';\nimport { effect } from '../../core/signals/effect';\nimport type { ReadonlySignal } from '../../core/signals/primitives';\nimport type { AddressableObject } from '../../media/types';\nimport type {\n AppendInitMessage,\n AppendSegmentMessage,\n IndividualSourceBufferMessage,\n RemoveMessage,\n} from './source-buffer-messages';\n\n// ============================================================================\n// SINK SEAM\n// ============================================================================\n\n/**\n * The structural view of a SourceBuffer sink the base steps use — just the ops\n * {@link dispatchStep} needs (`send` + a `snapshot` to await idle). The concrete\n * `SourceBufferActor` satisfies it by structure, so the pipeline names no actor.\n */\nexport interface AppendSink {\n send(message: IndividualSourceBufferMessage): void;\n snapshot: ReadonlySignal<{ value: string }>;\n}\n\n// ============================================================================\n// STEP MODEL\n// ============================================================================\n\n/**\n * A LoadTask is the intent to perform one unit of SegmentLoader work.\n * Unlike SourceBufferMessage, fetch-based tasks carry a URL rather than\n * pre-fetched data — the runner fetches and appends them in sequence.\n *\n * Derived from SourceBufferMessage types by removing `data` and adding\n * a fetch URL via AddressableObject.\n *\n * @todo Rename — \"LoadTask\" risks confusion with the `Task` class used for\n * SourceBufferActor scheduling. These are closer to operation descriptors or\n * messages than tasks in that sense.\n */\nexport type LoadTask =\n | (Omit<AppendInitMessage, 'data'> & AddressableObject)\n | (Omit<AppendSegmentMessage, 'data'> & AddressableObject)\n | RemoveMessage;\n\n/**\n * A {@link LoadTask} mid-reassembly into its append message. `LoadTask` is a\n * message with `data` omitted and a URL added; the pipeline reverses that —\n * `fetchStep` produces `data`, `dispatchStep` reassembles the message. `data` is\n * the omitted payload (kept as the fetched stream — the loader never produces the\n * `ArrayBuffer` arm of `SegmentData` — widened back at dispatch). `meta` overrides\n * `op.meta` for `append-segment` (e.g. a stamped `timestampOffset`); an\n * `append-init` dispatches `op.meta` directly.\n */\nexport interface Frame {\n readonly op: LoadTask;\n data?: AsyncIterable<Uint8Array>;\n meta?: AppendSegmentMessage['meta'];\n}\n\n/**\n * One stage of a message pipeline. Mutates the {@link Frame} in place and may be\n * async; the runner checks `signal.aborted` before each step and passes the\n * actor's {@link StepDeps} on every call, so a stateless step (e.g.\n * {@link fetchStep}) is a plain value, and a step that needs composition signals\n * (relocation's discover/stamp) reads them from `deps` at call time.\n */\nexport type LoadStep = (frame: Frame, signal: AbortSignal, deps: StepDeps) => void | Promise<void>;\n\n/**\n * The uniform passthrough handed to every {@link LoadStep} on every call — the\n * composition triple, nothing more. `state`/`context` are the full composition signal\n * maps; `config` is the threaded config with the loader's own wiring folded in (see\n * {@link stepWiring} + `createSegmentLoaderActor`). All three are typed loose: the\n * loader is a conduit and never reads them; a step asserts the slots it knows are\n * present (composition steps read `state`; base steps read the folded wiring off\n * `config`).\n */\nexport interface StepDeps {\n state: AnySlotMap;\n context: AnySlotMap;\n config: object;\n}\n\n/**\n * Base-step view of the loader's own wiring. `createSegmentLoaderActor` folds its\n * `sourceBufferActor` + `fetch` into the threaded `config` so base steps read them\n * from the uniform passthrough — present whether the loader runs inside a composition\n * or standalone. `config` is loose (`object`), so assert the shape here (one cast, like\n * relocation's `containerSlot`).\n */\nfunction stepWiring(deps: StepDeps): { sourceBufferActor: AppendSink; fetch: FetchBytes } {\n return deps.config as { sourceBufferActor: AppendSink; fetch: FetchBytes };\n}\n\n/**\n * Builds the ordered step list for each message type. Called **once per actor**\n * — its role is per-actor instantiation, so stateful steps (relocation's origin\n * discoverer) get fresh state per source reset; deps arrive at step-call time,\n * not here. The default ({@link DEFAULT_MESSAGE_PIPELINES}) is `fetch → dispatch`;\n * a non-zero-PTS composition returns a map that inserts its own discover/stamp\n * steps between them (see `establishStartMediaTime`), so the loader stays oblivious\n * to relocation and the Tier 0 pipeline carries no relocation vocabulary at all.\n */\nexport type MessagePipelines = () => Record<LoadTask['type'], LoadStep[]>;\n\n// ============================================================================\n// BASE STEPS\n// ============================================================================\n\nexport type FetchBytes = (\n addressable: AddressableObject,\n options?: RequestInit & { minChunkSize?: number }\n) => Promise<AsyncIterable<Uint8Array>>;\n\n/**\n * Resolves when the SourceBufferActor snapshot reaches 'idle'.\n * Rejects if the signal is aborted or the actor is destroyed.\n *\n * Used to sequence SourceBufferActor operations without awaiting send()\n * directly — send() is fire-and-forget; callers observe completion via\n * state transition.\n */\nfunction waitForIdle(snapshot: AppendSink['snapshot'], signal: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (snapshot.get().value === 'idle') {\n resolve();\n return;\n }\n if (snapshot.get().value === 'destroyed') {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n if (signal.aborted) {\n reject(signal.reason);\n return;\n }\n\n let stop: (() => void) | undefined;\n\n const cleanup = (fn: () => void) => {\n stop?.();\n signal.removeEventListener('abort', onAbort);\n fn();\n };\n\n const onAbort = () => cleanup(() => reject(signal.reason));\n\n stop = effect(() => {\n const value = snapshot.get().value;\n if (value === 'idle') cleanup(resolve);\n else if (value === 'destroyed') cleanup(() => reject(new DOMException('Aborted', 'AbortError')));\n });\n\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n\n/** Build the SourceBuffer message a completed frame dispatches. `fetchStep` always precedes `dispatchStep` in append pipelines, so `data` is set by now. */\nfunction toMessage({ op, data, meta }: Frame): IndividualSourceBufferMessage {\n switch (op.type) {\n case 'remove':\n return op;\n case 'append-init':\n return { type: 'append-init', data: data!, meta: op.meta };\n case 'append-segment':\n return { type: 'append-segment', data: data!, meta: meta ?? op.meta };\n }\n}\n\n/**\n * Fetch this op's bytes into the frame. Init segments need the full body\n * (`minChunkSize: Infinity`) before appending; media segments stream so chunks\n * append as they arrive. Awaiting headers eagerly also starts the HTTP\n * connection (and records the fetch in observers like tests).\n */\nexport const fetchStep: LoadStep = async (frame, signal, deps) => {\n const { op } = frame;\n if (op.type === 'remove') return; // fetchStep only appears in append pipelines\n const { fetch } = stepWiring(deps);\n frame.data = await fetch(op, op.type === 'append-init' ? { signal, minChunkSize: Infinity } : { signal });\n};\n\n/** Dispatch the frame's message to the SourceBufferActor and await its return to idle. */\nexport const dispatchStep: LoadStep = async (frame, signal, deps) => {\n const { sourceBufferActor } = stepWiring(deps);\n sourceBufferActor.send(toMessage(frame));\n await waitForIdle(sourceBufferActor.snapshot, signal);\n};\n\n/** Tier 0 default: fetch (for ops that carry bytes) then dispatch. No relocation vocabulary. */\nexport const DEFAULT_MESSAGE_PIPELINES: MessagePipelines = () => ({\n remove: [dispatchStep],\n 'append-init': [fetchStep, dispatchStep],\n 'append-segment': [fetchStep, dispatchStep],\n});\n"],"mappings":";;;;;;;;;AAyGA,SAAS,WAAW,MAAsE;CACxF,OAAO,KAAK;AACd;;;;;;;;;AA8BA,SAAS,YAAY,UAAkC,QAAoC;CACzF,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,IAAI,SAAS,IAAI,CAAC,CAAC,UAAU,QAAQ;GACnC,QAAQ;GACR;EACF;EACA,IAAI,SAAS,IAAI,CAAC,CAAC,UAAU,aAAa;GACxC,OAAO,IAAI,aAAa,WAAW,YAAY,CAAC;GAChD;EACF;EACA,IAAI,OAAO,SAAS;GAClB,OAAO,OAAO,MAAM;GACpB;EACF;EAEA,IAAI;EAEJ,MAAM,WAAW,OAAmB;GAClC,OAAO;GACP,OAAO,oBAAoB,SAAS,OAAO;GAC3C,GAAG;EACL;EAEA,MAAM,gBAAgB,cAAc,OAAO,OAAO,MAAM,CAAC;EAEzD,OAAO,aAAa;GAClB,MAAM,QAAQ,SAAS,IAAI,CAAC,CAAC;GAC7B,IAAI,UAAU,QAAQ,QAAQ,OAAO;QAChC,IAAI,UAAU,aAAa,cAAc,OAAO,IAAI,aAAa,WAAW,YAAY,CAAC,CAAC;EACjG,CAAC;EAED,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;CAC1D,CAAC;AACH;;AAGA,SAAS,UAAU,EAAE,IAAI,MAAM,QAA8C;CAC3E,QAAQ,GAAG,MAAX;EACE,KAAK,UACH,OAAO;EACT,KAAK,eACH,OAAO;GAAE,MAAM;GAAqB;GAAO,MAAM,GAAG;EAAK;EAC3D,KAAK,kBACH,OAAO;GAAE,MAAM;GAAwB;GAAO,MAAM,QAAQ,GAAG;EAAK;CACxE;AACF;;;;;;;AAQA,MAAa,YAAsB,OAAO,OAAO,QAAQ,SAAS;CAChE,MAAM,EAAE,OAAO;CACf,IAAI,GAAG,SAAS,UAAU;CAC1B,MAAM,EAAE,UAAU,WAAW,IAAI;CACjC,MAAM,OAAO,MAAM,MAAM,IAAI,GAAG,SAAS,gBAAgB;EAAE;EAAQ,cAAc;CAAS,IAAI,EAAE,OAAO,CAAC;AAC1G;;AAGA,MAAa,eAAyB,OAAO,OAAO,QAAQ,SAAS;CACnE,MAAM,EAAE,sBAAsB,WAAW,IAAI;CAC7C,kBAAkB,KAAK,UAAU,KAAK,CAAC;CACvC,MAAM,YAAY,kBAAkB,UAAU,MAAM;AACtD;;AAGA,MAAa,mCAAqD;CAChE,QAAQ,CAAC,YAAY;CACrB,eAAe,CAAC,WAAW,YAAY;CACvC,kBAAkB,CAAC,WAAW,YAAY;AAC5C"}
@@ -0,0 +1,38 @@
1
+ import { CanPlayTrack } from "../../media/types/index.js";
2
+ //#region src/playback/primitives/selection-rules.d.ts
3
+ /**
4
+ * Deps handed to each rule and to `applyRules`, mirroring a behavior's setup
5
+ * deps so a rule reads from the same surfaces a behavior does. `context` is
6
+ * optional — it's threaded through but absent on direct setup calls (and
7
+ * unread by today's rules), so the whole deps object can pass straight through.
8
+ */
9
+ interface SelectionRuleDeps<State = unknown, Context = unknown, Config = unknown> {
10
+ state: State;
11
+ context?: Context;
12
+ config: Config;
13
+ }
14
+ /**
15
+ * A selection rule narrows or reorders the candidate list. It reads the state,
16
+ * context, and config it needs at apply time (tightly-coupled reads), so a
17
+ * rule's `.get()`s subscribe the running effect to exactly what it consulted.
18
+ * Returning an empty list means "no match" — the composer skips it, so a soft
19
+ * filter never narrows the set to nothing. A ranker returns the list with its
20
+ * pick at the head.
21
+ */
22
+ type SelectionRule<T, State = unknown, Context = unknown, Config = unknown> = (tracks: readonly T[], deps: SelectionRuleDeps<State, Context, Config>) => readonly T[];
23
+ /**
24
+ * What {@link excludeUnplayableTracks} reads off the config it is handed.
25
+ *
26
+ * Read through a cast rather than constraining the rule's `Config` generic, the
27
+ * same way `screenResolutionCap` reads `screenResolution` off its state: a rule
28
+ * composes into chains whose config types have nothing else in common, and
29
+ * constraining the generic would make every one of those a weak-type mismatch.
30
+ * Each engine defaults `canPlayTrack` to the DOM-bound probe; unwired means "no
31
+ * capability filtering" and the constraint passes everything through.
32
+ */
33
+ interface CapabilityConstraintConfig {
34
+ canPlayTrack?: CanPlayTrack;
35
+ }
36
+ //#endregion
37
+ export { CapabilityConstraintConfig, SelectionRule, SelectionRuleDeps };
38
+ //# sourceMappingURL=selection-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-rules.d.ts","names":[],"sources":["../../../../src/playback/primitives/selection-rules.ts"],"mappings":";;;;;;;;UAwBiB,kBAAkB,iBAAiB,mBAAmB;EACrE,OAAO;EACP,UAAU;EACV,QAAQ;;;;;;;;;;KAWE,cAAc,GAAG,iBAAiB,mBAAmB,qBAC/D,iBAAiB,KACjB,MAAM,kBAAkB,OAAO,SAAS,qBAC5B;;;;;;;;;;;UA+EG;EACf,eAAe"}
@@ -0,0 +1,86 @@
1
+ //#region src/playback/primitives/selection-rules.ts
2
+ /**
3
+ * Apply rules to a candidate list in order; the pick is the first survivor.
4
+ * Two responsibilities the rules don't carry: a rule that returns nothing is
5
+ * skipped (fall-through — a preference never empties the set), and once one
6
+ * survivor remains the chain stops (early-bail — later rules, including the
7
+ * bandwidth ranker, never run, so the effect doesn't subscribe to their
8
+ * signals while the choice is fixed).
9
+ *
10
+ * @param rules - Rules to apply, most authoritative first
11
+ * @param tracks - Candidate tracks
12
+ * @param deps - The behavior's `{ state, context, config }`, passed through to each rule
13
+ * @returns The surviving candidates, pick first
14
+ */
15
+ function applyRules(rules, tracks, deps) {
16
+ let current = tracks;
17
+ for (const rule of rules) {
18
+ const remaining = rule(current, deps);
19
+ if (remaining.length === 0) continue;
20
+ current = remaining;
21
+ if (current.length === 1) break;
22
+ }
23
+ return current;
24
+ }
25
+ /**
26
+ * Apply hard constraints to a candidate list — the pre-pass that runs before the
27
+ * rule chain. A constraint shares a rule's signature but its exclusion is
28
+ * *hard*: it removes the unplayable (a codec the environment can't decode, a CDN
29
+ * in failover cooldown) and a removed track is never attempted. Unlike
30
+ * `applyRules`, this never skips an empty result and never early-bails — every
31
+ * constraint always applies, and an empty survivor set is a real outcome
32
+ * ("nothing playable here"), not a fall-through. Because each constraint only
33
+ * removes, the order they run in can't change which tracks survive — though one
34
+ * that also *reports* reads the list at its own position, so placement matters.
35
+ *
36
+ * @param constraints - Constraints to apply, in order
37
+ * @param tracks - Candidate tracks
38
+ * @param deps - The behavior's `{ state, context, config }`, passed to each constraint
39
+ * @returns The playable survivors (possibly empty)
40
+ */
41
+ function applyConstraints(constraints, tracks, deps) {
42
+ let current = tracks;
43
+ for (const constraint of constraints) current = constraint(current, deps);
44
+ return current;
45
+ }
46
+ /**
47
+ * Whether two candidate sets hold the same tracks, by id.
48
+ *
49
+ * The `equals` both selection behaviors give their candidate-set `computed`. A
50
+ * live playlist refresh swaps in a new presentation object carrying the same
51
+ * variants, and a constraint's own inputs can churn without changing which
52
+ * tracks survive; in both cases the set is unchanged and the reaction must not
53
+ * re-fire. Compares by id rather than array identity for exactly that.
54
+ */
55
+ function sameCandidateSet(a, b) {
56
+ return a.length === b.length && a.every((track) => b.some((other) => other.id === track.id));
57
+ }
58
+ /**
59
+ * Capability constraint — a *hard* filter for the {@link applyConstraints}
60
+ * pre-pass. Removes renditions this environment can't decode, probed via the
61
+ * injected `canPlayTrack` (codec → `MediaSource.isTypeSupported`, plus the
62
+ * container and encryption assertions that probe can't make). Constraining here
63
+ * — before selection — means an unplayable variant is pruned upstream and never
64
+ * picked, instead of surviving into the pipeline to fail late at
65
+ * `createSourceBuffer`. That late throw stays as a defensive structural
66
+ * guarantee; with this constraint it should rarely fire.
67
+ *
68
+ * Lives here rather than beside `switchVideoTrack` for the reason this module
69
+ * exists: both the re-evaluating variant and the pinned `selectVideoTrack` apply
70
+ * it, and reaching it through `behaviors/track-switching.ts` would drag the ABR
71
+ * path into a composition that deliberately omits it.
72
+ *
73
+ * Passes everything through when there's no probe (a composition that didn't
74
+ * wire one, or DOM-free tests). When it prunes *every* track, the empty result is
75
+ * preserved (per `applyConstraints`) — "nothing playable" — which each consuming
76
+ * behavior answers by clearing its selection; reporting the verdict is separate.
77
+ */
78
+ function excludeUnplayableTracks(tracks, { config }) {
79
+ const canPlay = config?.canPlayTrack;
80
+ if (!canPlay) return tracks;
81
+ return tracks.filter((track) => canPlay(track));
82
+ }
83
+ //#endregion
84
+ export { applyConstraints, applyRules, excludeUnplayableTracks, sameCandidateSet };
85
+
86
+ //# sourceMappingURL=selection-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-rules.js","names":[],"sources":["../../../../src/playback/primitives/selection-rules.ts"],"sourcesContent":["/**\n * The selection-rule substrate: the shape of a rule, and the two composers that\n * turn a list of them into a pick.\n *\n * Lives here rather than beside `switchVideoTrack` so both track-selection\n * behaviors can share rules. The simple `selectVideoTrack` variant exists\n * specifically to tree-shake the ABR path out, so importing a composer from\n * `behaviors/track-switching.ts` would drag the bandwidth estimator and quality\n * selection back in with it. These four have no dependencies at all — pure\n * generics over a candidate list — so either side can reach them freely.\n *\n * See `internal/design/spf/track-switching-model.md` for the model these\n * implement: a hard constraints pre-pass, then an ordered chain of soft\n * narrowing rules and rankers, with the pick as the first survivor.\n */\n\nimport type { CanPlayTrack } from '../../media/types';\n\n/**\n * Deps handed to each rule and to `applyRules`, mirroring a behavior's setup\n * deps so a rule reads from the same surfaces a behavior does. `context` is\n * optional — it's threaded through but absent on direct setup calls (and\n * unread by today's rules), so the whole deps object can pass straight through.\n */\nexport interface SelectionRuleDeps<State = unknown, Context = unknown, Config = unknown> {\n state: State;\n context?: Context;\n config: Config;\n}\n\n/**\n * A selection rule narrows or reorders the candidate list. It reads the state,\n * context, and config it needs at apply time (tightly-coupled reads), so a\n * rule's `.get()`s subscribe the running effect to exactly what it consulted.\n * Returning an empty list means \"no match\" — the composer skips it, so a soft\n * filter never narrows the set to nothing. A ranker returns the list with its\n * pick at the head.\n */\nexport type SelectionRule<T, State = unknown, Context = unknown, Config = unknown> = (\n tracks: readonly T[],\n deps: SelectionRuleDeps<State, Context, Config>\n) => readonly T[];\n\n/**\n * Apply rules to a candidate list in order; the pick is the first survivor.\n * Two responsibilities the rules don't carry: a rule that returns nothing is\n * skipped (fall-through — a preference never empties the set), and once one\n * survivor remains the chain stops (early-bail — later rules, including the\n * bandwidth ranker, never run, so the effect doesn't subscribe to their\n * signals while the choice is fixed).\n *\n * @param rules - Rules to apply, most authoritative first\n * @param tracks - Candidate tracks\n * @param deps - The behavior's `{ state, context, config }`, passed through to each rule\n * @returns The surviving candidates, pick first\n */\nexport function applyRules<T, State, Context, Config>(\n rules: readonly SelectionRule<T, State, Context, Config>[],\n tracks: readonly T[],\n deps: SelectionRuleDeps<State, Context, Config>\n): readonly T[] {\n let current = tracks;\n for (const rule of rules) {\n const remaining = rule(current, deps);\n if (remaining.length === 0) continue;\n current = remaining;\n if (current.length === 1) break;\n }\n return current;\n}\n\n/**\n * Apply hard constraints to a candidate list — the pre-pass that runs before the\n * rule chain. A constraint shares a rule's signature but its exclusion is\n * *hard*: it removes the unplayable (a codec the environment can't decode, a CDN\n * in failover cooldown) and a removed track is never attempted. Unlike\n * `applyRules`, this never skips an empty result and never early-bails — every\n * constraint always applies, and an empty survivor set is a real outcome\n * (\"nothing playable here\"), not a fall-through. Because each constraint only\n * removes, the order they run in can't change which tracks survive — though one\n * that also *reports* reads the list at its own position, so placement matters.\n *\n * @param constraints - Constraints to apply, in order\n * @param tracks - Candidate tracks\n * @param deps - The behavior's `{ state, context, config }`, passed to each constraint\n * @returns The playable survivors (possibly empty)\n */\nexport function applyConstraints<T, State, Context, Config>(\n constraints: readonly SelectionRule<T, State, Context, Config>[],\n tracks: readonly T[],\n deps: SelectionRuleDeps<State, Context, Config>\n): readonly T[] {\n let current = tracks;\n for (const constraint of constraints) current = constraint(current, deps);\n return current;\n}\n\n/**\n * Whether two candidate sets hold the same tracks, by id.\n *\n * The `equals` both selection behaviors give their candidate-set `computed`. A\n * live playlist refresh swaps in a new presentation object carrying the same\n * variants, and a constraint's own inputs can churn without changing which\n * tracks survive; in both cases the set is unchanged and the reaction must not\n * re-fire. Compares by id rather than array identity for exactly that.\n */\nexport function sameCandidateSet<T extends { id: string }>(a: readonly T[], b: readonly T[]): boolean {\n return a.length === b.length && a.every((track) => b.some((other) => other.id === track.id));\n}\n\n/**\n * What {@link excludeUnplayableTracks} reads off the config it is handed.\n *\n * Read through a cast rather than constraining the rule's `Config` generic, the\n * same way `screenResolutionCap` reads `screenResolution` off its state: a rule\n * composes into chains whose config types have nothing else in common, and\n * constraining the generic would make every one of those a weak-type mismatch.\n * Each engine defaults `canPlayTrack` to the DOM-bound probe; unwired means \"no\n * capability filtering\" and the constraint passes everything through.\n */\nexport interface CapabilityConstraintConfig {\n canPlayTrack?: CanPlayTrack;\n}\n\n/**\n * Capability constraint — a *hard* filter for the {@link applyConstraints}\n * pre-pass. Removes renditions this environment can't decode, probed via the\n * injected `canPlayTrack` (codec → `MediaSource.isTypeSupported`, plus the\n * container and encryption assertions that probe can't make). Constraining here\n * — before selection — means an unplayable variant is pruned upstream and never\n * picked, instead of surviving into the pipeline to fail late at\n * `createSourceBuffer`. That late throw stays as a defensive structural\n * guarantee; with this constraint it should rarely fire.\n *\n * Lives here rather than beside `switchVideoTrack` for the reason this module\n * exists: both the re-evaluating variant and the pinned `selectVideoTrack` apply\n * it, and reaching it through `behaviors/track-switching.ts` would drag the ABR\n * path into a composition that deliberately omits it.\n *\n * Passes everything through when there's no probe (a composition that didn't\n * wire one, or DOM-free tests). When it prunes *every* track, the empty result is\n * preserved (per `applyConstraints`) — \"nothing playable\" — which each consuming\n * behavior answers by clearing its selection; reporting the verdict is separate.\n */\nexport function excludeUnplayableTracks<T, State, Context, Config>(\n tracks: readonly T[],\n { config }: SelectionRuleDeps<State, Context, Config>\n): readonly T[] {\n const canPlay = (config as CapabilityConstraintConfig | undefined)?.canPlayTrack;\n if (!canPlay) return tracks;\n return tracks.filter((track) => canPlay(track as Parameters<CanPlayTrack>[0]));\n}\n"],"mappings":";;;;;;;;;;;;;;AAwDA,SAAgB,WACd,OACA,QACA,MACc;CACd,IAAI,UAAU;CACd,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,YAAY,KAAK,SAAS,IAAI;EACpC,IAAI,UAAU,WAAW,GAAG;EAC5B,UAAU;EACV,IAAI,QAAQ,WAAW,GAAG;CAC5B;CACA,OAAO;AACT;;;;;;;;;;;;;;;;;AAkBA,SAAgB,iBACd,aACA,QACA,MACc;CACd,IAAI,UAAU;CACd,KAAK,MAAM,cAAc,aAAa,UAAU,WAAW,SAAS,IAAI;CACxE,OAAO;AACT;;;;;;;;;;AAWA,SAAgB,iBAA2C,GAAiB,GAA0B;CACpG,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,UAAU,EAAE,MAAM,UAAU,MAAM,OAAO,MAAM,EAAE,CAAC;AAC7F;;;;;;;;;;;;;;;;;;;;;AAoCA,SAAgB,wBACd,QACA,EAAE,UACY;CACd,MAAM,UAAW,QAAmD;CACpE,IAAI,CAAC,SAAS,OAAO;CACrB,OAAO,OAAO,QAAQ,UAAU,QAAQ,KAAoC,CAAC;AAC/E"}
@@ -0,0 +1,43 @@
1
+ import { Segment, SegmentData, Track } from "../../media/types/index.js";
2
+ //#region src/playback/primitives/source-buffer-messages.d.ts
3
+ type AppendSegmentMeta = Pick<Segment, 'id' | 'startTime' | 'duration'> & {
4
+ trackId: Track['id'];
5
+ /** Declared track bandwidth in bps (from playlist BANDWIDTH attribute). */
6
+ trackBandwidth?: number;
7
+ /**
8
+ * Non-zero-PTS relocation: when present, applied as `SourceBuffer.timestampOffset`
9
+ * before this append so native PTS is relocated onto a 0-based presentation
10
+ * timeline. A relocating composition stamps it (constant per source) onto each
11
+ * media segment's meta; the apply is idempotent-guarded. Absent = no relocation.
12
+ */
13
+ timestampOffset?: number;
14
+ };
15
+ type AppendInitMessage = {
16
+ type: 'append-init';
17
+ data: SegmentData;
18
+ /**
19
+ * `language` is captured alongside `trackId` so downstream loaders can
20
+ * compare the buffered track's language to the newly-selected track's
21
+ * language and decide whether ahead-buffer flush is warranted on track
22
+ * switch (see `segment-loader`'s `planTasks`). Undefined for video and
23
+ * for audio without explicit `LANGUAGE` attribute.
24
+ */
25
+ meta: {
26
+ trackId: Track['id'];
27
+ language?: string;
28
+ };
29
+ };
30
+ type AppendSegmentMessage = {
31
+ type: 'append-segment';
32
+ data: SegmentData;
33
+ meta: AppendSegmentMeta;
34
+ };
35
+ type RemoveMessage = {
36
+ type: 'remove';
37
+ start: number;
38
+ end: number;
39
+ };
40
+ type IndividualSourceBufferMessage = AppendInitMessage | AppendSegmentMessage | RemoveMessage;
41
+ //#endregion
42
+ export { AppendInitMessage, AppendSegmentMessage, AppendSegmentMeta, IndividualSourceBufferMessage, RemoveMessage };
43
+ //# sourceMappingURL=source-buffer-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-buffer-messages.d.ts","names":[],"sources":["../../../../src/playback/primitives/source-buffer-messages.ts"],"mappings":";;KAUY,oBAAoB,KAAK;EACnC,SAAS;;EAET;;;;;;;EAOA;;KAGU;EACV;EACA,MAAM;;;;;;;;EAQN;IAAQ,SAAS;IAAa;;;KAEpB;EAAyB;EAAwB,MAAM;EAAa,MAAM;;KAC1E;EAAkB;EAAgB;EAAe;;KACjD,gCAAgC,oBAAoB,uBAAuB"}
@@ -0,0 +1,65 @@
1
+ import { Cue, Segment } from "../../media/types/index.js";
2
+ import { AnySlotMap } from "../../core/composition/create-composition.js";
3
+ //#region src/playback/primitives/text-segment-load-pipeline.d.ts
4
+ /**
5
+ * Resolves a text-track segment URL into the array of cues it contains.
6
+ *
7
+ * "Resolve" because the fn covers both network fetch and parse into the
8
+ * domain model. Host-agnostic — the concrete resolver (e.g. the
9
+ * browser's native VTT resolver) is supplied at engine-assembly time,
10
+ * so this stays DOM-free. A pure `url → cues` primitive (the text
11
+ * analog of the v/a loader's `fetchBytes`); composition-awareness lives in
12
+ * the injected {@link TextLoadStep}s, not here.
13
+ */
14
+ type TextTrackSegmentResolver<C extends Cue = Cue> = (url: string) => Promise<C[]>;
15
+ /** Internal load-task descriptor — one segment fetch + dispatch unit. */
16
+ interface TextLoadTask {
17
+ segment: Segment;
18
+ trackId: string;
19
+ }
20
+ /**
21
+ * A text load in mid-pipeline — the text analog of the v/a loader's `Frame`.
22
+ * `resolveCuesStep` fills `cues`; `dispatchCuesStep` sends them. `metadata` is
23
+ * opaque header metadata a resolve step may attach for a later step to read
24
+ * (e.g. relocation stashes the `X-TIMESTAMP-MAP` correlation here for its rebase
25
+ * step). Typed `unknown` so the generic loader stays host-agnostic — the step
26
+ * that reads it knows its concrete shape (mirrors `StepDeps.state`).
27
+ */
28
+ interface TextFrame<C extends Cue = Cue> {
29
+ readonly op: TextLoadTask;
30
+ cues?: C[];
31
+ metadata?: unknown;
32
+ }
33
+ /**
34
+ * One stage of a text message pipeline — the text analog of the v/a loader's
35
+ * `LoadStep`. Mutates the {@link TextFrame} in place and may be async; the runner
36
+ * checks `signal.aborted` before each step and passes the actor's
37
+ * {@link TextStepDeps} on every call, so a stateless step (`resolveCuesStep`) is a
38
+ * plain value and a step that needs composition signals (relocation's cue rebase)
39
+ * reads them from `deps` at call time.
40
+ */
41
+ type TextLoadStep<C extends Cue = Cue> = (frame: TextFrame<C>, signal: AbortSignal, deps: TextStepDeps) => void | Promise<void>;
42
+ /**
43
+ * The uniform passthrough handed to each {@link TextLoadStep} — the composition triple,
44
+ * the text analog of `StepDeps`. `state`/`context` are the composition signal maps;
45
+ * `config` is the threaded config with the loader's wiring folded in (see
46
+ * {@link textStepWiring} + `createTextTrackSegmentLoaderActor`). Typed loose: composition
47
+ * steps read `state`; base steps read the folded wiring off `config`.
48
+ */
49
+ interface TextStepDeps {
50
+ state: AnySlotMap;
51
+ context: AnySlotMap;
52
+ config: object;
53
+ }
54
+ /**
55
+ * Builds the ordered step list, called **once per actor** (mirrors the v/a loader's
56
+ * `MessagePipelines`, but text has a single op type so it's a flat array, not a
57
+ * `Record`). The default ({@link DEFAULT_TEXT_MESSAGE_PIPELINES}) is
58
+ * `resolveCues → dispatchCues`; a non-zero-PTS composition returns a list that
59
+ * inserts a cue-rebase step (see `relocatingTextPipelines`), so the loader stays
60
+ * oblivious to relocation.
61
+ */
62
+ type TextMessagePipelines<C extends Cue = Cue> = () => TextLoadStep<C>[];
63
+ //#endregion
64
+ export { TextFrame, TextLoadStep, TextLoadTask, TextMessagePipelines, TextStepDeps, TextTrackSegmentResolver };
65
+ //# sourceMappingURL=text-segment-load-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-segment-load-pipeline.d.ts","names":[],"sources":["../../../../src/playback/primitives/text-segment-load-pipeline.ts"],"mappings":";;;;;;;;;;;;;KA6CY,yBAAyB,UAAU,MAAM,QAAQ,gBAAgB,QAAQ;;UAGpE;EACf,SAAS;EACT;;;;;;;;;;UAWe,UAAU,UAAU,MAAM;WAChC,IAAI;EACb,OAAO;EACP;;;;;;;;;;KAWU,aAAa,UAAU,MAAM,QACvC,OAAO,UAAU,IACjB,QAAQ,aACR,MAAM,wBACI;;;;;;;;UASK;EACf,OAAO;EACP,SAAS;EACT;;;;;;;;;;KAwBU,qBAAqB,UAAU,MAAM,aAAa,aAAa"}
@@ -0,0 +1,37 @@
1
+ //#region src/playback/primitives/text-segment-load-pipeline.ts
2
+ /**
3
+ * Base-step view of the loader's wiring, folded into `config` by
4
+ * `createTextTrackSegmentLoaderActor` so base steps read it from the uniform passthrough
5
+ * — present in both composition and standalone use. `config` is loose (`object`), so
6
+ * assert the shape here (mirrors the v/a loader's `stepWiring`). The sink is the
7
+ * structural {@link CueSink}, not the concrete actor.
8
+ */
9
+ function textStepWiring(deps) {
10
+ return deps.config;
11
+ }
12
+ /** Resolve the op's cues (via the injected host primitive) into the frame. The text analog of `fetchStep`. */
13
+ const resolveCuesStep = async (frame, signal, deps) => {
14
+ const cues = await textStepWiring(deps).resolveSegment(frame.op.segment.url);
15
+ if (signal.aborted) return;
16
+ frame.cues = cues;
17
+ };
18
+ /** Dispatch the frame's cues to the TextTracksActor as `add-cues`. The text analog of `dispatchStep`. */
19
+ const dispatchCuesStep = (frame, _signal, deps) => {
20
+ const { op } = frame;
21
+ textStepWiring(deps).textTracksActor.send({
22
+ type: "add-cues",
23
+ meta: {
24
+ trackId: op.trackId,
25
+ id: op.segment.id,
26
+ startTime: op.segment.startTime,
27
+ duration: op.segment.duration
28
+ },
29
+ cues: frame.cues ?? []
30
+ });
31
+ };
32
+ /** Tier 0 default: resolve then dispatch. No relocation vocabulary. */
33
+ const DEFAULT_TEXT_MESSAGE_PIPELINES = () => [resolveCuesStep, dispatchCuesStep];
34
+ //#endregion
35
+ export { DEFAULT_TEXT_MESSAGE_PIPELINES, dispatchCuesStep, resolveCuesStep, textStepWiring };
36
+
37
+ //# sourceMappingURL=text-segment-load-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-segment-load-pipeline.js","names":[],"sources":["../../../../src/playback/primitives/text-segment-load-pipeline.ts"],"sourcesContent":["/**\n * The text-track **load pipeline** — the step vocabulary and base steps a text-segment\n * loader runs, the text mirror of `segment-load-pipeline`. Extracted from the loader\n * actor so the \"what\" (the composable steps) is separable from the \"how\" (scheduling).\n * A pipeline is a flat, ordered list of {@link TextLoadStep}s (text has a single op\n * type, so no per-type `Record`); the default is `resolveCues → dispatchCues`, and a\n * composition can insert its own steps (e.g. non-zero-PTS cue rebase) without the\n * loader knowing.\n *\n * The dispatch step reaches its cue sink through the structural {@link CueSink} seam\n * rather than the concrete `TextTracksActor` type — the loader folds the real actor\n * into `config`, and it satisfies the seam by structure — so this module names no\n * actor and stays DOM-free (generic over the cue type `C`).\n */\nimport type { AnySlotMap } from '../../core/composition/create-composition';\nimport type { Cue, Segment } from '../../media/types';\nimport type { AddCuesMessage } from './text-track-messages';\n\n// ============================================================================\n// SINK SEAM\n// ============================================================================\n\n/**\n * The structural view of a cue sink the base steps use — just the `send`\n * {@link dispatchCuesStep} needs. The concrete `TextTracksActor` satisfies it by\n * structure, so the pipeline names no actor.\n */\nexport interface CueSink<C extends Cue = Cue> {\n send(message: AddCuesMessage<C>): void;\n}\n\n// ============================================================================\n// STEP MODEL\n// ============================================================================\n\n/**\n * Resolves a text-track segment URL into the array of cues it contains.\n *\n * \"Resolve\" because the fn covers both network fetch and parse into the\n * domain model. Host-agnostic — the concrete resolver (e.g. the\n * browser's native VTT resolver) is supplied at engine-assembly time,\n * so this stays DOM-free. A pure `url → cues` primitive (the text\n * analog of the v/a loader's `fetchBytes`); composition-awareness lives in\n * the injected {@link TextLoadStep}s, not here.\n */\nexport type TextTrackSegmentResolver<C extends Cue = Cue> = (url: string) => Promise<C[]>;\n\n/** Internal load-task descriptor — one segment fetch + dispatch unit. */\nexport interface TextLoadTask {\n segment: Segment;\n trackId: string;\n}\n\n/**\n * A text load in mid-pipeline — the text analog of the v/a loader's `Frame`.\n * `resolveCuesStep` fills `cues`; `dispatchCuesStep` sends them. `metadata` is\n * opaque header metadata a resolve step may attach for a later step to read\n * (e.g. relocation stashes the `X-TIMESTAMP-MAP` correlation here for its rebase\n * step). Typed `unknown` so the generic loader stays host-agnostic — the step\n * that reads it knows its concrete shape (mirrors `StepDeps.state`).\n */\nexport interface TextFrame<C extends Cue = Cue> {\n readonly op: TextLoadTask;\n cues?: C[];\n metadata?: unknown;\n}\n\n/**\n * One stage of a text message pipeline — the text analog of the v/a loader's\n * `LoadStep`. Mutates the {@link TextFrame} in place and may be async; the runner\n * checks `signal.aborted` before each step and passes the actor's\n * {@link TextStepDeps} on every call, so a stateless step (`resolveCuesStep`) is a\n * plain value and a step that needs composition signals (relocation's cue rebase)\n * reads them from `deps` at call time.\n */\nexport type TextLoadStep<C extends Cue = Cue> = (\n frame: TextFrame<C>,\n signal: AbortSignal,\n deps: TextStepDeps\n) => void | Promise<void>;\n\n/**\n * The uniform passthrough handed to each {@link TextLoadStep} — the composition triple,\n * the text analog of `StepDeps`. `state`/`context` are the composition signal maps;\n * `config` is the threaded config with the loader's wiring folded in (see\n * {@link textStepWiring} + `createTextTrackSegmentLoaderActor`). Typed loose: composition\n * steps read `state`; base steps read the folded wiring off `config`.\n */\nexport interface TextStepDeps {\n state: AnySlotMap;\n context: AnySlotMap;\n config: object;\n}\n\n/**\n * Base-step view of the loader's wiring, folded into `config` by\n * `createTextTrackSegmentLoaderActor` so base steps read it from the uniform passthrough\n * — present in both composition and standalone use. `config` is loose (`object`), so\n * assert the shape here (mirrors the v/a loader's `stepWiring`). The sink is the\n * structural {@link CueSink}, not the concrete actor.\n */\nexport function textStepWiring<C extends Cue>(\n deps: TextStepDeps\n): { textTracksActor: CueSink<C>; resolveSegment: TextTrackSegmentResolver<C> } {\n return deps.config as { textTracksActor: CueSink<C>; resolveSegment: TextTrackSegmentResolver<C> };\n}\n\n/**\n * Builds the ordered step list, called **once per actor** (mirrors the v/a loader's\n * `MessagePipelines`, but text has a single op type so it's a flat array, not a\n * `Record`). The default ({@link DEFAULT_TEXT_MESSAGE_PIPELINES}) is\n * `resolveCues → dispatchCues`; a non-zero-PTS composition returns a list that\n * inserts a cue-rebase step (see `relocatingTextPipelines`), so the loader stays\n * oblivious to relocation.\n */\nexport type TextMessagePipelines<C extends Cue = Cue> = () => TextLoadStep<C>[];\n\n// ============================================================================\n// BASE STEPS\n// ============================================================================\n\n// Base steps are generic over the cue type `C` (generic arrow consts, not\n// `TextLoadStep<Cue>` values): each touches `C` — `frame.cues: C[]` and the\n// `C`-typed `textStepWiring<C>` — so a `Cue`-typed const wouldn't slot into a\n// `VTTCue` pipeline. A generic function assigns to any `TextLoadStep<C>`.\n\n/** Resolve the op's cues (via the injected host primitive) into the frame. The text analog of `fetchStep`. */\nexport const resolveCuesStep = async <C extends Cue>(\n frame: TextFrame<C>,\n signal: AbortSignal,\n deps: TextStepDeps\n): Promise<void> => {\n const cues = await textStepWiring<C>(deps).resolveSegment(frame.op.segment.url);\n if (signal.aborted) return;\n frame.cues = cues;\n};\n\n/** Dispatch the frame's cues to the TextTracksActor as `add-cues`. The text analog of `dispatchStep`. */\nexport const dispatchCuesStep = <C extends Cue>(\n frame: TextFrame<C>,\n _signal: AbortSignal,\n deps: TextStepDeps\n): void => {\n const { op } = frame;\n textStepWiring<C>(deps).textTracksActor.send({\n type: 'add-cues',\n meta: {\n trackId: op.trackId,\n id: op.segment.id,\n startTime: op.segment.startTime,\n duration: op.segment.duration,\n },\n cues: frame.cues ?? [],\n });\n};\n\n/** Tier 0 default: resolve then dispatch. No relocation vocabulary. */\nexport const DEFAULT_TEXT_MESSAGE_PIPELINES = <C extends Cue>(): TextLoadStep<C>[] => [\n resolveCuesStep,\n dispatchCuesStep,\n];\n"],"mappings":";;;;;;;;AAqGA,SAAgB,eACd,MAC8E;CAC9E,OAAO,KAAK;AACd;;AAsBA,MAAa,kBAAkB,OAC7B,OACA,QACA,SACkB;CAClB,MAAM,OAAO,MAAM,eAAkB,IAAI,CAAC,CAAC,eAAe,MAAM,GAAG,QAAQ,GAAG;CAC9E,IAAI,OAAO,SAAS;CACpB,MAAM,OAAO;AACf;;AAGA,MAAa,oBACX,OACA,SACA,SACS;CACT,MAAM,EAAE,OAAO;CACf,eAAkB,IAAI,CAAC,CAAC,gBAAgB,KAAK;EAC3C,MAAM;EACN,MAAM;GACJ,SAAS,GAAG;GACZ,IAAI,GAAG,QAAQ;GACf,WAAW,GAAG,QAAQ;GACtB,UAAU,GAAG,QAAQ;EACvB;EACA,MAAM,MAAM,QAAQ,CAAC;CACvB,CAAC;AACH;;AAGA,MAAa,uCAAyE,CACpF,iBACA,gBACF"}
@@ -0,0 +1,14 @@
1
+ import { Cue, Segment } from "../../media/types/index.js";
2
+ //#region src/playback/primitives/text-track-messages.d.ts
3
+ /** Segment identity and timing — mirrors AppendSegmentMeta without trackId (keyed separately). */
4
+ type CueSegmentMeta = Pick<Segment, 'id' | 'startTime' | 'duration'> & {
5
+ trackId: string;
6
+ };
7
+ interface AddCuesMessage<C extends Cue = Cue> {
8
+ type: 'add-cues';
9
+ meta: CueSegmentMeta;
10
+ cues: C[];
11
+ }
12
+ //#endregion
13
+ export { AddCuesMessage, CueSegmentMeta };
14
+ //# sourceMappingURL=text-track-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-track-messages.d.ts","names":[],"sources":["../../../../src/playback/primitives/text-track-messages.ts"],"mappings":";;;KASY,iBAAiB,KAAK;EAA8C;;UAE/D,eAAe,UAAU,MAAM;EAC9C;EACA,MAAM;EACN,MAAM"}
@@ -0,0 +1,61 @@
1
+ //#region src/playback/primitives/track-types.ts
2
+ /**
3
+ * **Per-type config bundles for per-type behavior variants.**
4
+ *
5
+ * Each `*_TYPE_CONFIG` constant names the per-type slot keys that
6
+ * per-type-variant setup-shape helpers consume. Variants reference the
7
+ * shared constant at their `defineBehavior` setup body rather than
8
+ * constructing the config inline, so the per-type identity (which state
9
+ * slot, which context slot, which discriminant) lives in one place per
10
+ * type.
11
+ *
12
+ * Variants spread their composition-time `config` over the defaults so
13
+ * engines can layer composition-supplied additions on top (e.g. a
14
+ * custom fetch closure, a non-default segment resolver). Defaults
15
+ * first, engine config second.
16
+ *
17
+ * Helpers continue to consume their slice via the existing typed-key
18
+ * generics (`<K extends SelectedTrackKey>` etc.); the extra fields on
19
+ * the config object (carrying facets other helpers care about) are fine
20
+ * under structural typing.
21
+ */
22
+ /**
23
+ * Type-identity bundle for video-track-typed behaviors.
24
+ *
25
+ * @see setupVideoBufferActors, loadVideoSegments
26
+ */
27
+ const VIDEO_TYPE_CONFIG = {
28
+ type: "video",
29
+ selectedKey: "selectedVideoTrackId",
30
+ actorKey: "videoBufferActor",
31
+ loaderKey: "videoSegmentLoaderActor"
32
+ };
33
+ /**
34
+ * Type-identity bundle for audio-track-typed behaviors.
35
+ *
36
+ * @see setupAudioBufferActors, loadAudioSegments
37
+ */
38
+ const AUDIO_TYPE_CONFIG = {
39
+ type: "audio",
40
+ selectedKey: "selectedAudioTrackId",
41
+ actorKey: "audioBufferActor",
42
+ loaderKey: "audioSegmentLoaderActor"
43
+ };
44
+ /**
45
+ * Type-identity bundle for text-track-typed behaviors. Text tracks have
46
+ * no `SourceBufferActor` (MSE doesn't apply), so this bundle omits
47
+ * `actorKey`. The `loaderKey` points at the text-track-segment-loader
48
+ * actor (a `MessageActor` with continue-vs-preempt semantics, parallel
49
+ * to v/a's `SegmentLoaderActor`).
50
+ *
51
+ * @see loadTextTrackSegments, setupTextTrackActors
52
+ */
53
+ const TEXT_TYPE_CONFIG = {
54
+ type: "text",
55
+ selectedKey: "selectedTextTrackId",
56
+ loaderKey: "textTrackSegmentLoaderActor"
57
+ };
58
+ //#endregion
59
+ export { AUDIO_TYPE_CONFIG, TEXT_TYPE_CONFIG, VIDEO_TYPE_CONFIG };
60
+
61
+ //# sourceMappingURL=track-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-types.js","names":[],"sources":["../../../../src/playback/primitives/track-types.ts"],"sourcesContent":["/**\n * **Per-type config bundles for per-type behavior variants.**\n *\n * Each `*_TYPE_CONFIG` constant names the per-type slot keys that\n * per-type-variant setup-shape helpers consume. Variants reference the\n * shared constant at their `defineBehavior` setup body rather than\n * constructing the config inline, so the per-type identity (which state\n * slot, which context slot, which discriminant) lives in one place per\n * type.\n *\n * Variants spread their composition-time `config` over the defaults so\n * engines can layer composition-supplied additions on top (e.g. a\n * custom fetch closure, a non-default segment resolver). Defaults\n * first, engine config second.\n *\n * Helpers continue to consume their slice via the existing typed-key\n * generics (`<K extends SelectedTrackKey>` etc.); the extra fields on\n * the config object (carrying facets other helpers care about) are fine\n * under structural typing.\n */\n\n/**\n * Type-identity bundle for video-track-typed behaviors.\n *\n * @see setupVideoBufferActors, loadVideoSegments\n */\nexport const VIDEO_TYPE_CONFIG = {\n type: 'video',\n selectedKey: 'selectedVideoTrackId',\n actorKey: 'videoBufferActor',\n loaderKey: 'videoSegmentLoaderActor',\n} as const;\n\n/**\n * Type-identity bundle for audio-track-typed behaviors.\n *\n * @see setupAudioBufferActors, loadAudioSegments\n */\nexport const AUDIO_TYPE_CONFIG = {\n type: 'audio',\n selectedKey: 'selectedAudioTrackId',\n actorKey: 'audioBufferActor',\n loaderKey: 'audioSegmentLoaderActor',\n} as const;\n\n/**\n * Type-identity bundle for text-track-typed behaviors. Text tracks have\n * no `SourceBufferActor` (MSE doesn't apply), so this bundle omits\n * `actorKey`. The `loaderKey` points at the text-track-segment-loader\n * actor (a `MessageActor` with continue-vs-preempt semantics, parallel\n * to v/a's `SegmentLoaderActor`).\n *\n * @see loadTextTrackSegments, setupTextTrackActors\n */\nexport const TEXT_TYPE_CONFIG = {\n type: 'text',\n selectedKey: 'selectedTextTrackId',\n loaderKey: 'textTrackSegmentLoaderActor',\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAa,oBAAoB;CAC/B,MAAM;CACN,aAAa;CACb,UAAU;CACV,WAAW;AACb;;;;;;AAOA,MAAa,oBAAoB;CAC/B,MAAM;CACN,aAAa;CACb,UAAU;CACV,WAAW;AACb;;;;;;;;;;AAWA,MAAa,mBAAmB;CAC9B,MAAM;CACN,aAAa;CACb,WAAW;AACb"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@videojs/spf",
3
3
  "type": "module",
4
- "version": "10.0.0-beta.3",
4
+ "version": "10.0.0-beta.30",
5
5
  "description": "Stream Processing Framework for Video.js 10",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -16,53 +16,90 @@
16
16
  "spf",
17
17
  "videojs"
18
18
  ],
19
+ "sideEffects": false,
19
20
  "exports": {
20
21
  ".": {
21
- "types": "./dist/index.d.ts",
22
- "development": "./dist/index.js",
23
- "default": "./dist/index.js"
22
+ "types": "./dist/dev/index.d.ts",
23
+ "development": "./dist/dev/index.js",
24
+ "default": "./dist/default/index.js"
24
25
  },
25
26
  "./dom": {
26
- "types": "./dist/dom/index.d.ts",
27
- "development": "./dist/dom/index.js",
28
- "default": "./dist/dom/index.js"
27
+ "types": "./dist/dev/dom.d.ts",
28
+ "development": "./dist/dev/dom.js",
29
+ "default": "./dist/default/dom.js"
29
30
  },
30
- "./playback-engine": {
31
- "types": "./dist/dom/playback-engine/index.d.ts",
32
- "development": "./dist/dom/playback-engine/index.js",
33
- "default": "./dist/dom/playback-engine/index.js"
31
+ "./hls": {
32
+ "types": "./dist/dev/hls.d.ts",
33
+ "development": "./dist/dev/hls.js",
34
+ "default": "./dist/default/hls.js"
35
+ },
36
+ "./media-tracks": {
37
+ "types": "./dist/dev/media-tracks.d.ts",
38
+ "development": "./dist/dev/media-tracks.js",
39
+ "default": "./dist/default/media-tracks.js"
40
+ },
41
+ "./hls-background-video": {
42
+ "types": "./dist/dev/hls-background-video.d.ts",
43
+ "development": "./dist/dev/hls-background-video.js",
44
+ "default": "./dist/default/hls-background-video.js"
45
+ },
46
+ "./hls-audio": {
47
+ "types": "./dist/dev/hls-audio.d.ts",
48
+ "development": "./dist/dev/hls-audio.js",
49
+ "default": "./dist/default/hls-audio.js"
50
+ },
51
+ "./hls-video": {
52
+ "types": "./dist/dev/hls-video.d.ts",
53
+ "development": "./dist/dev/hls-video.js",
54
+ "default": "./dist/default/hls-video.js"
55
+ },
56
+ "./mux-audio": {
57
+ "types": "./dist/dev/mux-audio.d.ts",
58
+ "development": "./dist/dev/mux-audio.js",
59
+ "default": "./dist/default/mux-audio.js"
60
+ },
61
+ "./mux-background-video": {
62
+ "types": "./dist/dev/mux-background-video.d.ts",
63
+ "development": "./dist/dev/mux-background-video.js",
64
+ "default": "./dist/default/mux-background-video.js"
65
+ },
66
+ "./mux-video": {
67
+ "types": "./dist/dev/mux-video.d.ts",
68
+ "development": "./dist/dev/mux-video.js",
69
+ "default": "./dist/default/mux-video.js"
34
70
  }
35
71
  },
36
- "main": "dist/index.js",
37
- "module": "dist/index.js",
38
- "types": "dist/index.d.ts",
72
+ "main": "dist/default/index.js",
73
+ "module": "dist/default/index.js",
74
+ "types": "dist/dev/index.d.ts",
39
75
  "files": [
40
76
  "dist"
41
77
  ],
42
78
  "dependencies": {
43
- "@videojs/utils": "10.0.0-beta.3"
79
+ "signal-polyfill": "^0.2.2",
80
+ "@videojs/media": "10.0.0-beta.30",
81
+ "@videojs/utils": "10.0.0-beta.30"
44
82
  },
45
83
  "devDependencies": {
46
- "@vitest/browser": "^3.2.4",
47
- "@vitest/coverage-v8": "^3.2.4",
84
+ "@vitest/browser": "^4.1.10",
85
+ "@vitest/browser-playwright": "^4.1.10",
86
+ "@vitest/coverage-v8": "^4.1.10",
48
87
  "jsdom": "^26.1.0",
49
- "playwright": "^1.58.1",
50
- "tsdown": "^0.15.12",
51
- "typescript": "^5.9.3",
52
- "vitest": "^3.2.4"
88
+ "playwright": "^1.59.1",
89
+ "tsdown": "^0.22.14",
90
+ "vitest": "^4.1.10"
53
91
  },
54
92
  "publishConfig": {
55
93
  "access": "public"
56
94
  },
57
95
  "scripts": {
58
- "build": "tsc --build && tsdown",
59
- "build:watch": "tsdown --watch --silent",
96
+ "build": "tsdown",
97
+ "build:watch": "tsdown --watch ./src --no-clean",
60
98
  "dev": "pnpm run build:watch",
61
99
  "test": "vitest run",
62
- "test:ci": "vitest run --project=core --project=dom --project=utils",
63
100
  "test:watch": "vitest",
64
- "clean": "rm -rf dist types",
65
- "size": "node scripts/measure-size.js --playback-engine",
101
+ "clean": "rimraf --glob dist types '*.tsbuildinfo'",
102
+ "size": "node scripts/measure-size.js --hls",
66
103
  "size:all": "node scripts/measure-size.js --all"
67
104
  }
68
105
  }