@remotion/media-parser 4.0.240 → 4.0.241

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 (96) hide show
  1. package/dist/boxes/avc/codec-private.d.ts +1 -1
  2. package/dist/boxes/transport-stream/adts-header.d.ts +1 -1
  3. package/dist/boxes/transport-stream/discard-rest-of-packet.d.ts +1 -1
  4. package/dist/boxes/webm/ebml.d.ts +1 -1
  5. package/dist/boxes/webm/make-header.d.ts +3 -3
  6. package/dist/buffer-iterator.d.ts +2 -6
  7. package/dist/buffer-iterator.js +4 -29
  8. package/dist/create/iso-base-media/codec-specific/avc1.d.ts +1 -1
  9. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +1 -1
  10. package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +1 -1
  11. package/dist/create/iso-base-media/create-colr.d.ts +1 -1
  12. package/dist/create/iso-base-media/create-ftyp.d.ts +2 -2
  13. package/dist/create/iso-base-media/create-ilst.d.ts +1 -1
  14. package/dist/create/iso-base-media/create-mdia.d.ts +1 -1
  15. package/dist/create/iso-base-media/create-moov.d.ts +1 -1
  16. package/dist/create/iso-base-media/create-mvhd.d.ts +1 -1
  17. package/dist/create/iso-base-media/create-trak.d.ts +1 -1
  18. package/dist/create/iso-base-media/create-udta.d.ts +1 -1
  19. package/dist/create/iso-base-media/create-url.d.ts +1 -1
  20. package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -1
  21. package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -1
  22. package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +1 -1
  23. package/dist/create/iso-base-media/mp4-header.d.ts +1 -1
  24. package/dist/create/iso-base-media/primitives.d.ts +13 -13
  25. package/dist/create/iso-base-media/serialize-track.d.ts +1 -1
  26. package/dist/create/iso-base-media/trak/create-tkhd.d.ts +2 -2
  27. package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +1 -1
  28. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -1
  29. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -1
  30. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +1 -1
  31. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -1
  32. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +1 -1
  33. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +1 -1
  34. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +1 -1
  35. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +1 -1
  36. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +1 -1
  37. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +1 -1
  38. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -1
  39. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -1
  40. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -1
  41. package/dist/create/iso-base-media/udta/create-meta.d.ts +1 -1
  42. package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -1
  43. package/dist/create/matroska/cluster-segment.d.ts +1 -1
  44. package/dist/emit-available-info.d.ts +6 -3
  45. package/dist/emit-available-info.js +107 -69
  46. package/dist/errors/detect-file-type.d.ts +1 -0
  47. package/dist/errors/detect-file-type.js +88 -0
  48. package/dist/errors/file-types.d.ts +1 -0
  49. package/dist/errors/file-types.js +88 -0
  50. package/dist/errors.d.ts +68 -0
  51. package/dist/errors.js +71 -0
  52. package/dist/esm/from-fetch.mjs +1 -0
  53. package/dist/esm/from-node.mjs +1 -0
  54. package/dist/esm/from-web-file.mjs +2 -1
  55. package/dist/esm/index.mjs +633 -109
  56. package/dist/file-types/bmp.d.ts +6 -0
  57. package/dist/file-types/bmp.js +23 -0
  58. package/dist/file-types/detect-file-type.d.ts +42 -0
  59. package/dist/file-types/detect-file-type.js +59 -0
  60. package/dist/file-types/get-jpeg-dimensions.d.ts +4 -0
  61. package/dist/file-types/get-jpeg-dimensions.js +32 -0
  62. package/dist/file-types/index.d.ts +2 -0
  63. package/dist/file-types/index.js +57 -0
  64. package/dist/file-types/jpeg.d.ts +12 -0
  65. package/dist/file-types/jpeg.js +44 -0
  66. package/dist/file-types/pdf.d.ts +4 -0
  67. package/dist/file-types/pdf.js +12 -0
  68. package/dist/file-types/png.d.ts +10 -0
  69. package/dist/file-types/png.js +32 -0
  70. package/dist/file-types/webp.d.ts +6 -0
  71. package/dist/file-types/webp.js +69 -0
  72. package/dist/file-types.d.ts +1 -0
  73. package/dist/file-types.js +88 -0
  74. package/dist/get-audio-codec.d.ts +1 -1
  75. package/dist/get-fields-from-callbacks.d.ts +5 -0
  76. package/dist/get-fields-from-callbacks.js +27 -0
  77. package/dist/has-all-info.d.ts +5 -1
  78. package/dist/has-all-info.js +10 -3
  79. package/dist/index.d.ts +2 -1
  80. package/dist/index.js +7 -1
  81. package/dist/options.d.ts +36 -53
  82. package/dist/parse-media.js +53 -14
  83. package/dist/parse-video.d.ts +4 -1
  84. package/dist/parse-video.js +71 -8
  85. package/dist/probing/detect-file-type.d.ts +1 -0
  86. package/dist/probing/detect-file-type.js +88 -0
  87. package/dist/probing/get-jpeg-dimensions.d.ts +4 -0
  88. package/dist/probing/get-jpeg-dimensions.js +32 -0
  89. package/dist/readers/from-fetch.js +1 -0
  90. package/dist/readers/from-node.js +1 -0
  91. package/dist/readers/from-web-file.js +1 -0
  92. package/dist/readers/reader.d.ts +1 -0
  93. package/dist/state/can-skip-tracks.js +1 -0
  94. package/dist/version.d.ts +1 -1
  95. package/dist/version.js +1 -1
  96. package/package.json +3 -3
@@ -83,6 +83,7 @@ var fetchReader = {
83
83
  }
84
84
  },
85
85
  contentLength,
86
+ contentType: res.headers.get("content-type"),
86
87
  name: name ?? fallbackName,
87
88
  supportsContentRange
88
89
  };
