@remotion/media-parser 4.0.273 → 4.0.275

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 (46) hide show
  1. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  2. package/dist/containers/iso-base-media/get-video-codec-from-iso-track.d.ts +1 -1
  3. package/dist/containers/iso-base-media/make-track.js +1 -0
  4. package/dist/containers/m3u/iterate-over-segment-files.js +4 -1
  5. package/dist/containers/riff/get-tracks-from-avi.js +1 -0
  6. package/dist/containers/transport-stream/handle-avc-packet.js +1 -0
  7. package/dist/containers/webm/make-track.js +1 -0
  8. package/dist/esm/index.mjs +9 -351
  9. package/dist/esm/worker-server-entry.mjs +8 -1
  10. package/dist/esm/worker-web-entry.mjs +8 -1
  11. package/dist/esm/worker.mjs +20 -8
  12. package/dist/get-tracks.d.ts +1 -0
  13. package/dist/index.d.ts +0 -2
  14. package/dist/index.js +0 -2
  15. package/dist/version.d.ts +1 -1
  16. package/dist/version.js +1 -1
  17. package/dist/worker.d.ts +3 -2
  18. package/dist/worker.js +2 -267
  19. package/package.json +13 -4
  20. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +0 -5
  21. package/dist/containers/iso-base-media/get-seeking-from-mp4.js +0 -50
  22. package/dist/containers/m3u/m3u-child-stream.d.ts +0 -0
  23. package/dist/containers/m3u/m3u-child-stream.js +0 -1
  24. package/dist/containers/m3u/return-packets.d.ts +0 -17
  25. package/dist/containers/m3u/return-packets.js +0 -109
  26. package/dist/esm/fetch.mjs +0 -194
  27. package/dist/esm/web-file.mjs +0 -60
  28. package/dist/esm/worker-server.mjs +0 -12914
  29. package/dist/fields.d.ts +0 -63
  30. package/dist/fields.js +0 -1
  31. package/dist/get-seeking-info.d.ts +0 -5
  32. package/dist/get-seeking-info.js +0 -24
  33. package/dist/parse-media-on-browser-worker.d.ts +0 -2
  34. package/dist/parse-media-on-browser-worker.js +0 -4
  35. package/dist/parse-media-on-worker.d.ts +0 -2
  36. package/dist/parse-media-on-worker.js +0 -4
  37. package/dist/seeking-info.d.ts +0 -8
  38. package/dist/seeking-info.js +0 -1
  39. package/dist/state/last-eventloop-break.d.ts +0 -4
  40. package/dist/state/last-eventloop-break.js +0 -14
  41. package/dist/web-file.d.ts +0 -1
  42. package/dist/web-file.js +0 -1
  43. package/dist/worker-bun-entry.d.ts +0 -1
  44. package/dist/worker-bun-entry.js +0 -5
  45. package/dist/worker-entry.d.ts +0 -1
  46. package/dist/worker-entry.js +0 -5
