@remotion/media-parser 4.0.239 → 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 (98) 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 +113 -64
  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 +673 -107
  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/get-location.d.ts +13 -0
  78. package/dist/get-location.js +40 -0
  79. package/dist/has-all-info.d.ts +5 -1
  80. package/dist/has-all-info.js +11 -4
  81. package/dist/index.d.ts +3 -1
  82. package/dist/index.js +7 -1
  83. package/dist/options.d.ts +40 -49
  84. package/dist/parse-media.js +53 -14
  85. package/dist/parse-video.d.ts +4 -1
  86. package/dist/parse-video.js +71 -8
  87. package/dist/probing/detect-file-type.d.ts +1 -0
  88. package/dist/probing/detect-file-type.js +88 -0
  89. package/dist/probing/get-jpeg-dimensions.d.ts +4 -0
  90. package/dist/probing/get-jpeg-dimensions.js +32 -0
  91. package/dist/readers/from-fetch.js +1 -0
  92. package/dist/readers/from-node.js +1 -0
  93. package/dist/readers/from-web-file.js +1 -0
  94. package/dist/readers/reader.d.ts +1 -0
  95. package/dist/state/can-skip-tracks.js +2 -0
  96. package/dist/version.d.ts +1 -1
  97. package/dist/version.js +1 -1
  98. 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.239";
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
  };
@@ -6168,141 +6486,242 @@ var hasHdr = (boxes, state) => {
6168
6486
  return hasTracks(boxes, state);
6169
6487
  };
6170
6488
 
6489
+ // src/get-location.ts
6490
+ function parseLocation(locationString) {
6491
+ const locationPattern = /^([+-]\d{2}\.?\d{0,10})([+-]\d{3}\.?\d{0,10})([+-]\d+(\.\d+)?)?\/$/;
6492
+ const match = locationString.match(locationPattern);
6493
+ if (!match) {
6494
+ return null;
6495
+ }
6496
+ const latitude = parseFloat(match[1]);
6497
+ const longitude = parseFloat(match[2]);
6498
+ const altitude = match[3] ? parseFloat(match[3]) : null;
6499
+ return {
6500
+ latitude,
6501
+ longitude,
6502
+ altitude
6503
+ };
6504
+ }
6505
+ var getLocation = (structure) => {
6506
+ const metadata = getMetadata(structure);
6507
+ const locationEntry = metadata.find((entry) => entry.key === "com.apple.quicktime.location.ISO6709");
6508
+ const horizontalAccuracy = metadata.find((entry) => entry.key === "com.apple.quicktime.location.accuracy.horizontal");
6509
+ if (locationEntry) {
6510
+ const parsed = parseLocation(locationEntry.value);
6511
+ if (parsed === null) {
6512
+ return null;
6513
+ }
6514
+ return {
6515
+ ...parsed,
6516
+ horizontalAccuracy: horizontalAccuracy?.value ? parseFloat(String(horizontalAccuracy.value)) : null
6517
+ };
6518
+ }
6519
+ return null;
6520
+ };
6521
+
6171
6522
  // src/emit-available-info.ts
