@remotion/media-parser 4.0.194 → 4.0.196

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 (275) hide show
  1. package/dist/add-new-matroska-tracks.d.ts +8 -0
  2. package/dist/add-new-matroska-tracks.js +14 -0
  3. package/dist/av1-codec-string.d.ts +3 -0
  4. package/dist/av1-codec-string.js +91 -0
  5. package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +14 -0
  6. package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +38 -0
  7. package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +8 -0
  8. package/dist/boxes/iso-base-media/esds/esds-descriptors.js +22 -2
  9. package/dist/boxes/iso-base-media/ftype.d.ts +9 -0
  10. package/dist/boxes/iso-base-media/ftype.js +31 -0
  11. package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
  12. package/dist/boxes/iso-base-media/make-track.js +112 -0
  13. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +6 -2
  14. package/dist/boxes/iso-base-media/mdat/mdat.js +90 -6
  15. package/dist/boxes/iso-base-media/moov/moov.d.ts +4 -2
  16. package/dist/boxes/iso-base-media/moov/moov.js +4 -2
  17. package/dist/boxes/iso-base-media/mvhd.js +7 -1
  18. package/dist/boxes/iso-base-media/process-box.d.ts +20 -3
  19. package/dist/boxes/iso-base-media/process-box.js +322 -34
  20. package/dist/boxes/iso-base-media/stsd/av1c.d.ts +9 -0
  21. package/dist/boxes/iso-base-media/stsd/av1c.js +10 -0
  22. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +20 -0
  23. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +73 -0
  24. package/dist/boxes/iso-base-media/stsd/avcc.d.ts +10 -0
  25. package/dist/boxes/iso-base-media/stsd/avcc.js +21 -0
  26. package/dist/boxes/iso-base-media/stsd/colr.d.ts +11 -0
  27. package/dist/boxes/iso-base-media/stsd/colr.js +35 -0
  28. package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
  29. package/dist/boxes/iso-base-media/stsd/ctts.js +30 -0
  30. package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +11 -0
  31. package/dist/boxes/iso-base-media/stsd/hvcc.js +17 -0
  32. package/dist/boxes/iso-base-media/stsd/keys.js +1 -0
  33. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +4 -2
  34. package/dist/boxes/iso-base-media/stsd/mebx.js +4 -2
  35. package/dist/boxes/iso-base-media/stsd/pasp.d.ts +12 -0
  36. package/dist/boxes/iso-base-media/stsd/pasp.js +17 -0
  37. package/dist/boxes/iso-base-media/stsd/samples.d.ts +12 -5
  38. package/dist/boxes/iso-base-media/stsd/samples.js +27 -10
  39. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +4 -2
  40. package/dist/boxes/iso-base-media/stsd/stsd.js +6 -2
  41. package/dist/boxes/iso-base-media/stsd/stss.d.ts +13 -0
  42. package/dist/boxes/iso-base-media/stsd/stss.js +28 -0
  43. package/dist/boxes/iso-base-media/stsd/stsz.d.ts +9 -3
  44. package/dist/boxes/iso-base-media/stsd/stsz.js +14 -2
  45. package/dist/boxes/iso-base-media/stsd/stts.d.ts +15 -0
  46. package/dist/boxes/iso-base-media/stsd/stts.js +35 -0
  47. package/dist/boxes/iso-base-media/tkhd.d.ts +3 -0
  48. package/dist/boxes/iso-base-media/tkhd.js +41 -14
  49. package/dist/boxes/iso-base-media/trak/trak.d.ts +4 -2
  50. package/dist/boxes/iso-base-media/trak/trak.js +4 -2
  51. package/dist/boxes/iso-base-media/void-box.d.ts +4 -0
  52. package/dist/boxes/iso-base-media/void-box.js +2 -0
  53. package/dist/boxes/webm/allowed-partial-segments.d.ts +1 -0
  54. package/dist/boxes/webm/allowed-partial-segments.js +4 -0
  55. package/dist/boxes/webm/av1-codec-private.d.ts +2 -0
  56. package/dist/boxes/webm/av1-codec-private.js +95 -0
  57. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +14 -0
  58. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +67 -0
  59. package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +11 -0
  60. package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +14 -0
  61. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +6 -0
  62. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +9 -0
  63. package/dist/boxes/webm/bitstream/av1/color-config.d.ts +16 -0
  64. package/dist/boxes/webm/bitstream/av1/color-config.js +103 -0
  65. package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +14 -0
  66. package/dist/boxes/webm/bitstream/av1/color-primaries.js +17 -0
  67. package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +9 -0
  68. package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +17 -0
  69. package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +51 -0
  70. package/dist/boxes/webm/bitstream/av1/header-segment.js +183 -0
  71. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +17 -0
  72. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +20 -0
  73. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +10 -0
  74. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +15 -0
  75. package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +5 -0
  76. package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +8 -0
  77. package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +8 -0
  78. package/dist/boxes/webm/bitstream/av1/timing-info.js +20 -0
  79. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +21 -0
  80. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +24 -0
  81. package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +2 -0
  82. package/dist/boxes/webm/bitstream/av1/uvlc.js +20 -0
  83. package/dist/boxes/webm/bitstream/av1.d.ts +20 -0
  84. package/dist/boxes/webm/bitstream/av1.js +118 -0
  85. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
  86. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +1 -0
  87. package/dist/boxes/webm/description.d.ts +2 -0
  88. package/dist/boxes/webm/description.js +83 -0
  89. package/dist/boxes/webm/get-ready-tracks.d.ts +3 -0
  90. package/dist/boxes/webm/get-ready-tracks.js +29 -0
  91. package/dist/boxes/webm/get-track.d.ts +6 -0
  92. package/dist/boxes/webm/get-track.js +183 -0
  93. package/dist/boxes/webm/parse-webm-header.d.ts +2 -1
  94. package/dist/boxes/webm/parse-webm-header.js +2 -2
  95. package/dist/boxes/webm/segments/all-segments.d.ts +269 -0
  96. package/dist/boxes/webm/segments/all-segments.js +277 -0
  97. package/dist/boxes/webm/segments/duration.d.ts +1 -1
  98. package/dist/boxes/webm/segments/duration.js +13 -9
  99. package/dist/boxes/webm/segments/info.d.ts +2 -1
  100. package/dist/boxes/webm/segments/info.js +12 -4
  101. package/dist/boxes/webm/segments/main.d.ts +0 -2
  102. package/dist/boxes/webm/segments/main.js +0 -11
  103. package/dist/boxes/webm/segments/muxing.d.ts +1 -1
  104. package/dist/boxes/webm/segments/muxing.js +1 -2
  105. package/dist/boxes/webm/segments/parse-children.d.ts +11 -1
  106. package/dist/boxes/webm/segments/parse-children.js +82 -6
  107. package/dist/boxes/webm/segments/seek-head.d.ts +2 -1
  108. package/dist/boxes/webm/segments/seek-head.js +12 -3
  109. package/dist/boxes/webm/segments/seek-position.d.ts +1 -1
  110. package/dist/boxes/webm/segments/seek-position.js +1 -2
  111. package/dist/boxes/webm/segments/seek.d.ts +7 -2
  112. package/dist/boxes/webm/segments/seek.js +22 -9
  113. package/dist/boxes/webm/segments/track-entry.d.ts +102 -22
  114. package/dist/boxes/webm/segments/track-entry.js +269 -57
  115. package/dist/boxes/webm/segments/tracks.d.ts +2 -1
  116. package/dist/boxes/webm/segments/tracks.js +12 -4
  117. package/dist/boxes/webm/segments/void.d.ts +1 -1
  118. package/dist/boxes/webm/segments/void.js +1 -2
  119. package/dist/boxes/webm/segments/writing.d.ts +1 -1
  120. package/dist/boxes/webm/segments/writing.js +1 -2
  121. package/dist/boxes/webm/segments.d.ts +8 -4
  122. package/dist/boxes/webm/segments.js +176 -40
  123. package/dist/boxes/webm/traversal.d.ts +7 -0
  124. package/dist/boxes/webm/traversal.js +25 -0
  125. package/dist/buffer-iterator.d.ts +15 -1
  126. package/dist/buffer-iterator.js +115 -46
  127. package/dist/combine-uint8array.d.ts +1 -0
  128. package/dist/combine-uint8array.js +13 -0
  129. package/dist/from-fetch.d.ts +2 -0
  130. package/dist/from-fetch.js +54 -0
  131. package/dist/from-node.js +6 -0
  132. package/dist/from-web-file.d.ts +2 -0
  133. package/dist/from-web-file.js +34 -0
  134. package/dist/from-web.js +6 -9
  135. package/dist/get-audio-codec.d.ts +19 -0
  136. package/dist/get-audio-codec.js +153 -60
  137. package/dist/get-dimensions.d.ts +8 -2
  138. package/dist/get-dimensions.js +13 -91
  139. package/dist/get-duration.js +4 -7
  140. package/dist/get-fps.d.ts +4 -3
  141. package/dist/get-fps.js +17 -116
  142. package/dist/get-sample-aspect-ratio.d.ts +37 -0
  143. package/dist/get-sample-aspect-ratio.js +137 -0
  144. package/dist/get-sample-positions.d.ts +11 -1
  145. package/dist/get-sample-positions.js +31 -2
  146. package/dist/get-tracks.d.ts +44 -5
  147. package/dist/get-tracks.js +66 -48
  148. package/dist/get-video-codec.d.ts +2 -0
  149. package/dist/get-video-codec.js +47 -31
  150. package/dist/get-video-metadata.d.ts +2 -0
  151. package/dist/get-video-metadata.js +44 -0
  152. package/dist/has-all-info.d.ts +2 -1
  153. package/dist/has-all-info.js +14 -5
  154. package/dist/index.d.ts +1 -0
  155. package/dist/make-hvc1-codec-strings.d.ts +2 -0
  156. package/dist/make-hvc1-codec-strings.js +47 -0
  157. package/dist/options.d.ts +26 -4
  158. package/dist/parse-media.js +62 -17
  159. package/dist/parse-result.d.ts +16 -5
  160. package/dist/parse-video.d.ts +11 -2
  161. package/dist/parse-video.js +14 -6
  162. package/dist/parser-context.d.ts +8 -0
  163. package/dist/parser-context.js +2 -0
  164. package/dist/parser-state.d.ts +23 -0
  165. package/dist/parser-state.js +112 -0
  166. package/dist/read-and-increment-offset.d.ts +28 -0
  167. package/dist/read-and-increment-offset.js +177 -0
  168. package/dist/reader.d.ts +2 -2
  169. package/dist/traversal.d.ts +37 -0
  170. package/dist/traversal.js +244 -1
  171. package/dist/understand-vorbis.d.ts +1 -0
  172. package/dist/understand-vorbis.js +12 -0
  173. package/dist/webcodec-sample-types.d.ts +21 -0
  174. package/dist/webcodec-sample-types.js +2 -0
  175. package/package.json +10 -2
  176. package/src/add-new-matroska-tracks.ts +23 -0
  177. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +61 -0
  178. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +33 -2
  179. package/src/boxes/iso-base-media/make-track.ts +157 -0
  180. package/src/boxes/iso-base-media/mdat/mdat.ts +131 -0
  181. package/src/boxes/iso-base-media/moov/moov.ts +8 -3
  182. package/src/boxes/iso-base-media/mvhd.ts +7 -1
  183. package/src/boxes/iso-base-media/process-box.ts +388 -38
  184. package/src/boxes/iso-base-media/stsd/av1c.ts +19 -0
  185. package/src/boxes/iso-base-media/stsd/avcc.ts +36 -0
  186. package/src/boxes/iso-base-media/stsd/colr.ts +49 -0
  187. package/src/boxes/iso-base-media/stsd/ctts.ts +55 -0
  188. package/src/boxes/iso-base-media/stsd/hvcc.ts +32 -0
  189. package/src/boxes/iso-base-media/stsd/keys.ts +2 -0
  190. package/src/boxes/iso-base-media/stsd/mebx.ts +8 -3
  191. package/src/boxes/iso-base-media/stsd/pasp.ts +32 -0
  192. package/src/boxes/iso-base-media/stsd/samples.ts +43 -16
  193. package/src/boxes/iso-base-media/stsd/stco.ts +50 -0
  194. package/src/boxes/iso-base-media/stsd/stsc.ts +61 -0
  195. package/src/boxes/iso-base-media/stsd/stsd.ts +10 -3
  196. package/src/boxes/iso-base-media/stsd/stss.ts +47 -0
  197. package/src/boxes/iso-base-media/stsd/stsz.ts +75 -0
  198. package/src/boxes/iso-base-media/tkhd.ts +63 -16
  199. package/src/boxes/iso-base-media/trak/trak.ts +8 -3
  200. package/src/boxes/iso-base-media/void-box.ts +4 -0
  201. package/src/boxes/webm/allowed-partial-segments.ts +1 -0
  202. package/src/boxes/webm/av1-codec-private.ts +113 -0
  203. package/src/boxes/webm/description.ts +101 -0
  204. package/src/boxes/webm/get-ready-tracks.ts +36 -0
  205. package/src/boxes/webm/get-track.ts +250 -0
  206. package/src/boxes/webm/parse-webm-header.ts +6 -2
  207. package/src/boxes/webm/segments/all-segments.ts +285 -0
  208. package/src/boxes/webm/segments/duration.ts +15 -8
  209. package/src/boxes/webm/segments/info.ts +18 -4
  210. package/src/boxes/webm/segments/main.ts +0 -13
  211. package/src/boxes/webm/segments/muxing.ts +1 -1
  212. package/src/boxes/webm/segments/parse-children.ts +132 -9
  213. package/src/boxes/webm/segments/seek-head.ts +17 -4
  214. package/src/boxes/webm/segments/seek-position.ts +1 -2
  215. package/src/boxes/webm/segments/seek.ts +31 -9
  216. package/src/boxes/webm/segments/track-entry.ts +475 -65
  217. package/src/boxes/webm/segments/tracks.ts +17 -7
  218. package/src/boxes/webm/segments/void.ts +4 -2
  219. package/src/boxes/webm/segments/writing.ts +1 -1
  220. package/src/boxes/webm/segments.ts +266 -42
  221. package/src/boxes/webm/traversal.ts +32 -0
  222. package/src/buffer-iterator.ts +140 -45
  223. package/src/combine-uint8array.ts +13 -0
  224. package/src/{from-web.ts → from-fetch.ts} +9 -1
  225. package/src/from-node.ts +8 -0
  226. package/src/from-web-file.ts +39 -0
  227. package/src/get-audio-codec.ts +213 -84
  228. package/src/get-dimensions.ts +25 -132
  229. package/src/get-duration.ts +4 -8
  230. package/src/get-fps.ts +27 -172
  231. package/src/get-sample-aspect-ratio.ts +204 -0
  232. package/src/get-sample-positions.ts +93 -0
  233. package/src/get-tracks.ts +147 -0
  234. package/src/get-video-codec.ts +62 -47
  235. package/src/has-all-info.ts +35 -5
  236. package/src/index.ts +8 -0
  237. package/src/make-hvc1-codec-strings.ts +55 -0
  238. package/src/options.ts +48 -9
  239. package/src/parse-media.ts +90 -21
  240. package/src/parse-result.ts +28 -4
  241. package/src/parse-video.ts +30 -7
  242. package/src/parser-context.ts +9 -0
  243. package/src/parser-state.ts +151 -0
  244. package/src/reader.ts +2 -2
  245. package/src/test/aspect-ratio.test.ts +42 -0
  246. package/src/test/av1.test.ts +108 -0
  247. package/src/test/duration.test.ts +5 -21
  248. package/src/test/matroska.test.ts +350 -31
  249. package/src/test/mvhd.test.ts +6 -1
  250. package/src/test/parse-esds.test.ts +29 -6
  251. package/src/test/parse-stco.test.ts +59 -0
  252. package/src/test/parse-stsc.test.ts +104 -0
  253. package/src/test/parse-stsz.test.ts +57 -0
  254. package/src/test/parse-stts.test.ts +1 -1
  255. package/src/test/parse-video.test.ts +23 -35
  256. package/src/test/parse-webm.test.ts +5 -5
  257. package/src/test/stream-local.test.ts +542 -46
  258. package/src/test/stream-remote.test.ts +15 -13
  259. package/src/test/stream-samples.test.ts +259 -0
  260. package/src/test/stsd.test.ts +60 -8
  261. package/src/test/tkhd.test.ts +4 -1
  262. package/src/traversal.ts +496 -0
  263. package/src/webcodec-sample-types.ts +30 -0
  264. package/tsconfig.json +5 -1
  265. package/tsconfig.tsbuildinfo +1 -1
  266. package/boxes.json +0 -1
  267. package/dist/boxes/iso-base-media/esds-descriptors.d.ts +0 -21
  268. package/dist/boxes/iso-base-media/esds-descriptors.js +0 -62
  269. package/dist/boxes/iso-base-media/esds.d.ts +0 -15
  270. package/dist/boxes/iso-base-media/esds.js +0 -27
  271. package/dist/get-codec.d.ts +0 -4
  272. package/dist/get-codec.js +0 -22
  273. /package/dist/{get-samples.d.ts → boxes/webm/bitstream/av1/frame.d.ts} +0 -0
  274. /package/dist/{get-samples.js → boxes/webm/bitstream/av1/frame.js} +0 -0
  275. /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.expectSegment = void 0;