@@ -1,194 +0,0 @@
1
- // src/errors.ts
2
- class MediaParserAbortError extends Error {
3
- constructor(message) {
4
- super(message);
5
- this.name = "MediaParserAbortError";
6
- this.cause = undefined;
7
- }
8
- }
9
-
10
- // src/readers/fetch/get-body-and-reader.ts
11
- var getLengthAndReader = async ({
12
- canLiveWithoutContentLength,
13
- res,
14
- ownController,
15
- requestedWithoutRange
16
- }) => {
17
- const length = res.headers.get("content-length");
18
- const contentLength = length === null ? null : parseInt(length, 10);
19
- if (requestedWithoutRange || canLiveWithoutContentLength && contentLength === null) {
20
- const buffer = await res.arrayBuffer();
21
- const encoded = new Uint8Array(buffer);
22
- const stream = new ReadableStream({
23
- start(controller) {
24
- controller.enqueue(encoded);
25
- controller.close();
26
- }
27
- });
28
- return {
29
- contentLength: encoded.byteLength,
30
- reader: {
31
- reader: stream.getReader(),
32
- abort() {
33
- ownController.abort();
34
- }
35
- },
36
- needsContentRange: false
37
- };
38
- }
39
- if (!res.body) {
40
- throw new Error("No body");
41
- }
42
- const reader = res.body.getReader();
43
- return {
44
- reader: {
45
- reader,
46
- abort: () => {
47
- ownController.abort();
48
- }
49
- },
50
- contentLength,
51
- needsContentRange: true
52
- };
53
- };
54
-
55
- // src/readers/fetch/resolve-url.ts
56
- var resolveUrl = (src) => {
57
- try {
58
- const resolvedUrl = typeof window !== "undefined" && typeof window.location !== "undefined" ? new URL(src, window.location.origin) : new URL(src);
59
- return resolvedUrl;
60
- } catch {
61
- return src;
62
- }
63
- };
64
-
65
- // src/readers/from-fetch.ts
66
- function parseContentRange(input) {
67
- const matches = input.match(/^(\w+) ((\d+)-(\d+)|\*)\/(\d+|\*)$/);
68
- if (!matches)
69
- return null;
70
- const [, unit, , start, end, size] = matches;
71
- const range = {
72
- unit,
73
- start: start != null ? Number(start) : null,
74
- end: end != null ? Number(end) : null,
75
- size: size === "*" ? null : Number(size)
76
- };
77
- if (range.start === null && range.end === null && range.size === null) {
78
- return null;
79
- }
80
- return range;
81
- }
82
- var validateContentRangeAndDetectIfSupported = ({
83
- requestedRange,
84
- parsedContentRange,
85
- statusCode
86
- }) => {
87
- if (statusCode === 206) {
88
- return { supportsContentRange: true };
89
- }
90
- if (typeof requestedRange === "number" && parsedContentRange?.start !== requestedRange) {
91
- if (requestedRange === 0) {
92
- return { supportsContentRange: false };
93
- }
94
- throw new Error(`Range header (${requestedRange}) does not match content-range header (${parsedContentRange?.start})`);
95
- }
96
- if (requestedRange !== null && typeof requestedRange !== "number" && (parsedContentRange?.start !== requestedRange[0] || parsedContentRange?.end !== requestedRange[1])) {
97
- throw new Error(`Range header (${requestedRange}) does not match content-range header (${parsedContentRange?.start})`);
98
- }
99
- return { supportsContentRange: true };
100
- };
101
- var fetchReadContent = async ({
102
- src,
103
- range,
104
- controller
105
- }) => {
106
- if (typeof src !== "string" && src instanceof URL === false) {
107
- throw new Error("src must be a string when using `fetchReader`");
108
- }
109
- const resolvedUrl = resolveUrl(src);
110
- const resolvedUrlString = resolvedUrl.toString();
111
- if (!resolvedUrlString.startsWith("https://") && !resolvedUrlString.startsWith("blob:") && !resolvedUrlString.startsWith("http://")) {
112
- return Promise.reject(new Error(`${resolvedUrlString} 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().`));
113
- }
114
- const ownController = new AbortController;
115
- const cache = typeof navigator !== "undefined" && navigator.userAgent.includes("Cloudflare-Workers") ? undefined : "no-store";
116
- const requestedRange = range === null ? 0 : range;
117
- const asString = typeof resolvedUrl === "string" ? resolvedUrl : resolvedUrl.pathname;
118
- const requestWithoutRange = asString.endsWith(".m3u8");
119
- const canLiveWithoutContentLength = asString.endsWith(".m3u8") || asString.endsWith(".ts");
120
- const headers = requestedRange === 0 && requestWithoutRange ? {} : typeof requestedRange === "number" ? {
121
- Range: `bytes=${requestedRange}-`
122
- } : {
123
- Range: `bytes=${`${requestedRange[0]}-${requestedRange[1]}`}`
124
- };
125
- const res = await fetch(resolvedUrl, {
126
- headers,
127
- signal: ownController.signal,
128
- cache
129
- });
130
- const contentRange = res.headers.get("content-range");
131
- const parsedContentRange = contentRange ? parseContentRange(contentRange) : null;
132
- const { supportsContentRange } = validateContentRangeAndDetectIfSupported({
133
- requestedRange,
134
- parsedContentRange,
135
- statusCode: res.status
136
- });
137
- controller._internals.signal.addEventListener("abort", () => {
138
- ownController.abort(new MediaParserAbortError("Aborted by user"));
139
- }, { once: true });
140
- if (res.status.toString().startsWith("4") || res.status.toString().startsWith("5")) {
141
- throw new Error(`Server returned status code ${res.status} for ${src} and range ${requestedRange}`);
142
- }
143
- const contentDisposition = res.headers.get("content-disposition");
144
- const name = contentDisposition?.match(/filename="([^"]+)"/)?.[1];
145
- const fallbackName = src.toString().split("/").pop();
146
- const { contentLength, needsContentRange, reader } = await getLengthAndReader({
147
- canLiveWithoutContentLength,
148
- res,
149
- ownController,
150
- requestedWithoutRange: requestWithoutRange
151
- });
152
- if (controller) {
153
- controller._internals.signal.addEventListener("abort", () => {
154
- reader.reader.cancel().catch(() => {
155
- });
156
- }, { once: true });
157
- }
158
- return {
159
- reader,
160
- contentLength,
161
- contentType: res.headers.get("content-type"),
162
- name: name ?? fallbackName,
163
- supportsContentRange,
164
- needsContentRange
165
- };
166
- };
167
- var fetchReadWholeAsText = async (src) => {
168
- if (typeof src !== "string" && src instanceof URL === false) {
169
- throw new Error("src must be a string when using `fetchReader`");
170
- }
171
- const res = await fetch(src);
172
- if (!res.ok) {
173
- throw new Error(`Failed to fetch ${src} (HTTP code: ${res.status})`);
174
- }
175
- return res.text();
176
- };
177
- var fetchCreateAdjacentFileSource = (relativePath, src) => {
178
- if (typeof src !== "string" && src instanceof URL === false) {
179
- throw new Error("src must be a string or URL when using `fetchReader`");
180
- }
181
- return new URL(relativePath, src).toString();
182
- };
183
- var fetchReader = {
184
- read: fetchReadContent,
185
- readWholeAsText: fetchReadWholeAsText,
186
- createAdjacentFileSource: fetchCreateAdjacentFileSource
187
- };
188
- export {
189
- parseContentRange,
190
- fetchReader,
191
- fetchReadWholeAsText,
192
- fetchReadContent,
193
- fetchCreateAdjacentFileSource
194
- };
@@ -1,60 +0,0 @@
1
- // src/readers/from-web-file.ts
2
- var webFileReadContent = ({ src, range, controller }) => {
3
- if (typeof src === "string" || src instanceof URL) {
4
- throw new Error("`inputTypeFileReader` only supports `File` objects");
5
- }
6
- const part = range === null ? src : typeof range === "number" ? src.slice(range) : src.slice(range[0], range[1]);
7
- const reader = new FileReader;
8
- reader.readAsArrayBuffer(src);
9
- const ownController = new AbortController;
10
- if (ownController) {
11
- ownController.signal.addEventListener("abort", () => {
12
- reader.abort();
13
- }, { once: true });
14
- }
15
- if (controller) {
16
- controller._internals.signal.addEventListener("abort", () => {
17
- ownController.abort();
18
- }, { once: true });
19
- }
20
- return new Promise((resolve, reject) => {
21
- reader.onload = () => {
22
- const stream = part.stream();
23
- const streamReader = stream.getReader();
24
- resolve({
25
- reader: {
26
- reader: streamReader,
27
- abort() {
28
- streamReader.cancel();
29
- ownController.abort();
30
- }
31
- },
32
- contentLength: src.size,
33
- name: src.name,
34
- supportsContentRange: true,
35
- contentType: src.type,
36
- needsContentRange: true
37
- });
38
- };
39
- reader.onerror = (error) => {
40
- reject(error);
41
- };
42
- });
43
- };
44
- var webFileReadWholeAsText = () => {
45
- throw new Error("`webFileReader` cannot read auxiliary files.");
46
- };
47
- var webFileCreateAdjacentFileSource = () => {
48
- throw new Error("`webFileReader` cannot create adjacent file sources.");
49
- };
50
- var webFileReader = {
51
- read: webFileReadContent,
52
- readWholeAsText: webFileReadWholeAsText,
53
- createAdjacentFileSource: webFileCreateAdjacentFileSource
54
- };
55
- export {
56
- webFileReader,
57
- webFileReadWholeAsText,
58
- webFileReadContent,
59
- webFileCreateAdjacentFileSource
60
- };