@remotion/media-parser 4.0.298 → 4.0.301

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 (186) hide show
  1. package/dist/add-avc-profile-to-track.d.ts +2 -2
  2. package/dist/add-avc-profile-to-track.js +7 -1
  3. package/dist/codec-data.d.ts +29 -0
  4. package/dist/codec-data.js +2 -0
  5. package/dist/containers/aac/parse-aac.js +2 -3
  6. package/dist/containers/avc/color.d.ts +6 -6
  7. package/dist/containers/avc/color.js +53 -27
  8. package/dist/containers/avc/interpret-sps.d.ts +2 -2
  9. package/dist/containers/avc/interpret-sps.js +2 -2
  10. package/dist/containers/flac/parse-streaminfo.js +2 -3
  11. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +1 -1
  12. package/dist/containers/iso-base-media/color-to-webcodecs-colors.d.ts +2 -0
  13. package/dist/containers/iso-base-media/color-to-webcodecs-colors.js +12 -0
  14. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +2 -2
  15. package/dist/containers/iso-base-media/find-track-to-seek.d.ts +5 -5
  16. package/dist/containers/iso-base-media/find-track-to-seek.js +18 -2
  17. package/dist/containers/iso-base-media/get-actual-number-of-channels.d.ts +3 -2
  18. package/dist/containers/iso-base-media/get-actual-number-of-channels.js +14 -3
  19. package/dist/containers/iso-base-media/get-children.d.ts +2 -2
  20. package/dist/containers/iso-base-media/get-keyframes.js +11 -2
  21. package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +4 -4
  22. package/dist/containers/iso-base-media/get-moov-atom.js +1 -1
  23. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.d.ts +9 -5
  24. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +17 -4
  25. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +2 -2
  26. package/dist/containers/iso-base-media/get-seeking-byte.js +5 -8
  27. package/dist/containers/iso-base-media/make-track.d.ts +2 -2
  28. package/dist/containers/iso-base-media/make-track.js +18 -17
  29. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +2 -2
  30. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +4 -4
  31. package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +4 -4
  32. package/dist/containers/iso-base-media/moov/moov.d.ts +2 -2
  33. package/dist/containers/iso-base-media/process-box.d.ts +5 -5
  34. package/dist/containers/iso-base-media/stsd/mebx.d.ts +2 -2
  35. package/dist/containers/iso-base-media/stsd/samples.d.ts +3 -3
  36. package/dist/containers/iso-base-media/stsd/stsd.d.ts +2 -2
  37. package/dist/containers/iso-base-media/trak/trak.d.ts +2 -2
  38. package/dist/containers/iso-base-media/traversal.d.ts +1 -0
  39. package/dist/containers/iso-base-media/traversal.js +13 -1
  40. package/dist/containers/m3u/after-manifest-fetch.d.ts +6 -6
  41. package/dist/containers/m3u/after-manifest-fetch.js +1 -1
  42. package/dist/containers/m3u/fetch-m3u8-stream.d.ts +2 -2
  43. package/dist/containers/m3u/first-sample-in-m3u-chunk.d.ts +3 -3
  44. package/dist/containers/m3u/first-sample-in-m3u-chunk.js +2 -8
  45. package/dist/containers/m3u/get-seeking-byte.d.ts +3 -3
  46. package/dist/containers/m3u/get-streams.d.ts +6 -6
  47. package/dist/containers/m3u/get-streams.js +9 -9
  48. package/dist/containers/m3u/parse-stream-inf.js +3 -3
  49. package/dist/containers/m3u/process-m3u-chunk.js +3 -3
  50. package/dist/containers/m3u/run-over-m3u.d.ts +2 -2
  51. package/dist/containers/m3u/sample-sorter.d.ts +7 -7
  52. package/dist/containers/m3u/types.d.ts +3 -3
  53. package/dist/containers/mp3/parse-mpeg-header.js +2 -3
  54. package/dist/containers/mp3/seek/audio-sample-from-cbr.d.ts +2 -2
  55. package/dist/containers/riff/get-tracks-from-avi.d.ts +4 -9
  56. package/dist/containers/riff/get-tracks-from-avi.js +19 -20
  57. package/dist/containers/riff/parse-video-section.js +1 -1
  58. package/dist/containers/riff/seek/fetch-idx1.d.ts +4 -4
  59. package/dist/containers/transport-stream/get-tracks.d.ts +2 -2
  60. package/dist/containers/transport-stream/get-tracks.js +1 -5
  61. package/dist/containers/transport-stream/handle-aac-packet.d.ts +4 -4
  62. package/dist/containers/transport-stream/handle-aac-packet.js +5 -4
  63. package/dist/containers/transport-stream/handle-avc-packet.d.ts +4 -4
  64. package/dist/containers/transport-stream/handle-avc-packet.js +10 -4
  65. package/dist/containers/transport-stream/process-audio.d.ts +5 -5
  66. package/dist/containers/transport-stream/process-stream-buffers.d.ts +8 -8
  67. package/dist/containers/transport-stream/process-video.d.ts +5 -5
  68. package/dist/containers/wav/parse-fmt.js +2 -3
  69. package/dist/containers/webm/color.d.ts +2 -2
  70. package/dist/containers/webm/color.js +6 -25
  71. package/dist/containers/webm/get-ready-tracks.d.ts +3 -3
  72. package/dist/containers/webm/get-sample-from-block.d.ts +7 -7
  73. package/dist/containers/webm/make-track.d.ts +3 -3
  74. package/dist/containers/webm/make-track.js +53 -21
  75. package/dist/containers/webm/parse-webm-header.js +5 -0
  76. package/dist/containers/webm/seek/fetch-web-cues.d.ts +4 -4
  77. package/dist/containers/webm/seek/get-seeking-byte.d.ts +2 -2
  78. package/dist/containers/webm/segments.d.ts +2 -2
  79. package/dist/containers/webm/segments.js +1 -1
  80. package/dist/containers/webm/state-for-processing.d.ts +5 -5
  81. package/dist/containers/webm/traversal.js +2 -1
  82. package/dist/controller/emitter.d.ts +2 -3
  83. package/dist/controller/seek-signal.d.ts +3 -9
  84. package/dist/controller/seek-signal.js +2 -2
  85. package/dist/convert-audio-or-video-sample.d.ts +4 -4
  86. package/dist/download-and-parse-media.js +1 -1
  87. package/dist/emit-available-info.js +9 -9
  88. package/dist/errors.d.ts +4 -18
  89. package/dist/errors.js +1 -15
  90. package/dist/esm/index.mjs +654 -544
  91. package/dist/esm/node.mjs +63 -51
  92. package/dist/esm/server-worker.mjs +13 -34
  93. package/dist/esm/universal.mjs +63 -51
  94. package/dist/esm/worker-server-entry.mjs +500 -388
  95. package/dist/esm/worker-web-entry.mjs +437 -337
  96. package/dist/esm/worker.mjs +14 -35
  97. package/dist/fields.d.ts +2 -2
  98. package/dist/file-types/bmp.d.ts +2 -2
  99. package/dist/file-types/detect-file-type.d.ts +2 -1
  100. package/dist/file-types/detect-file-type.js +1 -6
  101. package/dist/file-types/gif.d.ts +2 -0
  102. package/dist/file-types/gif.js +18 -0
  103. package/dist/file-types/index.js +4 -2
  104. package/dist/file-types/png.d.ts +2 -2
  105. package/dist/file-types/webp.d.ts +2 -2
  106. package/dist/get-audio-codec.d.ts +3 -4
  107. package/dist/get-audio-codec.js +44 -23
  108. package/dist/get-dimensions.d.ts +2 -2
  109. package/dist/get-dimensions.js +6 -3
  110. package/dist/get-duration.js +6 -7
  111. package/dist/get-fields-from-callbacks.js +1 -1
  112. package/dist/get-is-hdr.js +6 -5
  113. package/dist/get-sample-aspect-ratio.d.ts +5 -5
  114. package/dist/get-seeking-byte.d.ts +2 -2
  115. package/dist/get-tracks.d.ts +34 -44
  116. package/dist/get-tracks.js +6 -46
  117. package/dist/get-video-codec.d.ts +4 -3
  118. package/dist/get-video-codec.js +6 -6
  119. package/dist/has-all-info.js +1 -1
  120. package/dist/index.d.ts +114 -55
  121. package/dist/index.js +6 -4
  122. package/dist/init-video.js +4 -11
  123. package/dist/internal-parse-media.js +1 -1
  124. package/dist/log.d.ts +6 -6
  125. package/dist/metadata/get-metadata.js +6 -4
  126. package/dist/options.d.ts +19 -23
  127. package/dist/parse-loop.js +2 -2
  128. package/dist/parse-media-on-worker-entry.js +13 -5
  129. package/dist/parse-media.js +1 -1
  130. package/dist/perform-seek.d.ts +4 -4
  131. package/dist/readers/from-fetch.d.ts +2 -2
  132. package/dist/readers/from-node.d.ts +2 -2
  133. package/dist/readers/from-node.js +64 -55
  134. package/dist/readers/from-web-file.d.ts +2 -2
  135. package/dist/readers/reader.d.ts +5 -5
  136. package/dist/readers/universal.d.ts +2 -2
  137. package/dist/readers/web.d.ts +2 -2
  138. package/dist/register-track.d.ts +12 -12
  139. package/dist/remotion-license-acknowledge.d.ts +2 -2
  140. package/dist/seek-backwards.d.ts +4 -4
  141. package/dist/seek-forwards.d.ts +4 -4
  142. package/dist/state/can-skip-tracks.js +1 -1
  143. package/dist/state/emitted-fields.js +1 -1
  144. package/dist/state/has-tracks-section.d.ts +5 -5
  145. package/dist/state/iso-base-media/cached-sample-positions.d.ts +3 -3
  146. package/dist/state/iso-base-media/cached-sample-positions.js +16 -7
  147. package/dist/state/iso-base-media/iso-state.d.ts +4 -4
  148. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +4 -4
  149. package/dist/state/m3u-state.d.ts +11 -11
  150. package/dist/state/matroska/lazy-cues-fetch.d.ts +4 -4
  151. package/dist/state/matroska/webm.d.ts +4 -4
  152. package/dist/state/matroska/webm.js +1 -1
  153. package/dist/state/may-skip-video-data.d.ts +1 -0
  154. package/dist/state/may-skip-video-data.js +23 -2
  155. package/dist/state/need-samples-for-fields.js +1 -1
  156. package/dist/state/parser-state.d.ts +67 -38
  157. package/dist/state/riff/lazy-idx1-fetch.d.ts +4 -4
  158. package/dist/state/riff/sample-counter.d.ts +3 -3
  159. package/dist/state/riff.d.ts +6 -6
  160. package/dist/state/sample-callbacks.d.ts +12 -12
  161. package/dist/state/sample-callbacks.js +2 -2
  162. package/dist/state/samples-observed/slow-duration-fps.d.ts +3 -3
  163. package/dist/state/transport-stream/last-emitted-sample.d.ts +3 -3
  164. package/dist/state/transport-stream/transport-stream.d.ts +2 -2
  165. package/dist/version.d.ts +1 -1
  166. package/dist/version.js +1 -1
  167. package/dist/webcodec-sample-types.d.ts +21 -10
  168. package/dist/work-on-seek-request.d.ts +4 -4
  169. package/dist/work-on-seek-request.js +40 -43
  170. package/dist/worker/serialize-error.d.ts +2 -2
  171. package/dist/worker/serialize-error.js +7 -25
  172. package/dist/worker/worker-types.d.ts +22 -24
  173. package/dist/worker-server.d.ts +2 -2
  174. package/dist/worker-server.js +5 -5
  175. package/dist/writers/writer.d.ts +2 -2
  176. package/package.json +3 -3
  177. package/dist/containers/iso-base-media/sample-positions.d.ts +0 -25
  178. package/dist/containers/iso-base-media/sample-positions.js +0 -37
  179. package/dist/containers/iso-base-media/turn-sample-positions-into-array.d.ts +0 -19
  180. package/dist/containers/iso-base-media/turn-sample-positions-into-array.js +0 -73
  181. package/dist/containers/m3u/iterate-over-segment-files.d.ts +0 -21
  182. package/dist/containers/m3u/iterate-over-segment-files.js +0 -132
  183. package/dist/containers/mp3/audio-sample-from-cbr.d.ts +0 -11
  184. package/dist/containers/mp3/audio-sample-from-cbr.js +0 -35
  185. package/dist/emit-audio-sample.d.ts +0 -12
  186. package/dist/emit-audio-sample.js +0 -11
