@remotion/media-parser 4.0.252 → 4.0.253

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 (53) hide show
  1. package/dist/abort.d.ts +1 -0
  2. package/dist/abort.js +7 -0
  3. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  4. package/dist/containers/iso-base-media/get-keyframes.js +5 -2
  5. package/dist/containers/iso-base-media/get-moov-atom.js +2 -2
  6. package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +4 -1
  7. package/dist/containers/iso-base-media/get-sample-positions-from-track.js +7 -3
  8. package/dist/containers/iso-base-media/mdat/mdat.js +3 -3
  9. package/dist/containers/iso-base-media/traversal.d.ts +1 -1
  10. package/dist/containers/iso-base-media/traversal.js +5 -8
  11. package/dist/containers/webm/av1-codec-private.js +1 -1
  12. package/dist/controller.d.ts +17 -0
  13. package/dist/controller.js +31 -0
  14. package/dist/download-and-parse-media.js +3 -1
  15. package/dist/emitter.d.ts +20 -0
  16. package/dist/emitter.js +29 -0
  17. package/dist/errors.d.ts +4 -0
  18. package/dist/errors.js +13 -1
  19. package/dist/esm/from-fetch.mjs +134 -8
  20. package/dist/esm/from-node.mjs +8 -8
  21. package/dist/esm/from-web-file.mjs +8 -8
  22. package/dist/esm/index.mjs +2640 -2490
  23. package/dist/get-duration.js +5 -2
  24. package/dist/get-fps.js +3 -0
  25. package/dist/index.d.ts +9 -7
  26. package/dist/index.js +7 -1
  27. package/dist/internal-parse-media.js +17 -7
  28. package/dist/media-parser-controller.d.ts +17 -0
  29. package/dist/media-parser-controller.js +31 -0
  30. package/dist/options.d.ts +4 -1
  31. package/dist/parse-media.js +3 -1
  32. package/dist/pause-signal.d.ts +11 -0
  33. package/dist/pause-signal.js +38 -0
  34. package/dist/perform-seek.js +3 -2
  35. package/dist/readers/from-fetch.js +11 -8
  36. package/dist/readers/from-node.js +8 -8
  37. package/dist/readers/from-web-file.js +8 -8
  38. package/dist/readers/reader.d.ts +2 -1
  39. package/dist/remotion-license-acknowledge.d.ts +6 -0
  40. package/dist/remotion-license-acknowledge.js +17 -0
  41. package/dist/state/iso-base-media/cached-sample-positions.d.ts +2 -2
  42. package/dist/state/iso-base-media/cached-sample-positions.js +12 -6
  43. package/dist/state/iso-base-media/iso-state.d.ts +2 -2
  44. package/dist/state/parser-state.d.ts +6 -5
  45. package/dist/state/parser-state.js +3 -3
  46. package/dist/state/sample-callbacks.d.ts +3 -2
  47. package/dist/state/sample-callbacks.js +3 -3
  48. package/dist/throttled-progress.d.ts +3 -2
  49. package/dist/throttled-progress.js +3 -3
  50. package/dist/version.d.ts +1 -1
  51. package/dist/version.js +1 -1
  52. package/package.json +3 -3
  53. package/LICENSE.md +0 -49
@@ -0,0 +1 @@
1
+ export declare const hasBeenAborted: (error: unknown) => error is MediaParserAbortError;
package/dist/abort.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasBeenAborted = void 0;
4
+ const hasBeenAborted = (error) => {
5
+ return error instanceof MediaParserAbortError;
6
+ };
7
+ exports.hasBeenAborted = hasBeenAborted;
@@ -1,2 +1,2 @@
1
1
  import type { BufferIterator } from '../../buffer-iterator';
