yt-dlp-bridge 0.6.0 → 0.6.1

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.
package/README.md CHANGED
@@ -50,6 +50,13 @@ Requires Node.js >= 22.13 and ESM.
50
50
  - Source-derived option catalog generated from `yt_dlp.options.create_parser`.
51
51
  - ESM and TypeScript declarations.
52
52
 
53
+ ## What changed in 0.6.1
54
+
55
+ 0.6.1 requires `ytdlp-errors` 1.5.0.
56
+
57
+ - `requested-formats` events carry `filesizeFromBitrate`: bitrate × duration, as yt-dlp's `filesize_from_tbr`. yt-dlp leaves `filesize_approx` empty for a fragmented (HLS/DASH manifest) stream, so this is all such a stream has before it starts. `YT_DLP_REQUESTED_FORMATS_TEMPLATE` now also prints `tbr` and the duration.
58
+ - `YtDlpDownloadProgressTracker` weighs each stream by the best size known for it (exact, an estimate from its finished fragments, `filesizeApprox`, then `filesizeFromBitrate`), and a stream with none by the mean of the others; equal shares remain only when no size is known. A stream of unknown size moves by its fragments, and the percent never goes back when a size turns out larger. Before, a small video then an HLS audio held at 50% through the audio's first fragment, then fell back.
59
+
53
60
  ## What changed in 0.6.0
54
61
 
55
62
  0.6.0 contains breaking changes and requires `ytdlp-errors` 1.4.0.
@@ -2,7 +2,7 @@ import { type YtDlpDownloadStatus } from './schemas.js';
2
2
  export declare const YT_DLP_PROGRESS_PREFIX = "[yt-dlp-bridge:progress]";
3
3
  export declare const YT_DLP_REQUESTED_FORMATS_PREFIX = "[yt-dlp-bridge:formats]";
4
4
  export declare const YT_DLP_PROGRESS_TEMPLATE = "[yt-dlp-bridge:progress] {\"progress\":%(progress.{status,downloaded_bytes,total_bytes,total_bytes_estimate,speed,eta,elapsed,fragment_index,fragment_count})j,\"format_id\":%(info.format_id|null)j}";