package/dist/esm/node.mjs CHANGED
@@ -1,65 +1,77 @@
1
1
  // src/readers/from-node.ts
2
- import { createReadStream, promises, statSync } from "fs";
2
+ import { createReadStream, existsSync, promises, statSync } from "fs";
3
3
  import { dirname, join, relative, sep } from "path";
4
- var nodeReadContent = ({ src, range, controller }) => {
4
+ var nodeReadContent = async ({
5
+ src,
6
+ range,
7
+ controller
8
+ }) => {
5
9
  if (typeof src !== "string") {
6
10
  throw new Error("src must be a string when using `nodeReader`");
7
11
  }
12
+ await Promise.resolve();
8
13
  const ownController = new AbortController;
9
- const stream = createReadStream(src, {
10
- start: range === null ? 0 : typeof range === "number" ? range : range[0],
11
- end: range === null ? Infinity : typeof range === "number" ? Infinity : range[1]
12
- });
13
- controller._internals.signal.addEventListener("abort", () => {
14
- ownController.abort();
15
- }, { once: true });
16
- const stats = statSync(src);
17
- let readerCancelled = false;
18
- const reader = new ReadableStream({
19
- start(c) {
20
- if (readerCancelled) {
21
- return;
22
- }
23
- stream.on("data", (chunk) => {
24
- c.enqueue(chunk);
25
- });
26
- stream.on("end", () => {
14
+ try {
15
+ if (!existsSync(src)) {
16
+ throw new Error(`File does not exist: ${src}`);
17
+ }
18
+ const stream = createReadStream(src, {
19
+ start: range === null ? 0 : typeof range === "number" ? range : range[0],
20
+ end: range === null ? Infinity : typeof range === "number" ? Infinity : range[1]
21
+ });
22
+ controller._internals.signal.addEventListener("abort", () => {
23
+ ownController.abort();
24
+ }, { once: true });
25
+ const stats = statSync(src);
26
+ let readerCancelled = false;
27
+ const reader = new ReadableStream({
28
+ start(c) {
27
29
  if (readerCancelled) {
28
30
  return;
29
31
  }
30
- c.close();
31
- });
32
- stream.on("error", (err) => {
33
- c.error(err);
34
- });
35
- },
36
- cancel() {
37
- readerCancelled = true;
38
- stream.destroy();
32
+ stream.on("data", (chunk) => {
33
+ c.enqueue(chunk);
34
+ });
35
+ stream.on("end", () => {
36
+ if (readerCancelled) {
37
+ return;
38
+ }
39
+ c.close();
40
+ });
41
+ stream.on("error", (err) => {
42
+ c.error(err);
43
+ });
44
+ },
45
+ cancel() {
46
+ readerCancelled = true;
47
+ stream.destroy();
48
+ }
49
+ }).getReader();
50
+ if (controller) {
51
+ controller._internals.signal.addEventListener("abort", () => {
52
+ reader.cancel().catch(() => {});
53
+ }, { once: true });
39
54
  }
40
- }).getReader();
41
- if (controller) {
42
- controller._internals.signal.addEventListener("abort", () => {
43
- reader.cancel().catch(() => {});
44
- }, { once: true });
55
+ return Promise.resolve({
56
+ reader: {
57
+ reader,
58
+ abort: async () => {
59
+ try {
60
+ stream.destroy();
61
+ ownController.abort();
62
+ await reader.cancel();
63
+ } catch {}
64
+ }
65
+ },
66
+ contentLength: stats.size,
67
+ contentType: null,
68
+ name: src.split(sep).pop(),
69
+ supportsContentRange: true,
70
+ needsContentRange: true
71
+ });
72
+ } catch (err) {
73
+ return Promise.reject(err);
45
74
  }
46
- return Promise.resolve({
47
- reader: {
48
- reader,
49
- abort: async () => {
50
- try {
51
- stream.destroy();
52
- ownController.abort();
53
- await reader.cancel();
54
- } catch {}
55
- }
56
- },
57
- contentLength: stats.size,
58
- contentType: null,
59
- name: src.split(sep).pop(),
60
- supportsContentRange: true,
61
- needsContentRange: true
62
- });
63
75
  };
64
76
  var nodeReadWholeAsText = (src) => {
65
77
  if (typeof src !== "string") {
@@ -10,28 +10,6 @@ var withResolvers = function() {
10
10
  };
11
11
 
12
12
  // src/errors.ts
13
- class IsAGifError extends Error {
14
- mimeType;
15
- sizeInBytes;
16
- fileName;
17
- constructor({
18
- message,
19
- mimeType,
20
- sizeInBytes,
21
- fileName
22
- }) {
23
- super(message);
24
- this.name = "IsAGifError";
25
- this.fileName = "IsAGifError";
26
- this.mimeType = mimeType;
27
- this.sizeInBytes = sizeInBytes;
28
- this.fileName = fileName;
29
- if (Error.captureStackTrace) {
30
- Error.captureStackTrace(this, IsAGifError);
31
- }
32
- }
33
- }
34
-
35
13
  class IsAnImageError extends Error {
36
14
  imageType;
37
15
  dimensions;
@@ -112,13 +90,6 @@ class MediaParserAbortError extends Error {
112
90
  // src/worker/serialize-error.ts
113
91
  var deserializeError = (error) => {
114
92
  switch (error.errorName) {
115
- case "IsAGifError":
116
- return new IsAGifError({
117
- fileName: error.fileName,
118
- mimeType: error.mimeType,
119
- sizeInBytes: error.sizeInBytes,
120
- message: error.errorMessage
121
- });
122
93
  case "IsAnImageError":
123
94
  return new IsAnImageError({
124
95
  dimensions: error.dimensions,
@@ -186,7 +157,7 @@ var convertToWorkerPayload = (payload) => {
186
157
  onSlowKeyframes,
187
158
  onSlowNumberOfFrames,
188
159
  onSlowVideoBitrate,
189
- onStructure,
160
+ onSlowStructure,
190
161
  onTracks,
191
162
  onVideoTrack,
192
163
  selectM3uStream,
@@ -220,7 +191,7 @@ var convertToWorkerPayload = (payload) => {
220
191
  postSlowKeyframes: Boolean(onSlowKeyframes),
221
192
  postSlowNumberOfFrames: Boolean(onSlowNumberOfFrames),
222
193
  postSlowVideoBitrate: Boolean(onSlowVideoBitrate),
223
- postStructure: Boolean(onStructure),
194
+ postSlowStructure: Boolean(onSlowStructure),
224
195
  postTracks: Boolean(onTracks),
225
196
  postUnrotatedDimensions: Boolean(onUnrotatedDimensions),
226
197
  postVideoCodec: Boolean(onVideoCodec),
@@ -358,8 +329,8 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
358
329
  await params.onSlowVideoBitrate?.(data.payload.value);
359
330
  return { payloadType: "void" };
360
331
  }
361
- if (data.payload.callbackType === "structure") {
362
- await params.onStructure?.(data.payload.value);
332
+ if (data.payload.callbackType === "slow-structure") {
333
+ await params.onSlowStructure?.(data.payload.value);
363
334
  return { payloadType: "void" };
364
335
  }
365
336
  if (data.payload.callbackType === "fps") {
@@ -449,7 +420,15 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
449
420
  registeredCallback: Boolean(possibleCallback)
450
421
  };
451
422
  }
452
- if (data.payload.callbackType === "on-audio-video-sample") {
423
+ if (data.payload.callbackType === "on-audio-sample") {
424
+ const callback = callbacks[data.payload.trackId];
425
+ if (!callback) {
426
+ throw new Error(`No callback registered for track ${data.payload.trackId}`);
427
+ }
428
+ await callback(data.payload.value);
429
+ return { payloadType: "void" };
430
+ }
431
+ if (data.payload.callbackType === "on-video-sample") {
453
432
  const callback = callbacks[data.payload.trackId];
454
433
  if (!callback) {
455
434
  throw new Error(`No callback registered for track ${data.payload.trackId}`);
@@ -309,67 +309,79 @@ var fetchCreateAdjacentFileSource = (relativePath, src) => {
309
309
  };
310
310
 
311
311
  // src/readers/from-node.ts
312
- import { createReadStream, promises, statSync } from "fs";
312
+ import { createReadStream, existsSync, promises, statSync } from "fs";
313
313
  import { dirname, join, relative, sep } from "path";
314
- var nodeReadContent = ({ src, range, controller }) => {
314
+ var nodeReadContent = async ({
315
+ src,
316
+ range,
317
+ controller
318
+ }) => {
315
319
  if (typeof src !== "string") {
316
320
  throw new Error("src must be a string when using `nodeReader`");
317
321
  }
322
+ await Promise.resolve();
318
323
  const ownController = new AbortController;
319
- const stream = createReadStream(src, {
320
- start: range === null ? 0 : typeof range === "number" ? range : range[0],
321
- end: range === null ? Infinity : typeof range === "number" ? Infinity : range[1]
322
- });
323
- controller._internals.signal.addEventListener("abort", () => {
324
- ownController.abort();
325
- }, { once: true });
326
- const stats = statSync(src);
327
- let readerCancelled = false;
328
- const reader = new ReadableStream({
329
- start(c) {
330
- if (readerCancelled) {
331
- return;
332
- }
333
- stream.on("data", (chunk) => {
334
- c.enqueue(chunk);
335
- });
336
- stream.on("end", () => {
324
+ try {
325
+ if (!existsSync(src)) {
326
+ throw new Error(`File does not exist: ${src}`);
327
+ }
328
+ const stream = createReadStream(src, {
329
+ start: range === null ? 0 : typeof range === "number" ? range : range[0],
330
+ end: range === null ? Infinity : typeof range === "number" ? Infinity : range[1]
331
+ });
332
+ controller._internals.signal.addEventListener("abort", () => {
333
+ ownController.abort();
334
+ }, { once: true });
335
+ const stats = statSync(src);
336
+ let readerCancelled = false;
337
+ const reader = new ReadableStream({
338
+ start(c) {
337
339
  if (readerCancelled) {
338
340
  return;
339
341
  }
340
- c.close();
341
- });
342
- stream.on("error", (err) => {
343
- c.error(err);
344
- });
345
- },
346
- cancel() {
347
- readerCancelled = true;
348
- stream.destroy();
342
+ stream.on("data", (chunk) => {
343
+ c.enqueue(chunk);
344
+ });
345
+ stream.on("end", () => {
346
+ if (readerCancelled) {
347
+ return;
348
+ }
349
+ c.close();
350
+ });
351
+ stream.on("error", (err) => {
352
+ c.error(err);
353
+ });
354
+ },
355
+ cancel() {
356
+ readerCancelled = true;
357
+ stream.destroy();
358
+ }
359
+ }).getReader();
360
+ if (controller) {
361
+ controller._internals.signal.addEventListener("abort", () => {
362
+ reader.cancel().catch(() => {});
363
+ }, { once: true });
349
364
  }
350
- }).getReader();
351
- if (controller) {
352
- controller._internals.signal.addEventListener("abort", () => {
353
- reader.cancel().catch(() => {});
354
- }, { once: true });
365
+ return Promise.resolve({
366
+ reader: {
367
+ reader,
368
+ abort: async () => {
369
+ try {
370
+ stream.destroy();
371
+ ownController.abort();
372
+ await reader.cancel();
373
+ } catch {}
374
+ }
375
+ },
376
+ contentLength: stats.size,
377
+ contentType: null,
378
+ name: src.split(sep).pop(),
379
+ supportsContentRange: true,
380
+ needsContentRange: true
381
+ });
382
+ } catch (err) {
383
+ return Promise.reject(err);
355
384
  }
356
- return Promise.resolve({
357
- reader: {
358
- reader,
359
- abort: async () => {
360
- try {
361
- stream.destroy();
362
- ownController.abort();
363
- await reader.cancel();
364
- } catch {}
365
- }
366
- },
367
- contentLength: stats.size,
368
- contentType: null,
369
- name: src.split(sep).pop(),
370
- supportsContentRange: true,
371
- needsContentRange: true
372
- });
373
385
  };
374
386
  var nodeReadWholeAsText = (src) => {
375
387
  if (typeof src !== "string") {