@@ -1366,7 +1367,7 @@ var createIsoBaseMediaFtyp = ({
1366
1367
  };
1367
1368
 
1368
1369
  // src/version.ts
1369
- var VERSION = "4.0.240";
1370
+ var VERSION = "4.0.241";
1370
1371
 
1371
1372
  // src/create/iso-base-media/create-ilst.ts
1372
1373
  var createIlst = (items) => {
@@ -3529,6 +3530,120 @@ var createWav = async ({
3529
3530
  };
3530
3531
  };
3531
3532
 
3533
+ // src/errors.ts
3534
+ class IsAGifError extends Error {
3535
+ mimeType;
3536
+ sizeInBytes;
3537
+ fileName;
3538
+ constructor({
3539
+ message,
3540
+ mimeType,
3541
+ sizeInBytes,
3542
+ fileName
3543
+ }) {
3544
+ super(message);
3545
+ this.fileName = "IsAGifError";
3546
+ this.mimeType = mimeType;
3547
+ this.sizeInBytes = sizeInBytes;
3548
+ this.fileName = fileName;
3549
+ if (Error.captureStackTrace) {
3550
+ Error.captureStackTrace(this, IsAGifError);
3551
+ }
3552
+ }
3553
+ }
3554
+
3555
+ class IsAnImageError extends Error {
3556
+ imageType;
3557
+ dimensions;
3558
+ mimeType;
3559
+ sizeInBytes;
3560
+ fileName;
3561
+ constructor({
3562
+ dimensions,
3563
+ imageType,
3564
+ message,
3565
+ mimeType,
3566
+ sizeInBytes,
3567
+ fileName
3568
+ }) {
3569
+ super(message);
3570
+ this.name = "IsAnImageError";
3571
+ this.imageType = imageType;
3572
+ this.dimensions = dimensions;
3573
+ this.mimeType = mimeType;
3574
+ this.sizeInBytes = sizeInBytes;
3575
+ this.fileName = fileName;
3576
+ if (Error.captureStackTrace) {
3577
+ Error.captureStackTrace(this, IsAnImageError);
3578
+ }
3579
+ }
3580
+ }
3581
+
3582
+ class IsAPdfError extends Error {
3583
+ mimeType;
3584
+ sizeInBytes;
3585
+ fileName;
3586
+ constructor({
3587
+ message,
3588
+ mimeType,
3589
+ sizeInBytes,
3590
+ fileName
3591
+ }) {
3592
+ super(message);
3593
+ this.name = "IsAPdfError";
3594
+ this.mimeType = mimeType;
3595
+ this.sizeInBytes = sizeInBytes;
3596
+ this.fileName = fileName;
3597
+ if (Error.captureStackTrace) {
3598
+ Error.captureStackTrace(this, IsAPdfError);
3599
+ }
3600
+ }
3601
+ }
3602
+
3603
+ class IsAnUnsupportedFileTypeError extends Error {
3604
+ mimeType;
3605
+ sizeInBytes;
3606
+ fileName;
3607
+ constructor({
3608
+ message,
3609
+ mimeType,
3610
+ sizeInBytes,
3611
+ fileName
3612
+ }) {
3613
+ super(message);
3614
+ this.name = "IsAnUnsupportedFileTypeError";
3615
+ this.mimeType = mimeType;
3616
+ this.sizeInBytes = sizeInBytes;
3617
+ this.fileName = fileName;
3618
+ if (Error.captureStackTrace) {
3619
+ Error.captureStackTrace(this, IsAnUnsupportedFileTypeError);
3620
+ }
3621
+ }
3622
+ }
3623
+
3624
+ class IsAnUnsupportedAudioTypeError extends Error {
3625
+ mimeType;
3626
+ sizeInBytes;
3627
+ fileName;
3628
+ audioType;
3629
+ constructor({
3630
+ message,
3631
+ mimeType,
3632
+ sizeInBytes,
3633
+ fileName,
3634
+ audioType
3635
+ }) {
3636
+ super(message);
3637
+ this.name = "IsAnUnsupportedAudioTypeError";
3638
+ this.mimeType = mimeType;
3639
+ this.sizeInBytes = sizeInBytes;
3640
+ this.fileName = fileName;
3641
+ this.audioType = audioType;
3642
+ if (Error.captureStackTrace) {
3643
+ Error.captureStackTrace(this, IsAnUnsupportedAudioTypeError);
3644
+ }
3645
+ }
3646
+ }
3532
3647
  // src/boxes/iso-base-media/traversal.ts
3533
3648
  var getMoovBox = (segments) => {
3534
3649
  const moovBox = segments.find((s) => s.type === "moov-box");
@@ -4358,6 +4473,234 @@ var getPrimariesFromIndex = (index) => {
4358
4473
  return index === 1 ? "bt709" : index === 5 ? "bt470bg" : index === 6 ? "smpte170m" : index === 9 ? "bt2020" : null;
4359
4474
  };
4360
4475
 
4476
+ // src/file-types/detect-file-type.ts
4477
+ var matchesPattern = (pattern) => {
4478
+ return (data) => {
4479
+ return pattern.every((value, index) => data[index] === value);
4480
+ };
4481
+ };
4482
+ var isRiffAvi2 = (data) => {
4483
+ const riffPattern = new Uint8Array([82, 73, 70, 70]);
4484
+ if (!matchesPattern(riffPattern)(data.subarray(0, 4))) {
4485
+ return false;
4486
+ }
4487
+ const fileType = data.subarray(8, 12);
4488
+ return new TextDecoder().decode(fileType) === "AVI ";
4489
+ };
4490
+ var isRiffWave = (data) => {
4491
+ const riffPattern = new Uint8Array([82, 73, 70, 70]);
4492
+ if (!matchesPattern(riffPattern)(data.subarray(0, 4))) {
4493
+ return false;
4494
+ }
4495
+ const fileType = data.subarray(8, 12);
4496
+ return new TextDecoder().decode(fileType) === "WAVE";
4497
+ };
4498
+ var isWebm = (data) => {
4499
+ return matchesPattern(webmPattern)(data.subarray(0, 4));
4500
+ };
4501
+ var isIsoBaseMedia = (data) => {
4502
+ const isoBaseMediaMp4Pattern = new TextEncoder().encode("ftyp");
4503
+ return matchesPattern(isoBaseMediaMp4Pattern)(data.subarray(4, 8));
4504
+ };
4505
+ var isTransportStream = (data) => {
4506
+ return data[0] === 71 && data[188] === 71;
4507
+ };
4508
+ var isMp3 = (data) => {
4509
+ const mpegPattern = new Uint8Array([255, 243, 228, 100]);
4510
+ const id3Pattern = new Uint8Array([73, 68, 51, 3]);
4511
+ const subarray = data.subarray(0, 4);
4512
+ return matchesPattern(mpegPattern)(subarray) || matchesPattern(id3Pattern)(subarray);
4513
+ };
4514
+ var isGif = (data) => {
4515
+ const gifPattern = new Uint8Array([71, 73, 70, 56]);
4516
+ return matchesPattern(gifPattern)(data.subarray(0, 4));
4517
+ };
4518
+ var isAac = (data) => {
4519
+ const aacPattern = new Uint8Array([255, 241]);
4520
+ return matchesPattern(aacPattern)(data.subarray(0, 2));
4521
+ };
4522
+
4523
+ // src/file-types/bmp.ts
4524
+ function getBmpDimensions(bmpData) {
4525
+ if (bmpData.length < 26) {
4526
+ return null;
4527
+ }
4528
+ const view = new DataView(bmpData.buffer, bmpData.byteOffset);
4529
+ return {
4530
+ width: view.getUint32(18, true),
4531
+ height: Math.abs(view.getInt32(22, true))
4532
+ };
4533
+ }
4534
+ var isBmp = (data) => {
4535
+ const bmpPattern = new Uint8Array([66, 77]);
4536
+ if (matchesPattern(bmpPattern)(data.subarray(0, 2))) {
4537
+ const bmp = getBmpDimensions(data);
4538
+ return { dimensions: bmp, type: "bmp" };
4539
+ }
4540
+ return null;
4541
+ };
4542
+
4543
+ // src/file-types/jpeg.ts
4544
+ function getJpegDimensions(data) {
4545
+ let offset = 0;
4546
+ function readUint16BE(o) {
4547
+ return data[o] << 8 | data[o + 1];
4548
+ }
4549
+ if (readUint16BE(offset) !== 65496) {
4550
+ return null;
4551
+ }
4552
+ offset += 2;
4553
+ while (offset < data.length) {
4554
+ if (data[offset] === 255) {
4555
+ const marker = data[offset + 1];
4556
+ if (marker === 192 || marker === 194) {
4557
+ const height = readUint16BE(offset + 5);
4558
+ const width = readUint16BE(offset + 7);
4559
+ return { width, height };
4560
+ }
4561
+ const length = readUint16BE(offset + 2);
4562
+ offset += length + 2;
4563
+ } else {
4564
+ offset++;
4565
+ }
4566
+ }
4567
+ return null;
4568
+ }
4569
+ var isJpeg = (data) => {
4570
+ const jpegPattern = new Uint8Array([255, 216]);
4571
+ const jpeg = matchesPattern(jpegPattern)(data.subarray(0, 2));
4572
+ if (!jpeg) {
4573
+ return null;
4574
+ }
4575
+ const dim = getJpegDimensions(data);
4576
+ return { dimensions: dim, type: "jpeg" };
4577
+ };
4578
+
4579
+ // src/file-types/pdf.ts
4580
+ var isPdf = (data) => {
4581
+ if (data.length < 4) {
4582
+ return null;
4583
+ }
4584
+ const pdfPattern = new Uint8Array([37, 80, 68, 70]);
4585
+ return matchesPattern(pdfPattern)(data.subarray(0, 4)) ? { type: "pdf" } : null;
4586
+ };
4587
+
4588
+ // src/file-types/png.ts
4589
+ function getPngDimensions(pngData) {
4590
+ if (pngData.length < 24) {
4591
+ return null;
4592
+ }
4593
+ const view = new DataView(pngData.buffer, pngData.byteOffset);
4594
+ const pngSignature = [137, 80, 78, 71, 13, 10, 26, 10];
4595
+ for (let i = 0;i < 8; i++) {
4596
+ if (pngData[i] !== pngSignature[i]) {
4597
+ return null;
4598
+ }
4599
+ }
4600
+ return {
4601
+ width: view.getUint32(16, false),
4602
+ height: view.getUint32(20, false)
4603
+ };
4604
+ }
4605
+ var isPng = (data) => {
4606
+ const pngPattern = new Uint8Array([137, 80, 78, 71]);
4607
+ if (matchesPattern(pngPattern)(data.subarray(0, 4))) {
4608
+ const png = getPngDimensions(data);
4609
+ return { dimensions: png, type: "png" };
4610
+ }
4611
+ return null;
4612
+ };
4613
+
4614
+ // src/file-types/webp.ts
4615
+ function getWebPDimensions(bytes) {
4616
+ if (bytes.length < 30) {
4617
+ return null;
4618
+ }
4619
+ if (bytes[0] !== 82 || bytes[1] !== 73 || bytes[2] !== 70 || bytes[3] !== 70 || bytes[8] !== 87 || bytes[9] !== 69 || bytes[10] !== 66 || bytes[11] !== 80) {
4620
+ return null;
4621
+ }
4622
+ if (bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56) {
4623
+ if (bytes[15] === 32) {
4624
+ return {
4625
+ width: bytes[26] | bytes[27] << 8 & 16383,
4626
+ height: bytes[28] | bytes[29] << 8 & 16383
4627
+ };
4628
+ }
4629
+ }
4630
+ if (bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56 && bytes[15] === 76) {
4631
+ return {
4632
+ width: 1 + (bytes[21] | (bytes[22] & 63) << 8),
4633
+ height: 1 + ((bytes[22] & 192) >> 6 | bytes[23] << 2 | (bytes[24] & 15) << 10)
4634
+ };
4635
+ }
4636
+ if (bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56 && bytes[15] === 88) {
4637
+ return {
4638
+ width: 1 + (bytes[24] | bytes[25] << 8 | bytes[26] << 16),
4639
+ height: 1 + (bytes[27] | bytes[28] << 8 | bytes[29] << 16)
4640
+ };
4641
+ }
4642
+ return null;
4643
+ }
4644
+ var isWebp = (data) => {
4645
+ const webpPattern = new Uint8Array([82, 73, 70, 70]);
4646
+ if (matchesPattern(webpPattern)(data.subarray(0, 4))) {
4647
+ return {
4648
+ type: "webp",
4649
+ dimensions: getWebPDimensions(data)
4650
+ };
4651
+ }
4652
+ return null;
4653
+ };
4654
+
4655
+ // src/file-types/index.ts
4656
+ var detectFileType = (data) => {
4657
+ if (isRiffWave(data)) {
4658
+ return { type: "wav" };
4659
+ }
4660
+ if (isRiffAvi2(data)) {
4661
+ return { type: "riff" };
4662
+ }
4663
+ if (isAac(data)) {
4664
+ return { type: "aac" };
4665
+ }
4666
+ const webp = isWebp(data);
4667
+ if (webp) {
4668
+ return webp;
4669
+ }
4670
+ if (isWebm(data)) {
4671
+ return { type: "webm" };
4672
+ }
4673
+ if (isIsoBaseMedia(data)) {
4674
+ return { type: "iso-base-media" };
4675
+ }
4676
+ if (isTransportStream(data)) {
4677
+ return { type: "transport-stream" };
4678
+ }
4679
+ if (isMp3(data)) {
4680
+ return { type: "mp3" };
4681
+ }
4682
+ if (isGif(data)) {
4683
+ return { type: "gif" };
4684
+ }
4685
+ const png = isPng(data);
4686
+ if (png) {
4687
+ return png;
4688
+ }
4689
+ const pdf = isPdf(data);
4690
+ if (pdf) {
4691
+ return pdf;
4692
+ }
4693
+ const bmp = isBmp(data);
4694
+ if (bmp) {
4695
+ return bmp;
4696
+ }
4697
+ const jpeg = isJpeg(data);
4698
+ if (jpeg) {
4699
+ return jpeg;
4700
+ }
4701
+ return { type: "unknown" };
4702
+ };
4703
+
4361
4704
  // src/buffer-iterator.ts
4362
4705
  class OffsetCounter {
4363
4706
  #offset;
@@ -4394,14 +4737,6 @@ class OffsetCounter {
4394
4737
  this.#offset -= amount;
4395
4738
  }
4396
4739
  }
4397
- var isoBaseMediaMp4Pattern = new TextEncoder().encode("ftyp");
4398
- var mpegPattern = new Uint8Array([255, 243, 228, 100]);
4399
- var riffPattern = new Uint8Array([82, 73, 70, 70]);
4400
- var matchesPattern = (pattern) => {
4401
- return (data) => {
4402
- return pattern.every((value, index) => data[index] === value);
4403
- };
4404
- };
4405
4740
  var makeOffsetCounter = () => {
4406
4741
  return new OffsetCounter(0);
4407
4742
  };
@@ -4542,21 +4877,6 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
4542
4877
  const bytesRemaining = () => {
4543
4878
  return data.byteLength - counter.getDiscardedOffset();
4544
4879
  };
4545
- const isIsoBaseMedia = () => {
4546
- return matchesPattern(isoBaseMediaMp4Pattern)(data.subarray(4, 8));
4547
- };
4548
- const isRiff = () => {
4549
- return matchesPattern(riffPattern)(data.subarray(0, 4));
4550
- };
4551
- const isWebm = () => {
4552
- return matchesPattern(webmPattern)(data.subarray(0, 4));
4553
- };
4554
- const isMp3 = () => {
4555
- return matchesPattern(mpegPattern)(data.subarray(0, 4));
4556
- };
4557
- const isTransportStream = () => {
4558
- return data[0] === 71;
4559
- };
4560
4880
  const removeBytesRead = () => {
4561
4881
  if (!discardAllowed) {
4562
4882
  return;
@@ -4671,10 +4991,8 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
4671
4991
  getBits,
4672
4992
  byteLength,
4673
4993
  bytesRemaining,
4674
- isIsoBaseMedia,
4675
4994
  leb128,
4676
4995
  removeBytesRead,
4677
- isWebm,
4678
4996
  discard,
4679
4997
  getEightByteNumber,
4680
4998
  getFourByteNumber,
@@ -4683,7 +5001,9 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
4683
5001
  const atom = getSlice(4);
4684
5002
  return new TextDecoder().decode(atom);
4685
5003
  },
4686
- isRiff,
5004
+ detectFileType: () => {
5005
+ return detectFileType(data);
5006
+ },
4687
5007
  getPaddedFourByteNumber,
4688
5008
  getMatroskaSegmentId: () => {
4689
5009
  if (bytesRemaining() === 0) {
@@ -4836,11 +5156,9 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
4836
5156
  getInt32Le,
4837
5157
  getInt32,
4838
5158
  destroy,
4839
- isMp3,
4840
5159
  disallowDiscard,
4841
5160
  allowDiscard,
4842
5161
  startBox,
4843
- isTransportStream,
4844
5162
  readExpGolomb
4845
5163
  };
4846
5164
  };
@@ -6205,145 +6523,205 @@ var getLocation = (structure) => {
6205
6523
  var emitAvailableInfo = ({
6206
6524
  hasInfo,
6207
6525
  parseResult,
6208
- moreFields,
6526
+ callbacks,
6209
6527
  state,
6210
6528
  returnValue,
6211
6529
  contentLength,
6212
- name
6530
+ name,
6531
+ mimeType,
6532
+ fieldsInReturnValue,
6533
+ emittedFields
6213
6534
  }) => {
6214
6535
  const keys = Object.keys(hasInfo);
6215
6536
  for (const key of keys) {
6216
6537
  if (key === "structure") {
6217
- if (parseResult && hasInfo.structure && returnValue.structure === undefined) {
6218
- moreFields.onStructure?.(parseResult.segments);
6219
- returnValue.structure = parseResult.segments;
6538
+ if (parseResult && hasInfo.structure && !emittedFields.structure) {
6539
+ callbacks.onStructure?.(parseResult.segments);
6540
+ if (fieldsInReturnValue.structure) {
6541
+ returnValue.structure = parseResult.segments;
6542
+ }
6543
+ emittedFields.structure = true;
6220
6544
  }
6221
6545
  continue;
6222
6546
  }
6223
6547
  if (key === "durationInSeconds") {
6224
- if (hasInfo.durationInSeconds && returnValue.durationInSeconds === undefined && parseResult) {
6548
+ if (hasInfo.durationInSeconds && !emittedFields.durationInSeconds && parseResult) {
6225
6549
  const durationInSeconds = getDuration(parseResult.segments, state);
6226
- moreFields.onDurationInSeconds?.(durationInSeconds);
6227
- returnValue.durationInSeconds = durationInSeconds;
6550
+ callbacks.onDurationInSeconds?.(durationInSeconds);
6551
+ if (fieldsInReturnValue.durationInSeconds) {
6552
+ returnValue.durationInSeconds = durationInSeconds;
6553
+ }
6554
+ emittedFields.durationInSeconds = true;
6228
6555
  }
6229
6556
  continue;
6230
6557
  }
6231
6558
  if (key === "dimensions") {
6232
- if (hasInfo.dimensions && returnValue.dimensions === undefined && parseResult) {
6559
+ if (hasInfo.dimensions && !emittedFields.dimensions && parseResult) {
6233
6560
  const dimensionsQueried = getDimensions(parseResult.segments, state);
6234
6561
  const dimensions = {
6235
6562
  height: dimensionsQueried.height,
6236
6563
  width: dimensionsQueried.width
6237
6564
  };
6238
- moreFields.onDimensions?.(dimensions);
6239
- returnValue.dimensions = dimensions;
6565
+ callbacks.onDimensions?.(dimensions);
6566
+ if (fieldsInReturnValue.dimensions) {
6567
+ returnValue.dimensions = dimensions;
6568
+ }
6569
+ emittedFields.dimensions = true;
6240
6570
  }
6241
6571
  continue;
6242
6572
  }
6243
6573
  if (key === "unrotatedDimensions") {
6244
- if (returnValue.unrotatedDimensions === undefined && hasInfo.unrotatedDimensions && parseResult) {
6574
+ if (hasInfo.unrotatedDimensions && !emittedFields.unrotatedDimensions && parseResult) {
6245
6575
  const dimensionsQueried = getDimensions(parseResult.segments, state);
6246
6576
  const unrotatedDimensions = {
6247
6577
  height: dimensionsQueried.unrotatedHeight,
6248
6578
  width: dimensionsQueried.unrotatedWidth
6249
6579
  };
6250
- moreFields.onUnrotatedDimensions?.(unrotatedDimensions);
6251
- returnValue.unrotatedDimensions = unrotatedDimensions;
6580
+ callbacks.onUnrotatedDimensions?.(unrotatedDimensions);
6581
+ if (fieldsInReturnValue.unrotatedDimensions) {
6582
+ returnValue.unrotatedDimensions = unrotatedDimensions;
6583
+ }
6584
+ emittedFields.unrotatedDimensions = true;
6252
6585
  }
6253
6586
  continue;
6254
6587
  }
6255
6588
  if (key === "rotation") {
6256
- if (returnValue.rotation === undefined && hasInfo.rotation && parseResult) {
6589
+ if (hasInfo.rotation && !emittedFields.rotation && parseResult) {
6257
6590
  const dimensionsQueried = getDimensions(parseResult.segments, state);
6258
6591
  const { rotation } = dimensionsQueried;
6259
- moreFields.onRotation?.(rotation);
6260
- returnValue.rotation = rotation;
6592
+ callbacks.onRotation?.(rotation);
6593
+ if (fieldsInReturnValue.rotation) {
6594
+ returnValue.rotation = rotation;
6595
+ }
6596
+ emittedFields.rotation = true;
6261
6597
  }
6262
6598
  continue;
6263
6599
  }
6264
6600
  if (key === "fps") {
6265
- if (returnValue.fps === undefined && hasInfo.fps && parseResult) {
6601
+ if (!emittedFields.fps && hasInfo.fps && parseResult) {
6266
6602
  const fps = getFps(parseResult.segments);
6267
- moreFields.onFps?.(fps);
6268
- returnValue.fps = fps;
6603
+ callbacks.onFps?.(fps);
6604
+ if (fieldsInReturnValue.fps) {
6605
+ returnValue.fps = fps;
6606
+ }
6607
+ emittedFields.fps = true;
6269
6608
  }
6270
6609
  continue;
6271
6610
  }
6272
6611
  if (key === "videoCodec") {
6273
- if (returnValue.videoCodec === undefined && hasInfo.videoCodec && parseResult) {
6612
+ if (!emittedFields.videoCodec && hasInfo.videoCodec && parseResult) {
6274
6613
  const videoCodec = getVideoCodec(parseResult.segments, state);
6275
- moreFields.onVideoCodec?.(videoCodec);
6276
- returnValue.videoCodec = videoCodec;
6614
+ callbacks.onVideoCodec?.(videoCodec);
6615
+ if (fieldsInReturnValue.videoCodec) {
6616
+ returnValue.videoCodec = videoCodec;
6617
+ }
6618
+ emittedFields.videoCodec = true;
6277
6619
  }
6278
6620
  continue;
6279
6621
  }
6280
6622
  if (key === "audioCodec") {
6281
- if (returnValue.audioCodec === undefined && hasInfo.audioCodec && parseResult) {
6623
+ if (!emittedFields.audioCodec && hasInfo.audioCodec && parseResult) {
6282
6624
  const audioCodec = getAudioCodec(parseResult.segments, state);
6283
- moreFields.onAudioCodec?.(audioCodec);
6284
- returnValue.audioCodec = audioCodec;
6625
+ callbacks.onAudioCodec?.(audioCodec);
6626
+ if (fieldsInReturnValue.audioCodec) {
6627
+ returnValue.audioCodec = audioCodec;
6628
+ }
6629
+ emittedFields.audioCodec = true;
6285
6630
  }
6286
6631
  continue;
6287
6632
  }
6288
6633
  if (key === "tracks") {
6289
- if (hasInfo.tracks && returnValue.videoTracks === undefined && returnValue.audioTracks === undefined && parseResult) {
6634
+ if (!emittedFields.tracks && hasInfo.tracks && parseResult) {
6290
6635
  const { videoTracks, audioTracks } = getTracks(parseResult.segments, state);
6291
- moreFields.onTracks?.({ videoTracks, audioTracks });
6292
- returnValue.videoTracks = videoTracks;
6293
- returnValue.audioTracks = audioTracks;
6636
+ callbacks.onTracks?.({ videoTracks, audioTracks });
6637
+ if (fieldsInReturnValue.tracks) {
6638
+ returnValue.tracks = { videoTracks, audioTracks };
6639
+ }
6640
+ emittedFields.tracks = true;
6294
6641
  }
6295
6642
  continue;
6296
6643
  }
6297
6644
  if (key === "internalStats") {
6298
6645
  if (hasInfo.internalStats) {
6299
6646
  const internalStats = state.getInternalStats();
6300
- returnValue.internalStats = internalStats;
6647
+ if (fieldsInReturnValue.internalStats) {
6648
+ returnValue.internalStats = internalStats;
6649
+ }
6650
+ emittedFields.internalStats = true;
6301
6651
  }
6302
6652
  continue;
6303
6653
  }
6304
6654
  if (key === "size") {
6305
- if (returnValue.size === undefined && hasInfo.size) {
6306
- moreFields.onSize?.(contentLength);
6307
- returnValue.size = contentLength;
6655
+ if (!emittedFields.size && hasInfo.size) {
6656
+ callbacks.onSize?.(contentLength);
6657
+ if (fieldsInReturnValue.size) {
6658
+ returnValue.size = contentLength;
6659
+ }
6660
+ emittedFields.size = true;
6661
+ }
6662
+ continue;
6663
+ }
6664
+ if (key === "mimeType") {
6665
+ if (!emittedFields.mimeType && hasInfo.mimeType) {
6666
+ callbacks.onMimeType?.(mimeType);
6667
+ if (fieldsInReturnValue.mimeType) {
6668
+ returnValue.mimeType = mimeType;
6669
+ }
6670
+ emittedFields.mimeType = true;
6308
6671
  }
6309
6672
  continue;
6310
6673
  }
6311
6674
  if (key === "name") {
6312
- if (returnValue.name === undefined && hasInfo.name) {
6313
- moreFields.onName?.(name);
6314
- returnValue.name = name;
6675
+ if (!emittedFields.name && hasInfo.name) {
6676
+ callbacks.onName?.(name);
6677
+ if (fieldsInReturnValue.name) {
6678
+ returnValue.name = name;
6679
+ }
6680
+ emittedFields.name = true;
6315
6681
  }
6316
6682
  continue;
6317
6683
  }
6318
6684
  if (key === "isHdr") {
6319
- if (returnValue.isHdr === undefined && hasInfo.isHdr && parseResult) {
6685
+ if (!returnValue.isHdr && hasInfo.isHdr && parseResult) {
6320
6686
  const isHdr = getIsHdr(parseResult.segments, state);
6321
- moreFields.onIsHdr?.(isHdr);
6322
- returnValue.isHdr = isHdr;
6687
+ callbacks.onIsHdr?.(isHdr);
6688
+ if (fieldsInReturnValue.isHdr) {
6689
+ returnValue.isHdr = isHdr;
6690
+ }
6691
+ emittedFields.isHdr = true;
6323
6692
  }
6324
6693
  continue;
6325
6694
  }
6326
6695
  if (key === "container") {
6327
- if (returnValue.container === undefined && hasInfo.container && parseResult) {
6696
+ if (!returnValue.container && hasInfo.container && parseResult) {
6328
6697
  const container = getContainer(parseResult.segments);
6329
- moreFields.onContainer?.(container);
6330
- returnValue.container = container;
6698
+ callbacks.onContainer?.(container);
6699
+ if (fieldsInReturnValue.container) {
6700
+ returnValue.container = container;
6701
+ }
6702
+ emittedFields.container = true;
6331
6703
  }
6332
6704
  continue;
6333
6705
  }
6334
6706
  if (key === "metadata") {
6335
- if (returnValue.metadata === undefined && hasInfo.metadata && parseResult) {
6707
+ if (!emittedFields.metadata && hasInfo.metadata && parseResult) {
6336
6708
  const metadata = getMetadata(parseResult.segments);
6337
- moreFields.onMetadata?.(metadata);
6338
- returnValue.metadata = metadata;
6709
+ callbacks.onMetadata?.(metadata);
6710
+ if (fieldsInReturnValue.metadata) {
6711
+ returnValue.metadata = metadata;
6712
+ }
6713
+ emittedFields.metadata = true;
6339
6714
  }
6340
6715
  continue;
6341
6716
  }
6342
6717
  if (key === "location") {
6343
- if (returnValue.location === undefined && hasInfo.location && parseResult) {
6718
+ if (!emittedFields.location && hasInfo.location && parseResult) {
6344
6719
  const location = getLocation(parseResult.segments);
6345
- moreFields.onLocation?.(location);
6346
- returnValue.location = location;
6720
+ callbacks.onLocation?.(location);
6721
+ if (fieldsInReturnValue.location) {
6722
+ returnValue.location = location;
6723
+ }
6724
+ emittedFields.location = true;
6347
6725
  }
6348
6726
  continue;
6349
6727
  }
@@ -6351,9 +6729,41 @@ var emitAvailableInfo = ({
6351
6729
  }
6352
6730
  };
6353
6731
 
6732
+ // src/get-fields-from-callbacks.ts
6733
+ var getFieldsFromCallback = ({
6734
+ fields,
6735
+ callbacks
6736
+ }) => {
6737
+ const newFields = {
6738
+ audioCodec: Boolean(callbacks.onAudioCodec),
6739
+ container: Boolean(callbacks.onContainer),
6740
+ dimensions: Boolean(callbacks.onDimensions),
6741
+ durationInSeconds: Boolean(callbacks.onDurationInSeconds),
6742
+ fps: Boolean(callbacks.onFps),
6743
+ internalStats: Boolean(callbacks.onInternalStats),
6744
+ isHdr: Boolean(callbacks.onIsHdr),
6745
+ location: Boolean(callbacks.onLocation),
6746
+ metadata: Boolean(callbacks.onMetadata),
6747
+ mimeType: Boolean(callbacks.onMimeType),
6748
+ name: Boolean(callbacks.onName),
6749
+ rotation: Boolean(callbacks.onRotation),
6750
+ size: Boolean(callbacks.onSize),
6751
+ structure: Boolean(callbacks.onStructure),
6752
+ tracks: Boolean(callbacks.onTracks),
6753
+ unrotatedDimensions: Boolean(callbacks.onUnrotatedDimensions),
6754
+ videoCodec: Boolean(callbacks.onVideoCodec),
6755
+ ...fields
6756
+ };
6757
+ return newFields;
6758
+ };
6759
+
6354
6760
  // src/has-all-info.ts
6355
- var getAvailableInfo = (options, structure, state) => {
6356
- const keys = Object.entries(options).filter(([, value]) => value);
6761
+ var getAvailableInfo = ({
6762
+ fieldsToFetch,
6763
+ structure,
6764
+ state
6765
+ }) => {
6766
+ const keys = Object.entries(fieldsToFetch).filter(([, value]) => value);
6357
6767
  const infos = keys.map(([_key]) => {
6358
6768
  const key = _key;
6359
6769
  if (key === "structure") {
@@ -6386,6 +6796,9 @@ var getAvailableInfo = (options, structure, state) => {
6386
6796
  if (key === "size") {
6387
6797
  return true;
6388
6798
  }
6799
+ if (key === "mimeType") {
6800
+ return true;
6801
+ }
6389
6802
  if (key === "name") {
6390
6803
  return true;
6391
6804
  }
@@ -6409,7 +6822,11 @@ var hasAllInfo = ({
6409
6822
  state,
6410
6823
  structure
6411
6824
  }) => {
6412
- const availableInfo = getAvailableInfo(fields ?? {}, structure, state);
6825
+ const availableInfo = getAvailableInfo({
6826
+ fieldsToFetch: fields ?? {},
6827
+ structure,
6828
+ state
6829
+ });
6413
6830
  return Object.values(availableInfo).every(Boolean) && (state.maySkipVideoData() || state.canSkipTracksState.canSkipTracks());
6414
6831
  };
6415
6832
 
@@ -10960,16 +11377,20 @@ var parseVideo = ({
10960
11377
  options,
10961
11378
  signal,
10962
11379
  logLevel,
10963
- fields
11380
+ fields,
11381
+ mimeType,
11382
+ contentLength,
11383
+ name
10964
11384
  }) => {
10965
11385
  if (iterator.bytesRemaining() === 0) {
10966
11386
  return Promise.reject(new Error("no bytes"));
10967
11387
  }
10968
- if (iterator.isRiff()) {
11388
+ const fileType = iterator.detectFileType();
11389
+ if (fileType.type === "riff") {
10969
11390
  Log.verbose(logLevel, "Detected RIFF container");
10970
11391
  return Promise.resolve(parseRiff({ iterator, options, fields }));
10971
11392
  }
10972
- if (iterator.isIsoBaseMedia()) {
11393
+ if (fileType.type === "iso-base-media") {
10973
11394
  Log.verbose(logLevel, "Detected ISO Base Media container");
10974
11395
  return parseIsoBaseMediaBoxes({
10975
11396
  iterator,
@@ -10983,11 +11404,11 @@ var parseVideo = ({
10983
11404
  fields
10984
11405
  });
10985
11406
  }
10986
- if (iterator.isWebm()) {
11407
+ if (fileType.type === "webm") {
10987
11408
  Log.verbose(logLevel, "Detected Matroska container");
10988
11409
  return parseWebm({ counter: iterator, parserContext: options, fields });
10989
11410
  }
10990
- if (iterator.isTransportStream()) {
11411
+ if (fileType.type === "transport-stream") {
10991
11412
  return parseTransportStream({
10992
11413
  iterator,
10993
11414
  parserContext: options,
@@ -11000,10 +11421,68 @@ var parseVideo = ({
11000
11421
  nextPesHeaderStore: makeNextPesHeaderStore()
11001
11422
  });
11002
11423
  }
11003
- if (iterator.isMp3()) {
11004
- return Promise.reject(new Error("MP3 files are not yet supported"));
11005
- }
11006
- return Promise.reject(new Error("Unknown video format"));
11424
+ if (fileType.type === "mp3") {
11425
+ return Promise.reject(new IsAnUnsupportedAudioTypeError({
11426
+ message: "MP3 files are not yet supported",
11427
+ mimeType,
11428
+ sizeInBytes: contentLength,
11429
+ fileName: name,
11430
+ audioType: "mp3"
11431
+ }));
11432
+ }
11433
+ if (fileType.type === "wav") {
11434
+ return Promise.reject(new IsAnUnsupportedAudioTypeError({
11435
+ message: "WAV files are not yet supported",
11436
+ mimeType,
11437
+ sizeInBytes: contentLength,
11438
+ fileName: name,
11439
+ audioType: "wav"
11440
+ }));
11441
+ }
11442
+ if (fileType.type === "aac") {
11443
+ return Promise.reject(new IsAnUnsupportedAudioTypeError({
11444
+ message: "AAC files are not yet supported",
11445
+ mimeType,
11446
+ sizeInBytes: contentLength,
11447
+ fileName: name,
11448
+ audioType: "aac"
11449
+ }));
11450
+ }
11451
+ if (fileType.type === "gif") {
11452
+ return Promise.reject(new IsAGifError({
11453
+ message: "GIF files are not yet supported",
11454
+ mimeType,
11455
+ sizeInBytes: contentLength,
11456
+ fileName: name
11457
+ }));
11458
+ }
11459
+ if (fileType.type === "pdf") {
11460
+ return Promise.reject(new IsAPdfError({
11461
+ message: "GIF files are not supported",
11462
+ mimeType,
11463
+ sizeInBytes: contentLength,
11464
+ fileName: name
11465
+ }));
11466
+ }
11467
+ if (fileType.type === "bmp" || fileType.type === "jpeg" || fileType.type === "png" || fileType.type === "webp") {
11468
+ return Promise.reject(new IsAnImageError({
11469
+ message: "Image files are not supported",
11470
+ imageType: fileType.type,
11471
+ dimensions: fileType.dimensions,
11472
+ mimeType,
11473
+ sizeInBytes: contentLength,
11474
+ fileName: name
11475
+ }));
11476
+ }
11477
+ if (fileType.type === "unknown") {
11478
+ return Promise.reject(new IsAnUnsupportedFileTypeError({
11479
+ message: "Unknown file format",
11480
+ mimeType,
11481
+ sizeInBytes: contentLength,
11482
+ fileName: name
11483
+ }));
11484
+ }
11485
+ return Promise.reject(new Error("Unknown video format " + fileType));
11007
11486
  };
11008
11487
 
11009
11488
  // src/state/can-skip-tracks.ts
@@ -11023,7 +11502,8 @@ var needsTracksField = {
11023
11502
  unrotatedDimensions: true,
11024
11503
  videoCodec: true,
11025
11504
  metadata: true,
11026
- location: true
11505
+ location: true,
11506
+ mimeType: false
11027
11507
  };
11028
11508
  var makeCanSkipTracksState = ({
11029
11509
  hasAudioTrackHandlers,
@@ -11225,9 +11705,9 @@ var makeParserState = ({
11225
11705
  };
11226
11706
 
11227
11707
  // src/parse-media.ts
11228
- var parseMedia = async ({
11708
+ var parseMedia = async function({
11229
11709
  src,
11230
- fields,
11710
+ fields: _fieldsInReturnValue,
11231
11711
  reader: readerInterface = fetchReader,
11232
11712
  onAudioTrack,
11233
11713
  onVideoTrack,
@@ -11235,23 +11715,48 @@ var parseMedia = async ({
11235
11715
  logLevel = "info",
11236
11716
  onParseProgress,
11237
11717
  ...more
11238
- }) => {
11718
+ }) {
11239
11719
  let iterator = null;
11240
11720
  let parseResult = null;
11721
+ const fieldsInReturnValue = _fieldsInReturnValue ?? {};
11722
+ const fields = getFieldsFromCallback({
11723
+ fields: fieldsInReturnValue,
11724
+ callbacks: more
11725
+ });
11241
11726
  const state = makeParserState({
11242
11727
  hasAudioTrackHandlers: Boolean(onAudioTrack),
11243
11728
  hasVideoTrackHandlers: Boolean(onVideoTrack),
11244
11729
  signal,
11245
11730
  getIterator: () => iterator,
11246
- fields: fields ?? {}
11731
+ fields
11247
11732
  });
11248
11733
  const {
11249
11734
  reader,
11250
11735
  contentLength,
11251
11736
  name,
11737
+ contentType,
11252
11738
  supportsContentRange: readerSupportsContentRange
11253
11739
  } = await readerInterface.read(src, null, signal);
11254
11740
  let currentReader = reader;
11741
+ const emittedFields = {
11742
+ audioCodec: false,
11743
+ container: false,
11744
+ dimensions: false,
11745
+ durationInSeconds: false,
11746
+ fps: false,
11747
+ internalStats: false,
11748
+ isHdr: false,
11749
+ location: false,
11750
+ metadata: false,
11751
+ mimeType: false,
11752
+ name: false,
11753
+ rotation: false,
11754
+ size: false,
11755
+ structure: false,
11756
+ tracks: false,
11757
+ videoCodec: false,
11758
+ unrotatedDimensions: false
11759
+ };
11255
11760
  const supportsContentRange = readerSupportsContentRange && !(typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.DISABLE_CONTENT_RANGE === "true");
11256
11761
  const returnValue = {};
11257
11762
  const moreFields = more;
@@ -11264,15 +11769,22 @@ var parseMedia = async ({
11264
11769
  nextTrackIndex: 0
11265
11770
  };
11266
11771
  const triggerInfoEmit = () => {
11267
- const availableInfo = getAvailableInfo(fields ?? {}, parseResult?.segments ?? null, state);
11772
+ const availableInfo = getAvailableInfo({
11773
+ fieldsToFetch: fields,
11774
+ structure: parseResult?.segments ?? null,
11775
+ state
11776
+ });
11268
11777
  emitAvailableInfo({
11269
11778
  hasInfo: availableInfo,
11270
- moreFields,
11779
+ callbacks: moreFields,
11780
+ fieldsInReturnValue,
11271
11781
  parseResult,
11272
11782
  state,
11273
11783
  returnValue,
11274
11784
  contentLength,
11275
- name
11785
+ name,
11786
+ mimeType: contentType,
11787
+ emittedFields
11276
11788
  });
11277
11789
  };
11278
11790
  triggerInfoEmit();
@@ -11317,14 +11829,17 @@ var parseMedia = async ({
11317
11829
  options,
11318
11830
  signal: signal ?? null,
11319
11831
  logLevel,
11320
- fields: fields ?? {}
11832
+ fields,
11833
+ mimeType: contentType,
11834
+ contentLength,
11835
+ name
11321
11836
  });
11322
11837
  }
11323
11838
  if (parseResult.status === "incomplete" && parseResult.skipTo !== null) {
11324
11839
  state.increaseSkippedBytes(parseResult.skipTo - iterator.counter.getOffset());
11325
11840
  }
11326
11841
  if (hasAllInfo({
11327
- fields: fields ?? {},
11842
+ fields,
11328
11843
  structure: parseResult.segments,
11329
11844
  state
11330
11845
  })) {
@@ -11350,19 +11865,23 @@ var parseMedia = async ({
11350
11865
  }
11351
11866
  }
11352
11867
  Log.verbose(logLevel, "Finished parsing file");
11868
+ const hasInfo = Object.keys(fields).reduce((acc, key) => {
11869
+ if (fields?.[key]) {
11870
+ acc[key] = true;
11871
+ }
11872
+ return acc;
11873
+ }, {});
11353
11874
  emitAvailableInfo({
11354
- hasInfo: Object.keys(fields ?? {}).reduce((acc, key) => {
11355
- if (fields?.[key]) {
11356
- acc[key] = true;
11357
- }
11358
- return acc;
11359
- }, {}),
11360
- moreFields,
11875
+ hasInfo,
11876
+ callbacks: moreFields,
11877
+ fieldsInReturnValue,
11361
11878
  parseResult,
11362
11879
  state,
11363
11880
  returnValue,
11364
11881
  contentLength,
11365
- name
11882
+ mimeType: contentType,
11883
+ name,
11884
+ emittedFields
11366
11885
  });
11367
11886
  currentReader.abort();
11368
11887
  iterator?.destroy();
@@ -11384,5 +11903,10 @@ var MediaParserInternals = {
11384
11903
  export {
11385
11904
  parseMedia,
11386
11905
  VERSION,
11387
- MediaParserInternals
11906
+ MediaParserInternals,
11907
+ IsAnUnsupportedFileTypeError,
11908
+ IsAnUnsupportedAudioTypeError,
11909
+ IsAnImageError,
11910
+ IsAPdfError,
11911
+ IsAGifError
11388
11912
  };