5
- export declare const YT_DLP_REQUESTED_FORMATS_TEMPLATE = "[yt-dlp-bridge:formats] {\"format_id\":%(format_id|null)j,\"filesize\":%(filesize|null)j,\"filesize_approx\":%(filesize_approx|null)j,\"requested\":%(requested_formats.:.{format_id,filesize,filesize_approx}|null)j}";
5
+ export declare const YT_DLP_REQUESTED_FORMATS_TEMPLATE = "[yt-dlp-bridge:formats] {\"format_id\":%(format_id|null)j,\"filesize\":%(filesize|null)j,\"filesize_approx\":%(filesize_approx|null)j,\"tbr\":%(tbr|null)j,\"duration\":%(duration|null)j,\"requested\":%(requested_formats.:.{format_id,filesize,filesize_approx,tbr}|null)j}";
6
6
  export interface YtDlpDownloadProgress {
7
7
  status: YtDlpDownloadStatus;
8
8
  formatId?: string;
@@ -19,6 +19,7 @@ export interface YtDlpRequestedFormat {
19
19
  formatId: string;
20
20
  filesize?: number;
21
21
  filesizeApprox?: number;
22
+ filesizeFromBitrate?: number;
22
23
  }
23
24
  export declare function parseProgressLine(line: string): YtDlpDownloadProgress | null;
24
25
  export declare function parseRequestedFormatsLine(line: string): YtDlpRequestedFormat[] | null;
@@ -32,12 +33,17 @@ export interface CombinedDownloadProgress {
32
33
  * download fetches its requested formats one after another, each reporting
33
34
  * progress from 0% on its own; this weighs each by its size so the audio after
34
35
  * the video counts. A stream's size is the first known of: its exact size from
35
- * live progress, its exact size from the requested formats, its live fragment
36
- * estimate, its approximate size from the requested formats. When any size
37
- * stays unknown, every stream gets an equal share.
36
+ * live progress, its exact size from the requested formats, an estimate from
37
+ * its finished fragments, its approximate size from the requested formats, its
38
+ * bitrate × duration. A stream with none of these weighs as the mean of the
39
+ * others; when no size is known at all, every stream gets an equal share.
40
+ *
41
+ * Sizes learned along the way can shift the shares; the percent never goes
42
+ * back, and holds until the download catches up with it.
38
43
  */
39
44
  export declare class YtDlpDownloadProgressTracker {
40
45
  private streams;
46
+ private shownPercent;
41
47
  setRequestedFormats(formats: readonly YtDlpRequestedFormat[]): void;
42
48
  update(progress: YtDlpDownloadProgress): CombinedDownloadProgress;
43
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,mBAAmB,EAAC,MAAM,cAAc,CAAA;AAQhF,eAAO,MAAM,sBAAsB,6BAA6B,CAAA;AAChE,eAAO,MAAM,+BAA+B,4BAA4B,CAAA;AAOxE,eAAO,MAAM,wBAAwB,0MAAiH,CAAA;AAKtJ,eAAO,MAAM,iCAAiC,2NAA4M,CAAA;AAE1P,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,mBAAmB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB;AA8BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAkB5E;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,GAAG,IAAI,CAOrF;AAED,MAAM,WAAW,wBAAwB;IAExC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAgCD;;;;;;;;GAQG;AACH,qBAAa,4BAA4B;IACxC,OAAO,CAAC,OAAO,CAAoB;IAEnC,mBAAmB,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI;IAInE,MAAM,CAAC,QAAQ,EAAE,qBAAqB,GAAG,wBAAwB;CA4BjE"}
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,mBAAmB,EAAC,MAAM,cAAc,CAAA;AAQhF,eAAO,MAAM,sBAAsB,6BAA6B,CAAA;AAChE,eAAO,MAAM,+BAA+B,4BAA4B,CAAA;AAOxE,eAAO,MAAM,wBAAwB,0MAAiH,CAAA;AAKtJ,eAAO,MAAM,iCAAiC,mRAA4P,CAAA;AAE1S,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,mBAAmB,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IAIvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC5B;AA8BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAkB5E;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,GAAG,IAAI,CAUrF;AAED,MAAM,WAAW,wBAAwB;IAExC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAkED;;;;;;;;;;;;GAYG;AACH,qBAAa,4BAA4B;IACxC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAAI;IAExB,mBAAmB,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI;IAgBnE,MAAM,CAAC,QAAQ,EAAE,qBAAqB,GAAG,wBAAwB;CA0BjE"}
package/dist/progress.js CHANGED
@@ -9,14 +9,14 @@ import { YtDlpDownloadStatusSchema } from './schemas.js';
9
9
  export const YT_DLP_PROGRESS_PREFIX = '[yt-dlp-bridge:progress]';
10
10
  export const YT_DLP_REQUESTED_FORMATS_PREFIX = '[yt-dlp-bridge:formats]';
11
11
  const PROGRESS_FIELDS = 'status,downloaded_bytes,total_bytes,total_bytes_estimate,speed,eta,elapsed,fragment_index,fragment_count';
12
- const FORMAT_FIELDS = 'format_id,filesize,filesize_approx';
12
+ const FORMAT_FIELDS = 'format_id,filesize,filesize_approx,tbr';
13
13
  // `--progress-template download:…`. `info` is the dict of the stream being
14
14
  // downloaded, so `info.format_id` names one stream of a merged download.
15
15
  export const YT_DLP_PROGRESS_TEMPLATE = `${YT_DLP_PROGRESS_PREFIX} {"progress":%(progress.{${PROGRESS_FIELDS}})j,"format_id":%(info.format_id|null)j}`;
16
16
  // `--print before_dl:…`, once per video before any stream downloads.
17
17
  // `requested_formats` lists the streams of a merged download in the order yt-dlp
18
18
  // downloads them; a single-stream download has none and its own fields instead.
19
- export const YT_DLP_REQUESTED_FORMATS_TEMPLATE = `${YT_DLP_REQUESTED_FORMATS_PREFIX} {"format_id":%(format_id|null)j,"filesize":%(filesize|null)j,"filesize_approx":%(filesize_approx|null)j,"requested":%(requested_formats.:.{${FORMAT_FIELDS}}|null)j}`;
19
+ export const YT_DLP_REQUESTED_FORMATS_TEMPLATE = `${YT_DLP_REQUESTED_FORMATS_PREFIX} {"format_id":%(format_id|null)j,"filesize":%(filesize|null)j,"filesize_approx":%(filesize_approx|null)j,"tbr":%(tbr|null)j,"duration":%(duration|null)j,"requested":%(requested_formats.:.{${FORMAT_FIELDS}}|null)j}`;
20
20
  // yt-dlp prints `null` for a field it does not know; absent and null mean the
21
21
  // same. A negative value is dropped on its own (an ETA computed from a fragment
22
22
  // estimate that undercuts the bytes so far), so it cannot discard the record.
@@ -30,8 +30,8 @@ const formatId = z
30
30
  .nullish()
31
31
  .transform(value => value ?? undefined);
32
32
  const progressLineSchema = z.object({ progress: z.object({ status: YtDlpDownloadStatusSchema, downloaded_bytes: count, total_bytes: count, total_bytes_estimate: count, speed: count, eta: count, elapsed: count, fragment_index: count, fragment_count: count }), format_id: formatId });
33
- const requestedFormatSchema = z.object({ format_id: z.string().min(1), filesize: count, filesize_approx: count });
34
- const requestedFormatsLineSchema = z.object({ format_id: formatId, filesize: count, filesize_approx: count, requested: z.array(requestedFormatSchema).nullish() });
33
+ const requestedFormatSchema = z.object({ format_id: z.string().min(1), filesize: count, filesize_approx: count, tbr: count });
34
+ const requestedFormatsLineSchema = z.object({ format_id: formatId, filesize: count, filesize_approx: count, tbr: count, duration: count, requested: z.array(requestedFormatSchema).nullish() });
35
35
  function jsonAfter(line, prefix) {
36
36
  if (!line.startsWith(prefix))
37
37
  return undefined;
@@ -66,8 +66,11 @@ export function parseRequestedFormatsLine(line) {
66
66
  const parsed = requestedFormatsLineSchema.safeParse(jsonAfter(line, YT_DLP_REQUESTED_FORMATS_PREFIX));
67
67
  if (!parsed.success)
68
68
  return null;
69
- const toFormat = (id, format) => ({ formatId: id, ...definedFields({ filesize: format.filesize, filesizeApprox: format.filesize_approx }) });
70
- const { requested, format_id: id } = parsed.data;
69
+ const { requested, format_id: id, duration } = parsed.data;
70
+ const toFormat = (id, format) => ({
71
+ formatId: id,
72
+ ...definedFields({ filesize: format.filesize, filesizeApprox: format.filesize_approx, filesizeFromBitrate: format.tbr && duration ? Math.trunc(duration * format.tbr * 125) : undefined })
73
+ });
71
74
  if (requested?.length)
72
75
  return requested.map(format => toFormat(format.format_id, format));
73
76
  return id ? [toFormat(id, parsed.data)] : null;
@@ -77,12 +80,6 @@ export function parseRequestedFormatsLine(line) {
77
80
  function usableEstimate(progress) {
78
81
  return progress.fragmentIndex === 0 ? undefined : progress.totalBytesEstimate;
79
82
  }
80
- // A fragmented stream reports its exact size only once finished, and its live
81
- // estimate follows the real stream, while a format list's approximate size can
82
- // be far off: an underestimate would read as complete early.
83
- function streamSize(stream) {
84
- return stream.totalBytes ?? stream.plannedBytes ?? stream.estimatedBytes ?? stream.approxBytes;
85
- }
86
83
  function streamPercent(progress) {
87
84
  if (progress.status === 'finished')
88
85
  return 100;
@@ -91,19 +88,72 @@ function streamPercent(progress) {
91
88
  return undefined;
92
89
  return Math.min(100, (progress.downloadedBytes / size) * 100);
93
90
  }
91
+ // The finished fragments' average size times their count. yt-dlp's own
92
+ // `total_bytes_estimate` adds the fragment in flight as if it were whole, and
93
+ // swings with every one (in a captured run, from 530 KiB to 180 KiB for a
94
+ // 302 KiB stream).
95
+ function fragmentEstimate(stream) {
96
+ const { fragmentIndex, fragmentCount, finishedFragmentBytes } = stream;
97
+ if (!fragmentIndex || !fragmentCount || !finishedFragmentBytes)
98
+ return undefined;
99
+ return (finishedFragmentBytes / fragmentIndex) * fragmentCount;
100
+ }
101
+ function exactSize(stream) {
102
+ return stream.totalBytes ?? stream.plannedBytes;
103
+ }
104
+ // A fragmented stream reports its exact size only once finished, and its live
105
+ // estimate follows the real stream, while a format list's approximate size can
106
+ // be far off.
107
+ function streamSize(stream) {
108
+ return exactSize(stream) ?? fragmentEstimate(stream) ?? stream.approxBytes ?? stream.bitrateBytes;
109
+ }
110
+ // How much of a stream is on disk, 0–1. Without an exact size, a fragmented
111
+ // stream goes by its fragments, so an estimate that undershoots cannot read as
112
+ // complete before its last fragment.
113
+ function streamFraction(stream) {
114
+ if (stream.done)
115
+ return 1;
116
+ const exact = exactSize(stream);
117
+ if (exact)
118
+ return Math.min(1, stream.downloadedBytes / exact);
119
+ const { fragmentIndex, fragmentCount } = stream;
120
+ if (fragmentIndex !== undefined && fragmentCount) {
121
+ const estimate = fragmentEstimate(stream);
122
+ return estimate ? Math.min((fragmentIndex + 1) / fragmentCount, stream.downloadedBytes / estimate) : fragmentIndex / fragmentCount;
123
+ }
124
+ const size = streamSize(stream);
125
+ return size ? Math.min(1, stream.downloadedBytes / size) : 0;
126
+ }
94
127
  /**
95
128
  * One percent over every stream yt-dlp downloads for a video. A merged
96
129
  * download fetches its requested formats one after another, each reporting
97
130
  * progress from 0% on its own; this weighs each by its size so the audio after
98
131
  * the video counts. A stream's size is the first known of: its exact size from
99
- * live progress, its exact size from the requested formats, its live fragment
100
- * estimate, its approximate size from the requested formats. When any size
101
- * stays unknown, every stream gets an equal share.
132
+ * live progress, its exact size from the requested formats, an estimate from
133
+ * its finished fragments, its approximate size from the requested formats, its
134
+ * bitrate × duration. A stream with none of these weighs as the mean of the
135
+ * others; when no size is known at all, every stream gets an equal share.
136
+ *
137
+ * Sizes learned along the way can shift the shares; the percent never goes
138
+ * back, and holds until the download catches up with it.
102
139
  */
103
140
  export class YtDlpDownloadProgressTracker {
104
141
  streams = [];
142
+ shownPercent = 0;
105
143
  setRequestedFormats(formats) {
106
- this.streams = formats.map(format => ({ formatId: format.formatId, plannedBytes: format.filesize, approxBytes: format.filesizeApprox, downloadedBytes: 0, totalBytes: undefined, estimatedBytes: undefined, done: false }));
144
+ this.streams = formats.map(format => ({
145
+ formatId: format.formatId,
146
+ plannedBytes: format.filesize,
147
+ approxBytes: format.filesizeApprox,
148
+ bitrateBytes: format.filesizeFromBitrate,
149
+ downloadedBytes: 0,
150
+ totalBytes: undefined,
151
+ fragmentIndex: undefined,
152
+ fragmentCount: undefined,
153
+ finishedFragmentBytes: undefined,
154
+ done: false
155
+ }));
156
+ this.shownPercent = 0;
107
157
  }
108
158
  update(progress) {
109
159
  const index = progress.formatId === undefined ? -1 : this.streams.findIndex(stream => stream.formatId === progress.formatId);
@@ -115,24 +165,22 @@ export class YtDlpDownloadProgressTracker {
115
165
  // the only sign the streams before this one are complete.
116
166
  for (const earlier of this.streams.slice(0, index))
117
167
  earlier.done = true;
168
+ if (progress.fragmentIndex !== undefined && progress.fragmentIndex !== stream.fragmentIndex)
169
+ stream.finishedFragmentBytes = progress.downloadedBytes;
118
170
  stream.downloadedBytes = progress.downloadedBytes ?? stream.downloadedBytes;
119
171
  stream.totalBytes = progress.totalBytes ?? stream.totalBytes;
120
- stream.estimatedBytes = usableEstimate(progress) ?? stream.estimatedBytes;
172
+ stream.fragmentIndex = progress.fragmentIndex ?? stream.fragmentIndex;
173
+ stream.fragmentCount = progress.fragmentCount ?? stream.fragmentCount;
121
174
  stream.done = progress.status === 'finished';
122
175
  const sizes = this.streams.map(streamSize);
123
- if (sizes.every(size => size !== undefined && size > 0)) {
124
- const total = sizes.reduce((sum, size) => sum + (size ?? 0), 0);
125
- const done = this.streams.reduce((sum, each, i) => sum + (each.done ? (sizes[i] ?? 0) : Math.min(each.downloadedBytes, sizes[i] ?? 0)), 0);
126
- const remaining = total - done;
127
- return { percent: (done / total) * 100, ...transfer, ...(progress.speedBps && progress.status !== 'finished' ? { etaSeconds: remaining / progress.speedBps } : {}) };
128
- }
129
- const shares = this.streams.map((each, i) => {
130
- const size = sizes[i];
131
- if (each.done)
132
- return 1;
133
- return size ? Math.min(1, each.downloadedBytes / size) : 0;
134
- });
135
- return { percent: (shares.reduce((sum, share) => sum + share, 0) / shares.length) * 100, ...transfer };
176
+ const known = sizes.filter((size) => size !== undefined && size > 0);
177
+ const fallback = known.length ? known.reduce((sum, size) => sum + size, 0) / known.length : 1;
178
+ const weights = sizes.map(size => (size && size > 0 ? size : fallback));
179
+ const total = weights.reduce((sum, weight) => sum + weight, 0);
180
+ const done = this.streams.reduce((sum, each, i) => sum + streamFraction(each) * (weights[i] ?? 0), 0);
181
+ this.shownPercent = Math.max(this.shownPercent, (done / total) * 100);
182
+ const eta = known.length === sizes.length && progress.speedBps && progress.status !== 'finished' ? { etaSeconds: (total - done) / progress.speedBps } : {};
183
+ return { percent: this.shownPercent, ...transfer, ...eta };
136
184
  }
137
185
  }
138
186
  //# sourceMappingURL=progress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AACrB,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,EAAC,yBAAyB,EAA2B,MAAM,cAAc,CAAA;AAEhF,uEAAuE;AACvE,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,mFAAmF;AAEnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAA;AAChE,MAAM,CAAC,MAAM,+BAA+B,GAAG,yBAAyB,CAAA;AAExE,MAAM,eAAe,GAAG,0GAA0G,CAAA;AAClI,MAAM,aAAa,GAAG,oCAAoC,CAAA;AAE1D,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,sBAAsB,4BAA4B,eAAe,0CAA0C,CAAA;AAEtJ,qEAAqE;AACrE,iFAAiF;AACjF,gFAAgF;AAChF,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,+BAA+B,+IAA+I,aAAa,WAAW,CAAA;AAsB1P,8EAA8E;AAC9E,gFAAgF;AAChF,8EAA8E;AAC9E,MAAM,KAAK,GAAG,CAAC;KACb,MAAM,EAAE;KACR,OAAO,EAAE;KACT,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAC9F,MAAM,QAAQ,GAAG,CAAC;KAChB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,OAAO,EAAE;KACT,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,SAAS,CAAC,CAAA;AAExC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAC,CAAC,CAAA;AAErR,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAC,CAAC,CAAA;AAE/G,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,OAAO,EAAE,EAAC,CAAC,CAAA;AAEhK,SAAS,SAAS,CAAC,IAAY,EAAE,MAAc;IAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAA;IAC9C,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAA;IACjB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAA;IACpF,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAChC,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,CAAC,IAAI,CAAA;IAC9B,OAAO;QACN,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,aAAa,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;YAC/B,eAAe,EAAE,QAAQ,CAAC,gBAAgB;YAC1C,UAAU,EAAE,QAAQ,CAAC,WAAW;YAChC,kBAAkB,EAAE,QAAQ,CAAC,oBAAoB;YACjD,QAAQ,EAAE,QAAQ,CAAC,KAAK;YACxB,UAAU,EAAE,QAAQ,CAAC,GAAG;YACxB,cAAc,EAAE,QAAQ,CAAC,OAAO;YAChC,aAAa,EAAE,QAAQ,CAAC,cAAc;YACtC,aAAa,EAAE,QAAQ,CAAC,cAAc;SACtC,CAAC;KACF,CAAA;AACF,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACrD,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAA;IACrG,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAChC,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,MAA2E,EAAwB,EAAE,CAAC,CAAC,EAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,eAAe,EAAC,CAAC,EAAC,CAAC,CAAA;IAC3O,MAAM,EAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAC,GAAG,MAAM,CAAC,IAAI,CAAA;IAC9C,IAAI,SAAS,EAAE,MAAM;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IACzF,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/C,CAAC;AAmBD,6EAA6E;AAC7E,qEAAqE;AACrE,SAAS,cAAc,CAAC,QAA+B;IACtD,OAAO,QAAQ,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAA;AAC9E,CAAC;AAED,8EAA8E;AAC9E,+EAA+E;AAC/E,6DAA6D;AAC7D,SAAS,UAAU,CAAC,MAAmB;IACtC,OAAO,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,WAAW,CAAA;AAC/F,CAAC;AAED,SAAS,aAAa,CAAC,QAA+B;IACrD,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,GAAG,CAAA;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC5D,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACrE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,4BAA4B;IAChC,OAAO,GAAkB,EAAE,CAAA;IAEnC,mBAAmB,CAAC,OAAwC;QAC3D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,CAAA;IAC1N,CAAC;IAED,MAAM,CAAC,QAA+B;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC5H,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAC,CAAC,CAAA;QAC3I,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAC,GAAG,aAAa,CAAC,EAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,GAAG,QAAQ,EAAC,CAAA;QAEvF,uEAAuE;QACvE,0DAA0D;QAC1D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;QACvE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAA;QAC3E,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAA;QAC5D,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,cAAc,CAAA;QACzE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAA;QAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC1C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACvE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC1I,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,CAAA;YAC9B,OAAO,EAAC,OAAO,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAA;QACjK,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACrB,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAA;YACvB,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QACF,OAAO,EAAC,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAC,CAAA;IACrG,CAAC;CACD"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yt-dlp-bridge",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "TypeScript library for safe, no-shell yt-dlp integration: workflow planning, argv generation, process execution, output parsing, and structured errors.",
5
5
  "keywords": [
6
6
  "argv",
@@ -109,7 +109,7 @@
109
109
  "pack:dry-run": "bun pm pack --dry-run"
110
110
  },
111
111
  "dependencies": {
112
- "ytdlp-errors": "1.4.0",
112
+ "ytdlp-errors": "1.5.0",
113
113
  "zod": "4.6.7"
114
114
  },
115
115
  "devDependencies": {