6172
6523
  var emitAvailableInfo = ({
6173
6524
  hasInfo,
6174
6525
  parseResult,
6175
- moreFields,
6526
+ callbacks,
6176
6527
  state,
6177
6528
  returnValue,
6178
6529
  contentLength,
6179
- name
6530
+ name,
6531
+ mimeType,
6532
+ fieldsInReturnValue,
6533
+ emittedFields
6180
6534
  }) => {
6181
6535
  const keys = Object.keys(hasInfo);
6182
6536
  for (const key of keys) {
6183
6537
  if (key === "structure") {
6184
- if (parseResult && hasInfo.structure && returnValue.structure === undefined) {
6185
- moreFields.onStructure?.(parseResult.segments);
6186
- 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;
6187
6544
  }
6188
6545
  continue;
6189
6546
  }
6190
6547
  if (key === "durationInSeconds") {
6191
- if (hasInfo.durationInSeconds && returnValue.durationInSeconds === undefined && parseResult) {
6548
+ if (hasInfo.durationInSeconds && !emittedFields.durationInSeconds && parseResult) {
6192
6549
  const durationInSeconds = getDuration(parseResult.segments, state);
6193
- moreFields.onDurationInSeconds?.(durationInSeconds);
6194
- returnValue.durationInSeconds = durationInSeconds;
6550
+ callbacks.onDurationInSeconds?.(durationInSeconds);
6551
+ if (fieldsInReturnValue.durationInSeconds) {
6552
+ returnValue.durationInSeconds = durationInSeconds;
6553
+ }
6554
+ emittedFields.durationInSeconds = true;
6195
6555
  }
6196
6556
  continue;
6197
6557
  }
6198
6558
  if (key === "dimensions") {
6199
- if (hasInfo.dimensions && returnValue.dimensions === undefined && parseResult) {
6559
+ if (hasInfo.dimensions && !emittedFields.dimensions && parseResult) {
6200
6560
  const dimensionsQueried = getDimensions(parseResult.segments, state);
6201
6561
  const dimensions = {
6202
6562
  height: dimensionsQueried.height,
6203
6563
  width: dimensionsQueried.width
6204
6564
  };
6205
- moreFields.onDimensions?.(dimensions);
6206
- returnValue.dimensions = dimensions;
6565
+ callbacks.onDimensions?.(dimensions);
6566
+ if (fieldsInReturnValue.dimensions) {
6567
+ returnValue.dimensions = dimensions;
6568
+ }
6569
+ emittedFields.dimensions = true;
6207
6570
  }
6208
6571
  continue;
6209
6572
  }
6210
6573
  if (key === "unrotatedDimensions") {
6211
- if (returnValue.unrotatedDimensions === undefined && hasInfo.unrotatedDimensions && parseResult) {
6574
+ if (hasInfo.unrotatedDimensions && !emittedFields.unrotatedDimensions && parseResult) {
6212
6575
  const dimensionsQueried = getDimensions(parseResult.segments, state);
6213
6576
  const unrotatedDimensions = {
6214
6577
  height: dimensionsQueried.unrotatedHeight,
6215
6578
  width: dimensionsQueried.unrotatedWidth
6216
6579
  };
6217
- moreFields.onUnrotatedDimensions?.(unrotatedDimensions);
6218
- returnValue.unrotatedDimensions = unrotatedDimensions;
6580
+ callbacks.onUnrotatedDimensions?.(unrotatedDimensions);
6581
+ if (fieldsInReturnValue.unrotatedDimensions) {
6582
+ returnValue.unrotatedDimensions = unrotatedDimensions;
6583
+ }
6584
+ emittedFields.unrotatedDimensions = true;
6219
6585
  }
6220
6586
  continue;
6221
6587
  }
6222
6588
  if (key === "rotation") {
6223
- if (returnValue.rotation === undefined && hasInfo.rotation && parseResult) {
6589
+ if (hasInfo.rotation && !emittedFields.rotation && parseResult) {
6224
6590
  const dimensionsQueried = getDimensions(parseResult.segments, state);
6225
6591
  const { rotation } = dimensionsQueried;
6226
- moreFields.onRotation?.(rotation);
6227
- returnValue.rotation = rotation;
6592
+ callbacks.onRotation?.(rotation);
6593
+ if (fieldsInReturnValue.rotation) {
6594
+ returnValue.rotation = rotation;
6595
+ }
6596
+ emittedFields.rotation = true;
6228
6597
  }
6229
6598
  continue;
6230
6599
  }
6231
6600
  if (key === "fps") {
6232
- if (returnValue.fps === undefined && hasInfo.fps && parseResult) {
6601
+ if (!emittedFields.fps && hasInfo.fps && parseResult) {
6233
6602
  const fps = getFps(parseResult.segments);
6234
- moreFields.onFps?.(fps);
6235
- returnValue.fps = fps;
6603
+ callbacks.onFps?.(fps);
6604
+ if (fieldsInReturnValue.fps) {
6605
+ returnValue.fps = fps;
6606
+ }
6607
+ emittedFields.fps = true;
6236
6608
  }
6237
6609
  continue;
6238
6610
  }
6239
6611
  if (key === "videoCodec") {
6240
- if (returnValue.videoCodec === undefined && hasInfo.videoCodec && parseResult) {
6612
+ if (!emittedFields.videoCodec && hasInfo.videoCodec && parseResult) {
6241
6613
  const videoCodec = getVideoCodec(parseResult.segments, state);
6242
- moreFields.onVideoCodec?.(videoCodec);
6243
- returnValue.videoCodec = videoCodec;
6614
+ callbacks.onVideoCodec?.(videoCodec);
6615
+ if (fieldsInReturnValue.videoCodec) {
6616
+ returnValue.videoCodec = videoCodec;
6617
+ }
6618
+ emittedFields.videoCodec = true;
6244
6619
  }
6245
6620
  continue;
6246
6621
  }
6247
6622
  if (key === "audioCodec") {
6248
- if (returnValue.audioCodec === undefined && hasInfo.audioCodec && parseResult) {
6623
+ if (!emittedFields.audioCodec && hasInfo.audioCodec && parseResult) {
6249
6624
  const audioCodec = getAudioCodec(parseResult.segments, state);
6250
- moreFields.onAudioCodec?.(audioCodec);
6251
- returnValue.audioCodec = audioCodec;
6625
+ callbacks.onAudioCodec?.(audioCodec);
6626
+ if (fieldsInReturnValue.audioCodec) {
6627
+ returnValue.audioCodec = audioCodec;
6628
+ }
6629
+ emittedFields.audioCodec = true;
6252
6630
  }
6253
6631
  continue;
6254
6632
  }
6255
6633
  if (key === "tracks") {
6256
- if (hasInfo.tracks && returnValue.videoTracks === undefined && returnValue.audioTracks === undefined && parseResult) {
6634
+ if (!emittedFields.tracks && hasInfo.tracks && parseResult) {
6257
6635
  const { videoTracks, audioTracks } = getTracks(parseResult.segments, state);
6258
- moreFields.onTracks?.({ videoTracks, audioTracks });
6259
- returnValue.videoTracks = videoTracks;
6260
- returnValue.audioTracks = audioTracks;
6636
+ callbacks.onTracks?.({ videoTracks, audioTracks });
6637
+ if (fieldsInReturnValue.tracks) {
6638
+ returnValue.tracks = { videoTracks, audioTracks };
6639
+ }
6640
+ emittedFields.tracks = true;
6261
6641
  }
6262
6642
  continue;
6263
6643
  }
6264
6644
  if (key === "internalStats") {
6265
6645
  if (hasInfo.internalStats) {
6266
6646
  const internalStats = state.getInternalStats();
6267
- returnValue.internalStats = internalStats;
6647
+ if (fieldsInReturnValue.internalStats) {
6648
+ returnValue.internalStats = internalStats;
6649
+ }
6650
+ emittedFields.internalStats = true;
6268
6651
  }
6269
6652
  continue;
6270
6653
  }
6271
6654
  if (key === "size") {
6272
- if (returnValue.size === undefined && hasInfo.size) {
6273
- moreFields.onSize?.(contentLength);
6274
- 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;
6275
6671
  }
6276
6672
  continue;
6277
6673
  }
6278
6674
  if (key === "name") {
6279
- if (returnValue.name === undefined && hasInfo.name) {
6280
- moreFields.onName?.(name);
6281
- 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;
6282
6681
  }
6283
6682
  continue;
6284
6683
  }
6285
6684
  if (key === "isHdr") {
6286
- if (returnValue.isHdr === undefined && hasInfo.isHdr && parseResult) {
6685
+ if (!returnValue.isHdr && hasInfo.isHdr && parseResult) {
6287
6686
  const isHdr = getIsHdr(parseResult.segments, state);
6288
- moreFields.onIsHdr?.(isHdr);
6289
- returnValue.isHdr = isHdr;
6687
+ callbacks.onIsHdr?.(isHdr);
6688
+ if (fieldsInReturnValue.isHdr) {
6689
+ returnValue.isHdr = isHdr;
6690
+ }
6691
+ emittedFields.isHdr = true;
6290
6692
  }
6291
6693
  continue;
6292
6694
  }
6293
6695
  if (key === "container") {
6294
- if (returnValue.container === undefined && hasInfo.container && parseResult) {
6696
+ if (!returnValue.container && hasInfo.container && parseResult) {
6295
6697
  const container = getContainer(parseResult.segments);
6296
- moreFields.onContainer?.(container);
6297
- returnValue.container = container;
6698
+ callbacks.onContainer?.(container);
6699
+ if (fieldsInReturnValue.container) {
6700
+ returnValue.container = container;
6701
+ }
6702
+ emittedFields.container = true;
6298
6703
  }
6299
6704
  continue;
6300
6705
  }
6301
6706
  if (key === "metadata") {
6302
- if (returnValue.metadata === undefined && hasInfo.metadata && parseResult) {
6707
+ if (!emittedFields.metadata && hasInfo.metadata && parseResult) {
6303
6708
  const metadata = getMetadata(parseResult.segments);
6304
- moreFields.onMetadata?.(metadata);
6305
- returnValue.metadata = metadata;
6709
+ callbacks.onMetadata?.(metadata);
6710
+ if (fieldsInReturnValue.metadata) {
6711
+ returnValue.metadata = metadata;
6712
+ }
6713
+ emittedFields.metadata = true;
6714
+ }
6715
+ continue;
6716
+ }
6717
+ if (key === "location") {
6718
+ if (!emittedFields.location && hasInfo.location && parseResult) {
6719
+ const location = getLocation(parseResult.segments);
6720
+ callbacks.onLocation?.(location);
6721
+ if (fieldsInReturnValue.location) {
6722
+ returnValue.location = location;
6723
+ }
6724
+ emittedFields.location = true;
6306
6725
  }
6307
6726
  continue;
6308
6727
  }
@@ -6310,9 +6729,41 @@ var emitAvailableInfo = ({
6310
6729
  }
6311
6730
  };
6312
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
+
6313
6760
  // src/has-all-info.ts
6314
- var getAvailableInfo = (options, structure, state) => {
6315
- 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);
6316
6767
  const infos = keys.map(([_key]) => {
6317
6768
  const key = _key;
6318
6769
  if (key === "structure") {
@@ -6345,13 +6796,16 @@ var getAvailableInfo = (options, structure, state) => {
6345
6796
  if (key === "size") {
6346
6797
  return true;
6347
6798
  }
6799
+ if (key === "mimeType") {
6800
+ return true;
6801
+ }
6348
6802
  if (key === "name") {
6349
6803
  return true;
6350
6804
  }
6351
6805
  if (key === "container") {
6352
6806
  return Boolean(structure && hasContainer(structure));
6353
6807
  }
6354
- if (key === "metadata") {
6808
+ if (key === "metadata" || key === "location") {
6355
6809
  return false;
6356
6810
  }
6357
6811
  throw new Error(`Unknown key: ${key}`);
@@ -6368,7 +6822,11 @@ var hasAllInfo = ({
6368
6822
  state,
6369
6823
  structure
6370
6824
  }) => {
6371
- const availableInfo = getAvailableInfo(fields ?? {}, structure, state);
6825
+ const availableInfo = getAvailableInfo({
6826
+ fieldsToFetch: fields ?? {},
6827
+ structure,
6828
+ state
6829
+ });
6372
6830
  return Object.values(availableInfo).every(Boolean) && (state.maySkipVideoData() || state.canSkipTracksState.canSkipTracks());
6373
6831
  };
6374
6832
 
@@ -10919,16 +11377,20 @@ var parseVideo = ({
10919
11377
  options,
10920
11378
  signal,
10921
11379
  logLevel,
10922
- fields
11380
+ fields,
11381
+ mimeType,
11382
+ contentLength,
11383
+ name
10923
11384
  }) => {
10924
11385
  if (iterator.bytesRemaining() === 0) {
10925
11386
  return Promise.reject(new Error("no bytes"));
10926
11387
  }
10927
- if (iterator.isRiff()) {
11388
+ const fileType = iterator.detectFileType();
11389
+ if (fileType.type === "riff") {
10928
11390
  Log.verbose(logLevel, "Detected RIFF container");
10929
11391
  return Promise.resolve(parseRiff({ iterator, options, fields }));
10930
11392
  }
10931
- if (iterator.isIsoBaseMedia()) {
11393
+ if (fileType.type === "iso-base-media") {
10932
11394
  Log.verbose(logLevel, "Detected ISO Base Media container");
10933
11395
  return parseIsoBaseMediaBoxes({
10934
11396
  iterator,
@@ -10942,11 +11404,11 @@ var parseVideo = ({
10942
11404
  fields
10943
11405
  });
10944
11406
  }
10945
- if (iterator.isWebm()) {
11407
+ if (fileType.type === "webm") {
10946
11408
  Log.verbose(logLevel, "Detected Matroska container");
10947
11409
  return parseWebm({ counter: iterator, parserContext: options, fields });
10948
11410
  }
10949
- if (iterator.isTransportStream()) {
11411
+ if (fileType.type === "transport-stream") {
10950
11412
  return parseTransportStream({
10951
11413
  iterator,
10952
11414
  parserContext: options,
@@ -10959,10 +11421,68 @@ var parseVideo = ({
10959
11421
  nextPesHeaderStore: makeNextPesHeaderStore()
10960
11422
  });
10961
11423
  }
10962
- if (iterator.isMp3()) {
10963
- return Promise.reject(new Error("MP3 files are not yet supported"));
10964
- }
10965
- 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));
10966
11486
  };
10967
11487
 
10968
11488
  // src/state/can-skip-tracks.ts
@@ -10981,7 +11501,9 @@ var needsTracksField = {
10981
11501
  tracks: true,
10982
11502
  unrotatedDimensions: true,
10983
11503
  videoCodec: true,
10984
- metadata: true
11504
+ metadata: true,
11505
+ location: true,
11506
+ mimeType: false
10985
11507
  };
10986
11508
  var makeCanSkipTracksState = ({
10987
11509
  hasAudioTrackHandlers,
@@ -11183,9 +11705,9 @@ var makeParserState = ({
11183
11705
  };
11184
11706
 
11185
11707
  // src/parse-media.ts
11186
- var parseMedia = async ({
11708
+ var parseMedia = async function({
11187
11709
  src,
11188
- fields,
11710
+ fields: _fieldsInReturnValue,
11189
11711
  reader: readerInterface = fetchReader,
11190
11712
  onAudioTrack,
11191
11713
  onVideoTrack,
@@ -11193,23 +11715,48 @@ var parseMedia = async ({
11193
11715
  logLevel = "info",
11194
11716
  onParseProgress,
11195
11717
  ...more
11196
- }) => {
11718
+ }) {
11197
11719
  let iterator = null;
11198
11720
  let parseResult = null;
11721
+ const fieldsInReturnValue = _fieldsInReturnValue ?? {};
11722
+ const fields = getFieldsFromCallback({
11723
+ fields: fieldsInReturnValue,
11724
+ callbacks: more
11725
+ });
11199
11726
  const state = makeParserState({
11200
11727
  hasAudioTrackHandlers: Boolean(onAudioTrack),
11201
11728
  hasVideoTrackHandlers: Boolean(onVideoTrack),
11202
11729
  signal,
11203
11730
  getIterator: () => iterator,
11204
- fields: fields ?? {}
11731
+ fields
11205
11732
  });
11206
11733
  const {
11207
11734
  reader,
11208
11735
  contentLength,
11209
11736
  name,
11737
+ contentType,
11210
11738
  supportsContentRange: readerSupportsContentRange
11211
11739
  } = await readerInterface.read(src, null, signal);
11212
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
+ };
11213
11760
  const supportsContentRange = readerSupportsContentRange && !(typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.DISABLE_CONTENT_RANGE === "true");
11214
11761
  const returnValue = {};
11215
11762
  const moreFields = more;
@@ -11222,15 +11769,22 @@ var parseMedia = async ({
11222
11769
  nextTrackIndex: 0
11223
11770
  };
11224
11771
  const triggerInfoEmit = () => {
11225
- const availableInfo = getAvailableInfo(fields ?? {}, parseResult?.segments ?? null, state);
11772
+ const availableInfo = getAvailableInfo({
11773
+ fieldsToFetch: fields,
11774
+ structure: parseResult?.segments ?? null,
11775
+ state
11776
+ });
11226
11777
  emitAvailableInfo({
11227
11778
  hasInfo: availableInfo,
11228
- moreFields,
11779
+ callbacks: moreFields,
11780
+ fieldsInReturnValue,
11229
11781
  parseResult,
11230
11782
  state,
11231
11783
  returnValue,
11232
11784
  contentLength,
11233
- name
11785
+ name,
11786
+ mimeType: contentType,
11787
+ emittedFields
11234
11788
  });
11235
11789
  };
11236
11790
  triggerInfoEmit();
@@ -11275,14 +11829,17 @@ var parseMedia = async ({
11275
11829
  options,
11276
11830
  signal: signal ?? null,
11277
11831
  logLevel,
11278
- fields: fields ?? {}
11832
+ fields,
11833
+ mimeType: contentType,
11834
+ contentLength,
11835
+ name
11279
11836
  });
11280
11837
  }
11281
11838
  if (parseResult.status === "incomplete" && parseResult.skipTo !== null) {
11282
11839
  state.increaseSkippedBytes(parseResult.skipTo - iterator.counter.getOffset());
11283
11840
  }
11284
11841
  if (hasAllInfo({
11285
- fields: fields ?? {},
11842
+ fields,
11286
11843
  structure: parseResult.segments,
11287
11844
  state
11288
11845
  })) {
@@ -11308,19 +11865,23 @@ var parseMedia = async ({
11308
11865
  }
11309
11866
  }
11310
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
+ }, {});
11311
11874
  emitAvailableInfo({
11312
- hasInfo: Object.keys(fields ?? {}).reduce((acc, key) => {
11313
- if (fields?.[key]) {
11314
- acc[key] = true;
11315
- }
11316
- return acc;
11317
- }, {}),
11318
- moreFields,
11875
+ hasInfo,
11876
+ callbacks: moreFields,
11877
+ fieldsInReturnValue,
11319
11878
  parseResult,
11320
11879
  state,
11321
11880
  returnValue,
11322
11881
  contentLength,
11323
- name
11882
+ mimeType: contentType,
11883
+ name,
11884
+ emittedFields
11324
11885
  });
11325
11886
  currentReader.abort();
11326
11887
  iterator?.destroy();
@@ -11342,5 +11903,10 @@ var MediaParserInternals = {
11342
11903
  export {
11343
11904
  parseMedia,
11344
11905
  VERSION,
11345
- MediaParserInternals
11906
+ MediaParserInternals,
11907
+ IsAnUnsupportedFileTypeError,
11908
+ IsAnUnsupportedAudioTypeError,
11909
+ IsAnImageError,
11910
+ IsAPdfError,
11911
+ IsAGifError
11346
11912
  };