4
+ const add_new_matroska_tracks_1 = require("../../add-new-matroska-tracks");
5
+ const get_track_1 = require("./get-track");
6
+ const all_segments_1 = require("./segments/all-segments");
4
7
  const duration_1 = require("./segments/duration");
5
8
  const info_1 = require("./segments/info");
6
- const main_1 = require("./segments/main");
7
9
  const muxing_1 = require("./segments/muxing");
10
+ const parse_children_1 = require("./segments/parse-children");
8
11
  const seek_1 = require("./segments/seek");
9
12
  const seek_head_1 = require("./segments/seek-head");
10
13
  const seek_position_1 = require("./segments/seek-position");
@@ -14,111 +17,244 @@ const tracks_1 = require("./segments/tracks");
14
17
  const unknown_1 = require("./segments/unknown");
15
18
  const void_1 = require("./segments/void");
16
19
  const writing_1 = require("./segments/writing");
17
- const expectSegment = (iterator) => {
18
- const segmentId = iterator.getMatroskaSegmentId();
20
+ const parseSegment = async ({ segmentId, iterator, length, parserContext, }) => {
21
+ if (length === 0) {
22
+ throw new Error(`Expected length of ${segmentId} to be greater than 0`);
23
+ }
19
24
  if (segmentId === '0x') {
20
25
  return {
21
26
  type: 'unknown-segment',
22
27
  id: segmentId,
23
28
  };
24
29
  }
25
- if (segmentId === '0x18538067') {
26
- return (0, main_1.parseMainSegment)(iterator);
27
- }
30
+ // Log this to debug
31
+ /*
32
+ console.log(
33
+ 'segmentId',
34
+ segmentId,
35
+ getSegmentName(segmentId),
36
+ iterator.counter.getOffset(),
37
+ );
38
+ */
28
39
  if (segmentId === '0x114d9b74') {
29
- return (0, seek_head_1.parseSeekHeadSegment)(iterator);
40
+ return (0, seek_head_1.parseSeekHeadSegment)(iterator, length, parserContext);
41
+ }
42
+ if (segmentId === '0x53ab') {
43
+ return (0, seek_1.parseSeekIdSegment)(iterator);
30
44
  }
31
45
  if (segmentId === '0x4dbb') {
32
- return (0, seek_1.parseSeekSegment)(iterator);
46
+ return (0, seek_1.parseSeekSegment)(iterator, length, parserContext);
33
47
  }
34
48
  if (segmentId === '0x53ac') {
35
- return (0, seek_position_1.parseSeekPositionSegment)(iterator);
49
+ return (0, seek_position_1.parseSeekPositionSegment)(iterator, length);
36
50
  }
37
51
  if (segmentId === '0xec') {
38
- return (0, void_1.parseVoidSegment)(iterator);
52
+ return (0, void_1.parseVoidSegment)(iterator, length);
39
53
  }
40
54
  if (segmentId === '0x1549a966') {
41
- return (0, info_1.parseInfoSegment)(iterator);
55
+ return (0, info_1.parseInfoSegment)(iterator, length, parserContext);
42
56
  }
43
- if (segmentId === '0x2ad7b183') {
44
- return (0, timestamp_scale_1.parseTimestampScaleSegment)(iterator);
57
+ if (segmentId === all_segments_1.matroskaElements.TimestampScale) {
58
+ const timestampScale = (0, timestamp_scale_1.parseTimestampScaleSegment)(iterator);
59
+ parserContext.parserState.setTimescale(timestampScale.timestampScale);
60
+ return timestampScale;
45
61
  }
46
62
  if (segmentId === '0x4d80') {
47
- return (0, muxing_1.parseMuxingSegment)(iterator);
63
+ return (0, muxing_1.parseMuxingSegment)(iterator, length);
48
64
  }
49
65
  if (segmentId === '0x5741') {
50
- return (0, writing_1.parseWritingSegment)(iterator);
66
+ return (0, writing_1.parseWritingSegment)(iterator, length);
51
67
  }
52
68
  if (segmentId === '0x4489') {
53
- return (0, duration_1.parseDurationSegment)(iterator);
69
+ return (0, duration_1.parseDurationSegment)(iterator, length);
54
70
  }
55
71
  if (segmentId === '0x1654ae6b') {
56
- return (0, tracks_1.parseTracksSegment)(iterator);
57
- }
58
- if (segmentId === '0xae') {
59
- return (0, track_entry_1.parseTrackEntry)(iterator);
72
+ return (0, tracks_1.parseTracksSegment)(iterator, length, parserContext);
73
+ }
74
+ if (segmentId === all_segments_1.matroskaElements.TrackEntry) {
75
+ const trackEntry = await (0, track_entry_1.parseTrackEntry)(iterator, length, parserContext);
76
+ parserContext.parserState.onTrackEntrySegment(trackEntry);
77
+ const track = (0, get_track_1.getTrack)({
78
+ track: trackEntry,
79
+ timescale: parserContext.parserState.getTimescale(),
80
+ });
81
+ if (track) {
82
+ await (0, add_new_matroska_tracks_1.registerTrack)({
83
+ state: parserContext.parserState,
84
+ options: parserContext,
85
+ track,
86
+ });
87
+ }
88
+ return trackEntry;
60
89
  }
61
90
  if (segmentId === '0xd7') {
62
- return (0, track_entry_1.parseTrackNumber)(iterator);
91
+ return (0, track_entry_1.parseTrackNumber)(iterator, length);
63
92
  }
64
93
  if (segmentId === '0x73c5') {
65
- return (0, track_entry_1.parseTrackUID)(iterator);
94
+ return (0, track_entry_1.parseTrackUID)(iterator, length);
66
95
  }
67
96
  if (segmentId === '0x9c') {
68
- return (0, track_entry_1.parseFlagLacing)(iterator);
97
+ return (0, track_entry_1.parseFlagLacing)(iterator, length);
69
98
  }
70
99
  if (segmentId === '0x22b59c') {
71
- return (0, track_entry_1.parseLanguageSegment)(iterator);
100
+ return (0, track_entry_1.parseLanguageSegment)(iterator, length);
72
101
  }
73
102
  if (segmentId === '0x86') {
74
- return (0, track_entry_1.parseCodecSegment)(iterator);
103
+ return (0, track_entry_1.parseCodecSegment)(iterator, length);
75
104
  }
76
105
  if (segmentId === '0x83') {
77
- return (0, track_entry_1.parseTrackTypeSegment)(iterator);
106
+ return (0, track_entry_1.parseTrackTypeSegment)(iterator, length);
78
107
  }
79
108
  if (segmentId === '0x55ee') {
80
- return (0, track_entry_1.parseMaxBlockAdditionId)(iterator);
109
+ return (0, track_entry_1.parseMaxBlockAdditionId)(iterator, length);
81
110
  }
82
111
  if (segmentId === '0x55b0') {
83
- return (0, track_entry_1.parseColorSegment)(iterator);
112
+ return (0, track_entry_1.parseColorSegment)(iterator, length);
84
113
  }
85
114
  if (segmentId === '0x23e383') {
86
- return (0, track_entry_1.parseDefaultDurationSegment)(iterator);
115
+ return (0, track_entry_1.parseDefaultDurationSegment)(iterator, length);
87
116
  }
88
117
  if (segmentId === '0xe0') {
89
- return (0, track_entry_1.parseVideoSegment)(iterator);
118
+ return (0, track_entry_1.parseVideoSegment)(iterator, length, parserContext);
119
+ }
120
+ if (segmentId === '0xe1') {
121
+ return (0, track_entry_1.parseAudioSegment)(iterator, length, parserContext);
90
122
  }
91
123
  if (segmentId === '0xb0') {
92
- return (0, track_entry_1.parseWidthSegment)(iterator);
124
+ return (0, track_entry_1.parseWidthSegment)(iterator, length);
93
125
  }
94
126
  if (segmentId === '0xba') {
95
- return (0, track_entry_1.parseHeightSegment)(iterator);
127
+ return (0, track_entry_1.parseHeightSegment)(iterator, length);
128
+ }
129
+ if (segmentId === all_segments_1.matroskaElements.DisplayWidth) {
130
+ return (0, track_entry_1.parseDisplayWidthSegment)(iterator, length);
131
+ }
132
+ if (segmentId === all_segments_1.matroskaElements.DisplayHeight) {
133
+ return (0, track_entry_1.parseDisplayHeightSegment)(iterator, length);
96
134
  }
97
135
  if (segmentId === '0x9a') {
98
- return (0, track_entry_1.parseInterlacedSegment)(iterator);
136
+ return (0, track_entry_1.parseInterlacedSegment)(iterator, length);
99
137
  }
100
138
  if (segmentId === '0x53c0') {
101
- return (0, track_entry_1.parseAlphaModeSegment)(iterator);
139
+ return (0, track_entry_1.parseAlphaModeSegment)(iterator, length);
102
140
  }
103
141
  if (segmentId === '0x63a2') {
104
- return (0, track_entry_1.parseCodecPrivateSegment)(iterator);
142
+ return (0, track_entry_1.parseCodecPrivateSegment)(iterator, length);
105
143
  }
106
144
  if (segmentId === '0x7ba9') {
107
- return (0, track_entry_1.parseTitleSegment)(iterator);
145
+ return (0, track_entry_1.parseTitleSegment)(iterator, length);
108
146
  }
109
147
  if (segmentId === '0xbf') {
110
- return (0, track_entry_1.parseCrc32Segment)(iterator);
148
+ return (0, track_entry_1.parseCrc32Segment)(iterator, length);
111
149
  }
112
150
  if (segmentId === '0x73a4') {
113
- return (0, track_entry_1.parseSegmentUUIDSegment)(iterator);
151
+ return (0, track_entry_1.parseSegmentUUIDSegment)(iterator, length);
114
152
  }
115
153
  if (segmentId === '0x88') {
116
- return (0, track_entry_1.parseDefaultFlagSegment)(iterator);
154
+ return (0, track_entry_1.parseDefaultFlagSegment)(iterator, length);
155
+ }
156
+ if (segmentId === '0x1254c367') {
157
+ return (0, track_entry_1.parseTagsSegment)(iterator, length, parserContext);
158
+ }
159
+ if (segmentId === '0x7373') {
160
+ return (0, track_entry_1.parseTagSegment)(iterator, length);
161
+ }
162
+ if (segmentId === all_segments_1.matroskaElements.SamplingFrequency) {
163
+ return (0, track_entry_1.parseSamplingFrequencySegment)(iterator, length);
164
+ }
165
+ if (segmentId === all_segments_1.matroskaElements.Channels) {
166
+ return (0, track_entry_1.parseChannelsSegment)(iterator, length);
167
+ }
168
+ if (segmentId === all_segments_1.matroskaElements.BitDepth) {
169
+ return (0, track_entry_1.parseBitDepthSegment)(iterator, length);
170
+ }
171
+ if (segmentId === '0xe7') {
172
+ return (0, track_entry_1.parseTimestampSegment)(iterator, length);
173
+ }
174
+ if (segmentId === '0xa3') {
175
+ return (0, track_entry_1.parseSimpleBlockSegment)({
176
+ iterator,
177
+ length,
178
+ parserContext,
179
+ });
180
+ }
181
+ if (segmentId === '0xa0') {
182
+ return (0, track_entry_1.parseBlockGroupSegment)(iterator, length, parserContext);
183
+ }
184
+ if (segmentId === '0xa1') {
185
+ return (0, track_entry_1.parseBlockElementSegment)(iterator, length);
117
186
  }
118
- const length = iterator.getVint();
119
187
  const bytesRemaining = iterator.byteLength() - iterator.counter.getOffset();
120
188
  const toDiscard = Math.min(bytesRemaining, length > 0 ? length : bytesRemaining);
121
189
  const child = (0, unknown_1.parseUnknownSegment)(iterator, segmentId, toDiscard);
122
190
  return child;
123
191
  };
192
+ const expectSegment = async (iterator, parserContext) => {
193
+ const bytesRemaining_ = iterator.bytesRemaining();
194
+ if (bytesRemaining_ === 0) {
195
+ return {
196
+ status: 'incomplete',
197
+ segments: [],
198
+ continueParsing: () => {
199
+ return Promise.resolve((0, exports.expectSegment)(iterator, parserContext));
200
+ },
201
+ skipTo: null,
202
+ };
203
+ }
204
+ const offset = iterator.counter.getOffset();
205
+ const segmentId = iterator.getMatroskaSegmentId();
206
+ const length = iterator.getVint();
207
+ const bytesRemainingNow = iterator.byteLength() - iterator.counter.getOffset();
208
+ if (segmentId === '0x18538067' || segmentId === '0x1f43b675') {
209
+ const main = await (0, parse_children_1.expectChildren)({
210
+ iterator,
211
+ length,
212
+ initialChildren: [],
213
+ wrap: segmentId === '0x18538067'
214
+ ? (s) => ({
215
+ type: 'main-segment',
216
+ children: s,
217
+ })
218
+ : (s) => ({
219
+ type: 'cluster-segment',
220
+ children: s,
221
+ }),
222
+ parserContext,
223
+ });
224
+ if (main.status === 'incomplete') {
225
+ return {
226
+ status: 'incomplete',
227
+ segments: main.segments,
228
+ skipTo: null,
229
+ continueParsing: main.continueParsing,
230
+ };
231
+ }
232
+ return {
233
+ status: 'done',
234
+ segments: main.segments,
235
+ };
236
+ }
237
+ if (bytesRemainingNow < length) {
238
+ const bytesRead = iterator.counter.getOffset() - offset;
239
+ iterator.counter.decrement(bytesRead);
240
+ return {
241
+ status: 'incomplete',
242
+ segments: [],
243
+ continueParsing: () => {
244
+ return Promise.resolve((0, exports.expectSegment)(iterator, parserContext));
245
+ },
246
+ skipTo: null,
247
+ };
248
+ }
249
+ const segment = await parseSegment({
250
+ segmentId,
251
+ iterator,
252
+ length,
253
+ parserContext,
254
+ });
255
+ return {
256
+ status: 'done',
257
+ segments: [segment],
258
+ };
259
+ };
124
260
  exports.expectSegment = expectSegment;
@@ -0,0 +1,7 @@
1
+ import type { AnySegment } from '../../parse-result';
2
+ import type { MainSegment } from './segments/main';
3
+ import type { CodecSegment, TrackEntrySegment } from './segments/track-entry';
4
+ export declare const getMainSegment: (segments: AnySegment[]) => MainSegment | null;
5
+ export declare const getTrackNumber: (track: TrackEntrySegment) => number | null;
6
+ export declare const getTrackCodec: (track: TrackEntrySegment) => CodecSegment | null;
7
+ export declare const getTrackByNumber: (tracks: TrackEntrySegment[], id: number) => TrackEntrySegment | undefined;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTrackByNumber = exports.getTrackCodec = exports.getTrackNumber = exports.getMainSegment = void 0;
4
+ const getMainSegment = (segments) => {
5
+ return segments.find((s) => s.type === 'main-segment');
6
+ };
7
+ exports.getMainSegment = getMainSegment;
8
+ const getTrackNumber = (track) => {
9
+ var _a;
10
+ const child = track.children.find((b) => b.type === 'track-number-segment');
11
+ return (_a = child === null || child === void 0 ? void 0 : child.trackNumber) !== null && _a !== void 0 ? _a : null;
12
+ };
13
+ exports.getTrackNumber = getTrackNumber;
14
+ const getTrackCodec = (track) => {
15
+ const child = track.children.find((b) => b.type === 'codec-segment');
16
+ return child !== null && child !== void 0 ? child : null;
17
+ };
18
+ exports.getTrackCodec = getTrackCodec;
19
+ const getTrackByNumber = (tracks, id) => {
20
+ return tracks.find((track) => {
21
+ const trackNumber = (0, exports.getTrackNumber)(track);
22
+ return trackNumber === id;
23
+ });
24
+ };
25
+ exports.getTrackByNumber = getTrackByNumber;
@@ -4,16 +4,23 @@ export declare class OffsetCounter {
4
4
  increment(amount: number): void;
5
5
  getOffset(): number;
6
6
  getDiscardedOffset(): number;
7
+ setDiscardedOffset(offset: number): void;
7
8
  discardBytes(amount: number): void;
8
9
  decrement(amount: number): void;
9
10
  }
10
11
  export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes?: number) => {
12
+ startReadingBits: () => void;
13
+ stopReadingBits: () => void;
11
14
  skipTo: (offset: number) => void;
12
15
  addData: (newData: Uint8Array) => void;
13
16
  counter: OffsetCounter;
17
+ peekB: (length: number) => void;
18
+ peekD: (length: number) => void;
19
+ getBits: (bits: number) => number;
14
20
  byteLength: () => number;
15
21
  bytesRemaining: () => number;
16
22
  isIsoBaseMedia: () => boolean;
23
+ leb128: () => number;
17
24
  discardFirstBytes: () => void;
18
25
  isWebm: () => boolean;
19
26
  discard: (length: number) => void;
@@ -29,10 +36,17 @@ export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes?
29
36
  getUint16: () => number;
30
37
  getInt16: () => number;
31
38
  getUint32: () => number;
32
- getFixedPoint1616Number: () => number;
39
+ getFixedPointUnsigned1616Number: () => number;
40
+ getFixedPointSigned1616Number: () => number;
41
+ getFixedPointSigned230Number: () => number;
33
42
  getPascalString: () => number[];
34
43
  getDecimalBytes(length: number): number;
35
44
  getByteString(length: number): string;
36
45
  getFloat64: () => number;
46
+ getFloat32: () => number;
47
+ getUint32Le: () => number;
48
+ getInt32Le: () => number;
49
+ destroy: () => void;
50
+ isMp3: () => boolean;
37
51
  };
38
52
  export type BufferIterator = ReturnType<typeof getArrayBufferIterator>;
@@ -13,6 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
13
13
  var _OffsetCounter_offset, _OffsetCounter_discardedBytes;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.getArrayBufferIterator = exports.OffsetCounter = void 0;
16
+ const all_segments_1 = require("./boxes/webm/segments/all-segments");
16
17
  class OffsetCounter {
17
18
  constructor(initial) {
18
19
  _OffsetCounter_offset.set(this, void 0);
@@ -32,6 +33,9 @@ class OffsetCounter {
32
33
  getDiscardedOffset() {
33
34
  return __classPrivateFieldGet(this, _OffsetCounter_offset, "f") - __classPrivateFieldGet(this, _OffsetCounter_discardedBytes, "f");
34
35
  }
36
+ setDiscardedOffset(offset) {
37
+ __classPrivateFieldSet(this, _OffsetCounter_discardedBytes, offset, "f");
38
+ }
35
39
  discardBytes(amount) {
36
40
  __classPrivateFieldSet(this, _OffsetCounter_discardedBytes, __classPrivateFieldGet(this, _OffsetCounter_discardedBytes, "f") + amount, "f");
37
41
  }
@@ -46,6 +50,7 @@ exports.OffsetCounter = OffsetCounter;
46
50
  _OffsetCounter_offset = new WeakMap(), _OffsetCounter_discardedBytes = new WeakMap();
47
51
  const isoBaseMediaMp4Pattern = new TextEncoder().encode('ftyp');
48
52
  const webmPattern = new Uint8Array([0x1a, 0x45, 0xdf, 0xa3]);
53
+ const mpegPattern = new Uint8Array([0xff, 0xf3, 0xe4, 0x64]);
49
54
  const matchesPattern = (pattern) => {
50
55
  return (data) => {
51
56
  return pattern.every((value, index) => data[index] === value);
@@ -59,7 +64,7 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
59
64
  maxByteLength: maxBytes !== null && maxBytes !== void 0 ? maxBytes : 1000000000,
60
65
  });
61
66
  if (!buf.resize) {
62
- throw new Error('`ArrayBuffer.resize` is not supported in this Runtime. Use at least Node.js 20 or Bun.');
67
+ throw new Error('`ArrayBuffer.resize` is not supported in this Runtime. On the server: Use at least Node.js 20 or Bun. In the browser: Chrome 111, Edge 111, Safari 16.4, Firefox 128, Opera 111');
63
68
  }
64
69
  let data = new Uint8Array(buf);
65
70
  data.set(initialData);
@@ -90,6 +95,21 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
90
95
  counter.increment(4);
91
96
  return val;
92
97
  };
98
+ const getUint32Le = () => {
99
+ const val = view.getUint32(counter.getDiscardedOffset(), true);
100
+ counter.increment(4);
101
+ return val;
102
+ };
103
+ const getInt32Le = () => {
104
+ const val = view.getInt32(counter.getDiscardedOffset(), true);
105
+ counter.increment(4);
106
+ return val;
107
+ };
108
+ const getInt32 = () => {
109
+ const val = view.getInt32(counter.getDiscardedOffset());
110
+ counter.increment(4);
111
+ return val;
112
+ };
93
113
  const addData = (newData) => {
94
114
  const oldLength = buf.byteLength;
95
115
  const newLength = oldLength + newData.byteLength;
@@ -111,6 +131,9 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
111
131
  const isWebm = () => {
112
132
  return matchesPattern(webmPattern)(data.subarray(0, 4));
113
133
  };
134
+ const isMp3 = () => {
135
+ return matchesPattern(mpegPattern)(data.subarray(0, 4));
136
+ };
114
137
  const removeBytesRead = () => {
115
138
  const bytesToRemove = counter.getDiscardedOffset();
116
139
  // Only to this operation if it is really worth it 😇
@@ -124,18 +147,84 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
124
147
  view = new DataView(data.buffer);
125
148
  };
126
149
  const skipTo = (offset) => {
127
- buf.resize(offset);
128
- const currentOffset = counter.getOffset();
129
- counter.increment(offset - currentOffset);
130
- removeBytesRead();
150
+ const becomesSmaller = offset < counter.getOffset();
151
+ if (becomesSmaller) {
152
+ buf.resize(0);
153
+ counter.decrement(counter.getOffset() - offset);
154
+ counter.setDiscardedOffset(offset);
155
+ }
156
+ else {
157
+ buf.resize(offset);
158
+ const currentOffset = counter.getOffset();
159
+ counter.increment(offset - currentOffset);
160
+ removeBytesRead();
161
+ }
162
+ };
163
+ const peekB = (length) => {
164
+ // eslint-disable-next-line no-console
165
+ console.log([...getSlice(length)].map((b) => b.toString(16).padStart(2, '0')));
166
+ counter.decrement(length);
167
+ };
168
+ const peekD = (length) => {
169
+ // eslint-disable-next-line no-console
170
+ console.log([...getSlice(length)].map((b) => b));
171
+ counter.decrement(length);
172
+ };
173
+ const leb128 = () => {
174
+ let result = 0;
175
+ let shift = 0;
176
+ let byte;
177
+ do {
178
+ byte = getBits(8);
179
+ result |= (byte & 0x7f) << shift;
180
+ shift += 7;
181
+ } while (byte >= 0x80); // Continue if the high bit is set
182
+ return result;
183
+ };
184
+ let bitIndex = 0;
185
+ const stopReadingBits = () => {
186
+ bitIndex = 0;
187
+ };
188
+ let byteToShift = 0;
189
+ const startReadingBits = () => {
190
+ byteToShift = getUint8();
191
+ };
192
+ const getBits = (bits) => {
193
+ let result = 0;
194
+ let bitsCollected = 0;
195
+ while (bitsCollected < bits) {
196
+ if (bitIndex >= 8) {
197
+ bitIndex = 0;
198
+ byteToShift = getUint8();
199
+ }
200
+ const remainingBitsInByte = 8 - bitIndex;
201
+ const bitsToReadNow = Math.min(bits - bitsCollected, remainingBitsInByte);
202
+ const mask = (1 << bitsToReadNow) - 1;
203
+ const shift = remainingBitsInByte - bitsToReadNow;
204
+ result <<= bitsToReadNow;
205
+ result |= (byteToShift >> shift) & mask;
206
+ bitsCollected += bitsToReadNow;
207
+ bitIndex += bitsToReadNow;
208
+ }
209
+ return result;
210
+ };
211
+ const destroy = () => {
212
+ data = new Uint8Array(0);
213
+ buf.resize(0);
131
214
  };
132
215
  return {
216
+ startReadingBits,
217
+ stopReadingBits,
133
218
  skipTo,
134
219
  addData,
135
220
  counter,
221
+ peekB,
222
+ peekD,
223
+ getBits,
136
224
  byteLength,
137
225
  bytesRemaining,
138
226
  isIsoBaseMedia,
227
+ leb128,
139
228
  discardFirstBytes: removeBytesRead,
140
229
  isWebm,
141
230
  discard: (length) => {
@@ -157,62 +246,25 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
157
246
  .join('')}`;
158
247
  // Catch void block
159
248
  // https://www.matroska.org/technical/elements.html
160
- const knownIdsWithOneLength = [
161
- '0xec',
162
- '0xae',
163
- '0xd7',
164
- '0x9c',
165
- '0x86',
166
- '0x83',
167
- '0xe0',
168
- '0xb0',
169
- '0xba',
170
- '0x9a',
171
- '0xe1',
172
- '0xbf',
173
- '0x88',
174
- ];
175
- if (knownIdsWithOneLength.includes(firstOneString)) {
249
+ if (all_segments_1.knownIdsWithOneLength.includes(firstOneString)) {
176
250
  return firstOneString;
177
251
  }
178
252
  const firstTwo = getSlice(1);
179
- const knownIdsWithTwoLength = [
180
- '0x4dbb',
181
- '0x53ac',
182
- '0xec01',
183
- '0x73c5',
184
- '0x53c0',
185
- '0x4d80',
186
- '0x5741',
187
- '0x4489',
188
- '0x55ee',
189
- '0x55b0',
190
- '0x7ba9',
191
- '0x63a2',
192
- '0x73a4',
193
- ];
194
253
  const firstTwoString = `${firstOneString}${Array.from(new Uint8Array(firstTwo))
195
254
  .map((b) => {
196
255
  return b.toString(16).padStart(2, '0');
197
256
  })
198
257
  .join('')}`;
199
- if (knownIdsWithTwoLength.includes(firstTwoString)) {
258
+ if (all_segments_1.knownIdsWithTwoLength.includes(firstTwoString)) {
200
259
  return firstTwoString;
201
260
  }
202
- const knownIdsWithThreeLength = [
203
- '0x4d808c',
204
- '0x57418c',
205
- '0x448988',
206
- '0x22b59c',
207
- '0x23e383',
208
- ];
209
261
  const firstThree = getSlice(1);
210
262
  const firstThreeString = `${firstTwoString}${Array.from(new Uint8Array(firstThree))
211
263
  .map((b) => {
212
264
  return b.toString(16).padStart(2, '0');
213
265
  })
214
266
  .join('')}`;
215
- if (knownIdsWithThreeLength.includes(firstThreeString)) {
267
+ if (all_segments_1.knownIdsWithThreeLength.includes(firstThreeString)) {
216
268
  return firstThreeString;
217
269
  }
218
270
  const segmentId = getSlice(1);
@@ -271,10 +323,18 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
271
323
  getUint32,
272
324
  // https://developer.apple.com/documentation/quicktime-file-format/sound_sample_description_version_1
273
325
  // A 32-bit unsigned fixed-point number (16.16) that indicates the rate at which the sound samples were obtained.
274
- getFixedPoint1616Number: () => {
326
+ getFixedPointUnsigned1616Number: () => {
275
327
  const val = getUint32();
276
328
  return val / 2 ** 16;
277
329
  },
330
+ getFixedPointSigned1616Number: () => {
331
+ const val = getInt32();
332
+ return val / 2 ** 16;
333
+ },
334
+ getFixedPointSigned230Number: () => {
335
+ const val = getInt32();
336
+ return val / 2 ** 30;
337
+ },
278
338
  getPascalString: () => {
279
339
  const val = getSlice(32);
280
340
  return [...Array.from(new Uint8Array(val))];
@@ -293,6 +353,15 @@ const getArrayBufferIterator = (initialData, maxBytes) => {
293
353
  counter.increment(8);
294
354
  return val;
295
355
  },
356
+ getFloat32: () => {
357
+ const val = view.getFloat32(counter.getDiscardedOffset());
358
+ counter.increment(4);
359
+ return val;
360
+ },
361
+ getUint32Le,
362
+ getInt32Le,
363
+ destroy,
364
+ isMp3,
296
365
  };
297
366
  };
298
367
  exports.getArrayBufferIterator = getArrayBufferIterator;
@@ -0,0 +1 @@
1
+ export declare const combineUint8Arrays: (array1: Uint8Array | null, array2: Uint8Array) => Uint8Array;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.combineUint8Arrays = void 0;
4
+ const combineUint8Arrays = (array1, array2) => {
5
+ if (!array1) {
6
+ return array2;
7
+ }
8
+ const combined = new Uint8Array(array1.length + array2.length);
9
+ combined.set(array1);
10
+ combined.set(array2, array1.length);
11
+ return combined;
12
+ };
13
+ exports.combineUint8Arrays = combineUint8Arrays;
@@ -0,0 +1,2 @@
1
+ import type { ReaderInterface } from './reader';
2
+ export declare const fetchReader: ReaderInterface;