2
- export declare const getChannelCount: (iterator: BufferIterator) => 5 | 2 | 8 | 1 | 7 | 3 | 4 | 6;
2
+ export declare const getChannelCount: (iterator: BufferIterator) => 2 | 8 | 1 | 7 | 3 | 4 | 5 | 6;
@@ -7,10 +7,13 @@ const traversal_1 = require("./traversal");
7
7
  const getKeyframesFromIsoBaseMedia = (state) => {
8
8
  const { videoTracks } = (0, get_tracks_1.getTracksFromIsoBaseMedia)(state);
9
9
  const structure = state.getIsoStructure();
10
- const moofBox = (0, traversal_1.getMoofBox)(structure.boxes);
10
+ const moofBox = (0, traversal_1.getMoofBoxes)(structure.boxes);
11
11
  const allSamples = videoTracks.map((t) => {
12
12
  const { timescale: ts } = t;
13
- const samplePositions = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)(t.trakBox, moofBox);
13
+ const samplePositions = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
14
+ trakBox: t.trakBox,
15
+ moofBoxes: moofBox,
16
+ });
14
17
  const keyframes = samplePositions
15
18
  .filter((k) => {
16
19
  return k.isKeyframe;
@@ -11,12 +11,12 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
11
11
  const { reader } = await state.readerInterface.read({
12
12
  src: state.src,
13
13
  range: endOfMdat,
14
- signal: state.signal,
14
+ controller: state.controller,
15
15
  });
16
16
  const childState = (0, parser_state_1.makeParserState)({
17
17
  hasAudioTrackHandlers: false,
18
18
  hasVideoTrackHandlers: false,
19
- signal: state.signal,
19
+ controller: state.controller,
20
20
  fields: {
21
21
  structure: true,
22
22
  },
@@ -1,4 +1,7 @@
1
1
  import type { SamplePosition } from '../../get-sample-positions';
2
2
  import type { IsoBaseMediaBox } from './base-media-box';
3
3
  import type { TrakBox } from './trak/trak';
4
- export declare const getSamplePositionsFromTrack: (trakBox: TrakBox, moofBox: IsoBaseMediaBox | null) => SamplePosition[];
4
+ export declare const getSamplePositionsFromTrack: ({ trakBox, moofBoxes, }: {
5
+ trakBox: TrakBox;
6
+ moofBoxes: IsoBaseMediaBox[];
7
+ }) => SamplePosition[];
@@ -7,7 +7,7 @@ const get_sample_positions_1 = require("../../get-sample-positions");
7
7
  const get_sample_positions_from_lpcm_1 = require("../../get-sample-positions-from-lpcm");
8
8
  const samples_from_moof_1 = require("../../samples-from-moof");
9
9
  const traversal_1 = require("./traversal");
10
- const getSamplePositionsFromTrack = (trakBox, moofBox) => {
10
+ const getSamplePositionsFromTrack = ({ trakBox, moofBoxes, }) => {
11
11
  const isLpcm = (0, get_audio_codec_1.isLpcmAudioCodec)(trakBox);
12
12
  const timescaleAndDuration = (0, get_fps_1.getTimescaleAndDuration)(trakBox);
13
13
  if (isLpcm) {
@@ -46,8 +46,12 @@ const getSamplePositionsFromTrack = (trakBox, moofBox) => {
46
46
  sttsBox,
47
47
  cttsBox,
48
48
  });
49
- if (samplePositions.length === 0 && moofBox) {
50
- samplePositions = (0, samples_from_moof_1.getSamplesFromMoof)({ moofBox, trackId: tkhdBox.trackId });
49
+ if (samplePositions.length === 0 && moofBoxes.length > 0) {
50
+ samplePositions = moofBoxes
51
+ .map((m) => {
52
+ return (0, samples_from_moof_1.getSamplesFromMoof)({ moofBox: m, trackId: tkhdBox.trackId });
53
+ })
54
+ .flat(1);
51
55
  }
52
56
  return samplePositions;
53
57
  };
@@ -25,10 +25,10 @@ const parseMdatSection = async (state) => {
25
25
  state.getIsoStructure().boxes.push(moov);
26
26
  return (0, exports.parseMdatSection)(state);
27
27
  }
28
- if (!state.iso.flatSamples.getSamples()) {
29
- state.iso.flatSamples.setSamples((0, cached_sample_positions_1.calculateFlatSamples)(state));
28
+ if (!state.iso.flatSamples.getSamples(videoSection.start)) {
29
+ state.iso.flatSamples.setSamples(videoSection.start, (0, cached_sample_positions_1.calculateFlatSamples)(state));
30
30
  }
31
- const flatSamples = state.iso.flatSamples.getSamples();
31
+ const flatSamples = state.iso.flatSamples.getSamples(videoSection.start);
32
32
  const { iterator } = state;
33
33
  const samplesWithIndex = flatSamples.find((sample) => {
34
34
  return sample.samplePosition.offset === iterator.counter.getOffset();
@@ -19,7 +19,7 @@ import type { TrakBox } from './trak/trak';
19
19
  import type { TrunBox } from './trun';
20
20
  export declare const getFtypBox: (segments: AnySegment[]) => FtypBox | null;
21
21
  export declare const getMoovBox: (state: ParserState) => MoovBox | null;
22
- export declare const getMoofBox: (main: AnySegment[]) => IsoBaseMediaBox | null;
22
+ export declare const getMoofBoxes: (main: AnySegment[]) => IsoBaseMediaBox[];
23
23
  export declare const getMvhdBox: (moovBox: MoovBox) => MvhdBox | null;
24
24
  export declare const getTraks: (moovBox: MoovBox) => TrakBox[];
25
25
  export declare const getTkhdBox: (trakBox: TrakBox) => TkhdBox | null;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTrunBoxes = exports.getTfhdBox = exports.getTfdtBox = exports.getStssBox = exports.getStscBox = exports.getStszBox = exports.getCttsBox = exports.getSttsBox = exports.getStcoBox = exports.getVideoDescriptors = exports.getStsdBox = exports.getStblBox = exports.getMdhdBox = exports.getMdiaBox = exports.getTkhdBox = exports.getTraks = exports.getMvhdBox = exports.getMoofBox = exports.getMoovBox = exports.getFtypBox = void 0;
3
+ exports.getTrunBoxes = exports.getTfhdBox = exports.getTfdtBox = exports.getStssBox = exports.getStscBox = exports.getStszBox = exports.getCttsBox = exports.getSttsBox = exports.getStcoBox = exports.getVideoDescriptors = exports.getStsdBox = exports.getStblBox = exports.getMdhdBox = exports.getMdiaBox = exports.getTkhdBox = exports.getTraks = exports.getMvhdBox = exports.getMoofBoxes = exports.getMoovBox = exports.getFtypBox = void 0;
4
4
  const getFtypBox = (segments) => {
5
5
  const ftypBox = segments.find((s) => s.type === 'ftyp-box');
6
6
  if (!ftypBox || ftypBox.type !== 'ftyp-box') {
@@ -21,14 +21,11 @@ const getMoovBox = (state) => {
21
21
  return moovBox;
22
22
  };
23
23
  exports.getMoovBox = getMoovBox;
24
- const getMoofBox = (main) => {
25
- const moofBox = main.find((s) => s.type === 'regular-box' && s.boxType === 'moof');
26
- if (!moofBox || moofBox.type !== 'regular-box') {
27
- return null;
28
- }
29
- return moofBox;
24
+ const getMoofBoxes = (main) => {
25
+ const moofBoxes = main.filter((s) => s.type === 'regular-box' && s.boxType === 'moof');
26
+ return moofBoxes;
30
27
  };
31
- exports.getMoofBox = getMoofBox;
28
+ exports.getMoofBoxes = getMoofBoxes;
32
29
  const getMvhdBox = (moovBox) => {
33
30
  const mvHdBox = moovBox.children.find((s) => s.type === 'mvhd-box');
34
31
  if (!mvHdBox || mvHdBox.type !== 'mvhd-box') {
@@ -24,7 +24,7 @@ const parseAv1PrivateData = (data, colrAtom) => {
24
24
  const seq_tier_0 = iterator.getBits(1);
25
25
  // Level
26
26
  // The level parameter value SHALL equal the first level value indicated by seq_level_idx in the Sequence Header OBU
27
- str += seq_level_idx.toString(16).padStart(2, '0');
27
+ str += String(seq_level_idx).padStart(2, '0');
28
28
  str += seq_tier_0 ? 'H' : 'M';
29
29
  str += '.';
30
30
  // bitDepth
@@ -0,0 +1,17 @@
1
+ import { MediaParserEmitter } from './emitter';
2
+ import type { PauseSignal } from './pause-signal';
3
+ export type MediaParserController = {
4
+ abort: (reason?: any) => void;
5
+ pause: PauseSignal['pause'];
6
+ resume: PauseSignal['resume'];
7
+ addEventListener: MediaParserEmitter['addEventListener'];
8
+ removeEventListener: MediaParserEmitter['removeEventListener'];
9
+ /**
10
+ * @deprecated Not public API
11
+ */
12
+ _internals: {
13
+ signal: AbortSignal;
14
+ checkForAbortAndPause: () => Promise<void>;
15
+ };
16
+ };
17
+ export declare const mediaParserController: () => MediaParserController;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mediaParserController = void 0;
4
+ const emitter_1 = require("./emitter");
5
+ const pause_signal_1 = require("./pause-signal");
6
+ const mediaParserController = () => {
7
+ const abortController = new AbortController();
8
+ const emitter = new emitter_1.MediaParserEmitter();
9
+ const pauseSignal = (0, pause_signal_1.makePauseSignal)(emitter);
10
+ const checkForAbortAndPause = async () => {
11
+ if (abortController.signal.aborted) {
12
+ throw new Error('Aborted');
13
+ }
14
+ await pauseSignal.waitUntilResume();
15
+ };
16
+ return {
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ abort: (reason) => {
19
+ abortController.abort(reason);
20
+ },
21
+ pause: pauseSignal.pause,
22
+ resume: pauseSignal.resume,
23
+ addEventListener: emitter.addEventListener,
24
+ removeEventListener: emitter.removeEventListener,
25
+ _internals: {
26
+ signal: abortController.signal,
27
+ checkForAbortAndPause,
28
+ },
29
+ };
30
+ };
31
+ exports.mediaParserController = mediaParserController;
@@ -51,7 +51,7 @@ const downloadAndParseMedia = async (options) => {
51
51
  onVideoTrack: null,
52
52
  progressIntervalInMs: (_6 = options.progressIntervalInMs) !== null && _6 !== void 0 ? _6 : null,
53
53
  reader: (_7 = options.reader) !== null && _7 !== void 0 ? _7 : from_fetch_1.fetchReader,
54
- signal: (_8 = options.signal) !== null && _8 !== void 0 ? _8 : undefined,
54
+ controller: (_8 = options.controller) !== null && _8 !== void 0 ? _8 : undefined,
55
55
  src: options.src,
56
56
  onError: async (err) => {
57
57
  var _a, _b;
@@ -63,6 +63,8 @@ const downloadAndParseMedia = async (options) => {
63
63
  }
64
64
  return action;
65
65
  },
66
+ acknowledgeRemotionLicense: Boolean(options.acknowledgeRemotionLicense),
67
+ apiName: 'parseAndDownloadMedia()',
66
68
  });
67
69
  await content.finish();
68
70
  return returnValue;
@@ -0,0 +1,20 @@
1
+ type MediaParserEventMap = {
2
+ pause: undefined;
3
+ resume: undefined;
4
+ };
5
+ export type MediaParserEventTypes = keyof MediaParserEventMap;
6
+ export type CallbackListener<T extends MediaParserEventTypes> = (data: {
7
+ detail: MediaParserEventMap[T];
8
+ }) => void;
9
+ type MediaParserListeners = {
10
+ [EventType in MediaParserEventTypes]: CallbackListener<EventType>[];
11
+ };
12
+ export declare class MediaParserEmitter {
13
+ listeners: MediaParserListeners;
14
+ addEventListener: <Q extends MediaParserEventTypes>(name: Q, callback: CallbackListener<Q>) => void;
15
+ removeEventListener: <Q extends MediaParserEventTypes>(name: Q, callback: CallbackListener<Q>) => void;
16
+ private dispatchEvent;
17
+ dispatchPause: () => void;
18
+ dispatchResume: () => void;
19
+ }
20
+ export {};
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaParserEmitter = void 0;
4
+ class MediaParserEmitter {
5
+ constructor() {
6
+ this.listeners = {
7
+ pause: [],
8
+ resume: [],
9
+ };
10
+ this.addEventListener = (name, callback) => {
11
+ this.listeners[name].push(callback);
12
+ };
13
+ this.removeEventListener = (name, callback) => {
14
+ this.listeners[name] = this.listeners[name].filter((l) => l !== callback);
15
+ };
16
+ this.dispatchPause = () => {
17
+ this.dispatchEvent('pause', undefined);
18
+ };
19
+ this.dispatchResume = () => {
20
+ this.dispatchEvent('resume', undefined);
21
+ };
22
+ }
23
+ dispatchEvent(dispatchName, context) {
24
+ this.listeners[dispatchName].forEach((callback) => {
25
+ callback({ detail: context });
26
+ });
27
+ }
28
+ }
29
+ exports.MediaParserEmitter = MediaParserEmitter;
package/dist/errors.d.ts CHANGED
@@ -65,4 +65,8 @@ export declare class IsAnUnsupportedAudioTypeError extends Error {
65
65
  audioType: UnsupportedAudioType | null;
66
66
  });
67
67
  }
68
+ export declare class MediaParserAbortError extends Error {
69
+ constructor(message: string);
70
+ }
71
+ export declare const hasBeenAborted: (error: unknown) => error is MediaParserAbortError;
68
72
  export {};
package/dist/errors.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IsAnUnsupportedAudioTypeError = exports.IsAnUnsupportedFileTypeError = exports.IsAPdfError = exports.IsAnImageError = exports.IsAGifError = void 0;
3
+ exports.hasBeenAborted = exports.MediaParserAbortError = exports.IsAnUnsupportedAudioTypeError = exports.IsAnUnsupportedFileTypeError = exports.IsAPdfError = exports.IsAnImageError = exports.IsAGifError = void 0;
4
4
  class IsAGifError extends Error {
5
5
  constructor({ message, mimeType, sizeInBytes, fileName, }) {
6
6
  super(message);
@@ -69,3 +69,15 @@ class IsAnUnsupportedAudioTypeError extends Error {
69
69
  }
70
70
  }
71
71
  exports.IsAnUnsupportedAudioTypeError = IsAnUnsupportedAudioTypeError;
72
+ class MediaParserAbortError extends Error {
73
+ constructor(message) {
74
+ super(message);
75
+ this.name = 'MediaParserAbortError';
76
+ this.cause = undefined;
77
+ }
78
+ }
79
+ exports.MediaParserAbortError = MediaParserAbortError;
80
+ const hasBeenAborted = (error) => {
81
+ return error instanceof MediaParserAbortError;
82
+ };
83
+ exports.hasBeenAborted = hasBeenAborted;
@@ -1,3 +1,129 @@
1
+ // src/errors.ts
2
+ class IsAGifError extends Error {
3
+ mimeType;
4
+ sizeInBytes;
5
+ fileName;
6
+ constructor({
7
+ message,
8
+ mimeType,
9
+ sizeInBytes,
10
+ fileName
11
+ }) {
12
+ super(message);
13
+ this.fileName = "IsAGifError";
14
+ this.mimeType = mimeType;
15
+ this.sizeInBytes = sizeInBytes;
16
+ this.fileName = fileName;
17
+ if (Error.captureStackTrace) {
18
+ Error.captureStackTrace(this, IsAGifError);
19
+ }
20
+ }
21
+ }
22
+
23
+ class IsAnImageError extends Error {
24
+ imageType;
25
+ dimensions;
26
+ mimeType;
27
+ sizeInBytes;
28
+ fileName;
29
+ constructor({
30
+ dimensions,
31
+ imageType,
32
+ message,
33
+ mimeType,
34
+ sizeInBytes,
35
+ fileName
36
+ }) {
37
+ super(message);
38
+ this.name = "IsAnImageError";
39
+ this.imageType = imageType;
40
+ this.dimensions = dimensions;
41
+ this.mimeType = mimeType;
42
+ this.sizeInBytes = sizeInBytes;
43
+ this.fileName = fileName;
44
+ if (Error.captureStackTrace) {
45
+ Error.captureStackTrace(this, IsAnImageError);
46
+ }
47
+ }
48
+ }
49
+
50
+ class IsAPdfError extends Error {
51
+ mimeType;
52
+ sizeInBytes;
53
+ fileName;
54
+ constructor({
55
+ message,
56
+ mimeType,
57
+ sizeInBytes,
58
+ fileName
59
+ }) {
60
+ super(message);
61
+ this.name = "IsAPdfError";
62
+ this.mimeType = mimeType;
63
+ this.sizeInBytes = sizeInBytes;
64
+ this.fileName = fileName;
65
+ if (Error.captureStackTrace) {
66
+ Error.captureStackTrace(this, IsAPdfError);
67
+ }
68
+ }
69
+ }
70
+
71
+ class IsAnUnsupportedFileTypeError extends Error {
72
+ mimeType;
73
+ sizeInBytes;
74
+ fileName;
75
+ constructor({
76
+ message,
77
+ mimeType,
78
+ sizeInBytes,
79
+ fileName
80
+ }) {
81
+ super(message);
82
+ this.name = "IsAnUnsupportedFileTypeError";
83
+ this.mimeType = mimeType;
84
+ this.sizeInBytes = sizeInBytes;
85
+ this.fileName = fileName;
86
+ if (Error.captureStackTrace) {
87
+ Error.captureStackTrace(this, IsAnUnsupportedFileTypeError);
88
+ }
89
+ }
90
+ }
91
+
92
+ class IsAnUnsupportedAudioTypeError extends Error {
93
+ mimeType;
94
+ sizeInBytes;
95
+ fileName;
96
+ audioType;
97
+ constructor({
98
+ message,
99
+ mimeType,
100
+ sizeInBytes,
101
+ fileName,
102
+ audioType
103
+ }) {
104
+ super(message);
105
+ this.name = "IsAnUnsupportedAudioTypeError";
106
+ this.mimeType = mimeType;
107
+ this.sizeInBytes = sizeInBytes;
108
+ this.fileName = fileName;
109
+ this.audioType = audioType;
110
+ if (Error.captureStackTrace) {
111
+ Error.captureStackTrace(this, IsAnUnsupportedAudioTypeError);
112
+ }
113
+ }
114
+ }
115
+
116
+ class MediaParserAbortError extends Error {
117
+ constructor(message) {
118
+ super(message);
119
+ this.name = "MediaParserAbortError";
120
+ this.cause = undefined;
121
+ }
122
+ }
123
+ var hasBeenAborted = (error) => {
124
+ return error instanceof MediaParserAbortError;
125
+ };
126
+
1
127
  // src/readers/from-fetch.ts
2
128
  function parseContentRange(input) {
3
129
  const matches = input.match(/^(\w+) ((\d+)-(\d+)|\*)\/(\d+|\*)$/);
@@ -31,7 +157,7 @@ var validateContentRangeAndDetectIfSupported = (actualRange, parsedContentRange,
31
157
  return { supportsContentRange: true };
32
158
  };
33
159
  var fetchReader = {
34
- read: async ({ src, range, signal }) => {
160
+ read: async ({ src, range, controller }) => {
35
161
  if (typeof src !== "string") {
36
162
  throw new Error("src must be a string when using `fetchReader`");
37
163
  }
@@ -39,7 +165,7 @@ var fetchReader = {
39
165
  if (!resolvedUrl.startsWith("https://") && !resolvedUrl.startsWith("blob:") && !resolvedUrl.startsWith("http://")) {
40
166
  return Promise.reject(new Error(resolvedUrl + " is not a URL - needs to start with http:// or https:// or blob:. If you want to read a local file, pass `reader: nodeReader` to parseMedia()."));
41
167
  }
42
- const controller = new AbortController;
168
+ const ownController = new AbortController;
43
169
  const cache = typeof navigator !== "undefined" && navigator.userAgent.includes("Cloudflare-Workers") ? undefined : "no-store";
44
170
  const actualRange = range === null ? 0 : range;
45
171
  const res = await fetch(resolvedUrl, {
@@ -48,14 +174,14 @@ var fetchReader = {
48
174
  } : {
49
175
  Range: `bytes=${`${actualRange[0]}-${actualRange[1]}`}`
50
176
  },
51
- signal: controller.signal,
177
+ signal: ownController.signal,
52
178
  cache
53
179
  });
54
180
  const contentRange = res.headers.get("content-range");
55
181
  const parsedContentRange = contentRange ? parseContentRange(contentRange) : null;
56
182
  const { supportsContentRange } = validateContentRangeAndDetectIfSupported(actualRange, parsedContentRange, res.status);
57
- signal?.addEventListener("abort", () => {
58
- controller.abort(new Error("Aborted by user"));
183
+ controller._internals.signal.addEventListener("abort", () => {
184
+ ownController.abort(new MediaParserAbortError("Aborted by user"));
59
185
  }, { once: true });
60
186
  if (res.status.toString().startsWith("4") || res.status.toString().startsWith("5")) {
61
187
  throw new Error(`Server returned status code ${res.status} for ${src} and range ${actualRange}`);
@@ -69,8 +195,8 @@ var fetchReader = {
69
195
  const name = contentDisposition?.match(/filename="([^"]+)"/)?.[1];
70
196
  const fallbackName = src.split("/").pop();
71
197
  const reader = res.body.getReader();
72
- if (signal) {
73
- signal.addEventListener("abort", () => {
198
+ if (controller) {
199
+ controller._internals.signal.addEventListener("abort", () => {
74
200
  reader.cancel().catch(() => {
75
201
  });
76
202
  }, { once: true });
@@ -79,7 +205,7 @@ var fetchReader = {
79
205
  reader: {
80
206
  reader,
81
207
  abort: () => {
82
- controller.abort();
208
+ ownController.abort();
83
209
  }
84
210
  },
85
211
  contentLength,
@@ -3,23 +3,23 @@ import { createReadStream, statSync } from "fs";
3
3
  import { sep } from "path";
4
4
  import { Readable } from "stream";
5
5
  var nodeReader = {
6
- read: ({ src, range, signal }) => {
6
+ read: ({ src, range, controller }) => {
7
7
  if (typeof src !== "string") {
8
8
  throw new Error("src must be a string when using `nodeReader`");
9
9
  }
10
- const controller = new AbortController;
10
+ const ownController = new AbortController;
11
11
  const stream = createReadStream(src, {
12
12
  start: range === null ? 0 : typeof range === "number" ? range : range[0],
13
13
  end: range === null ? Infinity : typeof range === "number" ? Infinity : range[1],
14
- signal: controller.signal
14
+ signal: ownController.signal
15
15
  });
16
- signal?.addEventListener("abort", () => {
17
- controller.abort();
16
+ controller._internals.signal.addEventListener("abort", () => {
17
+ ownController.abort();
18
18
  }, { once: true });
19
19
  const stats = statSync(src);
20
20
  const reader = Readable.toWeb(stream).getReader();
21
- if (signal) {
22
- signal.addEventListener("abort", () => {
21
+ if (controller) {
22
+ controller._internals.signal.addEventListener("abort", () => {
23
23
  reader.cancel().catch(() => {
24
24
  });
25
25
  }, { once: true });
@@ -28,7 +28,7 @@ var nodeReader = {
28
28
  reader: {
29
29
  reader,
30
30
  abort: () => {
31
- controller.abort();
31
+ ownController.abort();
32
32
  }
33
33
  },
34
34
  contentLength: stats.size,
@@ -1,21 +1,21 @@
1
1
  // src/readers/from-web-file.ts
2
2
  var webFileReader = {
3
- read: ({ src, range, signal }) => {
3
+ read: ({ src, range, controller }) => {
4
4
  if (typeof src === "string") {
5
5
  throw new Error("`inputTypeFileReader` only supports `File` objects");
6
6
  }
7
7
  const part = range === null ? src : typeof range === "number" ? src.slice(range) : src.slice(range[0], range[1]);
8
8
  const reader = new FileReader;
9
9
  reader.readAsArrayBuffer(src);
10
- const controller = new AbortController;
11
- if (controller) {
12
- controller.signal.addEventListener("abort", () => {
10
+ const ownController = new AbortController;
11
+ if (ownController) {
12
+ ownController.signal.addEventListener("abort", () => {
13
13
  reader.abort();
14
14
  }, { once: true });
15
15
  }
16
- if (signal) {
17
- signal.addEventListener("abort", () => {
18
- controller.abort();
16
+ if (controller) {
17
+ controller._internals.signal.addEventListener("abort", () => {
18
+ ownController.abort();
19
19
  }, { once: true });
20
20
  }
21
21
  return new Promise((resolve, reject) => {
@@ -27,7 +27,7 @@ var webFileReader = {
27
27
  reader: streamReader,
28
28
  abort() {
29
29
  streamReader.cancel();
30
- controller.abort();
30
+ ownController.abort();
31
31
  }
32
32
  },
33
33
  contentLength: src.size,